Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
|
fr:informatics:lire_les_codeurs [25/08/2024 13:07] Keuronde créée |
fr:informatics:lire_les_codeurs [29/01/2025 10:52] (Version actuelle) Keuronde [Débogage] |
||
|---|---|---|---|
| Ligne 11: | Ligne 11: | ||
| Les codeurs relatifs sont des capteurs qui mesurent un déplacement. Ils émettent une impulsion à chaque fois qu’une distance connue est parcourue. En comptant les impulsions renvoyées, nous calculons la distance parcourue. C’est le premier principe de ces capteurs. | Les codeurs relatifs sont des capteurs qui mesurent un déplacement. Ils émettent une impulsion à chaque fois qu’une distance connue est parcourue. En comptant les impulsions renvoyées, nous calculons la distance parcourue. C’est le premier principe de ces capteurs. | ||
| - | Le second principe consiste à doubler le dispositif de détection pour obtenir un second signal décalé | + | {{ : |
| - | #IMG – Signaux des codeurs | + | Le second principe consiste à doubler le dispositif de détection pour obtenir un second signal décalé |
| + | {{ : | ||
| - | Nous pouvons formuler ceci de deux façons : | + | Voici en détail ce qui se passe au niveau des deux capteurs : |
| - | - Lors d’un front sur une voie, la valeur de l’autre voie indique le sens de déplacement | + | {{ : |
| - | - Considérons que les valeurs des deux voies forment un état C1C2, dans notre exemple, les transitions 11 → 01, 01 → 00, 00 → 10, 10 → 11 indiquent un déplacement positif tandis que les transitions 11 → 10, 10 → 00, 00 → 01, 01 → 11 indiquent un déplacement négatif. Les transitions 00 ↔ 11 et 10 ↔ 01 Montrent qu’un état a été raté et nous ne pouvons pas conclure sur le sens du déplacement. | + | |
| + | La combinaison des deux signaux permet de déduire le sens de rotation de déplacement. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Nous pouvons formuler ceci de deux façons : | ||
| + | * Lors d’un front sur une voie, la valeur de l’autre voie indique le sens de déplacement | ||
| + | * Considérons que les valeurs des deux voies forment un état C1C2, dans notre exemple, les transitions 11 → 01, 01 → 00, 00 → 10, 10 → 11 indiquent un déplacement positif tandis que les transitions 11 → 10, 10 → 00, 00 → 01, 01 → 11 indiquent un déplacement négatif. Les transitions 00 ↔ 11 et 10 ↔ 01 Montrent qu’un état a été raté et nous ne pouvons pas conclure sur le sens du déplacement. | ||
| Les deux formulations sont équivalentes. La première est peut-être plus intuitive, la seconde plus facile à coder. | Les deux formulations sont équivalentes. La première est peut-être plus intuitive, la seconde plus facile à coder. | ||
| Ligne 29: | Ligne 36: | ||
| Dans les bonnes solutions, vous utilisez un composant externe spécial, nommé parfois Quadrature Counter, qui décode ces signaux et qui communiquera en I2C ou SPI avec votre microcontrôleur. Ou mieux, vous avez un microcontrôleur qui intègre un module de décodage de signaux en quadrature (QEI), de la même manière qu’il intègre un module PWM. | Dans les bonnes solutions, vous utilisez un composant externe spécial, nommé parfois Quadrature Counter, qui décode ces signaux et qui communiquera en I2C ou SPI avec votre microcontrôleur. Ou mieux, vous avez un microcontrôleur qui intègre un module de décodage de signaux en quadrature (QEI), de la même manière qu’il intègre un module PWM. | ||
| - | Est-ce que le RP2040 intègre un tel module ? Non, mais il dispose de PIO – comme des mini-cœurs annexes – qui peuvent reproduire des modules QEI, sans impacter les performances du cœur principal. Nous utiliserons l’exemple fourni par la Raspberry Pi Fondation comme base pour notre code. | + | Est-ce que le RP2040 intègre un tel module ? Non, mais il dispose de PIO – comme des mini-cœurs annexes – qui peuvent reproduire des modules QEI, sans impacter les performances du cœur principal. Nous utiliserons |
| + | |||
| + | Et sinon ? Si vous utiliser des ESP32, ils sont presque tous équipés de modules [[https:// | ||
| ===== Structure du code ===== | ===== Structure du code ===== | ||
| Ligne 47: | Ligne 56: | ||
| Plus vous appelez QEI_update() fréquemment, | Plus vous appelez QEI_update() fréquemment, | ||
| + | |||
| + | //Note// : envoyer les données du microcontrôleur à l’ordinateur prend du temps, parfois plus d’une milliseconde. Notre code en exemple montre les effets du temps d’acquisition sur la résolution, | ||
| + | |||
| + | Vous devriez obtenir ce type de graphique où le lien de dérivation entre la position et la vitesse est clairement identifiable. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | L' | ||
| + | |||
| + | {{ : | ||
| C'est le moment de calibrer votre facteur de conversion entre les pas du codeur et la distance parcourue par la roue en millimètre ! | C'est le moment de calibrer votre facteur de conversion entre les pas du codeur et la distance parcourue par la roue en millimètre ! | ||
| + | |||
| + | Le code est disponible sur la [[https:// | ||
| ==== Spécificités du RP2040 ==== | ==== Spécificités du RP2040 ==== | ||
| Ligne 54: | Ligne 75: | ||
| Avec le RP2040, vous devrez modifier votre fichier CMakeLists.txt pour que votre code compile ! | Avec le RP2040, vous devrez modifier votre fichier CMakeLists.txt pour que votre code compile ! | ||
| - | # Fournir les modifications | + | Vous devez rajouter cette ligne pour générer |
| - | + | ||
| - | Vous devriez obtenir ce type de graphique où le lien de dérivation entre la position et la vitesse est clairement identifiable | + | |
| - | #IMG Capture Teleplot | + | pico_generate_pio_header(PAMI_Cours_Codeurs ${CMAKE_CURRENT_LIST_DIR}/ |
| ===== Débogage ===== | ===== Débogage ===== | ||
| Si vos valeurs restent à 0 : | Si vos valeurs restent à 0 : | ||
| - | * Vérifier la bonne connexion de vos codeurs (voir Mise en route d’un | + | * Vérifier la bonne connexion de vos codeurs (voir [[fr: |
| * Assurez-vous d’avoir bien initialisé le module | * Assurez-vous d’avoir bien initialisé le module | ||
| * Envoyez directement le retour de la fonction qui lit le module QEI. C’est // | * Envoyez directement le retour de la fonction qui lit le module QEI. C’est // | ||
| * Vérifiez la concordance des types dans vos envois de données, surtout si vous utilisez //printf//. | * Vérifiez la concordance des types dans vos envois de données, surtout si vous utilisez //printf//. | ||