Intel Galileo – Controle de servomotor

galileo_servo

A biblioteca MRAA da Intel possui funções para configuração e controle das saídas digitais com PWM. Nesse guia será mostrado como utilizar a MRAA com Python para configurar a saída digital 9 da Galileo e gerar os sinais de PWM. Nesse post e nesse outro você pode encontrar mais informações sobre o funcionamento do PWM.
Os servomotores para modelismo são controlados pela variação do pulso na faixa de 1ms a 2ms dentro de uma janela de 20ms.

Testes realizados com a Galileo mostram que não é possível obter uma janela de 20 ms. O melhor resultado obtido foi 4,65 ms, o ajuste da largura do pulso foi obtido com uma boa resolução e ensaio realizado com o servomotor  permitiu concluir que mesmo com a janela de apenas 4,65 ms a operação ainda é relativamente estável.

galileo_servo_tempo

Para o experimento vamos conectar um servomotor à Galileo e implementar o script Python.
O servomotor tem os fios de controle,  alimentação (5V) e GND conectados na placa Galileo. O fio de controle é ligado no GPIO ~9. A figura abaixo ilustra a conexão utilizada.

galileo_01_pwm_servo

Abaixo código fonte configurado para levar e manter o servomotor na posição central.


'''
Experimento controle de servomotor com PWM
com placa Intel Galileo GEN 1
mais informacoees:
23/11/2015
'''
import mraa
import time
print (mraa.getVersion())
x = mraa.Pwm(9) #seleciona o Pino de GPIO
x.period_ms(7) # efetivamente 4,64 ms
x.enable(True)
x.write(0.30) # periodo ativo 1,4ms
while True:
z= 1

O código fonte a seguir envia parâmetros para posicionar  o servomotor no centro, a direita e esquerda. O loop while mantém os movimentos indefinidamente.


'''
Experimento controle de servomotor com PWM
com placa Intel Galileo GEN 1
mais informacoees:
01/12/2015
'''
import mraa
import time
print (mraa.getVersion())
x = mraa.Pwm(9) #seleciona o Pino de GPIO
x.period_ms(7) # efetivamente 4,64 ms
x.enable(True)
x.write(0.30) # periodo ativo 1,4ms
time.sleep( 3 )
while True:
x.write(0.15) # periodo ativo 0,6ms
time.sleep( 3 )
x.write(0.30) # periodo ativo 1,4ms
time.sleep( 3 )
x.write(0.45) # periodo ativo 2ms
time.sleep( 3 )

Confira no vídeo o resultado  dessa implementação.

Referências:

Discussão no fórum da Intel sobre limites do PWM na Galileo
https://communities.intel.com/message/221795

Deixe um comentário