14
2016-Jan
AVR 타이머 응용 여러 PWM 방식과 예제
작성자: Blonix
IP ADRESS: *.148.87.98 조회 수: 1650
1. GPIO방법
DDRA.0=1; // out
while(1){
PORTA.0=1; delay_us(50); PORTA.0=0; delay_us(50);
}
장점 : 임의의 포트에 출력 할 수 있습니다.
단점 : 다른 코드가 존재하는 경우 주파수를 맞추기 어렵습니다.
Blonix 첨언 : 이딴거 쓰면 안된다. 쓰지 마라.. 그리고 delay_us 쓰기 위해서는 delay 헤더를 포함시켜야 한다.
2. (비교매치)타이머 인터럽트를 사용하는 방법
오버플로우 인터럽트를 사용 할 수도 있으나 비교매치 인터럽트가 정확합니다.
Blonix 첨언 : 아래 코드는 pwm 이 아니라 비교매치 인터럽트로 0.5초마다 LED 깜박이는 코드다.
하지만 뭐 응용하면 그게 그거니까 알아서 잘 응용해 쓰도록.
1
장점 : 임의의 포트에 출력 할 수 있습니다.
단점 : 다른 인터럽트가 존재하는 경우 주파수 오차가 발생합니다.
Blonix 첨가 부분--------------
3. 오버플로우 인터럽트 사용 - 보통 pwm보다는 일반적인 타이머/카운터로 많이 쓰인다. 근데 쓰기는 쉽다.
장점 : 쓰기 편함. 아무 핀이나 다 됨? 될껄?
단점 : 비교매치보다는 부정확하다 '카더라'
4. CTC 토글모드를 사용하는 방법
DDRB.5=1; // out
TCCR1A=0x40; TCCR1B=9; TCCR1C=0x80; OCR1A=799; //16000000/ 1/(1+799)=20KHz=50us
장점 : 정확한 주파수를 출력
단점 : 특정핀에서만 출력이 가능, 50% 듀티만 가능
5. FAST PWM 출력을 사용하는 방법
DDRB=0x20; // PB5 out
TCCR1A=0x82; TCCR1B=0x1A; // FAST PWM, 16Mhz/8분주=0.5usec
OCR1A=99; ICR1=199; // 0.5usec*(1+199)=100usec=10KHz
장점 : 정확한 주파수를 출력, 임의의 듀티도 가능
단점 : 특정핀에서만 출력이 가능
위에서 1+799 라든가 1+199라고 적은 것은
0~799, 800
0~199, 200
0~99, 100
카운터가 0부터 시작하기 때문에 1 적은 수를 넣어줘야지 정확한 카운트가 됩니다.
다른 종류의 PWM이 한가지 더 있지만 생략합니다.
Blonix 첨언 : 생략한 방식은 Phase Correct PWM 인 것 같다. 여기에 대한 정보를 퍼오자면..
필요할 경우 알아서 검색해 찾아보고 사용해본 다음 댓글에 추가하도록.
Fast PWM Mode (고속 PWM)
다른 PWM 모드에 비하여 약 2배의 주파수를 갖는다.
단순한 PWM 제어에 사용
Phase Correct PWM Mode (PC PWM)
Fast PWM 모드에 비하여 ½로 낮은 주파수
2배로 높은 분해능의 PWM 출력 신호를 발생
고정된 주파수에서 아주 가끔 듀티를 가변하는 정도의 PWM 동작에 적합
Fast PWM, Phase Correct PWM 예제 및 설명 추가
* 아래와 같은 하드웨어 PWM 은 출력가능한 포트가 정해져 있다. 그러니까 데이터시트를 찾아보던지 검색하던지 알아서 확인해볼 것. B3,4,5 였던 것 같다
출처 : http://binworld.kr/56