- ¿Qué es un servomotor?
- Interfaz de servomotores con microcontroladores:
- Programación del servomotor con microcontrolador PIC PICF877A:
- Diagrama de circuito:
- Configuración de simulación y hardware:
Este es nuestro undécimo tutorial de aprendizaje de microcontroladores PIC utilizando MPLAB y XC8. En este tutorial aprenderemos cómo controlar el servomotor con el microcontrolador PIC. Si ya ha trabajado con servomotores, puede omitir la primera mitad de este tutorial, pero si es nuevo en el servomotor, continúe leyendo.
Hasta ahora, hemos cubierto muchos tutoriales básicos como LED parpadeando con PIC, temporizadores en PIC, LCD de interfaz, interfaz de 7 segmentos, ADC usando PIC, etc. Si es un principiante absoluto, visite la lista completa de tutoriales de PIC aquí y comienza a aprender.
En nuestro tutorial anterior aprendimos cómo generar señales PWM usando el Microcontrolador PIC, las señales se generaron en base al valor leído del potenciómetro. Si ha entendido todos los programas, felicidades, ya ha codificado también un servomotor. SÍ, los servomotores responden a las señales PWM (que creamos usando temporizadores aquí), aprenderemos por qué y cómo en este tutorial. Simularemos y crearemos la configuración del hardware para este proyecto y puede encontrar el video detallado al final de este tutorial.
¿Qué es un servomotor?
Un servomotor es un tipo de actuador (en su mayoría circular) que permite el control angular. Hay muchos tipos de servomotores disponibles, pero en este tutorial vamos a concentrarnos en los servomotores de hobby que se muestran a continuación.
Los servos de hobby son populares porque son el método económico de control de movimiento. Proporcionan una solución lista para usar para la mayoría de las necesidades de los aficionados al R / C y la robótica. También eliminan la necesidad de diseñar un sistema de control personalizado para cada aplicación.
La mayoría de los servomotores de hobby tienen un ángulo de rotación de 0-180 °, pero también puede obtener un servomotor de 360 ° si está interesado. Este tutorial utiliza un servomotor de 0-180 °. Hay dos tipos de servomotores basados en el engranaje, uno es el servomotor de engranaje de plástico y el otro es el servomotor de engranaje metálico. Los engranajes metálicos se utilizan en lugares donde el motor está sujeto a un mayor desgaste, pero solo tiene un precio elevado.
Los servomotores están clasificados en kg / cm (kilogramo por centímetro), la mayoría de los servomotores de hobby tienen una clasificación de 3 kg / cm o 6 kg / cm o 12 kg / cm. Este kg / cm le indica cuánto peso puede levantar su servomotor a una distancia determinada. Por ejemplo: Un servomotor de 6 kg / cm debería poder levantar 6 kg si la carga está suspendida a 1 cm del eje del motor, cuanto mayor sea la distancia, menor será la capacidad de carga. Aprenda aquí los conceptos básicos del servomotor.
Interfaz de servomotores con microcontroladores:
La interconexión de servomotores de hobby con MCU es muy fácil. Los servos tienen tres cables que salen de ellos. De los cuales dos se usarán para suministro (positivo y negativo) y uno se usará para la señal que se enviará desde la MCU. En este tutorial usaremos un servomotor MG995 Metal Gear que se usa más comúnmente para robots humanoides de coches RC, etc. La imagen de MG995 se muestra a continuación:
La codificación de colores de su servomotor puede diferir, por lo tanto, consulte la hoja de datos correspondiente.
Todos los servomotores funcionan directamente con sus rieles de suministro de + 5V, pero debemos tener cuidado con la cantidad de corriente que consumiría el motor, si planea usar más de dos servomotores, se debe diseñar un servo escudo adecuado. En este tutorial, simplemente usaremos un servomotor para mostrar cómo programar nuestro PIC MCU para controlar el motor. Consulte los siguientes enlaces para la interfaz del servomotor con otro microcontrolador:
- Interfaz del servomotor con el microcontrolador 8051
- Control de servomotor usando Arduino
- Tutorial de servomotor Raspberry Pi
- Servomotor con microcontrolador AVR
Programación del servomotor con microcontrolador PIC PICF877A:
Antes de que podamos comenzar a programar para el servomotor, debemos saber qué tipo de señal se enviará para controlar el servomotor. Debemos programar la MCU para enviar señales PWM al cable de señal del servomotor. Hay un circuito de control dentro del servomotor que lee el ciclo de trabajo de la señal PWM y coloca el eje del servomotor en el lugar respectivo, como se muestra en la siguiente imagen.
Cada servomotor opera en diferentes frecuencias PWM (la frecuencia más común es 50HZ que se usa en este tutorial), así que obtenga la hoja de datos de su motor para verificar en qué período PWM funciona su servomotor.
Los detalles de la señal PWM para nuestro Tower pro MG995 se muestran a continuación.
De esto podemos concluir que nuestro motor trabaja con un Periodo PWM de 20ms (50Hz). Entonces, la frecuencia de nuestra señal PWM debe establecerse en 50Hz. La frecuencia del PWM que habíamos configurado en nuestro tutorial anterior era de 5 KHz, usar el mismo no nos ayudará aquí.
Pero tenemos un problema aquí. El PIC16F877A no puede generar señales PWM de baja frecuencia utilizando el módulo CCP. Según la hoja de datos, el valor más bajo posible que se puede establecer para la frecuencia PWM es de 1,2 KHz. Así que tenemos que abandonar la idea de usar el módulo CCP y encontrar una manera de crear nuestras propias señales PWM.
Por lo tanto, en este tutorial usaremos el módulo temporizador para generar las señales PWM con una frecuencia de 50Hz y variar su ciclo de trabajo para controlar el ángel del servomotor. Si eres nuevo en los temporizadores o ADC con PIC, vuelve a este tutorial, porque me saltaré la mayoría de las cosas, ya que ya las hemos cubierto allí.
Inicializamos nuestro módulo Timer con un preescalador de 32 y lo hacemos desbordar por cada 1us. Según nuestra hoja de datos, el PWM debería tener un período de solo 20 ms. Por lo tanto, nuestro tiempo de entrada y salida juntos debería ser exactamente igual a 20 ms.
OPTION_REG = 0b00000100; // Timer0 con frecuencia externa y 32 como prescaler TMR0 = 251; // Cargar el valor de tiempo para 1us delayValue puede estar entre 0-256 solo TMR0IE = 1; // Habilita el bit de interrupción del temporizador en el registro PIE1 GIE = 1; // Habilitar interrupción global PEIE = 1; // Habilite la interrupción periférica
Entonces, dentro de nuestra función de rutina de interrupción, activamos el pin RB0 durante el tiempo especificado y lo desactivamos durante el tiempo de escariado (20ms - on_time). El valor del tiempo de encendido se puede especificar utilizando el potenciómetro y el módulo ADC. La interrupción se muestra a continuación.
oid interrupt timer_isr () {if (TMR0IF == 1) // El temporizador se ha desbordado {TMR0 = 252; / * Cargar el valor del temporizador, (Nota: el valor del temporizador es 101 en lugar de 100 ya que TImer0 necesita dos ciclos de instrucción para comenzar a incrementar TMR0 * / TMR0IF = 0; // Borrar el indicador de interrupción del temporizador count ++;} if (count> = on_time) { RB0 = 1; // complementar el valor para el parpadeo de los LED} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
Dentro de nuestro tiempo de bucle que acabamos de leer el valor del potenciómetro mediante el uso del módulo ADC y actualizar el tiempo de conexión del PWM utilizando el valor de lectura.
while (1) {pot_value = (ADC_Read (4)) * 0.039; on_time = (170-pot_value); }
De esta manera, hemos creado una señal PWM cuyo período es de 20 ms y tiene un ciclo de trabajo variable que se puede configurar con un potenciómetro. El código completo se proporciona a continuación en la sección de códigos.
Ahora, verifiquemos la salida usando la simulación de proteus y procedamos a nuestro hardware.
Diagrama de circuito:
Si ya se ha encontrado con el tutorial de PWM, los esquemas de este tutorial serán los mismos, excepto que agregaremos un servomotor en lugar de la luz LED.
Configuración de simulación y hardware:
Con la ayuda de la simulación de Proteus podemos verificar la señal PWM usando un osciloscopio y también verificar el ángel giratorio del servomotor. A continuación se muestran algunas instantáneas de la simulación, donde se puede notar que el ángel giratorio del servomotor y el ciclo de trabajo de PWM cambian según el potenciómetro. Verifique más el video completo, de rotación en diferentes PWM, al final.
Como podemos ver, el ángel de rotación del servo cambia según el valor del potenciómetro. Ahora procedamos a la configuración de nuestro hardware.
En la configuración del hardware, acabamos de quitar la placa LED y agregar el servomotor como se muestra en los esquemas anteriores.
El hardware se muestra en la siguiente imagen:
El siguiente video muestra cómo reacciona el servomotor a las distintas posiciones del potenciómetro.
¡¡Eso es!! Hemos interconectado un servomotor con un microcontrolador PIC, ahora puede usar su propia creatividad y descubrir aplicaciones para esto. Hay muchos proyectos que utilizan un servomotor.