Une broche allume une LED
Une broche GPIO (entrée-sortie à usage général) est une patte de la puce. Le programme la met à 0 ou à 1 pour allumer une LED, ou la lit pour savoir si un bouton est appuyé. Une minuterie la fait changer de niveau à intervalles réguliers.
C’est ainsi qu’une lampe de chevet varie en douceur ou qu’un ventilateur de 15 € tourne plus ou moins vite, avec un simple interrupteur très rapide.
À la fin de cette leçon
Remarque
Je peux piloter une broche selon un horaire et calculer le rapport cyclique d’un signal PWM.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Broche | une patte de la puce, au niveau haut (1) ou bas (0) | |
| Sortie | une broche que la puce commande | |
| Période | la durée d’un tour complet de la minuterie | 16 |
| PWM | modulation de largeur d’impulsion : une broche allumée puis éteinte très vite | |
| Rapport cyclique | la part de la période où la broche est haute | 25 % |
| Valeur de comparaison | le nombre qui fixe où la broche retombe |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Trois registres décident de l’état d’une broche
Chaque bit du registre DDR dit si une broche est une entrée (0) ou une sortie (1). Le registre PORT dit quel niveau la puce impose aux sorties. Le registre PIN donne le niveau réel que l’on lit.
Sur une sortie, PIN montre ce que la puce impose. Sur une entrée, il montre ce que le monde extérieur impose, par exemple un bouton.
Exemple : la broche 0 dans trois situations
| Situation | Bit 0 de DDR | Bit 0 de PORT | Bit 0 de PIN |
|---|---|---|---|
| Sortie, PORT à 1 | 1 | 1 | 1 |
| Sortie, PORT à 0 | 1 | 0 | 0 |
| Entrée, bouton appuyé | 0 | sans effet | 1 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Les scripts du labo parlent anglais
La puce est toujours un simulateur d’une puce inventée, écrit en Python. Une vraie puce a d’autres noms de registres et d’autres règles.
Les scripts affichent des mots anglais, comme pin 0 is an output. Une ligne de # et de . montre la broche tick après tick : # veut dire allumé, . veut dire éteint.
Faire clignoter la broche 0
docker exec jupyter python3 steps/pins.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Un signal PWM se règle avec une comparaison
La minuterie compte de 0 à 15 puis recommence : une période dure 16 ticks. Tant que le compteur est sous la valeur de comparaison, la broche reste haute. Ensuite elle retombe.
Le rapport cyclique est la part de la période passée à l’état haut. Avec une comparaison de 4, la broche est haute 4 ticks sur 16, soit 25 %.
Exemple : trois valeurs de comparaison
| Comparaison | Ticks hauts | Ticks bas | Rapport cyclique |
|---|---|---|---|
| 4 | 4 | 12 | 25 % |
| 8 | 8 | 8 | 50 % |
| 12 | 12 | 4 | 75 % |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Voir une période de trois signaux PWM
docker exec jupyter python3 steps/pwm.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Calculer un rapport cyclique en Python
# Un ventilateur : la minuterie compte de 0 à 15, la broche est haute sous la valeur de comparaison.
periode = 16
comparaison = 4
ligne = ""
nombre_haut = 0
for tick in range(periode):
if tick < comparaison:
ligne = ligne + "#"
nombre_haut = nombre_haut + 1
else:
ligne = ligne + "."
print(ligne)
print("rapport cyclique :", nombre_haut * 100 // periode, "%")
# Mettez la comparaison à 12 puis relancez.
Une erreur fréquente
Attention
On croit souvent qu’un PWM à 50 % donne une tension de moitié. La broche est toujours soit tout allumée, soit tout éteinte. Seul l’effet moyen est de moitié : une lampe paraît moins forte, un moteur tourne plus lentement.
Choisir la comparaison pour un rapport voulu
Pour un rapport voulu, on multiplie le pourcentage par la période, puis on divise par 100. Un ventilateur à 25 % sur 16 ticks demande 25 × 16 ÷ 100, soit une comparaison de 4.
Avec une période de 16, les rapports possibles sont des multiples de 6,25 %. Une période plus longue donne un réglage plus fin.