모터 > 11핀(GPIO 5 + 16비트 PWM 6)으로 서보모터 96개 구동

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

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

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

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

BASIC4MCU > 모터

서보모터 | 11핀(GPIO 5 + 16비트 PWM 6)으로 서보모터 96개 구동

페이지 정보

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

첨부파일

본문

3660040649_C3raoX2v_25C125A625B825F1_25BE25F825C025BD.PNG3Ftype3Dw740


3660040649_dK15sHer_25C125A625B825F1_25BE25F825C025BD1.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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//#define CVAVR // 코드비젼 사용자는 제일 앞에 막은 것을 삭제하면 됩니다.
//
#ifdef CVAVR
  #include <mega128.h> 
  #include <delay.h>
#else
  #define  F_CPU 16000000UL  // 16 MHz
  #define  delay_ms _delay_ms
  #define  delay_us _delay_us
  #include <avr/io.h> //16MHz
  #include <util/delay.h> 
  #include <avr/interrupt.h>
#endif
//
volatile unsigned int pwm[16][6]={
  {3600,2500,2500,2500,2500,2500},{2500,2500,2500,2500,2500,2500},
  {2500,2500,2500,2500,2500,2500},{2500,2500,2500,2500,2500,2500},
  {2500,2500,2500,2500,2500,2500},{2500,2500,2500,2500,2500,2500},
  {2500,2500,2500,2500,2500,2500},{2500,2500,2500,2500,2500,2500},
  {2500,2500,2500,2500,2500,2500},{2500,2500,2500,2500,2500,2500},
  {2500,2500,2500,2500,2500,2500},{2500,2500,2500,2500,2500,2500},
  {2500,2500,2500,2500,2500,2500},{2500,2500,2500,2500,2500,2500},
  {2500,2500,2500,2500,2500,2500},{2500,2500,2500,2500,2500,2500}
};
volatile unsigned char n=0;
//
#ifdef CVAVR
  interrupt [TIM1_OVF] void timer1_ovf_isr(void){
#else
  ISR(TIMER1_OVF_vect){
#endif
  TCCR2=0x0C;
}
//
#ifdef CVAVR
  interrupt [TIM2_COMP] void timer2_comp_isr(void){
#else
  ISR(TIMER2_COMP_vect){
#endif
  unsigned char sel[16]={
    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
    0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F
  };
  TCCR2=0;
  PORTA=sel[n];
  OCR1A=pwm[n][0];     OCR1B=pwm[n][1]; 
  OCR1CH=pwm[n][2]>>8; OCR1CL=pwm[n][2]&0xFF;
  OCR3AH=pwm[n][3]>>8; OCR3AL=pwm[n][3]&0xFF;
  OCR3BH=pwm[n][4]>>8; OCR3BL=pwm[n][4]&0xFF;
  OCR3CH=pwm[n][5]>>8; OCR3CL=pwm[n][5]&0xFF;
  if(++n>15)n=0
}
//
#ifdef CVAVR
  void main(void){
#else
  int main(void){
#endif
  int i;
  unsigned char k,m;
  DDRA=0x1F;      DDRB=0xE0;     DDRE=0x38;
  ICR1=4999;      ICR3H=4999>>8; ICR3L=4999&0xFF// 20ms/8=2.5ms
  TCCR1A=0xAA;    TCCR3A=0xAA
  TCCR1B=0x1A;    TCCR3B=0x1A;
  OCR2=149;       TIMSK=0x84//16000000/256/(1+149)=416.6667,2.4ms
  SREG=0x80;
  while(1){
    for(i=1200;i<=4800;i+=20){ for(k=0;k<16;k++)for(m=0;m<6;m++)pwm[k][m]=i; delay_ms(20); }
    for(i=4800;i>=1200;i-=20){ for(k=0;k<16;k++)for(m=0;m<6;m++)pwm[k][m]=i; delay_ms(20); }
  }
}
cs

PWM은 40ms 주기입니다.

댓글 : 0

조회수 : 1,865

등록된 댓글이 없습니다.

게시물 검색

모터 목록

게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전