VCC e GND todo mundo sabe o que é, já o Sinal vou explicar agora. A posição angular do servo é dada por um sinal PPM ligado a este pino, normalmente esse sinal deve variar de 1,25mS até 1,75mS, sendo 1,75mS eixo todo virado para um lado e 1,75mS todo virado para o outro, qualquer tempo no intervalo, 1,5mS por exemplo, vai posicionar o eixo numa posição intermediária, conforme a figura abaixo. O tempo entre cada pulso deve ser de 20mS, nos testes funcionou sem respeitar esse intervalo, mas pode ser que não funcione no servo que você tem ai na sua casa!
Isso posto, vamos ao que interessa, usei o R8C/1A, é claro... e o timer X foi o ator principal da história, a configuração ficou assim: Como fui mais esperto desta vez, comentei no código, a unica coisa importante neste código que não está comentada é a linha:
#pragma interrupt /B _timer_x (vect=22)
O que importa aqui, bom, no arquivo intprog.c temos todas as funções das interrupções, com seus protótipos e essa declaração acima, que "liga" a função descrita ao vetor, 22 neste caso, a função é chamada de timer_x e o /B é um indicador que ao atender esta interrupção você vai usar o banco 1 de registradores, voltando automaticamente ao banco 0 no final do atendimento. Isso é importante para conseguir atingir os 10uS de tempo entre as interrupções, diminui e muito a latência!
Finalmente, um video do porcotipo funcionando com um servo chines muito vagabundo!
Vale observar que o servo está em cima da placa, bem em cima do microcontrolador, e pela imagem do osciloscopio da pra ver que o consumo do servo não é baixo e gera um ruido absurdo, mas mesmo assim o micro continuou lá, firme e forte! (Me pedoem pela falta de ajuste do trigger do osciloscopio, vou ajoelhar no milho depois dessa...).
O código fonte está nos arquivos do grupo, é só copiar e sapear! Link aqui: kpt_servo.zip
Link para o grupo: http://groups.google.com.br/group/renesas_brasilPS: Rogério, não deu tempo de fazer como você pediu, mas a partir deste você consegue modificar para o que você precisa, certo?
Para quem quiser brincar com servomotor, uma sugestão é o "servo de parabólica" que você encontra com facilidade em lojas de antena.
ResponderExcluirO meu blog (http://dqsoft.blogspot.com) tem alguns posts a respeito.