Nous avons 42 invités et aucun membre en ligne

Il est souvent utile de pouvoir faire varier la tension que l’on trouve à la sortie d’une broche d’un microcontrôleur. La technique utilisée est celle de la Modulation à Largeur d’Impulsion (MLI en français et PWM – Pulse Width Modulation en anglais).

Tous les microcontrôleurs n’offrent pas cette possibilité mais ceux qui disposent de cette fonctionnalité peuvent l’offrir sur une ou plusieurs de leurs broches. C’est le cas du PIC16F628A qui permet la gestion d’une seule broche : la RB3 (broche/pin n°9). Pour en savoir plus sur cette fonction il faut impérativement regarder les fiches techniques du microcontrôleur concerné. On y trouve l’information sous l’étiquette CCP. Nom du module qui se déchiffre comme suit : C pour capture, C pour compare et P pour PWM (Pulse width modulation).

Depuis le début des cours sur la programmation des PICs, je vous ai indiqué que lorsque l’on envoie un 1 logique sur une broche, on y observe une tension de 5V, de même un 0 logique envoie une tension de 0V sur la broche considérée. Comment faire dès-lors pour obtenir une tension comprise entre zéro et cinq volts ?

La solution pour faire varier la tension à la sortie d'une broche du microcontrôleur consiste à jouer sur la fréquence du signal émis sur cette broche. Pour cela, on crée une onde rectangulaire avec le module CCP, ce qui nous permet de jouer avec les niveaux hauts et bas (1 et 0). Pour obtenir 50% de la puissance en sortie, on doit décomposer la période du signal en deux parties de même niveau à savoir 50% de la période au niveau « Haut » et 50% de la période au niveau « Bas ». L’oscillation « haut, bas, haut, bas... » générée plusieurs fois par seconde ne se voit absolument pas à l’œil nu. Pour autant on obtient une tension de sortie moyenne de 2.5V (50%) si on utilise une tension d’entrée de 5V.

Pour obtenir une tension variable sur la broche du microcontrôleur, il suffit d’ajuster les temps de niveau haut et bas. On augmentera la tension sur la broche en augmentant le pourcentage de temps « Haut » et on diminuera la tension sur la broche en augmentant le pourcentage de temps « Bas ».

On appelle ce ratio de niveau haut et bas, le cycle d'usage (duty cycle). Pour calculer le cycle d'usage, il suffit de diviser la durée du niveau haut par la durée totale de la période.

Ex.: Sur une période de 6us si on impose 3us de niveau « Haut »

Le cycle d’usage (Duty cycle)  = (3 us/6 us) = 0,5 soit un cycle d'usage de 50%.

Ce choix impose une tension moyenne de sortie de 50% de la tension d’entrée. Si l’on utilise une tension de 5V, on obtient une tension moyenne sur la broche de 2.5V.

Le logiciel MikroC Pro dispose de 4 fonctions préétablies qui nous permettent de contrôler la PWM. La première s'appelle, PWM_Init. Cette fonction nous permet d’imposer la fréquence du PWM. Par exemple, PWM_Init(5000); indique au microcontrôleur qu'il doit osciller à une fréquence de 5 kHz. Habituellement, la fréquence de 5 kHz fonctionne super bien. Il et important de noter que si le microcontrôleur dispose de plusieurs broches pouvant disposer du PWM, elles auront toutes la même fréquence car elles utiliseront toutes le même Timer interne. Il faut noter que si l’on utilise une fréquence trop élevée (telle que mentionnée dans la vidéo) avec un microcontrôleur qui ne peut pas supporter cette fréquence, il y aura des dysfonctionnements du module PWM. À l'inverse, une fréquence beaucoup trop basse aura pour effet de ne pas donner une tension moyenne satisfaisante, on obtiendra plutôt un « clignotement » du signal sur la broche de sortie.

La deuxième fonction s'appelle, PWM_Set_Duty. Cette fonction permet de fixer la tension moyenne à la sortie sur microcontrôleur. Étant donné que nous fonctionnons avec un registre de 8 bits, on doit utiliser un nombre compris 0 à 255 et ce nombre sera mis entre parenthèses. Par exemple, PWM_Set_Duty(192); 192 comparé à 255 donne sur la broche du microcontrôleur une tension moyenne de 75%.

Finalement, les deux dernières fonctions vont ensemble. Le PWM_Start a pour rôle de démarrer le PWM et le PWM_Stop  arrête la fonction PWM.

Si vous n'utilisez pas MikroC Pro et ses librairies internes, il vous faudra lire la documentation du microcontrôleur. Comme mentionné un peu plus haut, le module PWM fait partie du groupe CCP. Il vous faut activer certains registres pour faire l'initialisation du PWM et d'autres pour contrôler le cycle d'usage. Voici un exemple des registres à gérer pour le PWM du PIC16F887.

  • PR2
  • T2CON
  • CCPRxL
  • CCPxCON

On y trouve les registres pour l'interruption, le timer 2 et les registres du module CCP à configurer pour le bon fonctionnement du PWM. On trouvera également, dans les fiches techniques, plusieurs formules permettant de calculer la largeur d'impulsion de sortie ou encore de calculer le cycle d'usage en fonction de la configuration choisie des registres.

Sans abonnement Abonnés et Abonnés VIP
 <--- Schéma  <--- Schéma Complet
<--- Code en Hexa <--- Code en C modifiable