Fogeaters, Light The World.

16

2016-Jan

AVR 직접만든 DC모터 라이브러리 (C++ Class)

작성자: title: MoonBlonix IP ADRESS: *.148.87.98 조회 수: 1518

ATMega128A 기준이다.

모터 드라이버를 이용해 DC를 제어하는 코드지 DC를 바로 건드리는건 아니다.

엄청 허접한 모터가 아닌 다음에야 모터를 AVR에 바로 꽂는 무모한 행동은 하지 말자.


꽤나 멋지게 잘만들었으니까 믿고 가져다 써도 된다.


사실 라이브러리라고 부르기에는 설정해줘야할게 몇가지 있는지라 그냥 예제 프로젝트를 첨부함.


CDCController 클래스가 핵심이다.

원하는 프로젝트에 이 클래스 소스랑 헤더를 끌고가서 넣어주고 몇가지 적어준뒤 실행하면 끝이다.



void AddDCMotor(

char Name[],

unsigned char InPinPort, 

unsigned char EnablePin, 

unsigned char In1Pin, 

unsigned char In2Pin);


unsigned char FindDCMotor(

char Name[]);


void RunDCMotor(

unsigned char MotorIndex, 

int SpeedRatio);

// SpeedRatio : -100 ~ 100

void StopDCMotor(

unsigned char MotorIndex);


void ToggleDCMotor(

unsigned char MotorIndex, 

int SpeedRatio);

// SpeedRatio : -100 ~ 100


void PWM_DCMotor(); // Run at ISR



사용할 함수는 이게 전부다.

SpeedRatio 는 -100 부터 100 사이로 값을 넣어주면 되는데 -는 방향이 반대로 돌아가며 절대값은 pwm의 듀티비를 말한다.

PWM 주파수는 타이머 인터럽트 주파수를 100으로 나눈 값이 된다.

모터 드라이브에 들어가는 In 핀은 AddDCMotor 함수의 InPinPort 파라미터로 포트를 마음대로 지정할 수 있는데, Enable 핀은 반드시 PortB 만 사용해야 한다.

그리고 왠만하면 다른 기능들을 PortB에 넣지 말 것을 추천하는데, 그래도 꼭 PortB를 사용하고 싶다면, 예제파일에서 전역변수로 선언해둔 pwmMaskPortb 변수에 해당 포트를 함께 조작해 주어야 한다.


예를 들어 아래와 같다.


PORTB |= (1 << LED);

pwmMaskPortb  |= (1 << LED);


혹은


PORTB &= ~(1 << LED);

pwmMaskPortb  &= ~(1 << LED);

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 [Web] 클라우드 IDE + 2 title: MoonBlonix 2017-06-25 15128
32 [AVR] HC_SR04 초음파센서 사용 file title: MoonBlonix 2016-02-13 1669
31 [AVR] 피에조 부저 활용 file + 1 title: MoonBlonix 2016-02-12 1956
30 칼만필터(Kalman Filter) + 2 title: MoonBlonix 2016-02-11 4378
29 low pass filter, high pass filter (저역통과필터, 고역통과필터) file title: MoonBlonix 2016-02-11 1456
28 [AVR] 루프 실행시간 측정 (아두이노의 Millis(), Micros() 분석) title: MoonBlonix 2016-02-09 1457
27 상보필터(Complementary Filter) file title: MoonBlonix 2016-02-09 1740
26 가속도, 자이로 센서에 대해 title: MoonBlonix 2016-02-09 1572
25 [AVR] UART 통신 file title: MoonBlonix 2016-02-07 1609
24 C++ 과 C 를 같은 프로젝트에서 사용하기 title: MoonBlonix 2016-02-07 1506
23 라즈베리파이 운영체제에 관하여 title: MoonBlonix 2016-02-05 1459
22 [리눅스] 기본 명령어 title: MoonBlonix 2016-02-05 1632
21 [리눅스] C 언어 개발환경 구축 title: MoonBlonix 2016-02-05 1864
20 라즈베리파이 GPIO 핀 배열 file title: MoonBlonix 2016-02-05 2061
19 C++ 멤버 함수 포인터 title: MoonBlonix 2016-01-23 1775
» AVR 직접만든 DC모터 라이브러리 (C++ Class) file title: MoonBlonix 2016-01-16 1518
17 [AVR] I/O 포트 메뉴얼 (ATMega128) file title: MoonBlonix 2016-01-16 1594
16 AVR delay 함수 (_delay_ms, _delay_us) title: MoonBlonix 2016-01-15 1641
15 AVR 멀티채널 PWM (타이머 하나로 여러 PWM 구동) title: MoonBlonix 2016-01-15 1651
14 AVR 초패스트 PWM title: MoonBlonix 2016-01-14 1566
13 AVR 타이머 응용 여러 PWM 방식과 예제 file + 1 title: MoonBlonix 2016-01-14 1652