Enseignant: |
Jérôme Collin, responsable (local M-4013, poste 5060) |
|
Support technique supplémentaire: | Laurent Tremblay (local M-4011, poste 7181) | |
Chargés de laboratoire: | Section 1: |
Kais Fallouh (Lundi AM) Romain Lebbadi-Breteau (Mercredi PM) |
Section 2: |
Tristan Rioux (Mardi PM) Gaëtan Florio (Jeudi AM) |
|
Section 3: |
Luciano Garin-Iriarte (Lundi PM) Ely-Cheikh Abass (Jeudi PM) |
|
Section 4: |
Dorine Dantrun (Mardi AM) Meriam Ben Rabia (Vendredi AM) |
|
Section 5: |
Amélie Simard (Mercredi AM) Abdul-Wahab Chaarani (Vendredi PM) |
|
Section 6: |
Marc-Antoine Manningham (Mardi soir) Laurent Bourgon (Jeudi soir) |
INF1900
Projet initial de système embarqué
Travail pratique No. 3
Le PWM de façon logicielle
Objectif: Pouvoir contrôler les moteurs du robot
Durée: Une semaine
Travail préparatoire: Aucun
Documents à remettre: Aucun (mais sujet à un quiz d'ici quelques semaines)
Présentation en classe: fichier PowerPoint
«Celui qui trouva le premier les roues et les pignons, eût inventé les montres dans un autre siècle.» |
|
- |
Jean le Rond d'Alembert |
Situation
Durant les deux dernières semaines, vous vous êtes familiarisés avec la carte à microcontrôleur et sa programmation mais aussi avec le simulateur SimulIDE. Ce laboratoire sera également axé sur la programmation en introduisant la motricité du robot. Nous utiliserons ce qui a été vu dans les semaines précédentes pour commencer à contrôler un moteur à courant continu.
Pour bien comprendre comment contrôler les moteurs, on doit d'abord avoir une idée du rôle du circuit du pont en H sur le robot. Initialement, il est impératif de lire cette brève description de son fonctionnement. De plus, la mise au point de ce circuit peut présenter des difficultés. Un guide de mise au point a été rédigé pour faciliter cette expérience. Pour approfondir les outils de mise au point, il faut consulter la section sur les appareils de laboratoire et la section vidéo.
Le PWM
Les signaux périodiques sont très importants en électricité et en informatique. Par exemple, les signaux d'horloge ont cette caractéristique de périodicité. C'est aussi dans cette catégorie que se trouvent les signaux de type PWM (pour «Pulse Width Modulation» en anglais, modulation d'impulsion en durée en français). Il s'agit tout simplement d'une onde plus ou moins carrée et périodique dont on contrôle la période active ou haute («duty cycle», en anglais) par rapport à la période totale de l'onde (rapport a/b de la figure 1). Ce rapport est souvent mesuré en pourcentage. Un PWM de 50% est une onde carrée parfaite.
Figure 1 : Onde PWM avec rapport a/b
Pouvoir générer des ondes PWM est très important dans de nombreuses situations de contrôle, en particulier pour varier la vitesse des moteurs à courant continu tels que ceux du robot. Plus le rapport a/b sera élevé (disons 90%), plus les moteurs tourneront rapidement. À l'inverse, si la durée de «a» est faible par rapport à «b» (10% par exemple), les moteurs tourneront à basse vitesse. De plus, comme la fréquence d'un signal se définit comme l'inverse de la période, il faudra prendre une valeur de «b» qui est raisonnable. Si cette valeur est vraiment trop grande, vos moteurs risquent d'avancer par coups répétés («toussé»)! On peut même entendre un signal PWM si la fréquence est dans l'intervalle audible ce qui peut être agaçant. Cet autre site peut aussi être consulté au besoin pour une bonne explication du PWM: https://barrgroup.com/Embedded-Systems/How-To/PWM-Pulse-Width-Modulation.
Problèmes
Problème 1: Atténuation d'une DEL
Comme on l'a vu durant la première semaine, une DEL ne peut qu'être éteinte ou allumée. Par contre, on peut tromper l'œil humain. L'exercice demandé ici consiste à faire atténuer progressivement la luminosité d'une DEL. Autrement dit, de faire comme si la DEL s'éteignait en 3 secondes plutôt qu'abruptement. Cet objectif est réalisable facilement en diminuant tranquillement le rapport a/b d'un signal PWM qui alimente une DEL. On devra donc retourner au code écrit pour la première semaine, mais en générant un signal PWM pour alimenter la DEL. De plus, on devra contrôler encore une fois le moment où la valeur d'un signal de sortie passe de 0 à 1 et de 1 à 0 et compter les durées passées au niveau haut et au niveau bas. Par contre, la fréquence (inverse de la valeur de «b») devra demeurer constante à 1 kHz. Faites cette atténuation pour la couleur rouge dans un premier temps et la couleur verte dans un deuxième temps (ou l'inverse). Comme le microcontrôleur tourne à 8 MHz, il faudra encore lui faire perdre beaucoup de temps. Bien optimiser votre code pour vous assurer que le microcontrôleur fasse le minimum de calculs dans vos boucles.
Problème 2: Contrôle des moteurs du robot
Ici, on utilisera le robot au complet pour la première fois, et non seulement la carte mère. On fera tourner une seule roue pour l'instant. Par contre, nous imposerons des fréquences de 60 Hz pour la fréquence de la période du signal PWM dans un premier temps et de 400 Hz dans un deuxième temps. De plus, nous vous demandons de faire fonctionner le PWM pour un rapport a/b de 0%, 25%, 50% et 75% et 100% pendant 2 secondes chaque. Votre roue tournera donc 20 secondes au total (les 10 premières à 60 Hz et à 400 Hz pour les 10 autres). Le chargé de laboratoire vérifiera avec l'oscilloscope que vous générez les signaux correctement.
Directives de montage avec le robot
Bien s'assurer que les signaux de mise à la masse de la carte mère et du circuit du pont en H soient bien reliés par le fil noir avec des œillets aux deux bouts.
Comme vous ne faites tourner qu'une seule roue pour l'instant, placez un bloc (ou ce qui peut faire office de bloc!) sous l'ensemble engrenages-moteurs de façon à ce que les roues ne touchent pas au sol et puissent tourner librement. Une telle disposition vous sera utile pour le reste du trimestre de toute façon lorsque vous aurez besoin de mettre au point divers autres aspects du robot. Tester tout de même que l’autre roue de votre robot fonctionne aussi!
Votre signal PWM sortira par une broche d'un port (par exemple: port B0 – 1ère broche du port B). Il faudra aussi mettre un signal d'une broche adjacente en sortie (soit port B1 ou port B2) à zéro ou à un. Ce signal constant sera relié au circuit du pont en H pour imposer une direction au moteur. La direction n'est pas importante pour le moment. Ce détail sera réglé plus tard. Pour l'instant, au moins, ce signal ne sera pas laissé flottant sur le circuit du pont en H.
Il faut relier un câble à deux fils de la carte mère au pont en H. Le point départ sur la carte mère est le couple signal PWM et signal constant de la directive précédente. Sur le circuit du pont en H, il pourra s'agir du côté droit ou gauche du pont en H (soit le connecteur JM1 ou JM2). Nous vous recommandons de prendre des câbles avec la paire de fils jaune et orange pour ce montage.
On peut toujours utilise un multimètre pour vérifier le fonctionnement correct du pont en H. Cette section du site web est à la fois un tutoriel sur l'utilisation du multimètre et une procédure par étapes pour en arriver à mettre au point le pont en H. Il s'agit d'un bon exercice pour débuter.
Passez du temps à travailler avec l'oscilloscope pour ajuster vos signaux PWM. Les chargés de laboratoire vous aideront pour cette partie, au besoin. Par contre, ces vidéos sont une introduction au fonctionnement de cet appareil très puissant pour analyser les circuits électroniques.
Variante dans SimulIDE
Il est tout à fait possible d’arriver au même résultat dans SimulIDE avec exactement le même code. Il faut cependant connecter le matériel avec des «fils» virtuels et les composantes de la figure 2. Il faudra sauvegarder cette description matérielle dans un fichier à l’extension .simu. Il s’agit d’un fichier ASCII qui peut même être visualisé dans un éditeur comme VS Code ou avec une commande Linux cat ou more par exemple. Vous pourrez voir comment les connexions sont décrites dans le fichier.
Figure 2 : Composantes pour le montage équivalent dans SimulIDE
Tout comme pour le vrai robot, votre signal PWM sortira par une broche d'un port (par exemple: port B0 – 1ère broche du port B). Il faudra aussi mettre un signal d'une broche adjacente en sortie (soit port B1 ou port B2) à zéro ou à un. Ce signal constant sera relié au circuit du pont en H pour imposer une direction au moteur. Choisir le même que pour le vrai robot pour que votre code fonctionne de la même façon dans le simulateur qu’avec le robot.
Il faut relier avec deux «fils» le microcontrôleur au pont en H. Le point départ sur la carte mère est le couple signal PWM et signal constant de la directive précédente. Sur le circuit du pont en H, il pourra s'agir du côté droit ou gauche du pont en H. Vous pouvez même brancher les deux côtés si vous voulez.
Brancher les moteurs au pont-en-H également.
Passez du temps à travailler avec l'oscilloscope virtuel pour ajuster vos signaux PWM comme vous le feriez pour le vrai robot.
Il est possible d’ajouter la DEL libre avec la résistance en série pour avoir un même circuit pour les deux problèmes en exercice. Il suffit de ramener ici une portion d’un circuit des semaines précédentes.
Alimentation du pont en H
Le pont en H peut, bien entendu, être alimenté pas 6 piles AA insérées dans les 2 réceptacles noirs sur et sous la base du robot. Pour bien des tests, il est par contre recommandé de limiter l'utilisation de piles et réduire les coûts en laboratoire. La remarque est d'autant plus intéressante qu'une très bonne source de tension est disponible au laboratoire pour fournir la tension nécessaire. Pour en savoir plus sur l’alimentation du robot, il est important de relire le document «Pour débuter avec le robot».
La photographie ci-dessous montre qu'en utilisant les fils d'alimentation noir et rouge (attention, la polarité est importante), on peut relier une source de tension au pont en H. La pince crocodile du fil noir (à la masse) peut être placé sur le point de test noir (GND) du pont en H. La pince crocodile du fil rouge doit se brancher à l'interrupteur rouge sous la base du robot.
La masse est la même pour le pont en H et la carte mère et les trous de montage et les tiges qui les traversent peuvent aussi offrir une prise alternative si l'option vous semble plus intéressante. Un vis peut être placée tout au haut d'une tige de montage pour procurer une bonne prise à la pince noire par exemple:
L'interrupteur rouge sous la base du robot en est un à trois positions. Celle du centre est reliée réellement au pont en H. La seconde est reliée à l'alimentation par piles AA. Comme la dernière position est inutilisée, il peut être intéressant de s'en servir pour ajouter une extension de quelques millimètres avec du fil monobrin pour favoriser une bonne prise avec la pince crocodile rouge. De cette façon, la bascule de l'interrupteur permettra d'être en position sans alimentation (OFF), alimenté par pile ou alimenté par la source de tension.
Il faut, à tout prix, ne jamais brancher le pont-en-H un plaçant l’alimentation sur les points de test Vbatt (rouge) ou 5V (blanc) du pont-en-H. Catastrophe garantie, peut-être avec un bon dégagement de fumée en prime…
Dans SimulIDE, le pont-en-H n’a pas à être alimenté par un voltage séparé plus élevé que celui du microcontrôleur. On considère que ça se fait «automatiquement». On voit cependant que ceci est loin de la réalité du vrai robot! Par contre, le code peut être le même dans les deux formes de système ce qui reste un grand avantage.
Qualités du code
Cette semaine, la règle 55 et 65 est vraiment appropriée pour le type de code à écrire puisqu’elle concerne la boucle while. Les règles 13, 36 à 38, 64 et 65 sont très importantes et on doit les respecter tôt en session.
Suivi logiciel
Le code développé pour résoudre ces deux problèmes devra être placé dans votre entrepôt Git. Les noms des fichiers et les répertoires où ils doivent être placés sont laissés à votre discrétion mais le plus naturel est de rester avec tp/tp3 évidemment. Si vous utiliser le simulateur SimulIDE (aucune obligation), le fichier avec l’extension .simu décrivant le matériel dans SimulIDE peut être placé dans ce répertoire également. On vous encourage à soumettre votre code (commit) souvent et non pas en une seule fois à la fin du TP. Vous aurez besoin de ce code plus tard dans la session.