En este tutorial, le enseñaré cómo controlar la velocidad del motor de CC utilizando el microcontrolador stm32 y el IC de control de puente half h l293d. Los motores de CC son motores comunes que se ven en sus hogares (bombas de agua de CC, ventiladores de CC), juguetes, etc. Los motores de CC giran a una velocidad constante, pero su velocidad se puede variar y controlar mediante determinadas técnicas. Una de estas técnicas y la más popular es dotarlo de un voltaje variable. Por voltaje variable me refiero a proporcionar menos cantidad de voltaje (potencia) que la clasificación máxima de un motor de CC específico. Al igual que nuestros ventiladores de techo (funcionan con voltaje CA), la velocidad de rotación se controla variando el potenciómetro (resistencia variable) conectado al casquillo del botón. La resistencia varía la potencia cuando giramos su perilla en cualquier dirección.
La resistencia variable es una buena opción para controlar la velocidad del motor. Pero si queremos insertar alguna lógica de control (por ejemplo, cambiar la dirección de rotación del motor) o controlar con precisión las rpm de los motores (resoluciones por minuto), entonces la técnica de resistencia variable no puede satisfacer completamente nuestras necesidades. Para lograr una lógica superior, la técnica pwm (modulación de ancho de pulso) es la más adecuada. En la modulación de ancho de pulso, el voltaje de entrada constante al motor se divide en subciclos para reducir la cantidad de voltaje de entrada.
En este proyecto nuestro objetivo es controlar la velocidad del motor con un microcontrolador stm32. La técnica Pwm se utiliza en el proyecto para controlar la velocidad y dirección del motor. En el proyecto se utiliza la placa del microcontrolador St32f103c8t6 preensamblada. STM32CUBEMX se utiliza para microcontroladores GPIO STM32F103C8T6, configuración de temporizadores. Keil arm mdk 5 se utiliza para escribir y compilar el código del proyecto. El código está escrito utilizando bibliotecas HAL stm32. Si es nuevo y no conoce las bibliotecas stm32cubemx, keil arm mdk 5 y HAL, le aconsejo que primero haga el tutorial de introducción con las bibliotecas stm32cubemx y keil arm y HAL. Simplemente haga clic en el botón de abajo para hacer el tutorial.
Primeros pasos con las bibliotecas stm32cubemx, keil arm y HAL
Controlaré la velocidad de dos motores de CC conectados al puente half hic l293d. ¿Qué es l293d? Los microcontroladores funcionan con lógica TTL de 3,3 a 5 voltios. Donde los motores DC funcionan de 5 a +24 voltios. No es posible controlar motores directamente desde los pines de salida del microcontrolador. Los pines de salida del microcontrolador solo pueden suministrar 5 voltios y 25 mA de corriente, lo que no es adecuado para que los motores de CC comiencen a girar. Los microcontroladores Stm32 funcionan con lógica TTL de 3,3 voltios. Para este proyecto estoy usando motores de CC de 12 voltios que requieren 200 mA de corriente para una rotación constante. Entonces necesitamos un circuito externo para accionar el motor usando el microcontrolador stm32.
Transistor o Mosfet como circuito externo para conducir, controlar la velocidad y dirección del motor de CC.
Un transistor externo o mosfet es la mejor opción para accionar un motor de 12 voltios utilizando un microcontrolador stm32. La base del transistor, MOSFET, está conectada al pin de salida STM32 y el motor se insertará entre el colector del transistor. Una señal PWM variable a la base del transistor del pin de salida STM32 puede controlar fácilmente la velocidad de rotación del motor de CC. Pero también necesitamos cambiar la dirección del motor, lo cual no es posible en esta configuración.
Circuito h de medio puente para control de dirección de motor CC
En el circuito h de medio puente, se utilizan dos transistores para controlar la dirección de rotación del motor de CC. Hacer un circuito h de medio puente con requisitos de potencia de motor de CC no es una tarea fácil. L293d es un IC preensamblado que contiene dos configuraciones de puente de media h. Podemos conducir, controlar la dirección y la velocidad de dos motores de CC fácilmente con el controlador de motor ic l293d.

