quinta-feira, fevereiro 18, 2010

CI 555 - Parte 4: Controlando um Servomotor

Para concluir esta série de posts sobre o CI 555, vamos ver como usá-lo para controlar um servomotor de parabólica.

Como vimos no passado, o servo da parabólica é um motor no qual a posição do eixo é controlada através de um trem de pulsos. Os pulsos devem ocorrer a cada 20 ms e a largura deles determina a posição (no caso do servo que utilizei, a largura variando de 0,4 a 1,6 ms variava a posição de 0 a 180 graus).

Nosso objetivo, portanto, é gerar este sinal PWM.

O circuito básico de oscilador (descrito na parte 2) é inadequado pois:
  • O tempo de sinal alto é sempre maior que o tempo de sinal baixo.
  • O tempo de sinal alto depende de R2 e o tempo total depende de R1+2*R2. Desta forma fica difícil ajustar o tempo alto (alterando R2) mantendo o tempo total constante.
Uma primeira solução (descrita aqui) é usar dois 555s:
  • O primeiro deles opera como um oscilador, disparando o segundo a cada 20ms.
  • O segundo deles opera como um mono-estável, com a duração do sinal alto sendo ajustada por um potenciômetro.
Usando os fórmulas que já vimos, é fácil determinar os componentes:
  • No oscilador, vamos usar um tempo baixo da ordem de 0,2 ms (ele será o trigger do mono-estável). Usando um capacitor de 0,1 uF, obtemos R2 2,86K. Para obter o tempo total de 20ms, R1 deve ser aproximadamente 280K.
  • No mono-estável, queremos um tempo mínimo de 0,4 ms e um tempo máximo de 96 ms. Usando um capacitor de 1 uF, isto significa que R deve variar de 3,6 a 14,5 K.

Na montagem usei inicialmente R1 = 270K, R2 = 2,7K e R = 390 ohms em série com um potenciômetro de 1K. Embora o circuito tenha funcionado, a variação de posição do servo não foi correta: o servo não alcançava um extremo e batia no fim de curso no outro. Trocando o resistor de 390 ohms por um de 1K o funcionamento melhorou (mas não ficou perfeito). Algumas explicações (não exclusivas entre si) para isto:
  • O capacitor de 1uF é eletrolítico e portanto pode ter uma variação grande em relação ao valor nominal.
  • O servo que usei nesta montagem era diferente do que usei anteriormente (e que está montado dentro da "Abóbora Assassina").
  • Eu errei na medição original dos tempos.
Infelizmente me faltam os intrumentos apropriados (como um capacímetro e um osciloscópio) para determinar exatamente o que aconteceu. Se conseguir acesso a algum deles eu publico o resultado. Outra possibilidade é fazer um pequeno circuito com um microcontrolador para medir os pulos (mais um projeto que vai para a lista).

O vídeo abaixo mostra o circuito funcionando.



No próximo post da série vamos ver uma segunda solução.

4 comentários:

Vitor Aurelio disse...

amigo, tem como me mandar uma lista com os materiais utilizados e seus valores junto com o esquema como no video acima, e para um tcc do curso que faco, se puder responda para o email vitor.schultz@yahoo.com.br, desde ja agradeco, abracos.

Daniel Quadros disse...

Vitor,

O circuito mostrado no vídeo corresponde ao esquema e valores descritos no post.

vitor disse...

Amigo, no video percebi que para mudar o sentido de rotacao do servo voce esperava o potenciometro chegar em seu valor maximo e seu valor minimo para mudar o sentido de rotacao, gostaria de saber se é realmente preciso chegar no min e max para mudar a rotacao.

Daniel Quadros disse...

Vitor, não é preciso chegar ao min ou max, cada posição do potenciômetro corresponde a uma posição do eixo e você pode escolher uma nova posição livremente. É claro que existe uma certa inércia e tempo de resposta do servo, portanto ele não vai virar de direção e ira para uma nova posição instantaneamente.