Controlando Servo Motor com microcontrolador Stm32f103 usando configurador de código stm32cubemx da STMicroelectronics e keil uvision 5 ide para microcontroladores da série cortex m1

Control del servomotor con el microcontrolador Stm32f103 utilizando el configurador de códigos STMicroelectronics stm32cubemx y keil uvision 5 ide para microcontroladores de la serie cortex m1

Este tutorial es parte de una serie de tutoriales sobre la generación de señales pwm (modulación de ancho de pulso) con el microcontrolador stm32f103. Anteriormente vimos cómo generar señal pwm con el microcontrolador stm32 usando keil uvision 5 ide y el configurador de código stm32cubemx. Contamos con generación avanzada de señal PWM variable utilizando temporizadores internos del microcontrolador STM32F103. Estudiamos la generación pwm, ahora toca ponerlo en práctica y controlar un periférico con señal pwm. Decidí controlar un servomotor de juguete simple con un microcontrolador stm32f103. Utilicé dos servomotores en el proyecto para probar el código. Primero utilicé el servomotor tower pro SG-90. Este motor funciona bien, pero no movió el brazo a la posición correcta; siempre hay algunos grados de tolerancia en los resultados reales. Puedes comprar uno por un precio justo de $3. Otro motor que acabo de probar es el HS-785HB, gira correctamente pero requiere más potencia (corriente). Para este tutorial recomiendo utilizar el servomotor tower pro sg90 debido a su menor consumo de energía y su simplicidad.

Principio de funcionamiento del servomotor

Los servomotores son motores pequeños, a diferencia de su tamaño, tienen mayor torque y pueden mover cargas pesadas. Su pequeño tamaño y su elevado par los hicieron populares entre los fabricantes de juguetes. Muchos juguetes que nos rodean contienen servomotores junto con motores de CC. Normalmente los servomotores en estado ideal consumen poca energía, pero cuando la carga está en movimiento, la energía se dispara y los servos empiezan a consumir una mayor cantidad de corriente.
Los servomotores funcionan con señales PWM (modulación por ancho de pulso). Tienen un brazo/armadura que gira cuando se aplica suficiente voltaje, corriente y señal pwm al motor. Cuando el brazo gira, mueve todo lo que se encuentra a su paso.

Diferentes tipos de servomotores.

Diferentes tipos de servomotores.
No todos los servomotores pueden mover cargas pesadas. Depende de sus especificaciones y detalles. Normalmente, los servomotores de juguete pueden mover cargas de 1 kg a 12 kg. Hay dos tipos de servomotores CC y CA. Los servomotores de CA pueden mover cargas aún más pesadas ya que se utilizan en aplicaciones industriales. Los servomotores de CC son los mejores para proyectos pequeños. En este proyecto también estoy usando un servomotor DC con microcontrolador stm32.
Como aprendiste, los servomotores funcionan con señal PWM. La mayoría de los servomotores de CC requieren una frecuencia de 50 Hz para un funcionamiento con ciclo de trabajo variable. A continuación se muestran las formas de onda de los requisitos estándar. Nuestro motor también exige el mismo estándar.

Requisitos de frecuencia y ciclo de trabajo PWM del servomotor

Requisitos de frecuencia y ciclo de trabajo PWM del servomotor
En el período de ciclo de trabajo de 20 milisegundos y 2 milisegundos, el brazo del servomotor se mueve a 180 grados. En el ciclo de trabajo de 1,5 milisegundos, el brazo se mueve a 90 grados y en el ciclo de trabajo de 1 milisegundo, el brazo gira a 0 grados.

Servo con microcontrolador stm32

