rotary_encoder_controller
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
rotary_encoder_controller [2022/06/10 06:31] – créée bigMax | rotary_encoder_controller [2022/06/30 20:44] (Version actuelle) – bigMax | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | < | + | ======Réalisation d' |
- | # Réalisation d' | + | <WRAP center round box 60% centeralign> |
+ | **{{tagpage> | ||
+ | </ | ||
+ | <WRAP center round box 60% centeralign> | ||
+ | **[[intelligence_artificielle|Intelligence Artificielle]]** | ||
+ | </ | ||
+ | |||
+ | <WRAP center round box 60% centeralign> | ||
+ | **{{tagpage> | ||
+ | </ | ||
+ | |||
+ | < | ||
## Objectif | ## Objectif | ||
Pour le pendule de Furuta, mesurer les positions angulaire des 2 axes est très important. Pour obtenir des mesures efficace des capteurs optiques, nous faisons le choix de réaliser un contrôleur avec un microcontrôleur esp32. | Pour le pendule de Furuta, mesurer les positions angulaire des 2 axes est très important. Pour obtenir des mesures efficace des capteurs optiques, nous faisons le choix de réaliser un contrôleur avec un microcontrôleur esp32. | ||
+ | |||
+ | ## Dépôt | ||
+ | [Url github du dépôt](https:// | ||
+ | Le projet est compatible avec les 2 IDE : | ||
+ | - Arduino IDE | ||
+ | - PlatformIO | ||
## Features | ## Features | ||
- | TODO | + | - Contrôle actuellement 2 capteurs |
+ | - Enregistre les périodes entre chaque événement en µs. | ||
+ | - Conserve une liste des périodes dont la taille est paramétrable. | ||
+ | - Communique les positions et vitesse via SPI avec un master. | ||
+ | - Vérification de l' | ||
- | ## Documentation SPI | ||
- | TODO | ||
- | ## Qu'est-ce qui fonctionne | + | ## Tests |
- | TODO | + | Construction d'un simulateur pour faire des tests : |
+ | - 1 Version tout intégré contrôleur + simulateur sur le même ESP32. | ||
+ | - 1 Version installé sur 2 ESP32 pour réaliser les tests de communication SPI et décorréler le code du simulateur et les interruptions du contrôleur. | ||
- | ## Qu' | + | Limitations: |
- | - Prendre en compte les " | + | - la génération |
- | - Paramétrer | + | |
- | - Vérifier si la capture des évenements | + | |
- | - Simplifier si possible la commande de timing du controller, en utilisant la pin d' | + | |
+ | ## Documentation de la communication SPI | ||
+ | ### Version initiale | ||
+ | La version initiale de la communication nécessite 2 dialogues SPI pour récupérer les informations du contrôleur : | ||
+ | - Le master envoie une commande " | ||
+ | - Le master attend un minimum de 100 µs pour que le contrôleur puisse construire la payload. | ||
+ | - Le master envoie une commande " | ||
+ | #### Commande | ||
+ | La commande timing comporte 4 Octets : | ||
+ | - 2 Octets CRC16 (CRC16 xmodem calculé sur les 2 octets suivants) | ||
+ | - 1 Octet " | ||
+ | - 1 Octet " | ||
+ | Ces 4 octets sont répétés 11 fois afin d' | ||
+ | Le marker reçu par le contrôleur sera retourné par le contrôleur dans la payload. De sorte que le master peut vérifier que la payload reçu correspond à sa dernière commande de timing. | ||
+ | |||
+ | #### Payload | ||
+ | La payload comporte 50 Octets : | ||
+ | - 2 Octets CRC16 (CRC16 xmodem calculé sur les 2 octets suivants) | ||
+ | - 1 Octet " | ||
+ | - 1 Octet " | ||
+ | - 2 Octets position capteur 1 (entier non signé sur 16 bits) | ||
+ | - 2 Octets position capteur 2 (entier non signé sur 16 bits) | ||
+ | - 2 Octets periode0 capteur 1 (entier non signé sur 16 bits) | ||
+ | - 2 Octets periode2 capteur 1 (entier non signé sur 16 bits) | ||
+ | - ... | ||
+ | - 2 Octets periode9 capteur 1 (entier non signé sur 16 bits) | ||
+ | - 2 Octets periode0 capteur 2 (entier non signé sur 16 bits) | ||
+ | - 2 Octets periode2 capteur 2 (entier non signé sur 16 bits) | ||
+ | - ... | ||
+ | - 2 Octets periode9 capteur 2 (entier non signé sur 16 bits) | ||
+ | - 2 Octets temps de construction de la payload (en 10zaine de µs) | ||
+ | |||
+ | Pour 2 capteurs avec 10 périodes par capteur, la payload mesure 4 + 2 x (2 + 2 x 10) + 2 = 50 Octets. | ||
+ | Le hash CRC16 est calculé sur les Octets 2 à 47. (Les octets 0-1 sont le CRC16 lui meme, les 2 derniers octets 48-49 ne sont pas utilisés). | ||
+ | |||
+ | ### Version " | ||
+ | Quelques modification sont introduites pour la version API puisque le nombre de Capteurs et de Périodes est paramétrable. | ||
+ | Seule la payload est modifiée. | ||
+ | |||
+ | #### Payload | ||
+ | La payload comporte un nombre d' | ||
+ | - 2 Octets CRC16 (CRC16 xmodem calculé sur les 2 octets suivants) | ||
+ | - 1 Octet " | ||
+ | - 1 Octet " | ||
+ | - 2 Octets position capteur 1 (entier non signé sur 16 bits) | ||
+ | - 2 Octets periode1 capteur 1 (entier non signé sur 16 bits) | ||
+ | - 2 Octets periode2 capteur 1 (entier non signé sur 16 bits) | ||
+ | - ... | ||
+ | - 2 Octets periodeN capteur 1 (entier non signé sur 16 bits) | ||
+ | - 2 Octets position capteur 2 (entier non signé sur 16 bits) | ||
+ | - 2 Octets periode1 capteur 2 (entier non signé sur 16 bits) | ||
+ | - 2 Octets periode2 capteur 2 (entier non signé sur 16 bits) | ||
+ | - ... | ||
+ | - 2 Octets periodeN capteur 2 (entier non signé sur 16 bits) | ||
+ | - 2 Octets temps de construction de la payload (en 10zaine de µs) | ||
+ | |||
+ | Pour 2 capteurs avec 10 périodes par capteur, la payload mesure 4 + 2 x (2 + 2 x 10) + 2 = 50 Octets. | ||
+ | Le hash CRC16 est calculé sur tous les Octets exceptés les 2 premiers et les 2 derniers. (Les 2 premiers octets sont le CRC16 lui même, Les 2 derniers octets ne sont pas utilisés, car ils contiennent le temps de construction de la payload, calcul du CRC16 compris). | ||
+ | |||
+ | ## Qu' | ||
+ | - Le comptage des événements | ||
+ | - Le calcul de la position | ||
+ | - Le paramétrage du nombre de points | ||
+ | - L' | ||
+ | - Le calcul des périodes | ||
+ | - Le stockage des périodes | ||
+ | - La communication SPI | ||
+ | - Le calcul des hash CRC16 en utilisant la variante xmodem | ||
+ | - API pour utiliser la lib (begin, ...) | ||
+ | - Le mode avec ou sans quadrature | ||
+ | |||
+ | ## Qu' | ||
+ | - Améliorer la performance des interruptions en rendant static le mode utilisé (quadrature ou non). | ||
+ | - Simplifier si possible la commande SPI de timing du controller, en utilisant la pin d' | ||
+ | - Allumer la led si la position est éloignée du 0 lors de l' | ||
+ | - Ajouter une commande pour définir un offset par rapport au 0. | ||
+ | - Ajouter un paramétrage pour définir la valeur minimum retourné. | ||
+ | - Ajouter un paramétrage pour définir le nombre de tour positif et négatif à retourner. | ||
</ | </ | ||
+ | |||
+ | {{tag> | ||
+ | }} |
rotary_encoder_controller.1654842694.txt.gz · Dernière modification : 2022/06/10 06:31 de bigMax