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

Prochaine révision
Révision précédente
encodeur_rotatif_a_effet_hall_pandauto_p3022_avec_puce_as5048a [2022/09/05 07:51] – créée 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 1: Ligne 1:
 ====== Encodeur rotatif à Effet Hall Pandauto P3022 avec puce AS5048A ====== ====== Encodeur rotatif à Effet Hall Pandauto P3022 avec puce AS5048A ======
  
 +<WRAP center round box 60% centeralign>
 +**Avec Communication en SPI**
 +</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.\\
 +
 +=====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]]**
 +
 +====Activation du SPI sur la Raspberry PI====
 +[[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é]]
 +
 +=====Sketch Arduino pour AS5048A=====
 +  * **[[https://github.com/ZoetropeLabs/AS5048A-Arduino|AS5048A-Arduino de ZoetropeLabs]]** La version originale pour Arduino
 +  * **[[https://github.com/eborghi10/AS5048A]]** eborghi10 propose une version pour arduino et esp32
 +
 +===Exemple pour Arduino UNO===
 +
 +<code C++>
 +#include <AS5048A.h>
 +AS5048A angleSensor(10);
 +void setup()
 +{       Serial.begin(115200);
 + angleSensor.init();      }
 +void loop()
 +{       delay(10);
 + word val = angleSensor.getRawRotation();
 +        Serial.println(val, DEC);                }
 +</code>
 +
 +===La lib a le cycle suivant===
 +  * set à 0 du PIN Slave Select
 +  * envoi de 0b1111111111111111
 +  * lecture
 +  * set à 1 du PIN Slave Select
 +
 +===Récupération de l'angle sur la Pi===
 +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.
 +
 +
 +=====Capteur sur la Pi en SPI=====
 +{{ :media_16:pandauto_sur_pi_exemple.png?300 |}}
 +
 +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 = 8
 +
 +pi = pigpio.pi()
 +sensor = pi.spi_open(0, 1000000, 1)
 +
 +dt = 0.00001
 +
 +pi.write(CE, 1)
 +sleep(dt)
 +
 +t0 = time()
 +n = -1
 +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(65535, 2, '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(periode, 2), "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}}
encodeur_rotatif_a_effet_hall_pandauto_p3022_avec_puce_as5048a.1662364272.txt.gz · Dernière modification : 2022/09/05 07:51 de serge