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.
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.
Abaixo código fonte configurado para levar e manter o servomotor na posição central.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
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