Circuito equivalente de canal de puente único Half h L293d
Para conocer la distribución de pines y el propósito de cada pin en el l293d, necesita realizar otro tutorial. Expliqué en profundidad el circuito l293d y su funcionamiento en el tutorial. El tutorial le ayudará a comprender el diagrama de circuito del proyecto a continuación. Haga clic en el botón de abajo para hacer el tutorial.
L293d fijado y funcionando
Proyecto trabajando
Controlaré el sentido de rotación de los motores DC y su velocidad en el proyecto. Para ello decidí conectar cuatro botones como entrada. Los botones controlarán la dirección y velocidad de los motores. Discutiré el propósito de cada botón más adelante. Para cuatro botones como entrada, necesito cuatro gpio del microcontrolador stm32 declarados como entrada. Declaré los pines 6, 7, 8 y 9 del puerto B como entrada. También activé las resistencias pull-up asociadas con estos pines.
Para controlar la dirección de dos motores de CC a través de circuitos de medio puente, necesito cuatro controles. Básicamente, se requieren cuatro pines pgio del microcontrolador para controlar la dirección de rotación de dos motores de CC. Declaré cuatro pines 0, 1, 2 y 3 del puerto A del microcontrolador stm32 como salida.
Finalmente, para controlar la velocidad del motor, necesito dos señales PWM. Usaré los pines 0 y 1 del puerto B como fuentes pwm. Generar pwm usando stm32 no es una tarea fácil. Es necesario tener en cuenta muchas restricciones. Tengo otro tutorial sobre cómo generar pwm con el microcontrolador stm32. He discutido todas las restricciones de frecuencia, ciclo de trabajo y contador, etc. en ese tutorial. Siga este tutorial antes de continuar. Si no sigue el tutorial, no podrá comprender el código siguiente.
Cálculos y restricciones de fórmulas de generación de stm32 pwm
Si siguió el tutorial anterior, probablemente ahora sepa cómo generar el pwm deseado con el microcontrolador stm32. Para controlar la velocidad del motor DC, tengo que variar la señal pwm. Variar la señal pwm no es una tarea difícil si siguió el tutorial anterior. El enemigo varía la señal pwm, necesitas calcular algunas variables más. En este proyecto estoy generando una señal pwm de ciclo de trabajo variable a una frecuencia de 50 Hz. De hecho, calculé estos valores para otro proyecto (servomotor con microcontrolador stm32) y usé estos valores en este proyecto. Puede ver la configuración del proyecto si lo desea. Esto le ayudará en la configuración de stm32cubemx pwm.
La configuración de Stm32cubemx para este proyecto se tomó prestada de otro proyecto.
La configuración de stm32cubemx gpio y la configuración del temporizador pwm se detallan a continuación. Debe seguir los tutoriales anteriores para comprender cada restricción y cómo se calculan e ingresan en stm32cubemx.

Stm32cubemx pwm timer 3 y configuración de gpio
Estoy usando el oscilador interno de 8 Mhz del microcontrolador stm32f103 como fuente de reloj para pines gpio y para generación pwm. Estos ajustes son necesarios para generar la señal pwm de frecuencia de 50 Hz como se explicó anteriormente.

Configuración del reloj PWM del microcontrolador STM32F103 en STM32CubeMX
Para pwm estoy usando los pines 0 y 1 del puerto B del stm32. A ambos pines del microcontrolador se asocia el temporizador 3. Con el pin 0 el temporizador 3 está vinculado el canal 3 y con el pin 1 el temporizador 3 está vinculado el canal 4. Tenemos que activar estos canales antes de empezar a trabajar con ellos. ¿Cómo activar canales? La configuración se proporciona a continuación.

