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édenteDernière révisionLes deux révisions suivantes | ||
rotary_encoder_controller [2022/06/22 05:38] – [Documentation de la communication SPI] bigMax | rotary_encoder_controller [2022/06/30 14:07] – serge | ||
---|---|---|---|
Ligne 27: | Ligne 27: | ||
- Conserve une liste des périodes dont la taille est paramétrable. | - Conserve une liste des périodes dont la taille est paramétrable. | ||
- Communique les positions et vitesse via SPI avec un master. | - Communique les positions et vitesse via SPI avec un master. | ||
+ | - Vérification de l' | ||
## Tests | ## Tests | ||
Construction d'un simulateur pour faire des tests : | Construction d'un simulateur pour faire des tests : | ||
- | - 1 Version tout intégré | + | - 1 Version tout intégré |
- | - 1 Version installé sur 2 ESP32 pour intégrer | + | - 1 Version installé sur 2 ESP32 pour réaliser |
Limitations: | Limitations: | ||
Ligne 38: | Ligne 39: | ||
## Documentation de la communication SPI | ## Documentation de la communication SPI | ||
- | TODO | + | ### 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' | ## Qu' | ||
Ligne 48: | Ligne 105: | ||
- Le stockage des périodes | - Le stockage des périodes | ||
- La communication SPI | - La communication SPI | ||
+ | - Le calcul des hash CRC16 en utilisant la variante xmodem | ||
+ | - API pour utiliser la lib (begin, ...) | ||
## Qu' | ## Qu' | ||
- Tester le mode quadrature désactivé | - Tester le mode quadrature désactivé | ||
- Améliorer la performance des interruptions en rendant static le mode utilisé (quadrature ou non). | - Améliorer la performance des interruptions en rendant static le mode utilisé (quadrature ou non). | ||
- | - Fournir une api (avec un begin(...), ...) pour manipuler un sensor. | ||
- Simplifier si possible la commande SPI de timing du controller, en utilisant la pin d' | - Simplifier si possible la commande SPI de timing du controller, en utilisant la pin d' | ||
- | |||
- | ## Ancienne version adapté par Serge pour Arduino IDE | ||
- | - [github.com/ | ||
</ | </ |
rotary_encoder_controller.txt · Dernière modification : 2022/06/30 20:44 de bigMax