Texte à méditer :  
Dernière mise à jour : 2 juin 2017 .
Trucs et astuces pour l'utilisation de
l'imprimante 3D DiscoEasy200

      
.
PICAXE pour débutants - 13bis- Fonction PWMOUT

Fonction PWMOUT

(Cet article n'est pas un sujet d'exercice. C'est juste une explication)

 

 

PWMOUT, broche, période, rapport_cyclique

PWMOUT,PWMDIV4, broche, période, rapport_cyclique

PWMOUT,PWMDIV16, broche, période, rapport_cyclique

PWMOUT,PWMDIV64, broche, période, rapport_cyclique

PWMOUT, broche, OFF

 

Que sont les paramètres "période" et "rapport_cyclique" ?

On s'attend logiquement à ce que "période" soit exprimée en secondes et "rapport_cyclique" en %.

Eh bien pas du tout !

 

En réalité, le manuel PICAXE, en français ou en anglais, entretient un certaine confusion dans les termes.

Dans l'explication de la fonction pwmout on peut par exemple lire ceci : 
« -- Période est une constante ou une variable (0 à 255) définissant la période (fréquence) du PWM. ».

Cette phrase est un chef-d'oeuvre !

On y confond "période" et "fréquence". On y utilise le même mot "période" pour désigner le paramètre de la fonction pwmout et la période effective du signal (en secondes) !

 

Note importante : si les développements mathématiques vous font cet effet là... gaston4.jpg ... cliquez sur la tête de Gaston pour allez tout de suite à l'essentiel.

 

Essayons d'y voir clair

J'ai été aidé par la traduction du manuel en tchèque. Eh oui.

Les formules y sont écrites ainsi :

perioda PWM = (period + 1) x 4 x perioda procesoru 
plnění PWM = (duty) x perioda procesoru
perioda procesoru = 1 / frekvence procesoru
perioda procesoru pro frekvenci 4 MHz = 1/4 000 000 s = 0,25 µs

Voilà qui est plus clair, plus respectueux du sens des termes, et qui va nous aider à comprendre le paragraphe Information du manuel en français :

 

  • "période" est le paramètre de la fonction pwmout. C'est une constante ou une variable qui peut prendre les valeurs 0 à 255 ;
  • "période_PWM" est la  vraie période du signal PWM , exprimée en secondes ;
  • "fréquence PWM" est la vraie fréquence du signal PWM, exprimée en Hz ;
  • "vitesse d'horloge" est en réalité la "période de l'horloge du PICAXE".
    Elle est égale à "1 / fréquence d'horloge du PICAXE"
    (
    perioda procesoru = 1 / frekvence procesoru en tchèque).

 

période_PWM = (période+1) x 4 x vitesse horloge

devient donc :

période_PWM = (période + 1) x 4 / fréquence d'horloge du PICAXE

et

période_PWM = 1 / fréquence PWM
(en secondes)                   (En Hz)

 

Note : pour les calculs qui suivent on admet que (période + 1) est quasiment égale à (période).

Pour les puristes, dans toutes les formules qui suivent, il suffit de remplacer (période) par (période + 1).

 

Donc, en combinant les 2 formules, et pour une fréquence d'horloge de 4 MHz, on obtient la formule suivante :

1 / fréquence PWM = période x 4 / fréquence d'horloge du PICAXE

1 / fréquence PWM = période / 1 000 000

 

 période = 1 000 000 / fréquence PWM (1) 

avec 1 000 000 = 1/4 de la fréquence d'horloge du PICAXE

 

 

 

PWMDIVxx 

Un autre paramètre intervient : pwmdiv.

Ce paramètre optionnel peut prendre les valeurs pwmdiv4, pwmdiv16 ou pwmdiv64.

Les nombres 4, 16 ou 64 interviennent comme des diviseurs de la fréquence d'horloge du PICAXE.

Si on utilise le paramètre pwmdiv4, la formule ci-dessus devient : 

période = 1 000 000 / 4 / fréquence PWM

période = 250 000 / fréquence PWM

Si on utilise le paramètre pwmdiv16 : 

période = 1 000 000 / 16 / fréquence PWM

période = 62500 / fréquence PWM

Si on utilise le paramètre pwmdiv64 : 

période = 1 000 000 / 64 / fréquence PWM

période = 15625 / fréquence PWM

... et bien entendu :

fréquence PWM = [250 000] ou [62500] ou [15625] / période

 

L'utilisation de ces paramètres permet de produire des fréquences PWM basses.

Voici les fréquences minimales qu'on peut obtenir avec les différents paramètres :

  • sans pwmdiv : fréquence PWM minimale = 1 000 000 / 255 soit environ 3920 Hz
  • avec pwmdiv4 : fréquence PWM minimale = 250 000 / 255 soit environ 980 Hz
  • avec pwmdiv16 : fréquence PWM minimale = 62500 / 255 soit environ 245 Hz
  • avec pwmdiv64 : fréquence PWM minimale = 15625 / 255 soit environ 61 Hz
 
 

 

rapport_cyclique, "duty cycles", PWM duty cycle, etc.

Ici encore les deux notices (la française en particulier) entretiennent une confusion coupable sur les termes.

La notice anglaise  précise :

PWMOUT,PWMDIV4, pin, period, duty cycles

... et donne la relation :

PWM duty cycle = (duty) x resonator speed.

 
 
La notice française dit :

PWMOUT,PWMDIV4, broche, période, rapport_cyclique

... et donne la relation :

rapport_cyclique_PWM = (rapport_cyclique) x vitesse horloge.

 
 
Que recouvrent les dénominations "rapport_cyclique_PWM" et (rapport_cyclique) ?
... et les mêmes en anglais ?
 
 
 
  • (rapport_cyclique) = (duty cycles) = (duty)

 

Tel que le terme est employé dans la formule, ce n'est en aucun cas un rapport entre 2 grandeurs.

En effet :

– dans le cas d'une fréquence PWM, le vrai rapport cyclique c'est le rapport entre la période de conduction et la période totale de l'onde, ces deux grandeurs étant exprimées en secondes,

⇒ s'il est exprimé en décimal, ce rapport peut prendre des valeurs de 0 à 1 au maximum,

⇒ s'il est exprimé en "%", il peut prendre des valeurs de 0% à 100% au maximum,

 

... alors que, dans la fonction pwmout :

– la gamme des valeurs de ce paramètres'étend de 0 à 1023,

– cependant sa valeur ne peut en aucun cas être supérieure à 4 fois la valeur du paramètre "période",

– il permet au microcontrôleur de calculer la vraie durée pendant laquelle l'impulsion est "ON".

 

Vous suivez toujours ?

Bon, alors je vous en remets une couche (petite) :

 

  • "PWM duty cycles", alias "rapport_cyclique_PWM"

Ben ce n'est pas non plus  comme on pourrait s'y attendre  le vrai rapport cyclique.

C'est en réalité la valeur de la période "ON" d'une alternance PWM, exprimée en secondes.

 

17.png... oui, moi aussi !

 

 

Comment va-t-on se sortir de ce merdier ? 

Cool ! Le dénouement est proche.

 

Reprenons les deux formules sous leur forme francisée :

période_PWM = (période + 1) x 4 / fréquence d'horloge du PICAXE

rapport_cyclique_PWM = (rapport_cyclique) x vitesse horloge.

Compte-tenu de ce qui précède et après simplification, on devrait les écrire :
 
période_PWM = (période) x 4 / fréquence d'horloge du PICAXE (4)

période "ON" PWM = (rapport_cyclique) / fréquence d'horloge du PICAXE (5)

(En bleu les dénominations douteuses mais qu'on n'a pas le choix d'employer).
 

 

Or la voici notre porte de sortie. (Qui a dit «... enfin ! » ? Si, si, j'ai entendu ! ) 

 

En effet, période_PWM et période "ON" PWM sont précisément liées par le "rapport_cyclique_vrai".

Nous sommes bien forcés de l'appeler ainsi, pour le distinguer de "rapport_cyclique", le paramètre.

 

(rapport_cyclique_vrai) = période "ON" PWM / période_PWM 

Ah ! nous y voilà !

période "ON" PWM (4) = (rapport_cyclique_vrai) x période_PWM (5)

Ce qui est vrai pour les premiers membres l'est aussi pour les deuxièmes membres :

(rapport_cyclique) / fréquence d'horloge du PICAXE (4) = (rapport_cyclique_vrai) x période x 4 / fréquence d'horloge du PICAXE (5)

 

soit, après simplification : 

 

 (rapport_cyclique) = 4 x période x (rapport_cyclique_vrai) (2) 

(rapport_cyclique_vrai) est exprimé sous forme décimale. Il est compris entre 0 et 1.
(période), le paramètre, est compris entre 0 et 255.
(rapport_cyclique) est compris entre 0 et 1023.

 

En résumé

Je vois que vous avez cliqué sur la tête de Gaston !
Non ? Hé bien vous êtes sacrément courageux. Félicitations.

En résumé, vous pouvez respirer à fond et oublier tout ce qui précède !

Les trois formules ci-dessous suffiront à votre bonheur :

 période = 1 000 000 / fréquence PWM (1) 

1 000 000 = 1/4 de la fréquence d'horloge du PICAXE.
fréquence PWM est exprimée en Hertz

 (rapport_cyclique) = 4 x période x (rapport_cyclique_vrai) (2) 

(rapport_cyclique_vrai) est exprimé sous forme décimale. Il est compris entre 0 et 1.
(période), le paramètre, est compris entre 0 et 255.
(rapport_cyclique), le paramètre, est compris entre 0 et 1023.

Dans tous les cas (qu'on utilise pwmdiv-- ou pas) :

 fréquence PWM = 1 / période_PWM (3) 

fréquence PWM en Hz,
période_PWM en secondes.

 

 

 
Si on utilise pwmdivxx, la première formule s'écrira :

période = 250 000 / fréquence PWM  avec pwmdiv4

période = 62500 / fréquence PWM avec pwmdiv16

période = 15625 / fréquence PWM avec pwmdiv64

 
 
 
Remarque concernant le paramètre "rapport_cyclique"

Il ne dépend en fait que du paramètre "période" et du "rapport_cyclique_vrai" (2).

Si on veut modifier la fréquence du signal PWM  donc la valeur du paramètre "période"  tout en maintenant un "rapport_cyclique_vrai" constant, il faudra aussi modifier la valeur du paramètre "rapport_cyclique".

Exprimé autrement : pour maintenir constant un "rapport_cyclique_vrai", le paramètre "rapport_cyclique" varie si le paramètre "période" varie.

 

Exemples d'écritures de la fonction pwmout

 fréquence PWM souhaitée = 100 Hz

 rapport_cyclique_vrai = 50%, soit 0,5

⇒ on utilise pwmdiv64

⇒ période = 15625 / 100, soit période = 156

⇒ rapport_cyclique = 4 x 156 x 0,5, soit rapport_cyclique = 312

On obtient : pwmout,pwmdiv64, [n° sortie],156, 312 

 

 

 fréquence PWM souhaitée = 1000 Hz

 rapport_cyclique_vrai = 50%, soit 0,5

⇒ on utilise pwmdiv16

⇒ période = 62500 / 1000, soit période = 62 (ou 63)

⇒ rapport_cyclique = 4 x 62 x 0,5, soit rapport_cyclique = 124

On obtient : pwmout,pwmdiv16, [n° sortie], 62, 124 

 
ou bien on utilise pwmdiv4 :
 
⇒ période = 250000 / 1000, soit période = 250 (c'est juste inférieur à 255, donc c'est OK)

⇒ rapport_cyclique = 4 x 250 x 0,5, soit rapport_cyclique = 500

On obtient : pwmout,pwmdiv4, [n° sortie], 250, 500

 

ou bien on utilise pwmdiv64 :

⇒ période = 15625 / 1000, soit période = 16

⇒ rapport_cyclique = 4 x 16 x 0,5, soit rapport_cyclique = 32

On obtient : pwmout,pwmdiv64, [n° sortie], 16, 32

 

Décryptage de l'écriture d'une fonction pwmout

période = 1 000 000 / fréquence PWM (1)  donc :

fréquence PWM = 1 000 000 / période

(rapport_cyclique) = 4 x période x (rapport_cyclique_vrai) (2) donc :
 
(rapport_cyclique_vrai) = (rapport_cyclique) / 4 / période

 

pwmout, [n° sortie], 16, 32

fréquence PWM = 1 000 000 / 16 donc fréquence PWM = 62500 Hz

rapport_cyclique_vrai = 32 / 4 / 16 donc rapport_cyclique_vrai = 0,5 soit 50%

pwmout, [n° sortie], 32, 32

fréquence PWM = 1 000 000 / 32 donc fréquence PWM = 31250 Hz

rapport_cyclique_vrai = 32 / 4 / 32 donc rapport_cyclique_vrai = 0,25 soit 25%

pwmout, [n° sortie], 120, 240

fréquence PWM = 1 000 000 / 120 donc fréquence PWM = 8333 Hz

rapport_cyclique_vrai = 240 / 4 / 120 donc rapport_cyclique_vrai = 0,5 soit 50% (encore)

pwmout, [n° sortie], 250, 1000

fréquence PWM = 1 000 000 / 250 donc fréquence PWM = 4000 Hz

rapport_cyclique_vrai = 1000 / 4 / 250 donc rapport_cyclique_vrai = 1 soit 100% 

rapport_cyclique = 4 x période et dans ce cas, la sortie est "ON" en permanence.

pwmout,pwmdiv64, [n° sortie], 60, 180

fréquence PWM = 15625 / 60 donc fréquence PWM = 260 Hz

rapport_cyclique_vrai = 180 / 4 / 60 donc rapport_cyclique_vrai = 0,75 soit 75% 

pwmout,pwmdiv16, [n° sortie], 240, 720

fréquence PWM = 62500 / 240 donc fréquence PWM = 260 Hz

rapport_cyclique_vrai = 720 / 4 / 240 donc rapport_cyclique_vrai = 0,75 soit 75%

pwmout,pwmdiv16, [n° sortie], 240, 96

fréquence PWM = 62500 / 240 donc fréquence PWM = 260 Hz

rapport_cyclique_vrai = 96 / 4 / 240 donc rapport_cyclique_vrai = 0,1 soit 10%

 

 

 

PWMDUTY

PWMDUTY, broche, rapport_cyclique

 

Cette fonction est associée à pwmout.

Elle permet d'agir sur le rapport_cyclique de la fonction pwmout en cours de fonctionnement sur la même broche, sans ré-écrire toute la fonction pwmout. 

Exemple

Init: 

pwmout C.2, 150, 100 ; sortie pwm sur la broche C.2, à 6600 Hz environ et

                     ; rapport_cyclique_vrai = 16%

do                       ; début de boucle 

pwmduty C.2, 150      ; augmente le rapport_cyclique_vrai à 25% 

pause 1000            ; pause 1 s 

pwmduty C.2, 50       ; diminue le rapport_cyclique_vrai à environ 8% 

pause 1000            ; pause 1 s 

loop                     ; fin de boucle do

 

Si une LED est branchée sur C.2, son éclat variera entre 8 et 25%, sur un rythme de 1 seconde.

 

 

Looney_tunes.jpg

That's all Folks

 

Date de création : 13/06/2016 - 09:04
Dernière modification : 15/06/2016 - 08:42
Catégorie : PICAXE pour débutants
Page lue 1290 fois

Imprimer l'article Imprimer l'article

react.gifRéactions à cet article

Personne n'a encore laissé de commentaire.
Soyez donc le premier !

^ Haut ^