Conectaré el servo con el microcontrolador stm32f103c8t6. Compré una placa premontada barata que monta el microcontrolador en ella. Para girar el brazo del servomotor, se utilizan tres pines del microcontrolador como entrada. Para emitir la señal pwm, se utiliza un pin. Los pines 0,1 y 2 del puerto A se utilizan como entradas y el pin 6 del puerto B se utiliza para emitir la señal pwm.
El microcontrolador Stm32f103 funciona a 3,3 voltios mientras que el servomotor tower pro sg90 funciona a 5 voltios. Por lo tanto, tanto el motor del módulo como el microcontrolador deben ser alimentados por fuentes de energía diferentes. No podemos controlar el servo directamente con la señal pwm de salida stm32 porque tiene una forma de onda de 3,3 V y el motor requiere 5 V. Inserté un circuito entre los dos módulos para convertir 3,3 V a 5 V. El primer transistor convierte la señal de entrada en salida de 5 V, pero la señal está invertida. Otro transistor invierte la señal invertida y la devuelve a la lógica original. Entonces, ahora 3.3V en la entrada se cruzan con 5V en la salida del servomotor.

Servomotor controlado con microcontrolador Stm32f103

Servomotor controlado con microcontrolador Stm32f103
En el circuito anterior, asegúrese de conectar las tierras de la fuente de alimentación del motor y del microcontrolador. También puedes usar el IC ULN2003 aquí en lugar de los dos transistores. ULN2003 contiene el mismo circuito con diodos volantes.
En stm32cubemx, inicialice 3 pines del Puerto A, pines 1,2 y 3 como entrada. Si no sabes cómo hacer esto, tengo un tutorial sencillo para ti.

Introducción al microcontrolador Stm32f103

Fotografía

Configuración de pines STM32F103 PWM
Enviaré la señal pwm en PB6. Para esto, debe realizar algunas configuraciones en el ide stm32cubemx. Cómo seleccionar el canal y configurar algunas cosas más. Antes de continuar, me gustaría que hiciera un tutorial sencillo sobre la selección de pines pwm y la fórmula de cálculo del ciclo de trabajo.

Configuración de PWM y conducción de fórmulas

El tutorial anterior es muy importante para comprender el flujo de código y la configuración a continuación. En el proyecto se utiliza el oscilador interno del microcontrolador STM32. Aunque la tarjeta tiene un oscilador externo de 8 MHz, preferí usar el interno. El reloj final del temporizador 4 es 1 MHz.

Configuración STM32 Clcok para temporizador 4 canal 1 en stm32cubemx

Configuración STM32 Clcok para temporizador 4 canal 1 en stm32cubemx
Luego calculé los valores del registro del contador y otros valores necesarios para ingresar en la configuración del temporizador 4. Puede ver la fórmula y otros cálculos de valores en el tutorial anterior.

Stm32 configurando el período del contador pwm y el ciclo de trabajo en stm32cubemx

Stm32 configurando el período del contador pwm y el ciclo de trabajo en stm32cubemx
Mi período de contador es 1000. Esto significa que en 1000 el ciclo de trabajo pwm será del 100% con un período de 20 milisegundos o una frecuencia de 50 Hz. A 500 pwm el ciclo de trabajo será del 50%, lo que se traduce en 10 milisegundos. Al 5% será 1 milisegundo y al 10% serán 2 milisegundos y al 7,5% serán 1,5 milisegundos.
Este valor del contador se utiliza en el código para mover el brazo del servomotor. A continuación se muestra el código. Cuando se presiona el botón 3, el motor se mueve 180 grados. Cuando se presiona el botón 2, el botón gira 90 grados y cuando se presiona el botón 1, vuelve a 0 grados.
Resistencias pull-up internas de los pines del Puerto A. Los pines #1,2 y 3 están activados. En consecuencia, sólo los botones están conectados directamente a tierra.
Descarga el código del proyecto. El código está escrito en Keil Uvision 5 IDE. Stm32cubemx se utiliza para la configuración del microcontrolador. La carpeta Código contiene todos los archivos keil y stm32cubemx. El código es de código abierto, puedes modificarlo y utilizarlo según tus necesidades. Por favor envíenos sus comentarios sobre el proyecto.

contenido relacionado

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.