Mini curso sobre AVR parte 6 - Timer 0 em modo fast PWM - servos

Bem vindo a mais uma parte do meu mini-curso!

Vamos aproveitar o exemplo anterior, fazendo algumas modificações simples para fazer o pwm funcionar com servos de hobby (ou parabólica).

Esse servo foi comprado na Himodel.com, uma loja virtual que tras os servos da China, esse é o modelo: Link para a Himodel

O que há de diferente em relação ao exemplo anterior é que o servo tem o seguinte protocolo, a largura de pulso no edge de subida do sinal de controle fica entre 1ms e 2ms, com o período de operação do PWM na ordem de 20ms.

Tendo em mente isso, e escolhendo o prescaler para 1024 temos um período de 21,84ms, o que é bem próximo do pedido, esse período não é crítico, o que determina a posição é a largura do pulso, fazendo as contas, obtemos que para a largura de pulso de 1ms o valor de OCR0 deverá ser 0x0B, para 2ms 0x17.

No programa principal foi feita a seleção dos valores para o ciclo ativo, de tal modo que se o usuário não apertar nenhum botão o servo permanece recebendo pulsos com 1ms de duração, caso seja apertado o botão do PC6, o valor de OCR0 decrescerá em passos a cada 50ms, e ao chegar no valor mínimo voltará ao seu máximo, aguardando o servo localizar a sua posição em 200ms.

Para o botão PC7 o valor de OCR0 é incrementado a cada 50ms e retorna ao valor inicial 0x0B após atingir o valor máximo.

Aí vai o exemplinho, clique na imagem para ampliar, repare no osciloscópio, essa é a tensão de alimentação que vai para o microcontrolador com a superposição da corrente do servo, e obtém essa variação toda mesmo usando um cabo de boa qualidade, logo não use cabos usb vagabundos com alta resistividade, a tensão irá para valor mais baixo ainda que os meus 4,5V, podendo causar até um reset por brown-out (selecionável o nível para 2,7V ou 4,0V, nos fuses).



É isso pessoal, comentem!

0 comentários:

Postar um comentário