Configuración pwm del canal del temporizador stm32 en stm32cubemx
Circuito de diseño
Los pines A0 y A1 del puerto A se utilizan para controlar la dirección del motor 1. El pin A0 del microcontrolador está conectado a la entrada 1 de l293d y el pin A1 está conectado a la entrada 2 de l293d. La señal pwm se proporciona para habilitar el pin 1 del motor o el canal 1 de l293d. El pin 1 del puerto B de Stm32 está conectado para habilitar 1 de l293d. De manera similar, los pines A2 y A3 del puerto A del microcontrolador stm32 se utilizan para controlar la velocidad del motor 2 o canal 2 del l293d. El pin A2 de stm32 está conectado a la entrada 4 del microcontrolador stm32 y el pin A3 de stm32 está conectado al pin de entrada 3 del canal 2 de l293d. El pin de habilitación del canal 2 del l293d está conectado al pin B0 del microcontrolador stm32.
Nuestros motores de 12 voltios están conectados a los pines de salida del L293D. El motor 1 está conectado a los pines de salida del canal 1 y el motor 2 está conectado a los pines de salida del canal 2 del controlador de motor L293D. Las clavijas de tierra están conectadas a tierra.
Nota: La conexión a tierra de la fuente de alimentación del microcontrolador stm32 y la fuente de alimentación del motor l293d deben estar conectadas a tierra en común para completar el circuito y funcionar correctamente.

Control de velocidad y dirección del motor CC con microcontrolador stm32 y controlador de motor l293d
Funciones del botón de entrada
- B9: al presionar el botón B9 se cambiará la dirección de rotación del motor de CC. Si avanza, al presionar el botón B9 cambiará la dirección hacia atrás.
- B8: al presionar el botón B8 se establecerá el ciclo de trabajo pwm al 75% y disminuirá con la velocidad de rotación del motor.
- B7: al presionar el botón B7 se establecerá el ciclo de trabajo pwm al 50%. El motor DC gira a la mitad de la velocidad máxima.
- B6: al presionar el botón B6 se establecerá el ciclo de trabajo pwm al 25 % y se reducirá aún más la velocidad de rotación.
Llegando al código. La lógica principal del código es antes y entre el bucle while 1. Si ha seguido los tutoriales anteriores sobre Pwm y stm32cubemx sobre cómo comenzar, podrá comprender fácilmente las instrucciones del código a continuación. Las instrucciones son las mismas que los tutoriales anteriores, solo se cambia la secuencia de instrucciones según se desee en el proyecto.
En el código anterior, las primeras instrucciones antes de que se inicie 1 bucle, tanto los motores de CC como la señal pwm se emiten con un ciclo de trabajo del 100%. Durante 1 bucle, cada pulsación de botón se comprueba continuamente. Si se presiona cualquier botón, se ejecutará la función correspondiente (inversión de dirección, cambio de velocidad). Espero que el código anterior sea fácil para usted si ha seguido todos los tutoriales enumerados en la publicación.
Trabajo futuro:
Con el mismo código y lógica anteriores, no solo puede controlar motores de CC sino también servomotores. En el circuito, debe cambiar algunas configuraciones, como el voltaje de entrada para que l293d accione el servomotor (5 a 12 v). Los servomotores funcionan a una frecuencia de 50 Hz y tienen un ciclo de trabajo de entre 1 milisegundo y 3 milisegundos. Generamos pwm a una frecuencia de 50 Hz. Entonces puedes conectar un servo a la salida y verificar si el código funciona (definitivamente funcionará). También puede atenuar un LED conectándolo a la salida l293d con el mismo código, circuito anterior. Es posible que tengas que corregir la dirección y no cambiarla a LED. Dado que la polaridad del LED no se puede cambiar.
Descarga el código del proyecto. La carpeta contiene archivos de proyecto stm32cubemx y keil arm ide. Todas las bibliotecas y dependencias del proyecto están incluidas en la carpeta. Por favor envíenos sus comentarios sobre el proyecto.
Código/archivos