int main(void)
{
// 포트 설정
DDRA = 0xFF;
DDRB = 0x10;
DDRG = 0x03;
DDRF = 0x01;
// 인터럽트 설정
EICRA = 0x29;
EICRB = 0x30;
EIMSK = 0x4F;
// 모터제어용 PWM 설정
TCCR0 = 0x00;
TCNT0 = 0;
TIMSK = 0x00;
//OCR0 = 200;
// 10MS 타이머 인터럽트 설정
TCCR2 = 0x0B;
TCNT2 = 0;
OCR2 = 156;
TIMSK |= 1<<OCIE2;
sei();
LCD_InitDriver();
while (1)
{
// RPM 값 출력
LCD_CMD(LINE1);
printf("RPM : %2d",RPM);
// PWM 값 출력
LCD_CMD(LINE2);
printf("OCR : %2d",OCR0);
//FRPM 값 출력
LCD_CMD(LINE3);
printf("FRPM : %2d",FRPM);
if(RPM<FRPM)
OCR0 = 50;
if(RPM>=FRPM)
OCR0 = 0;
}
}
ISR (TIMER2_COMP_vect ) {
// 10MS 인터럽트
static aa=0;
aa++;
if ( aa>=100) {
// 매 1초마다 실행 RPM 계산
RPM = counter*2;
counter = 0;
aa = 0;
}
}
정말 간단한 것인데 목표값을 지정했을때 목표값보다 훨씬넘어간다음에 멈추는 현상이 있습니다. 어떻게 해야 목표값에더 가깝게 되는지 질문합니다. 그리고 stop하면 속도가 바로 안떨어지고 아주 천천이 떨어집니다. 고수님들 부탁드려요~ 어디를 수정해야할지
모터에 직류전원을 어떻게 공급하느냐에 따라 달라집니다
이유는 잔류전류로 인한건데요 릴레이 전단에 물리적인 스위칭회로가 포함되면 문제를 간단히 해결할 수 있습니다