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
Download

1 Controlo de servomotores com o microcontrolador BX-24