Hoe gebruik ik Raspberry Pi 4B om PWM-signalen naar ESC te sturen om onderwatermotoren te besturen?
Geplaatst door Fengyukun op
Gebruik ESC: APISQUEEN 24V 100A ESC
100A ESC-instructiehandleiding: https://cdn.shopify.com/s/files/1/0621/5493/2452/files/100A.pdf?v=1700410535
1: Ontgrendel ESC
Het neutrale stopsignaal is het ontgrendelingssignaal
Bij gebruik van een 50 Hz signaal bedraagt de signaalperiode 20 ms.
Het percentage in de instructie verwijst naar het percentage van de PWM-besturingspulsbreedte, niet naar de werkelijke werkcyclus van het PWM-signaal (dit kan hier gemakkelijk verkeerd worden begrepen).
Het neutrale stopsignaal is dan:
75% inschakelduur, 7,5% werkelijke inschakelduur: 1,5 ms (1,475 ms ~ 1,525 ms);
import varken
Tijd importeren
PI = pigpio.PI() #Maak pigpio-object
LED_PIN = 18 #Definieer de GPIO-poort waarop de LED is aangesloten
PWM_FREQUENCY = 50 #Definieer PWM-frequentie (Hz)
PWM_bereik = 1000
Definieer de PWM-werkcyclus, het waardebereik is 0 (2) 55,
π. set_mode(LED_PIN, pigpio.OUTPUT) #Stel de GPIO-poort in op de uitvoermodus
π. set_PWM_frequency(LED_PIN, PWM_FREQUENCY) #PWM-frequentie instellen
π. set_PWM_range(LED_PIN, PWM_range) #Setbereik 1000
π. set_pwm_dutycycle (LED_PIN, 75) #Set PWM dutycycle 75/1000= 7,5%
Time.sleep(3) #Vertraging 3 seconden om succesvol te ontgrendelen
2. ESC-bediening
Inschakelduur 75%: Stop wanneer de werkelijke inschakelduur 7,5% ~ 1,5 ms is (tussen 1,475 ms ~ 1,525 ms);
Inschakelduur 50%-75%: werkelijke inschakelduur 5%-7,5%, 1 ms-1,5 ms omgekeerd;
Inschakelduur 100%: werkelijke inschakelduur 7,5%-10% 1,5 ms -2 ms vooruit
π. set_PWM_dutycycle (LED_PIN, 100)
#Vooruit: 7,5% ~ 10% Hoe hoger de inschakelduur, hoe hoger de voorwaartse snelheid.
tijd.slaap(15)
π. set_PWM_dutycycle (LED_PIN 60)
#Reverse: Hoe dichter de inschakelduur bij 5% ligt, hoe sneller de achteruitsnelheid is.
tijd.slaap(5)
π. set_PWM_dutycycle (LED_PIN, 75)
#arbeidscyclus
tijd.slaap(5)
3. Foutopsporing
Tijdens het debuggen kunt u een oscilloscoop gebruiken om te zien of de golfvorm correct is:
De onderstaande afbeelding is bijvoorbeeld het PWM-stopsignaal dat ik begon te verzenden.
De spanningsamplitude is 3,3 V, de periode is 20 ms en de werkelijke inschakelduur is 7,5%, allemaal correct.
Maar ik kan ESC nog steeds niet ontgrendelen omdat er te veel ruis en rommel in de golfvorm zit.
![](https://cdn.shopify.com/s/files/1/0621/5493/2452/files/5_0147a315-bab3-433b-8dde-186472c0ee31_1024x1024.png?v=1700411310)
In het begin gebruikte ik RPi. GPIO-bibliotheek, daarna gebruikte ik in plaats daarvan de pigpio-bibliotheek om een hardware-pwm-signaal te verzenden om het probleem op te lossen.
4. Voorbeeldcode:
import varken
Tijd importeren
PI = pigpio.PI() #Maak pigpio-object
LED_PIN = 18 #Definieer de GPIO-poort waarop de LED is aangesloten.
PWM_FREQUENCY = 50 #Definieer PWM-frequentie (Hz)
PWM_bereik = 1000
Definieer de PWM-werkcyclus, het waardebereik is 0 (2) 55,
π. set_mode(LED_PIN, pigpio.OUTPUT) #Stel de GPIO-poort in op de uitvoermodus
π. set_PWM_frequency(LED_PIN, PWM_FREQUENCY) #PWM-frequentie instellen
π. set_PWM_range(LED_PIN, PWM_range) #Setbereik 1000
π. set_pwm_dutycycle (LED_PIN, 75) #Set PWM dutycycle 75/1000= 7,5%
Time.sleep(3) #Vertraging 3 seconden om succesvol te ontgrendelen
π. set_PWM_dutycycle (LED_PIN, 100)
#Voorwaartse rotatie 7,5%-10% inschakelduur, hoe groter de inschakelduur, hoe sneller de voorwaartse snelheid
tijd.slaap(15)
π. set_PWM_dutycycle (LED_PIN 60)
Hoe dichter de inschakelduur bij 5% ligt, hoe sneller de omkeersnelheid is
tijd.slaap(5)
π. set_PWM_dutycycle (LED_PIN, 75)
#arbeidscyclus
tijd.slaap(5)
Deel dit bericht
- 0 reacties
- Tags: ESC
← Ouder bericht Nieuwer bericht →