BASIC4MCU | 질문게시판 | dc 모터 역회전
페이지 정보
작성자 YDyd 작성일2019-06-03 16:13 조회3,989회 댓글1건본문
#include <avr/io.h>
#define F_CPU 16000000UL // 16 MHz
#include <avr/interrupt.h>
#include <util/delay.h>
//
int speed1=0,speed2=0;
//
void DC_Motor1(int spd){ // speed : 0% ~ 100%
if(spd< 0)spd=0;
if(spd>100)spd=100;
OCR1A=spd; //PB5
}
void DC_Motor2(int spd){ // speed : 0% ~ 100%
if(spd< 0)spd=0;
if(spd>100)spd=100;
OCR1B=spd; //PB6
}
//=====================================================================//
int main(void){
DDRB=0xff;
PORTB=0x00; // PB5,6 out
DDRC=0x00;
DDRA=0x00;
TCCR1A=0xAA; TCCR1B=0x1B; // FAST PWM, 16Mhz/64분주=4usec
OCR1A=0; OCR1B=0; ICR1=100; // 4usec*100=400usec=2.5KHz
EIMSK=0xF0; EICRB=0xAA; SREG=0x80;
while(1){
if ((PINC & 0x01)==0)
{
OCR1A=0xf0;
_delay_ms(500);
}
if ((PINA & 0x01)==0)
{
OCR1A=0x00;
_delay_ms(500);
}
if ((PINA & 0x10)==0)
{
OCR1A=0x0f;
_delay_ms(500);
}
//for(i=0;i<=100;i++){ DC_Motor1(i); DC_Motor2(i);
//_delay_ms(100); }
//for(i=100;i>=0;i--){ DC_Motor1(i); DC_Motor2(i);
//_delay_ms(100); }
//
}
}
//
ISR(INT4_vect){ if(--speed1< 0)speed1= 0; DC_Motor1(speed1); }
ISR(INT5_vect){ if(++speed1>100)speed1=100; DC_Motor1(speed1); }
ISR(INT6_vect){ if(--speed2< 0)speed2= 0; DC_Motor2(speed2); }
ISR(INT7_vect){ if(++speed2>100)speed2=100; DC_Motor2(speed2); }
//=====================================================================//
소스를 이렇게 짰는데 왜 역회전이 안되나요?
댓글 1
조회수 3,989master님의 댓글
master 작성일
PWM 속도 제어하지말고
GPIO로 정회전/ 역회전/ 정지/ 동작부터 공부한 후에 속도를 추가하세요
L298에 관한 글 링크를 드리지 않았던가요?
IN1,IN2 같으면 정지 (0,0 또는 1,1)
다르면 정회전 또는 역회전합니다.(1,0 또는 0,1)
이 정도는 할 수 있겠죠?