뉴티씨



  • HOME
  • 고객지원
  • 질문답변


 
친절한 답변에 감사드립니다.
 글쓴이 : 강승원
작성일 : 18-04-17 09:21
조회 : 30  
컴파일 환경을 설정하여 겨우 컴파일 성공하였습니다.

아래 정. 역회전 소스에 더하여 회전방향을 바꿀때
모터를 설정한 시간동안 정지시키고 싶습니다.

while 문에 BREAK1_ON; 을 사용하였더니 모터가 정지하는데
delay() 문을 써서 일정시간에 모터를 재가동 시키려 해봐도 모터가 기동을 하지 않습니다.

(최종목적은 PWM 기능과 PID 제어로 모터를 자유자재로 제어하고 싶습니다.)

조언을 부탁 드립니다.

감사합니다.

==========================<Source>=========================

#include <iom128v.h>
#include <macros.h>
#include <stdio.h>

#define MOTOR_PORT PORTC
#define PWM_PORT 0x00
#define PWM1_ON (MOTOR_PORT|=0x01)
#define PWM1_OFF (MOTOR_PORT&=0xFE)
#define DIR1_ON (MOTOR_PORT|=0x02)
#define DIR1_OFF (MOTOR_PORT&=0xFD)
#define ENABLE1_OFF (MOTOR_PORT|=0x04)
#define ENABLE1_ON (MOTOR_PORT&=0xFB)
#define BREAK1_ON (MOTOR_PORT|=0x08)
#define BREAK1_OFF (MOTOR_PORT&=0xF7)

volatile unsigned int DCMOTOR[8], Tcount=0, motor_speed,sw_state[8]={0,0,0,0,0,0,0,0};

// printf 함수 사용시 추가할 것.
int putchar(char c)
{
    while (((UCSR0A>>UDRE0)&0x01) == 0) ;  // UDRE, data register empty
       
    UDR0 = c;
    return c;
}

// scanf 함수 사용시 추가할 것.
int getchar(void)
{
    while ((UCSR0A & 0x80) == 0);
    return UDR0;
}


void port_init(void)
{
 PORTA = 0x00;
 DDRA  = 0x00;
 PORTB = 0x00;
 DDRB  = 0x00;
 PORTC = 0x00; //m103 output only
 DDRC  = 0xFF;
 PORTD = 0x00;
 DDRD  = 0x00;
 PORTE = 0x00;
 DDRE  = 0x00;
 PORTF = 0x00;
 DDRF  = 0x00;
 PORTG = 0x00;
 DDRG  = 0x1F;
}

//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9615 (0.2%)
// char size: 8 bit
// parity: Disabled
void uart0_init(void)
{
 UCSR0B = 0x00; //disable while setting baud rate
 UCSR0A = 0x00;
 UCSR0C = 0x06;
 UBRR0L = 0x67; //set baud rate lo
 UBRR0H = 0x00; //set baud rate hi
 UCSR0B = 0x18;
}

//call this routine to initialize all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 XDIV  = 0x00; //xtal divider
 XMCRA = 0x00; //external memory
 port_init();
 uart0_init();

 MCUCR = 0x00;
 EICRA = 0x00; //extended ext ints
 EICRB = 0x00; //extended ext ints
 EIMSK = 0x00;
 TIMSK = 0x00; //timer interrupt sources
 ETIMSK = 0x00; //extended timer interrupt sources
 SEI(); //re-enable interrupts
 //all peripherals are now initialized
}

void delay(int delaytime){
int i,j;
for(i=0;i<1000;i++){
for(j=0;j<delaytime;j++){
}
}
}

void Motor_bt(int breaktime){
      int i,j;
  for(i-0;i<1000;i++){
    for(j=0;j<breaktime;j++) {
    if (j=breaktime
  }
  }
  }
//
void main(void)
{
  init_devices();
  //insert your functional code here...
  ENABLE1_ON;
  PWM1_ON;
  BREAK1_OFF;
  printf("Motor Control V01W\r\n");
 
  while(1){
              DCMOTOR[PWM_PORT] = 100;
  DIR1_ON;
delay(12000);
PORTG = 0x01;
printf("CW\r\n");


          DCMOTOR[PWM_PORT] = 100;
  DIR1_OFF;
delay(12000);
PORTG = 0x02;
printf("CCW\r\n");

 }
}