BASIC4MCU | 모터 | 서보모터 | 2핀(GPIO 1 + 16비트 PWM 1개)으로 서보모터 8개 구동
페이지 정보
작성자 키트 작성일2017-09-05 17:18 조회2,847회 댓글0건본문
12345678910111213141516171819202122232425262728293031323334353637383940414243 //#define CVAVR // 코드비젼 사용자는 제일 앞에 막은 것을 삭제하면 됩니다.//#ifdef CVAVR#include <mega128.h>#include <delay.h>#else#define F_CPU 16000000UL // 16 MHz#define delay_ms(x) _delay_ms(x)#include <avr/io.h> //16MHz#include <util/delay.h>#include <avr/interrupt.h>#endif//volatile unsigned int pwm[8]={1200,1800,2400,3000,3450,3900,4350,4800};volatile unsigned char n=0;//#ifdef CVAVRinterrupt [TIM1_COMPB] void timer1_compb_isr(void){#elseISR(TIMER1_COMPB_vect){#endifif(++n>7){ PORTA&=~1; n=0; PORTA|=1; }OCR1A=pwm[n];}//#ifdef CVAVRvoid main(void){#elseint main(void){#endifint i;unsigned char k;PORTA=1; DDRA=0x01; DDRB=0x20;ICR1=4999; OCR1B=4800; TCCR1A=0x82; TCCR1B=0x1A; TIMSK=8; // 20ms/8=2.5msADMUX=0x40; ADCSRA=0xE7;SREG=0x80;while(1){for(k=0;k<8;k++){ADMUX=0x40|k; delay_ms(1); i=ADCW;pwm[k]=(int)((float)i*3600.0/1023.0)+1200; // 0~1023 => 1200~4800}}}cs 2핀으로 8개의 서보모터를 구동합니다.외부 게이트를 사용해서 구동하므로 8개의 서보모터를 구동하는데 mcu에 부담이 없고핀수가 작은 mcu로도 8개의 서보모터를 구동 할 수 있습니다.16비트 타이머가 있으면 정밀한 각도 출력이 가능합니다.
댓글 0
조회수 2,847등록된 댓글이 없습니다.