Outils pour utilisateurs

Outils du site


rotary_encoder_controller

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
rotary_encoder_controller [2022/06/22 07:38] – [Documentation de la communication SPI] bigMaxrotary_encoder_controller [2022/06/30 22:44] (Version actuelle) bigMax
Ligne 1: Ligne 1:
-======Réalisation d'un controller pour capteur de position angulaire optique======+======Réalisation d'un controleur pour capteur de position angulaire optique======
 <WRAP center round box 60% centeralign> <WRAP center round box 60% centeralign>
 **{{tagpage>petit_pendule_furuta|Toutes les pages sur le Petit Pendule de Furuta}}** **{{tagpage>petit_pendule_furuta|Toutes les pages sur le Petit Pendule de Furuta}}**
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'intégrité des messages SPI avec CRC16.
  
  
 ## Tests ## Tests
 Construction d'un simulateur pour faire des tests : Construction d'un simulateur pour faire des tests :
-- 1 Version tout intégré contrôler + simulateur sur le même ESP32. +- 1 Version tout intégré contrôleur + simulateur sur le même ESP32. 
-- 1 Version installé sur 2 ESP32 pour intégrer les tests de communication SPI.+- 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.
  
 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 "Timing" pour que le contrôleur prenne  une "photo instantanée" des capteurs et construise la payload à envoyer. 
 +- Le master attend un minimum de 100 µs pour que le contrôleur puisse construire la payload.  
 +- Le master envoie une commande "Read" pour recevoir les données des capteurs. 
 + 
 +#### Commande 
 +La commande timing comporte 4 Octets : 
 +- 2 Octets CRC16 (CRC16 xmodem calculé sur les 2 octets suivants) 
 +- 1 Octet "Marker" (valeur = 0 - 255)  
 +- 1 Octet "Commande" (valeur = 5 pour "Timing" ; 42 pour "Read"
 +Ces 4 octets sont répétés 11 fois afin d'augmenter la probabilité que le contrôleur reçoive un message non corrompu. 
 +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 "Marker" (valeur = 0 - 255)  
 +- 1 Octet "Header" (non utilisé pour le moment) 
 +- 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 "API" 
 +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'octets variable, fonction du nombre de capteur et du nombre de périodes stoquées par capteur : 
 +- 2 Octets CRC16 (CRC16 xmodem calculé sur les 2 octets suivants) 
 +- 1 Octet "Marker" (valeur = 0 - 255)  
 +- 1 Octet "Header" (non utilisé pour le moment) 
 +- 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'est-ce qui fonctionne ## Qu'est-ce qui fonctionne
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, ...)
 +- Le mode avec ou sans quadrature
  
 ## Qu'est-ce qui reste à faire ## Qu'est-ce qui reste à faire
-- 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'activation (SS) du SPI si possible. - Simplifier si possible la commande SPI de timing du controller, en utilisant la pin d'activation (SS) du SPI si possible.
- +- Allumer la led si la position est éloignée du 0 lors de l'event index. 
-## Ancienne version adapté par Serge pour Arduino IDE +- Ajouter une commande pour définir un offset par rapport au 0. 
-[github.com/sergeLabo furuta_pi rotary_encoder](https://github.com/sergeLabo/furuta_pi/tree/main/Arduino)+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.
  
 </markdown> </markdown>
rotary_encoder_controller.1655876327.txt.gz · Dernière modification : 2022/06/22 07:38 de bigMax