Como fazer a interface do servo motor com o microcontrolador AVR (ATmega16) – (Parte 21/46)

Servo Motors encontre grandes aplicações em indústrias na área de automação, controle e robótica. Os servomotores são bem conhecidos por seu controle preciso e funcionam segundo o princípio do servomecanismo. Os servo motores podem ser executados em ângulos precisos usando PWM. O PWM (modulação por largura de pulso) é o princípio básico de funcionamento por trás de um servo motor (para mais detalhes sobre PWM consulte Modo PWM com correção de fase). Este artigo explora a interface do servo motor com ATmega16. Também para saber mais sobre o mecanismo servo, consulte Interface do Servo Motor com 8051.

Existem diferentes tipos de servos disponíveis no mercado. Este artigo limita seu escopo à interface de um servo comumente disponível, amplamente utilizado por amadores, com o ATmega16. Tal servo consiste em três fios de alimentação positiva, terra e um sinal de controle. Ao contrário de outros motores, os servomotores não requerem nenhum driver. Quando um sinal PWM é aplicado ao seu pino de controle, o eixo gira em um ângulo específico dependendo do ciclo de trabalho do pulso.

Ciclo de trabalho do pulso

Fig. 2: Ciclo de trabalho de pulso e deslocamento angular do eixo na aplicação da onda PWM
Na figura acima, o tempo de ativação do pulso é de 1 ms e o tempo de desligamento do pulso é de 18 ms, o que gira o eixo em -90 graus. Da mesma forma, se o tempo de ativação do pulso for 1,5 ms e o tempo de desligamento do pulso for igual, o servo gira para 00 e se o pulso do tempo ON aumentar para 2ms, ele gira para +900. Isso dá uma rotação completa de 180 graus. O motor mantém sua posição para cada sinal correspondente.
Nota: Antes de iniciar o servo, verifique primeiro o pulso ON mais baixo que gira o servo em -90 graus e o pulso ON mais alto que gira o servo em +90 graus enquanto mantém o pulso OFF constante. Ao fazer experiências com servomotores VS2, descobriu-se que para -90 graus o pulso ON necessário era de 50us e o pulso OFF era de 18ms. E para +90 graus o pulso ON foi de 2050us e manteve o tempo OFF igual a 18ms. As coisas podem diferir no tipo e na qualidade.
Um pulso contínuo de 50 us no tempo ON e 18 ms no tempo OFF gira o eixo do servo em -90 graus.

enquanto(1)
{ Motor =(1< _atraso_us(50); Motor = (0< _atraso_ms(18); }
Se o tempo ON for aumentado, o ângulo de rotação também aumenta.
O código fornecido gira o eixo servo em 20 graus a cada 5 segundos.

Código-fonte do projeto

###


// Programa para girar o servo em passos de 20 graus.
#incluir #incluir #define motor PORTD #define servo PD6 grau vazio (unsigned int ); int principal(vazio) { unsigned int grau_valor,tempo; DDRD=0b01000000; for(valor_grau=0;valor_grau<180;valor_grau +=20) for(tempo=0;tempo<50;tempo++) { grau(grau_valor); } retornar 0; } grau vazio (unsigned int k) { k=50+(k*10); motor= (1< _atraso_us(k); motor = (0< _atraso_ms(18); }

###

Diagramas de circuito

Diagrama de circuito de como fazer a interface do servomotor com o microcontrolador AVR-ATmega16

Componentes do Projeto

  • ATmega16

Vídeo do projeto

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.