Sortie Analogique
Une histoire de PWM (MLI)
PWM = Pulse Width Modulation
Littéralement la modulation de largeur d'impulsion.
Génère une impulsion de largeur / période voulue sur une broche de la carte Arduino . Dans les fait on fait varier la valeur de la tension en modifiant le rapport cyclique.
Après avoir appelé l'instruction analogWrite(), la broche générera une onde carrée stable avec un "duty cycle" (fraction de la période où la broche est au niveau haut) de longueur spécifiée (en largeur 0-255), jusqu'à l'appel suivant de l'instruction analogWrite() (ou bien encore l'appel d'une instruction digitalRead() ou digitalWrite() sur la même broche).
L'image ci-contre illustre pour plusieurs valeur la variation de ce rapport cyclique. En pratique ce phénomène est souvent utilisé pour faire varier l'intensité lumineuse d'une LED ou la vitesse d'un moteur. Cette instructions peut s'utiliser sur une sortie digital manqué d'un ~ La syntaxe de cette instruction est : |
analogWrite(broche, valeur);
Les broches pouvant générer ce type de signal sont : 3, 5, 6, 9, 10 et 11. Alors si le premier argument va de soi, le second mérite quelques précisions. Le rapport cyclique s'exprime de 0 à 100 % en temps normal. Cependant, dans cette fonction il s'exprimera de 0 à 255 (sur 8 bits). Ainsi, pour un rapport cyclique de 0% nous enverrons la valeur 0, pour un rapport de 50% on enverra 127 et pour 100% ce sera 255. Les autres valeurs sont bien entendu considérées de manière proportionnelle entre les deux. Il vous faudra faire un petit calcul pour savoir quel est le pourcentage du rapport cyclique plutôt que l'argument passé dans la fonction.
Exemple :
Réaliser un montage avec une led connecter sur la broche 6. Téléverser le programme. Relever à l'oscilloscope la forme d'ondes de la tension d'alimentation de la LED, en déduire la fréquence et la valeur efficace.
//une sortie analogique sur la broche 6
const int sortieAnalogique = 6;
void setup()
{
pinMode(sortieAnalogique, OUTPUT);
}
void loop()
{
//on met un rapport cyclique de 107/255 = 42 %
analogWrite(sortieAnalogique, 107);
}
Répéter cette opération pour des valeurs de : 2 ; 64 ; 127 ; 180 ; 255
Faire valider les manipulations par le professeur.