Controlo de servomotores com o microcontrolador BX-24 Introdução Este documento descreve como se podem controlar servomotores através do BX24. É exemplificado o controlo de servomotores normais, assim como o controlo de servomotores modificados para rotação continua. Principio de funcionamento dos servos Os servomotores (ou servos), são motores especiais que têm incorporado um sistema interno de feedback para o controle da posição. Tipicamente, o eixo de um servo roda entre 0º e 90º, ou 0º e 180º. Os servos necessitam de ser alimentados por uma tensão que varia tipicamente entre 4,5 e 6,5 Volts. A corrente necessária para o funcionamento do servo é algo que varia muito de servo para servo. A posição do servo é controlada por um trem de impulsos, com uma amplitude que varia tipicamente entre 1ms e 2ms (1 ms = 1/1000 segundos), e uma frequência de cerca de 50Hz. A figura 1 ilustra a influência que a duração do sinal tem no movimento do servo. Figura 1 – Movimentos do servo em função do sinal recebido. Se o servo recebe impulsos de 1.5ms, a sua engrenagem de saída rodará até ficar estável no centro do intervalo de rotação nos 90º. Se receber impulsos de 1ms, rodará no sentido horário até atingir o limite do intervalo de rotação correspondente a 0º. Se receber impulsos de 2ms, rodará no sentido anti-horário até atingir o outro limite do intervalo de rotação correspondente a 180º. Impulsos ente 1ms e 1.5ms farão com que o servo rode no sentido horário para posições intermédias entre 0º e 90º, enquanto que impulsos entre 1.5ms e 2ms farão com que o servo rode no sentido anti-horário para posições intermédias entre 90º e 180º. 1 Um microcontrolador pode ser facilmente programado para gerar este trem de impulsos numa das suas portas de saída. O sistema interno de feedback, que faz com que o servo rode para uma determinada posição em resposta a um determinado trem de impulsos, é constituído por um potenciómetro conectado à engrenagem do servo, que funciona como sensor de posição, e por um circuito electrónico de controlo. O circuito electrónico compra o valor do potenciómetro com a amplitude dos impulsos que recebe pela linha de controlo, activando o motor para corrigir qualquer diferença que exista entre ambos. Ao se tentar rodar a engrenagem do servo, o circuito de controlo detectará uma diferença entre o valor do potenciómetro e a amplitude dos impulsos e activará o motor para a tentar corrigir. Este processo é tão rápido que apenas se sente o servo a resistir à tentativa de alterar a sua posição de rotação. A informação que o servo recebe do potenciómetro designa-se por feedback ou realimentação. A comparação entre o valor do potenciómetro e a amplitude dos impulsos, e as correcções que origina, são as componentes de um processo de controlo designado por controlo em malha fechada. Ligação de um servo ao BX-24 A figura 2 mostra o esquema típico da ligação de um servo ao BX-24. Notar que neste circuito o servo tem a sua própria fonte de energia, embora partilhe a massa com o BX-24. Figura 2 – Esquema típico de ligação do servo ao BX-24 Ligação de servos à Board of Education Quando se usar o BX-24 com a Board of Education, deve-se ter em conta que não existe uma correspondência directa em termos de número identificativo, entre os pinos da placa e as portas do BX-24, como acontece com o microcontrolador Basic Stamp da Parallax. Assim, o pino P0 da placa corresponde à porta 5 do BX-24, o pino P1 à porta 6, e assim sucessivamente. Isto quer dizer que quando quisermos controlar um servo ligado, por exemplo, ao conector do pino P12, devemos programar a porta 17 do microcontrolador. Ver o exemplo a seguir. A figura 3 mostra os 4 conectores dedicados que a Board of Education tem para ligar servos. Estes 4 conectores usam os pinos 12, 13, 14 e 15 da placa (que correspondem às portas 17, 18, 19 e 20 do BX-24). 2 Figura 3 – Os 4 conectores da Board of Education para ligação de servos Notar que no caso destes pinos não serem usados para ligar servos, podem ser usados como pinos de entrada/saída de uso genérico. Deve-se ter atenção às cores dos três cabos do servo de modo a orientar a ficha como indicado na figura anterior. Embora as cores dos cabos dos servos variem de fabricante para fabricante, normalmente o cabo de cor preta corresponde à massa, o cabo de cor vermelha corresponde à tensão positiva e a cor do cabo do sinal de controlo é normalmente branca, cor-de-laranja ou amarela. A figura 4 mostra o circuito que é criado quando se liga um servo à porta do pino P12. Figura 4 – Circuito correspondente ao pino P12 A figura 5 mostra um servo Hitec HS-300, ligado a uma Board of Education da Parallax, equipada com um microcontrolador BX-24. O servo foi ligado ao pino 12 da placa (porta 17 do BX-24), através de um dos 4 conectores especiais para servos, existentes na Board of Education. O servo é alimentado directamente a partir da fonte de energia da placa, a qual também alimenta o microcontrolador através do regulador de tenção. 3 Figura 5 – Ligação do servo à Board of Education Programa para controlo do servo O programa 1 assume as ligações descritas na secção anterior. Quando executado, o programa move o servo para a sua posição intermédia. Programa 1 – Controlo de um servo Sub Main() Const Porta_Servo As Byte = 17 Do 'Gerar um impulso de 1.5ms Call PulseOut(Porta_Servo, 0.0015, 1) 'Esperar 20ms para conseguir uma frequencia de 50 Hz. Call Delay(0.02) Loop End Sub A função PulseOut é a responsável pela geração do impulso. O primeiro parâmetro indica a porta que será usada, o segundo parâmetro indica a duração do impulso em segundos e o terceiro parâmetro indica o nível lógico do impulso, 0 ou 1. Assim, no programa anterior está a ser enviado um trem de impulsos via porta 17 do BX-24, com uma amplitude de 1.5ms (segundo parâmetro igual a 0.0015), o que fará com que o servo rode para a sua posição intermédia correspondente a 90º. A alteração do valor 0.0015 dentro do intervalo 0.001 a 0.002, fará rodar o servo para outras posições. Controlo de servos modificados para rotação continua Os servomotores podem ser facilmente modificados para que rodem de forma contínua como motores normais. Basicamente o que se tem que fazer para modificar um servo é eliminar a realimentação. Isto é, deixar de ter um controlo em malha fechada e passar a ter um controlo em malha aberta. A maneira como se 4 elimina a realimentação depende da marca e modelo do servo. Ver os tutoriais sobre modificação de servos. No que diz respeito ao controlo dos servos modificados, este é feito de uma maneira muito semelhante à descrita para servos normais. Enquanto que num servo normal a amplitude dos impulsos correspondia à posição de rotação desejada, no caso de um servo modificado correspondem à sua velocidade e sentido de rotação. Assim, uma amplitude de 1ms fará o servo modificado rodar no sentido horário à velocidade máxima, enquanto que uma amplitude de 2ms fará o servo rodar no sentido anti-horário também à velocidade máxima. No caso de um servo modificado bem calibrado, uma amplitude de 1.5ms fará com que o servo se mantenha em repouso. A figura 6 mostra dois servos modificados ligados aos pinos P12 e P13 da Board of Education (portas 17 e 18 do BX-24). Figura 6 – Ligação dos dois servos à Board of Education O programa 2 exemplifica o controlo dos 2 servos da figura. Programa 2 – Controlo de 2 servos modificados Sub Main() Const Servo_Direita As Byte = 17 Const Servo_Esquerda As Byte = 18 Do 'O servo da direita roda no sentido anti-horario com 'velocidade maxima Call PulseOut(Servo_Direita, 0.001, 1) 'O servo da esquerda roda no sentido horario com 'velocidade maxima Call PulseOut(Servo_Esquerda, 0.002, 1) 'Esperar 20ms para conseguir uma frequencia de 50 Hz. Call Delay(0.02) Loop End Sub 5 Para que uma roda acoplada ao servo da esquerda rode para a frente, o servo tem que rodar no sentido anti-horário. Isto é, tem que receber um trem de impulsos com uma amplitude entre 1.5ms e 2ms. Para que uma roda acoplada ao servo da direita rode também para a frente, o servo tem que rodar no sentido horário. Isto é, tem que receber um trem de impulsos com uma amplitude entre 1.5ms e 1ms. O que foi dito no parágrafo anterior é válido para servos posicionados tal como mostrado na figura 6, para servos posicionados de outra maneira poderá ser necessário alterar o sentido de rotação dos mesmos. 6