Como posso usar um Raspberry Pi 4B para enviar um sinal PWM a um ESC para controlar um propulsor subaquático?

Postado por Fengyukun em

Uso de ESC: APISQUEEN 24V 100A ESC

Manual de instruções 100A ESC: https://cdn.shopify.com/s/files/1/0621/5493/2452/files/100A.pdf?v=1700410535

1: Desbloquear ESC

O sinal de parada neutro é o seu sinal de desbloqueio
Usando um sinal de 50 Hz, o período do sinal é de 20 ms.
A porcentagem nas instruções refere-se à porcentagem da largura do pulso de controle PWM, não ao ciclo de trabalho real do sinal PWM (é fácil entender mal aqui).
Então o sinal de parada neutro é:
Ciclo de trabalho de 75%, ciclo de trabalho real de 7,5%: 1,5 ms (entre 1,475 ms e 1,525 ms);

importar pigpio
hora de importação

pi = pigpio.pi() #criar objeto pigpio
LED_PIN = 18 #define a porta GPIO à qual o LED está conectado
PWM_FREQUENCY = 50 #define a frequência PWM em Hz
Faixa_PWM = 1000
PWM_DUTYCYCLE = 0 # Define o ciclo de trabalho PWM, faixa de valores 0 (2) 55,
pi.set_mode(LED_PIN, pigpio.OUTPUT) #Define a porta GPIO para modo de saída
pi.set_PWM_frequency(LED_PIN, PWM_FREQUENCY) #definir frequência PWM
pi.set_PWM_range(LED_PIN, PWM_range) # definir intervalo 1000

pi.set_PWM_dutycycle(LED_PIN, 75) # define o ciclo de trabalho PWM 75/1000 = 7,5 por cento
time.sleep(3) # atraso de 3s no desbloqueio com sucesso

2. Controle ESC

Ciclo de trabalho 75%:Ciclo de trabalho real 7,5%-1,5ms (entre 1,475ms e 1,525ms) Parada;
Ciclo de trabalho 50%-75%: ciclo de trabalho real 5%-7,5%, 1ms-1,5ms reverso;
Ciclo de trabalho 100%: ciclo de trabalho real 7,5% -10% 1,5 ms -2 ms adiante

pi.set_PWM_dutycycle(LED_PIN, 100)
# Avançar: 7,5% -10% Quanto maior o ciclo de trabalho, mais rápida será a velocidade de avanço.
hora.sono(15)

pi.set_PWM_dutycycle(LED_PIN, 60)
# Reverso: quanto mais próximo o ciclo de trabalho estiver de 5%, mais rápida será a velocidade reversa
hora.sono(5)

pi.set_PWM_dutycycle(LED_PIN, 75)
# Ciclo de trabalho
hora.sono(5)

3. Depuração


Durante o processo de depuração você pode usar um osciloscópio para ver se a forma de onda está correta:
Por exemplo, a figura a seguir é o sinal de parada PWM que comecei a enviar.
A amplitude da tensão é de 3,3 V, o período é de 20 ms e o ciclo de trabalho real é de 7,5%, todos corretos.
Mas ainda não consigo desbloquear o ESC porque há muito ruído e confusão na forma de onda.

No início usei a biblioteca RPi.GPIO, depois substituí-a pela biblioteca pigpio para enviar sinais pwm de hardware para resolver o problema.

4. Código de exemplo:


importar pigpio
hora de importação

pi = pigpio.pi() #criar objeto pigpio
LED_PIN = 18 # Define a porta GPIO à qual o LED está conectado.
PWM_FREQUENCY = 50 #define a frequência PWM em Hz
Faixa_PWM = 1000
PWM_DUTYCYCLE = 0 # Define o ciclo de trabalho PWM, faixa de valores 0 (2) 55,
pi.set_mode(LED_PIN, pigpio.OUTPUT) #Define a porta GPIO para modo de saída
pi.set_PWM_frequency(LED_PIN, PWM_FREQUENCY) #definir frequência PWM
pi.set_PWM_range(LED_PIN, PWM_range) # definir intervalo 1000

pi.set_PWM_dutycycle(LED_PIN, 75) # define o ciclo de trabalho PWM 75/1000 = 7,5 por cento
time.sleep(3) # atraso de 3s no desbloqueio com sucesso

pi.set_PWM_dutycycle(LED_PIN, 100)
# Rotação positiva ciclo de trabalho de 7,5% a 10%, quanto maior o ciclo de trabalho, mais rápida será a velocidade de rotação positiva
hora.sono(15)

pi.set_PWM_dutycycle(LED_PIN, 60)
# Reverso Quanto mais próximo o ciclo de trabalho estiver de 5%, mais rápida será a velocidade de reversão
hora.sono(5)

pi.set_PWM_dutycycle(LED_PIN, 75)
# Ciclo de trabalho
hora.sono(5)

Compartilhe esta postagem



← Post anterior Post seguinte →


0 comentários

Deixe um comentário