ATMega128 - BLDC Motor control, PWM
Motor control = PWM
(BRUSH) DC motort(2극) 또는 Brushless DC Motor(BLDC motor, 3극)
ATMega128 : 4개의 타이머가 있다.
TIMER0 : 8bit, OC0
TIMER1 : 16bit, OC1A, OC1B, OC1C
TIMER2 : 8bit, OC2
TIMER3 : 16bit, OC3A, OC3B, OC3C
(OC : Output Compare)
OCx PIN = PWM 출력핀
TIMER 1개는 = PWM 출력핀을 1개 또는 3개를 가진다.
TIMER1, TIMER3은 PWM 출력핀이 3개나 있다.
(BLDC모터에 사용하라고, 3개 만들어 놓은듯)
ATMega128 1개는, BLDC motor 2개 + DC PWM motor 1개를 동작시킬 수 있다.
ATMega128 1개는, DC PWM motor 7개를 동작시킬 수 있다. (8개가 아니다. 핀 중복. OC2=OC1C)
Fast PWM Mode
================================
무엇이 "Fast PWM"인가? 왜 "Fast"인가?
The fast Pulse Width Modulation or fast PWM mode (WGM01:0 = 3) provides a high frequency PWM waveform generation option. The fast PWM differs from the other PWM option by its single-slope operation. The counter counts from BOTTOM to MAX then restarts from BOTTOM. In non-inverting Compare Output mode, the output compare (OC0) is cleared on the compare match between TCNT0 and OCR0, and set at BOTTOM. In inverting Compare Output mode, the output is set on compare match and cleared at BOTTOM. Due to the single-slope operation, the operating frequency of the fast PWM mode can be twice as high as the phase correct PWM mode that uses dual-slope operation. This high frequency makes the fast PWM mode well suited for power regulation, rectification, and DAC applications. High frequency allows physically small sized external components (coils, capacitors), and therefore reduces total system cost. |
요약하면, "phase correct PWM"보다 빠르다는것임. ㅡ,.ㅡ;;;;;
클럭이 2배 빠를줄 알았더니...(맞는 말이긴함.)
Period(주기)가 일정한것에 주목.
OCRn값을 변경하여, OCn핀에, 각각 다른 PWM파형이 출력된다.
타이머는 1개지만, 3개의 값을 사용하여, 3개의 PWM 출력이 나오는것이다.
TCNTn값(주기)을 설정하고, OCRn값을 설정하면, OCn과 같은 파형이 나온다.
COMn1:0값에 따라, 정상 또는 반전된 파형이 출력된다.
ICRn : Input Capture Register
5,6,7번은 TOP값이 고정인데 반하여,
14,15번은 TOP값을 변경할 수 있다.
즉, 5,6,7번은 메인클럭에 따라서, 최대 주파수(주기)가 고정된다.
메인클럭에따라서, 사용할 수 있는 주파수(주기)가 정해져있다.
14,15번은 주파수(주기)를 변경할 수 있다.
메인클럭에 상관없이, 주파수(주기)를 임의로 변경할 수 있다.
매 클럭마다 증가(감소)하는 타이머값은 TCNTn이고,
TCNTn값이, ICRn값 또는 OCRnA값이 되면, 인터럽트가 발생하며, 출력값이 변경된다.
"ICR(Input Capture Register)"와 "OCR(Output Compare Register)"는 어떻게 다른가?
============================================================
- OCR은 TCNT값과 비교되는 값이다.
- ICR은 외부 클럭의 개수를 세는 기능이다.
즉, 외부 클럭신호가 있어야, 값이 변한다.
TCNT0(타이머0 카운터 최대값)은 8비트, TNCT1(타이머1 카운터 최대값)은 16비트이다.
매 클럭마다 값이 증가하거나, 감소한다.
OCR 레지스터
===========================
ICR 레지스터가, 외부 클럭을 세는 기능인데 반해, OCR은 프로그래머가 자유롭게 설정할 수 있다.
'H', 'L'의 비율(듀티)을 설정하는데 사용한다.(주기는 고정일 경우)
TIMER1, TIMER3은 각각 3개의 PWM출력핀이 있다.
예) 타이머1번
//출력파형 설정
TCCR1A=
//최대값 설정
TCNT1=0xffff;
//출력될 전압의 세기 설정(인터럽트 발생할때마다, 변경이 필요하면, 값 변경)
OCR1A=0xffff*n/100;//n=0~100% 'H'값 유지시간(여기서는 100등분했으나, 원한다면 0xffff등분해도 된다.)