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/12 09:57] sergerotary_encoder_controller [2022/06/30 20: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 18: Ligne 18:
 ## Dépôt ## Dépôt
 [Url github du dépôt](https://github.com/mxbossard/furuta) [Url github du dépôt](https://github.com/mxbossard/furuta)
 +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'intégrité des messages SPI avec CRC16.
  
-## 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/sergeLabo furuta_pi rotary_encoder](https://github.com/sergeLabo/furuta_pi/tree/main/Arduino)+la génération des signaux de simulation sont interrompu lorsque l'on réalise les assertions le test n'est pas complètement dynamique.
  
-## Qu'est-ce qui reste à faire +## Documentation de la communication SPI 
-- Prendre en compte les "événements simple" des capteurs (et réduire leur résolution d'un facteur 4) pour augmenter la fiabilité du contrôleur+### 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 les informations du contrôleur : 
-- Vérifier si la capture des évenements n'est pas buggé +- Le master envoie une commande "Timing" pour que le contrôleur prenne  une "photo instantanée" des capteurs et construise la payload à envoyer
-Simplifier si possible la commande de timing du controller, en utilisant la pin d'activation (SS) du SPI si possible.+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
 +- Le comptage des événements
 +- Le calcul de la position
 +- Le paramétrage du nombre de points
 +- L'activation/désactivation du mode quadrature
 +- 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'est-ce qui reste à faire
 +- 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'activation (SS) du SPI si possible.
 +- Allumer la led si la position est éloignée du 0 lors de l'event index.
 +- 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.
  
 </markdown> </markdown>
  
-{{tag>communication petit_pendule_furuta}}+{{tag>communication petit_pendule_furuta 
 +}}
rotary_encoder_controller.1655027861.txt.gz · Dernière modification : 2022/06/12 09:57 de serge