Phase Correct PWM (Pulse Width Modulation) Mode of AVR microcontroller Timer

Summary

Pulse Width Modulation is well known technique for controlling power electronics devices like SCR, IGBT etc. PWM is also used in motor speed controlling. Square wave generation by using AVR timers is explained in previous article. The AVR timers have feature of PWM wave generation as well .This article describes PWM generation capability of AVR timers.
Phase Correct PWM (Pulse Width Modulation) Mode of AVR Timer

Description

There are four in-built PWM channels in ATmega16. The PWM outputs are received on pins OC0, OC1A, OC1B and OC2. Readers can refer the previous article which gives explanation of these pins. There are two modes of operation of AVR timer which are able to generate PWM signal.
            1. Phase correct PWM mode
            2. Fast PWM mode 
 
PWM generation by Phase correct PWM mode:
The Phase correct PWM mode can be selected by assigning bits WGM0[1:0]=01. This mode is based on dual slope operation. In dual slope operation, TCNTn counts from bottom value to maximum value and maximum value to bottom value. The OCRn register compares the value with the TCNTn register constantly during up-counting and down-counting. On compare match PWM output pin (OCn) behaves according to inverting or non-inverting mode which can be selected by programming of COMn [1:0] bits. The following table shows bit setting of COM [1:0] bits:
 
 
Phase correction PWM mode is preferred for motor controlling because dual- slope operation provides symmetric wave generation. Duty cycle of pulse can be varied by writing the values to OCRn register. The OCRn value can be calculate by the following formula:
 
 
For example: if duty cycle is 75%
                    OCR value = (75÷100) × 256
Frequency of PWM output will be
 
 
Objective : Generate PWM signal of duty cycle 75% from timer 0.
 
Circuit description:
The connection of ATmega16 is shown in circuit diagram. Since, Timer0 is used to generate PWM wave then output is taken on OC0 pin, so pin no.4 is connected to C.R.O to observe the waveform. 
 
Programming steps:
1. Select Phase Correct PWM mode by programming WGM0 [1:0] bit.
2. Program COM0 [1:0] bit and select inverting or non-inverting mode .
3. Set OC0 pin as output pin.
4. Set OCIE0 bit of TIMSK register.
5. Enable global interrupt by “sei()” command.
 
Output wave:
Frequency calculation by formula:
Output frequency = Crystal frequency÷(Prescaler ×510)
                         = 12000000÷(1×510)
                         = 23529.41 = 23.53KHz

The following picture shows the output wave form which is received on CRO. The measured frequency of wave is 23.54 KHz.


 

Circuit Diagram

Video

Code

This Code is only visible to Registered users. Please Login/Register

 

Components

ATmega16 AVR Microcontroller
ATmega16
 
ATmega16 is an 8-bit high performance microcontroller of Atmel’s Mega AVR family with low power consumption. Atmega16 is based on enha...