- O que é um servo motor?
- Interface de servo motores com microcontroladores:
- Programando Servo Motor com Microcontrolador PICF877A PIC:
- Diagrama de circuito:
- Simulação e configuração de hardware:
Este é nosso 11º tutorial de como aprender microcontroladores PIC usando MPLAB e XC8. Neste tutorial, aprenderemos como controlar o servo motor com o microcontrolador PIC. Se você já trabalhou com servo motores, pode pular a primeira metade deste tutorial, mas se você é novo no próprio servo motor, continue lendo.
Até agora, cobrimos muitos tutoriais básicos como LED piscando com PIC, temporizadores em PIC, interface de LCD, interface de 7 segmentos, ADC usando PIC etc. Se você for um iniciante absoluto, visite a lista completa de tutoriais de PIC aqui e Comece a aprender.
Em nosso tutorial anterior, aprendemos como gerar sinais PWM usando o microcontrolador PIC, os sinais foram gerados com base no valor lido do potenciômetro. Se você entendeu todos os programas então, parabéns, você já codificou para um servo motor também. SIM, os servomotores respondem aos sinais PWM (que criamos usando temporizadores aqui), aprenderemos por que e como neste tutorial. Vamos simular e construir a configuração do hardware para este projeto e você pode encontrar o vídeo detalhado no final deste tutorial.
O que é um servo motor?
Um servo motor é um tipo de atuador (principalmente circular) que permite o controle angular. Existem muitos tipos de servo motores disponíveis, mas neste tutorial vamos nos concentrar nos servo motores de hobby mostrados abaixo.
Os servos Hobby são populares porque são o método barato de controle de movimento. Eles fornecem uma solução pronta para a maioria das necessidades de R / C e entusiastas de robótica. Eles também eliminam a necessidade de projetar um sistema de controle personalizado para cada aplicação.
A maioria dos servo motores de hobby tem um ângulo rotacional de 0- 180 °, mas você também pode obter servo motor 360 ° se estiver interessado. Este tutorial usa um servo motor 0-180 °. Existem dois tipos de servo motores baseados na engrenagem, um é o servo motor de engrenagens de plástico e o outro é o servo motor de engrenagens metálicas. A engrenagem de metal é usada em locais onde o motor está sujeito a mais desgaste, mas tem um preço alto.
Servo motores são classificados em kg / cm (quilograma por centímetro), a maioria dos servo motores de hobby são classificados em 3kg / cm ou 6kg / cm ou 12kg / cm. Este kg / cm informa quanto peso seu servo motor pode levantar em uma determinada distância. Por exemplo: Um servo motor de 6kg / cm deve ser capaz de levantar 6kg se a carga estiver suspensa a 1cm do eixo do motor, quanto maior a distância, menor a capacidade de carga. Aprenda aqui os Fundamentos do Servo motor.
Interface de servo motores com microcontroladores:
A interface de servo motores de hobby com MCU é muito fácil. Servos têm três fios saindo deles. Dos quais dois serão usados para alimentação (positivo e negativo) e um será usado para o sinal que será enviado do MCU. Neste tutorial, usaremos um servo motor MG995 Metal Gear, que é mais comumente usado para carros RC, robôs humanóides, etc. A imagem do MG995 é mostrada abaixo:
A codificação de cores de seu servo motor pode diferir, portanto, verifique sua respectiva folha de dados.
Todos os servo motores trabalham diretamente com seus trilhos de alimentação de + 5V, mas temos que ter cuidado com a quantidade de corrente que o motor consumirá, se você estiver planejando usar mais de dois servo motores, uma servo blindagem adequada deve ser projetada. Neste tutorial, vamos simplesmente usar um servo motor para mostrar como programar nosso PIC MCU para controlar o motor. Verifique os links abaixo para fazer a interface do Servo Motor com outro Microcontrolador:
- Servo motor com interface com microcontrolador 8051
- Controle servo motor usando Arduino
- Tutorial do servo motor Raspberry Pi
- Servo motor com microcontrolador AVR
Programando Servo Motor com Microcontrolador PICF877A PIC:
Antes de iniciarmos a programação do Servo motor, devemos saber que tipo de sinal deve ser enviado para o controle do Servo motor. Devemos programar o MCU para enviar sinais PWM ao fio de sinal do servo motor. Existe um circuito de controle dentro do servo motor que lê o ciclo de trabalho do sinal PWM e posiciona o eixo dos servo motores no respectivo local conforme mostrado na imagem abaixo
Cada servo motor opera em frequências PWM diferentes (a frequência mais comum é 50HZ, que é usada neste tutorial), portanto, obtenha a ficha técnica de seu motor para verificar em qual período de PWM seu servo motor funciona.
Os detalhes sobre o sinal PWM para nosso Tower pro MG995 são mostrados abaixo.
Disto podemos concluir que nosso motor trabalha com um Período PWM de 20ms (50Hz). Portanto, a frequência do nosso sinal PWM deve ser definida para 50Hz. A frequência do PWM que configuramos em nosso tutorial anterior era de 5 KHz, usar o mesmo não vai nos ajudar aqui.
Mas, temos um problema aqui. O PIC16F877A não pode gerar sinais PWM de baixa frequência usando o módulo CCP. De acordo com a ficha técnica, o valor mais baixo possível que pode ser definido para a frequência PWM é 1,2 KHz. Portanto, temos que abandonar a ideia de usar o módulo CCP e encontrar uma maneira de fazer nossos próprios sinais PWM.
Portanto, neste tutorial usaremos o módulo temporizador para gerar os sinais PWM com frequência de 50 Hz e variar seu ciclo de trabalho para controlar o ângulo do servo motor. Se você é novo em timers ou ADC com PIC, volte a este tutorial, porque vou pular a maioria das coisas, uma vez que já as abordamos lá.
Inicializamos nosso módulo Timer com um prescaler de 32 e o fazemos transbordar a cada 1us. De acordo com nossa ficha técnica o PWM deve ter um período de apenas 20ms. Portanto, nosso tempo ligado e desligado juntos deve ser exatamente igual a 20ms.
OPTION_REG = 0b00000100; // Timer0 com freq externa e 32 como prescaler TMR0 = 251; // Carrega o valor de tempo para 1us delayValue pode estar entre 0-256 apenas TMR0IE = 1; // Habilita o bit de interrupção do temporizador no registro PIE1 GIE = 1; // Habilita interrupção global PEIE = 1; // Habilita a interrupção periférica
Portanto, dentro de nossa função de rotina de interrupção, ligamos o pino RB0 pelo tempo especificado e o desligamos pelo tempo de fresagem (20ms - on_time). O valor do tempo ligado pode ser especificado usando o potenciômetro e o módulo ADC. A interrupção é mostrada abaixo.
oid interrupção timer_isr () {if (TMR0IF == 1) // O temporizador estourou {TMR0 = 252; / * Carregar o valor do temporizador, (Nota: Timervalue é 101 instaurado de 100, pois o TImer0 precisa de dois ciclos de instrução para começar a incrementar TMR0 * / TMR0IF = 0; // Limpa a contagem do sinalizador de interrupção do temporizador ++;} if (count> = on_time) { RB0 = 1; // complementa o valor para piscar os LEDs} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
Dentro da nossa enquanto ciclo que acabamos de ler o valor do potenciômetro usando o módulo ADC e atualizar o na hora do PWM usando o valor lido.
enquanto (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_value); }
Desta forma, criamos um sinal PWM cujo período é de 20 ms e tem um ciclo de trabalho variável que pode ser definido usando um potenciômetro. O código completo foi fornecido abaixo na seção de códigos.
Agora, vamos verificar a saída usando simulação proteus e prosseguir para o nosso hardware.
Diagrama de circuito:
Se você já encontrou o tutorial PWM, os esquemas deste tutorial serão os mesmos, exceto pelo qual iremos adicionar um servo motor no lugar da luz LED.
Simulação e configuração de hardware:
Com a ajuda da simulação de Proteus podemos verificar o sinal PWM usando um osciloscópio e também verificar o ângulo de rotação do servo motor. Alguns instantâneos da simulação são mostrados abaixo, onde o anjo rotativo do servo motor e o ciclo de trabalho PWM podem ser notados para serem alterados com base no potenciômetro. Confira ainda o Vídeo Completo, de rotação em diferentes PWM, no final.
Como podemos ver, o anjo de rotação do servo é alterado com base no valor do potenciômetro. Agora vamos prosseguir com a configuração do nosso hardware.
Na configuração do hardware, acabamos de remover a placa de LED e adicionamos o servo motor conforme mostrado no esquema acima.
O hardware é mostrado na imagem abaixo:
O vídeo abaixo mostra como o servo motor reage às várias posições do potenciômetro.
É isso!! Fizemos a interface de um servo motor com um microcontrolador PIC, agora você pode usar sua própria criatividade e descobrir aplicações para isso. Existem muitos projetos por aí que usam um servo motor.