BASIC4MCU | 질문게시판 | 키트님 서보모터 ATMEGA128로 제어하기 무엇이 잘못되었는지 도저히 모르겠어서 질문드립니다.
페이지 정보
작성자 27315co 작성일2018-09-07 20:28 조회33,643회 댓글3건본문
#include <mega128.h>
#include <delay.h>
interrupt [TIM1_COMPA] void timer1_compare(void)
{
PORTA.0 = 0;
}
interrupt [TIM1_OVF] void timer_overflow(void)
{
PORTA.0 = 1;
}
void timer1_Init(void)
{
TCCR1A = 1<<WGM11 ;
TCCR1B = 1<<WGM12 | 1<<CS11 | 1<<CS10 | 1<<WGM13;
ICR1 = 4999;
TIMSK = 1<<TOIE1 | 1<<OCIE1A;
}
void main(void)
{
DDRA = 0xff;
timer1_Init();
SREG |= 0x80;
while(1)
{
OCR1A = 375;
delay_ms(400);
OCR1A = 250;
delay_ms(400);
OCR1A = 500;
delay_ms(400);
}
}
일단은 코드입니다. 코드의 구조는 16비트 타이머 카운터1 의 지정된 OC1A 핀이아닌 PORTA.0 으로 PWM 신호를 출력하고자 합니다.
제가 사용하는 서보모터의 -90회전은 1ms 의 펄스를 만들어야하고 0도는 1.5ms의 펄스 90도는 2ms 의 펄스를 만들어야합니다.
따라서 우선 분주비와 ICR1의 값을 적당히 조절하여서 20ms 까지가 TOP이 되게 조절을 하였습니다.
그리고 OCR1A 의 값을 적당히 배분하여서 375 250 500 일경우 각각 1.5ms 1ms 2ms 의 pwm 펄스를 생성하게 하였습니다.
그리고 SG90 서보모터와 ATMEGA의 연결을 다읍과 같이해주었습니다.
제가 생각하였을때는 잘못된점이 분명 하나도 없는것같고 3~4시간째 고민하면서 대체 무엇때문에 동작이 안되는지 살펴보았지만 도저히 무엇이 원인인지를 파악할수가 없었습니다.
동작이 되지않는 이유를 알려주신다면 정말 감사하겠습니다.
댓글 3
조회수 33,643master님의 댓글
master 작성일
1. 전원장치 전류용량 체크
USB 전류로는 서보모터를 구동하기에 충분하지 않습니다.
1A 이상의 5V 아답터를 사용하세요
2. 퓨즈비트 클럭 설정이 제대로 되어 있지 않으면 타이밍이 맞지 않습니다.
//
USB로 전원을 공급 받는 것 같은데 전원장치의 공급전류 부족으로 생각됩니다.
27315co님의 댓글
27315co
키트님 말씀을 듣고 추후에 제가 전원을 어떻게 연결했는지 그림으로 보여드려도 될까요???
27315co님의 댓글
27315co
저의 글에 답변으로 그림을 올려놓았습니다....