Outils pour utilisateurs

Outils du site


encodeur_rotatif_a_effet_hall_pandauto_p3022_avec_puce_as5048a

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
encodeur_rotatif_a_effet_hall_pandauto_p3022_avec_puce_as5048a [2022/09/05 13:41] – [Raspberry Pi] sergeencodeur_rotatif_a_effet_hall_pandauto_p3022_avec_puce_as5048a [2022/09/07 09:33] (Version actuelle) – [Encodeur rotatif à Effet Hall Pandauto P3022 avec puce AS5048A] serge
Ligne 4: Ligne 4:
 **Avec Communication en SPI** **Avec Communication en SPI**
 </WRAP> </WRAP>
 +{{ :media_16:2_codeurs_ok.png?600 |}}
 +=====AS5048A de AWS=====
 +  * **[[https://ams.com/as5048a|AS5048A High-Resolution Position Sensor 14-bit rotary position sensor with digital angle (interface) and PWM output]]** Sortie SPI et PWM.
  
 +  * 1 bit de parité
 +  * 1 bit error flag
 +  * 14 bits indiquant l'angle absolu sur 14 bits.\\
 +Lorsqu'on lit les données SPI dans les 2 octets, il y a donc les 6 derniers bits du premier octet à concaténé avec les 8 bits du second octet pour reconstituer le mot de 14 bits.\\
  
-=====ESP32===== +=====Ressources sur le SPI===== 
- +  * **[[https://fr.wikipedia.org/wiki/Serial_Peripheral_Interface|Serial Peripheral Interface]]** Une liaison SPI est un bus de données série synchrone baptisé ainsi par Motorola, au milieu des années 1980 qui opère en mode full-duplex. 
 +  * https://pinout.xyz/pinout/spi# 
 +  * **[[spi_documentation_1|]]** 
 +  * **[[communication_protocole_spi]]**
  
-====Branchement sur ESP32 et Com en SPI avec Raspi==== +====Activation du SPI sur la Raspberry PI====
-**Essais infructueux --> Abandon** +
- +
-{{:media_16:branchements_esp32.png?500|}}{{:media_16:com_spi_esp32_pi.png?400|}} +
- +
-===Activation du SPI===+
 [[https://www.raspberryme.com/activer-linterface-spi-sur-le-raspberry-pi/#Methode_2_-_Utilisation_de_la_Configuration_Raspberry_Pi|Activation du SPI]] Aller dans Menu, Settings, Enable SPI, puis [[https://www.raspberryme.com/activer-linterface-spi-sur-le-raspberry-pi/#Etape_2_-_Verifier_si_SPI_est_active_facultatif|Vérifier si SPI est activé]] [[https://www.raspberryme.com/activer-linterface-spi-sur-le-raspberry-pi/#Methode_2_-_Utilisation_de_la_Configuration_Raspberry_Pi|Activation du SPI]] Aller dans Menu, Settings, Enable SPI, puis [[https://www.raspberryme.com/activer-linterface-spi-sur-le-raspberry-pi/#Etape_2_-_Verifier_si_SPI_est_active_facultatif|Vérifier si SPI est activé]]
  
-===Ressources=== +=====Sketch Arduino pour AS5048A===== 
-  * **[[https://www.best-microcontroller-projects.com/rotary-encoder.html|best-microcontroller-projects.com]]** Rotary Encoder: Immediately Tame your Noisy Encoder! Find out how to Instantly Stop Switch Bounce using one of 2 software methods. Easily get Reliable Operation from your Encoder. +  * **[[https://github.com/ZoetropeLabs/AS5048A-Arduino|AS5048A-Arduino de ZoetropeLabs]]** La version originale pour Arduino 
-  * Voir la page dédiée: **[[rotary_encoder_controller]]** +  * **[[https://github.com/eborghi10/AS5048A]]** eborghi10 propose une version pour arduino et esp32
-=====Codeurs à Effet Hall de pandauto.com===== +
-**Ces codeurs sont construits sur une puce AS5048A**+
  
-==== ZoetropeLabs propose une lib pour Arduino====  +===Exemple pour Arduino UNO===
-  * **[[https://github.com/ZoetropeLabs/AS5048A-Arduino|AS5048A-Arduino de ZoetropeLabs]]** +
- +
-Télécharger le projet: aller dans le dossier AS5048A-Arduino-master/lib, compresser en zip le dossier AS5048A.\\ +
-Dans Arduino IDE, allez à Sketch --> Include Library --> Add ZIP Library --> ajouter le zip de AS5048A +
- +
-Exemple:+
  
 <code C++> <code C++>
Ligne 44: Ligne 40:
 </code> </code>
  
-====Ressources==== +===La lib a le cycle suivant=== 
-  * **[[https://fr.wikipedia.org/wiki/Serial_Peripheral_Interface|Serial Peripheral Interface]]** Une liaison SPI est un bus de données série synchrone baptisé ainsi par Motorola, au milieu des années 1980 qui opère en mode full-duplex+  * set à 0 du PIN Slave Select 
-  * https://pinout.xyz/pinout/spi# +  envoi de 0b1111111111111111 
-  * **[[spi_documentation_1|]]** +  lecture 
-  * **[[communication_protocole_spi]]** +  * set à 1 du PIN Slave Select 
-  * **[[https://fr.aliexpress.com/item/1005003038741007.html?gatewayAdapt=glo2fra&spm=a2g0o.order_detail.0.0.48537d56yRtx7c|aliexpress.com]]** Capteur d'angle Hall rotatifsortie de Communication SPI 0-360 degrés, alimentation 5V DC + 
-Doc probable pour le SPI du capteur à effet hall chinois [[https://fr.aliexpress.com/item/4001028228270.html | page aliexpress ]] +===Récupération de l'angle sur la Pi=== 
-Il semblerait que le circuit dans le coder est peut être celui-cicar le datagramme SPI est très similaire : [[ https://ams.com/documents/20143/36005/AS5048_DS000298_4-00.pdf/910aef1f-6cd3-cbda-9d09-41f152104832 | datasheet ]]\\ +Sur une UNO, le SPI est utilisé pour le capteur, la Pi doit récupérer les datas en [[communication_protocole_i2c|I2C]]. Compter 2 à 3 ms. 
-Il faudrait donc voircar pour lire une données théoriquement il faut envoyer une commande READ qui permet de recevoir simultanément la valeur au moment du READ précédent.\\ + 
-On devrait avoir 16 bits à lire :  + 
-bit de parité +=====Capteur sur la Pi en SPI===== 
-- 1 bit error flag +{{ :media_16:pandauto_sur_pi_exemple.png?300 |}} 
-- 14 bits indiquant l'angle absolue sur 14 bits.\\ + 
-Lorsqu'on lit les données SPI dans les 2 octets, il y a donc les 6 derniers bits du premier octet à concaténé avec les 8 bits du second octet pour reconstituer le mot de 14 bits.\\+Il est absolument nécessaire de brancher un adaptateur de tension entre la Pi (en 3.3V) et le capteur (en 5V)
 + 
 +{{ :media_16:pandauto_sur_pi.png?500 |}} 
 + 
 +  * **[[https://github.com/sergeLabo/furuta/tree/main/some_encoders/AS5048A/pandauto_on_pi_en_direct|pandauto_on_pi_en_direct]]** 
 + 
 +<code python> 
 + 
 +""" 
 +De Arduino en debug: 
 + 
 +Read (0x3FFF) with command: 0b1111111111111111 avec un transfert16 
 +Read returned: 1101110100001010 
 +Setting error bit 
 +3433 
 +Read (0x3FFF) with command: 0b1111111111111111 
 +Read returned: 101110100000111 
 +Setting error bit 
 +3432 
 + 
 +""" 
 + 
 +from time import time, sleep 
 +import pigpio 
 + 
 +CE 
 + 
 +pi pigpio.pi() 
 +sensor = pi.spi_open(0, 1000000, 1) 
 + 
 +dt = 0.00001 
 + 
 +pi.write(CE1) 
 +sleep(dt) 
 + 
 +t0 = time() 
 +n = -
 +nbr = 1000 
 +tempo = 0.03 
 +while n < nbr: 
 +    n += 1 
 +    pi.write(CE, 0) 
 +    sleep(dt) 
 + 
 +    c, d = pi.spi_xfer(sensor, int.to_bytes(655352, 'big')) 
 +    if c == 2: 
 +        val = (d[0] & 0b00111111) << 8 | d[1] 
 +        angle = int(val/4) 
 + 
 +    # #if n % 20 == 0: 
 +        # #print(angle) 
 + 
 +    pi.write(CE, 1) 
 + 
 +    sleep(tempo) 
 + 
 +pi.stop() 
 + 
 +periode = (((time() t0) / nbr) tempo)*1000  # ms 
 +print("periode =", round(periode2), "ms") 
 +sleep(1) 
 + 
 +""" 
 +periode = 1.9 ms 
 +il y a quelques incohérences dans les valeurs 
 + 
 +sans print 
 +periode = 1.3 ms 
 +periode = 1.19 ms 
 + 
 +""" 
 + 
 +</code> 
 + 
 +**Sans print, le temps de récupération de la valeur est de 1.3 ms à 1 MHz et 1.2 ms à 3 MHz.**
  
  
 {{tag>arduino raspberry_pi sb spi}} {{tag>arduino raspberry_pi sb spi}}
encodeur_rotatif_a_effet_hall_pandauto_p3022_avec_puce_as5048a.1662385310.txt.gz · Dernière modification : 2022/09/05 13:41 de serge