Comment puis-je utiliser un Raspberry Pi 4B pour envoyer des signaux PWM à un ESC afin de contrôler un propulseur sous-marin ?

Publié par Fengyukun le

Utiliser l'ESC : APISQUEEN 24V 100A ESC

Manuel d'utilisation de l'ESC 100A : https://cdn.shopify.com/s/files/1/0621/5493/2452/files/100A.pdf?v=1700410535

1 : Déverrouillage de l'ESC

Le signal d'arrêt neutre est le signal de déverrouillage de l'ESC
Utilisez un signal de 50 Hz avec une période de 20 ms.
Le pourcentage dans l'instruction se réfère au pourcentage de la largeur d'impulsion de contrôle PWM, et non au cycle de service réel du signal PWM (il est facile de se méprendre ici).
Le signal d'arrêt neutre est donc le suivant
75 % de rapport cyclique, 7,5 % de rapport cyclique réel : 1,5 ms (entre 1,475 ms et 1,525 ms) ;

Importation du piggyback
Importer le temps

pi = pigpio.pi() #créer un objet pigpio
LED_PIN = 18 #définir le port GPIO pour la connexion de la LED
PWM_FREQUENCY = 50 #définit la fréquence PWM en Hz
PWM_RANGE = 1000
PWM_DUTYCYCLE = 0 # Définit le cycle de travail PWM en 0 (2) 55, # Définit la fréquence PWM en Hz.
pi.set_mode(LED_PIN, pigpio.OUTPUT) # met le port GPIO en mode sortie
pi.set_PWM_Frequency(LED_PIN, PWM_FREQUENCY) # définit la fréquence PWM
pi.set_PWM_range(LED_PIN, PWM_range) # règle la plage 1000

pi.set_PWM_dutycycle(LED_PIN, 75) # règle le cycle de travail PWM 75/1000=7.5 pour cent
time.sleep(3) # Délai de 3s pour déverrouiller avec succès.

2. contrôle de l'ESC

Cycle de travail 75% : cycle de travail réel 7.5%-1.5ms (entre 1.475ms et 1.525ms) Stop ;
Cycle de travail 50%-75% : cycle de travail réel 5%-7,5%, inversion 1ms-1,5ms ;
Cycle de service 100% : cycle de service réel 7,5%-10% 1,5 ms -2ms en marche avant

pi.set_PWM_dutycycle(LED_PIN, 100)
# Marche avant : 7,5%-10% Plus le rapport cyclique est élevé, plus la vitesse de marche avant est rapide.
Durée. Sleep(15)

pi.set_PWM_dutycycle(LED_PIN, 60)
# Inversion : plus le rapport cyclique est proche de 5%, plus l'inversion est rapide.
Durée. Sleep(5)

pi.set_PWM_dutycycle(LED_PIN, 75)
# Cycle de service
Durée. Sleep(5)

3, débogage


Le processus de débogage peut utiliser un oscilloscope pour voir si la forme d'onde est correcte :
Par exemple, la figure suivante représente le signal d'arrêt PWM que j'ai commencé à envoyer.
L'amplitude de la tension est de 3,3 V, la période est de 20 ms et le rapport cyclique réel est de 7,5 %, ce qui est correct.
Mais je ne pouvais toujours pas déverrouiller l'ESC parce qu'il y avait trop de bruit et de parasites dans la forme d'onde.

J'ai d'abord utilisé la bibliothèque RPi.GPIO, puis je l'ai remplacée par la bibliothèque pigpio pour envoyer des signaux pwm matériels afin de résoudre le problème.

4. exemple de code :


Importer pigpio
Importer le temps

pi = pigpio.pi() # créer l'objet pigpio
LED_PIN = 18 # Définir le port GPIO auquel la LED est connectée.
PWM_FREQUENCY = 50 # Définit la fréquence PWM en Hz
Plage de modulation de largeur d'impulsion = 1000
PWM_DUTYCYCLE = 0 # Définit le rapport cyclique PWM en 0 (2) 55, # Définit le rapport cyclique PWM en 0 (2) 55, # Définit la fréquence PWM en Hz.
pi.set_mode(LED_PIN, pigpio.OUTPUT) # met le port GPIO en mode sortie
pi.set_PWM_Frequency(LED_PIN, PWM_FREQUENCY) # définit la fréquence PWM
pi.set_PWM_range(LED_PIN, PWM_range) # règle la plage 1000



pi.set_PWM_dutycycle(LED_PIN, 75) # règle le cycle de travail PWM 75/1000=7.5%
time.sleep(3) # Délai de 3s pour déverrouiller avec succès

pi.set_PWM_dutycycle(LED_PIN, 100)
# cycle de travail positif 7.5%-10%, plus le cycle de travail est grand, plus la vitesse de rotation positive est rapide
Temps. Sleep(15)

pi.set_PWM_dutycycle(LED_PIN, 60)
# Inverse Plus le rapport cyclique est proche de 5%, plus l'inversion est rapide
Temps. Sleep(5)

pi.set_PWM_dutycycle(LED_PIN, 75)
# Cycle d'utilisation
Temps. Sleep(5)


Partager ce message



← Message plus ancien Message plus récent →


Laisser un commentaire