encodeur_rotatif_a_effet_hall_pandauto_p3022_avec_puce_as5048a
Table des matières
Encodeur rotatif à Effet Hall Pandauto P3022 avec puce AS5048A
AS5048A de AWS
- 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
- 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.
Activation du SPI sur la Raspberry PI
Activation du SPI Aller dans Menu, Settings, Enable SPI, puis Vérifier si SPI est activé
Sketch Arduino pour AS5048A
- 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
#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); }
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 I2C. Compter 2 à 3 ms.
Capteur sur la Pi en SPI
Il est absolument nécessaire de brancher un adaptateur de tension entre la Pi (en 3.3V) et le capteur (en 5V).
""" 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 """
Sans print, le temps de récupération de la valeur est de 1.3 ms à 1 MHz et 1.2 ms à 3 MHz.
encodeur_rotatif_a_effet_hall_pandauto_p3022_avec_puce_as5048a.txt · Dernière modification : 2022/09/07 09:33 de serge