Vous êtes sur la page 1sur 2

PWM avec le PIC 16F876

Claude Barbaud 2 fvrier 2005

Principe:
La modulation de largeur d'impulsion (Pulse Width Modulation ou PWM) consiste
commander le duty cycle d'une onde carre frquence fixe. Ce principe permet de
transfrer une charge une nergie proportionnelle ce Duty Cycle.

Exemples

DC = 10%

DC = 50%

DC = 90 %

Utilisation du PWM du PIC:


Le PIC 16F876 possde 2 PWM indpendants:
Sur la broche RC1/CCP2
Sur la broche RC2/CCP1

La frquence est dfinie en utilisant le timer 2.


Le fonctionnement de chaque PWM est indpendant du fonctionnement du programme.
La frquence et le Duty Cycle sont alors prcis. La frquence peut tre dfinie ds le
dbut pour tout le programme(initialisation). Le Duty cycle peut tre modifi dams le
programme.

Programmation du PWM sur RC1/CCP2:


On doit d'abord initialiser le temporisateur(timer):

setup_timer_2(mode, priode, 1);


Le mode peut tre T2_DIV_BY_1, T2_DIV_BY_4, T2_DIV_BY_16
La priode est une valeur 8 bits (0 255)
La priode est alors:
PWM period = Tosc * 4 * mode * (priode + 1);
la frquence est videmment f(PWM) = 1/PWM period
les montages raliss (PIC232) ont une frquence d'oscillation de 20 MHz, soit
une priode de 1/20e6 = 50 ns

Par exemple
setup_timer_2(T2_DIV_BY_1,124, 1);

PWM period = 50 ns * 4 * 1 * (124 +1) = 25 s

16-1
f(PWM) = 1/25 s = 40 kHz

Les frquences peuvent donc aller de 1221 Hz (T2_DIV_BY_16,255, 1)


2500 kHz (T2_DIV_BY_1,1, 1)

On doit ensuite dfinir le fonctionnement en PWM: la broche CCP2 est la mme que C1

setup_ccp2(CCP_PWM); // CCP2 en PWM

On pourrait l'arrter avec:


setup_ccp2(CCP_OFF);

On doit ensuite rgler le rapport cyclique; le rapport est sur 7 bits:


set_pwm2_duty(valeur)
Le duty cycle est alors = valeur/(priode + 1)

Exemple:
set_pwm2_duty(63); // Duty cycle = valeur/(priode+1)
DC = 63/(124+1) = 50%

Programmation du PWM sur RC2/CCP1:


Les tapes sont les mmes:
setup_timer_2(mode, priode, postscale);

setup_ccp1(CCP_PWM); // RC2/CCP1 en PWM

set_pwm1_duty(valeur)

16-2

Vous aimerez peut-être aussi