모터 > 가변저항으로 RC서보모터 구동 - 2채널

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

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

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

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

BASIC4MCU > 모터

서보모터 | 가변저항으로 RC서보모터 구동 - 2채널

페이지 정보

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

본문

 

1
2
3
4
5
6
7
//=====================================================================//
//RC서보 - 타이머1 FAST PWM MODE14로 구동
//=====================================================================//
//전체 주기 20000usec중애서 아래 시간 만큼 high를 주면 해당 각도로 이동
// 600usec=-90도 포지션
//1500usec=  0도 포지션
//2400usec=+90도 포지션
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//=====================================================================//
// CVAVR
//=====================================================================//
#include <io.h>
#include <delay.h> 
//
void RC_Motor1(int angle){ OCR1A=angle*20+3000; } //PB5 // angle : -90도 ~ +90도
void RC_Motor2(int angle){ OCR1B=angle*20+3000; } //PB6 // angle : -90도 ~ +90도
//
void main(void){
    int i;
    DDRB=0x60;   // PB5,PB6 out
    TCCR1A=0xA2; TCCR1B=0x1A; OCR1A=3000; OCR1B=3000; ICR1=39999;
    ADCSRA=0xE7;
    while(1){
        ADMUX=0x40; delay_ms(10); i=ADCW; i=(int)( (float)i*180.0/1023.); RC_Motor1(i-90); //PF0
        ADMUX=0x41; delay_ms(10); i=ADCW; i=(int)( (float)i*180.0/1023.); RC_Motor2(i-90); //PF1
    }
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//=====================================================================//
// AVRstudio
//=====================================================================//
#include <avr/io.h>
#define  F_CPU 16000000UL  // 16 MHz
#include <util/delay.h> 
//
void RC_Motor1(int angle){ OCR1A=angle*20+3000; } //PB5 // angle : -90도 ~ +90도
void RC_Motor2(int angle){ OCR1B=angle*20+3000; } //PB6 // angle : -90도 ~ +90도
//
int main(void){
    int i;
    DDRB=0x60;   // PB5,PB6 out
    TCCR1A=0xA2; TCCR1B=0x1A; OCR1A=3000; OCR1B=3000; ICR1=39999;
    ADCSRA=0xE7;
    while(1){
        ADMUX=0x40; _delay_ms(10); i=ADCW; i=(int)( (float)i*180.0/1023.); RC_Motor1(i-90); //PF0
        ADMUX=0x41; _delay_ms(10); i=ADCW; i=(int)( (float)i*180.0/1023.); RC_Motor2(i-90); //PF1
    }
}
cs


간단한 설명을 추가합니다.
1
2
3
  ADMUX=0x40; _delay_ms(10); i=ADCW; // 0~1023 PF0(ADC0) 변환값을 읽고
  i=(int)( (float)i*180.0/1023.);  // 0~180으로 변환
  RC_Motor1(i-90);                   // -90~+90으로 바꾼 후 모터 함수 실행
cs

댓글 : 0

조회수 : 1,996

등록된 댓글이 없습니다.

게시물 검색

모터 목록

게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전