Hur kan jag använda en Raspberry Pi 4B för att skicka PWM-signaler till en ESC för att styra en undervattenstruster?
Postat av Fengyukun på
Använd ESC: APISQUEEN 24V 100A ESC
100A ESC bruksanvisning: https://cdn.shopify.com/s/files/1/0621/5493/2452/files/100A.pdf?v=1700410535
1: Lås upp ESC
Den neutrala stoppsignalen är dess upplåsningssignal
Använd en 50Hz-signal med en signalperiod på 20ms.
Procentandelen i instruktionen hänvisar till procentandelen av PWM-styrpulsbredden, inte PWM-signalens faktiska arbetscykel (det är lätt att missförstå här).
Då är nollstoppsignalen:
75 % arbetscykel, 7,5 % faktisk arbetscykel: 1,5 ms (mellan 1,475 ms och 1,525 ms);
Importera piggy
Importtid
pi = pigpio.pi() #Skapa pigpio-objekt
LED_PIN = 18 #Definiera GPIO-porten som lysdioden är ansluten till
PWM_FREQUENCY = 50 #Definiera PWM-frekvens i Hz
Pulsbreddsmoduleringsområde = 1000
PWM_DUTYCYCLE = 0 # Definiera PWM-driftcykel, värdeområde 0 (2) 55,
pi.set_mode(LED_PIN, pigpio.OUTPUT) #Ställ in GPIO-porten på utgångsläge
pi.set_PWM_Frequency(LED_PIN, PWM_FREQUENCY) #Ställ in PWM-frekvens
pi.set_PWM_range(LED_PIN, PWM_range) # Ställ in intervall 1000
pi.set_PWM_dutycycle(LED_PIN, 75) #Set PWM duty cycle 75/1000=7,5%
time.sleep(3) # Fördröj 3s för att låsa upp framgångsrikt
2. Styr ESC
Arbetscykel 75 %: Faktisk arbetscykel 7,5 %-1,5 ms (mellan 1,475 ms och 1,525 ms) Stopp;
Driftcykel 50%-75%: faktisk driftcykel 5%-7,5%, omvänd 1ms-1,5ms;
Arbetscykel 100 %: faktisk arbetscykel 7,5 %-10 % framåt 1,5 ms -2 ms
pi.set_PWM_dutycycle(LED_PIN, 100)
# Framåt: 7,5%-10% Ju högre arbetscykel, desto snabbare framåt.
time.sleep(15)
pi.set_PWM_dutycycle(LED_PIN, 60)
#Reversering: Ju närmare arbetscykeln är 5 %, desto snabbare blir reverseringshastigheten
time.sleep(5)
pi.set_PWM_dutycycle(LED_PIN, 75)
#Arbetscykel
time.sleep(5)
3. Felsökning
Under felsökning kan du använda ett oscilloskop för att kontrollera om vågformen är korrekt:
Till exempel är bilden nedan PWM-stoppsignalen jag började skicka.
Spänningsamplituden är 3,3V, perioden är 20ms, och den faktiska arbetscykeln är 7,5%, vilket är korrekt.
Men jag kunde fortfarande inte låsa upp ESC eftersom det var för mycket brus och skräp i vågformen.
Först använde jag RPi.GPIO-biblioteket, sedan ersatte jag det med pigpio-biblioteket för att skicka hårdvaru-pwm-signal för att lösa problemet.
4. Exempelkod:
Importera piggy
Importtid
pi = pigpio.pi() #Skapa pigpio-objekt
LED_PIN = 18 # Definiera GPIO-porten som lysdioden är ansluten till.
PWM_FREQUENCY = 50 #Definiera PWM-frekvens i Hz
Pulsbreddsmoduleringsområde = 1000
PWM_DUTYCYCLE = 0 # Definiera PWM-driftcykel, värdeområde 0 (2) 55,
pi.set_mode(LED_PIN, pigpio.OUTPUT) #Ställ in GPIO-porten på utgångsläge
pi.set_PWM_Frequency(LED_PIN, PWM_FREQUENCY) #Ställ in PWM-frekvens
pi.set_PWM_range(LED_PIN, PWM_range) # Ställ in intervall 1000
pi.set_PWM_dutycycle(LED_PIN, 75) #Set PWM duty cycle 75/1000=7,5%
time.sleep(3) # Fördröj 3s för att låsa upp framgångsrikt
pi.set_PWM_dutycycle(LED_PIN, 100)
#Framåtrotation 7,5%-10% arbetscykel, ju större arbetscykel, desto snabbare framåtrotationshastighet
time.sleep(15)
pi.set_PWM_dutycycle(LED_PIN, 60)
# Reversering Ju närmare arbetscykeln är 5 %, desto snabbare blir reverseringshastigheten
time.sleep(5)
pi.set_PWM_dutycycle(LED_PIN, 75)
#Arbetscykel
time.sleep(5)
100A ESC bruksanvisning: https://cdn.shopify.com/s/files/1/0621/5493/2452/files/100A.pdf?v=1700410535
1: Lås upp ESC
Den neutrala stoppsignalen är dess upplåsningssignal
Använd en 50Hz-signal med en signalperiod på 20ms.
Procentandelen i instruktionen hänvisar till procentandelen av PWM-styrpulsbredden, inte PWM-signalens faktiska arbetscykel (det är lätt att missförstå här).
Då är nollstoppsignalen:
75 % arbetscykel, 7,5 % faktisk arbetscykel: 1,5 ms (mellan 1,475 ms och 1,525 ms);
Importera piggy
Importtid
pi = pigpio.pi() #Skapa pigpio-objekt
LED_PIN = 18 #Definiera GPIO-porten som lysdioden är ansluten till
PWM_FREQUENCY = 50 #Definiera PWM-frekvens i Hz
Pulsbreddsmoduleringsområde = 1000
PWM_DUTYCYCLE = 0 # Definiera PWM-driftcykel, värdeområde 0 (2) 55,
pi.set_mode(LED_PIN, pigpio.OUTPUT) #Ställ in GPIO-porten på utgångsläge
pi.set_PWM_Frequency(LED_PIN, PWM_FREQUENCY) #Ställ in PWM-frekvens
pi.set_PWM_range(LED_PIN, PWM_range) # Ställ in intervall 1000
pi.set_PWM_dutycycle(LED_PIN, 75) #Set PWM duty cycle 75/1000=7,5%
time.sleep(3) # Fördröj 3s för att låsa upp framgångsrikt
2. Styr ESC
Arbetscykel 75 %: Faktisk arbetscykel 7,5 %-1,5 ms (mellan 1,475 ms och 1,525 ms) Stopp;
Driftcykel 50%-75%: faktisk driftcykel 5%-7,5%, omvänd 1ms-1,5ms;
Arbetscykel 100 %: faktisk arbetscykel 7,5 %-10 % framåt 1,5 ms -2 ms
pi.set_PWM_dutycycle(LED_PIN, 100)
# Framåt: 7,5%-10% Ju högre arbetscykel, desto snabbare framåt.
time.sleep(15)
pi.set_PWM_dutycycle(LED_PIN, 60)
#Reversering: Ju närmare arbetscykeln är 5 %, desto snabbare blir reverseringshastigheten
time.sleep(5)
pi.set_PWM_dutycycle(LED_PIN, 75)
#Arbetscykel
time.sleep(5)
3. Felsökning
Under felsökning kan du använda ett oscilloskop för att kontrollera om vågformen är korrekt:
Till exempel är bilden nedan PWM-stoppsignalen jag började skicka.
Spänningsamplituden är 3,3V, perioden är 20ms, och den faktiska arbetscykeln är 7,5%, vilket är korrekt.
Men jag kunde fortfarande inte låsa upp ESC eftersom det var för mycket brus och skräp i vågformen.
Först använde jag RPi.GPIO-biblioteket, sedan ersatte jag det med pigpio-biblioteket för att skicka hårdvaru-pwm-signal för att lösa problemet.
4. Exempelkod:
Importera piggy
Importtid
pi = pigpio.pi() #Skapa pigpio-objekt
LED_PIN = 18 # Definiera GPIO-porten som lysdioden är ansluten till.
PWM_FREQUENCY = 50 #Definiera PWM-frekvens i Hz
Pulsbreddsmoduleringsområde = 1000
PWM_DUTYCYCLE = 0 # Definiera PWM-driftcykel, värdeområde 0 (2) 55,
pi.set_mode(LED_PIN, pigpio.OUTPUT) #Ställ in GPIO-porten på utgångsläge
pi.set_PWM_Frequency(LED_PIN, PWM_FREQUENCY) #Ställ in PWM-frekvens
pi.set_PWM_range(LED_PIN, PWM_range) # Ställ in intervall 1000
pi.set_PWM_dutycycle(LED_PIN, 75) #Set PWM duty cycle 75/1000=7,5%
time.sleep(3) # Fördröj 3s för att låsa upp framgångsrikt
pi.set_PWM_dutycycle(LED_PIN, 100)
#Framåtrotation 7,5%-10% arbetscykel, ju större arbetscykel, desto snabbare framåtrotationshastighet
time.sleep(15)
pi.set_PWM_dutycycle(LED_PIN, 60)
# Reversering Ju närmare arbetscykeln är 5 %, desto snabbare blir reverseringshastigheten
time.sleep(5)
pi.set_PWM_dutycycle(LED_PIN, 75)
#Arbetscykel
time.sleep(5)
Dela det här inlägget
- 0 kommentarer
- Taggar: ESC