rotary_encoder_controller
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
rotary_encoder_controller [2022/06/12 09:57] – serge | 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> | <WRAP center round box 60% centeralign> | ||
**{{tagpage> | **{{tagpage> | ||
Ligne 18: | Ligne 18: | ||
## Dépôt | ## Dépôt | ||
[Url github du dépôt](https:// | [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. | ||
- | ## Version compatible avec ArduinoIDE | + | Limitations: |
- | - [github.com/ | + | - la génération des signaux de simulation sont interrompu lorsque l'on réalise les assertions |
- | ## Qu' | + | ## Documentation de la communication SPI |
- | - Prendre en compte | + | ### Version initiale |
- | - Paramétrer le mode de capture d’événement (simple ou quadratique) | + | La version initiale de la communication nécessite 2 dialogues SPI pour récupérer |
- | - Vérifier si la capture des évenements n'est pas buggé | + | - Le master envoie une commande " |
- | - Simplifier si possible la commande | + | - Le master attend un minimum |
+ | - 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> | + | {{tag> |
+ | }} |
rotary_encoder_controller.1655027861.txt.gz · Dernière modification : 2022/06/12 09:57 de serge