모터 > 3핀(GPIO 1 + 16비트 PWM 2)으로 서보모터 16개 구동

인기검색어 > 아두이노 센서 ATMEGA128

최신글 질문게시판 동영상강좌 가입하기

▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU > 모터

서보모터 | 3핀(GPIO 1 + 16비트 PWM 2)으로 서보모터 16개 구동

페이지 정보

작성자 키트 작성일17-09-05 17:19 조회1,796회 댓글0건

본문

 

3660040649_l5GD3jh0_25C125A625B825F1_25BE25F825C025BD.PNG3Ftype3Dw740
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//#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[2][8]={
  {1200,1800,2400,3000,3450,3900,4350,4800},
  {1200,1800,2400,3000,3450,3900,4350,4800}
};
volatile unsigned char n=0;
//
#ifdef CVAVR
  interrupt [TIM1_COMPC] void timer1_compc_isr(void){
#else
  ISR(TIMER1_COMPC_vect){
#endif
  if(++n>7){ PORTA&=~1; n=0; PORTA|=1; }
  OCR1A=pwm[0][n]; OCR1B=pwm[1][n];
}
//
#ifdef CVAVR
  void main(void){
#else
  int main(void){
#endif
  int i;
  unsigned char k;
  PORTA=0x03; DDRA=0x01;      DDRB=0x60;
  ICR1=4999;  OCR1CH=4800>>8; OCR1CL=4800&0xFF; TCCR1A=0xA2; TCCR1B=0x1A; ETIMSK=1// 20ms/8=2.5ms
  ADMUX=0x40; ADCSRA=0xE7;
  SREG=0x80;
  while(1){
    for(k=0;k<8;k++){
      ADMUX=0x40|k; delay_ms(1); i=ADCW;
      i=(int)((float)i*3600.0/1023.0)+1200// 0~1023 => 1200~4800
      if(PINA&2)pwm[0][k]=i; else pwm[1][k]=i;
    }
  }
}
cs

앞의 예제와 비슷한데 달라진점은 OCR1B를 추가해서 16개의 서보모터를 구동합니다. 

댓글 : 0

조회수 : 1,796

등록된 댓글이 없습니다.

게시물 검색

모터 목록

게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전