Tabla de contenido:
- Paso 1: requisitos de hardware y software
- Paso 2: Configuración de STM32CubeMX
- Paso 3: Codificación Keil UVision
- Paso 4: el resultado:)
Video: Control de servomotor con STM32F4 ARM MCU: 4 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
Hola de nuevo amigos:) Entonces, en este proyecto controlaremos un servomotor con STM32F4 ARM MCU. En mi caso, usaré la placa de descubrimiento, pero si comprende la esencia del problema, puede aplicarla para cada MCU. Entonces. empecemos:)
Paso 1: requisitos de hardware y software
En términos de hardware necesitaremos:
- Una MCU que es en mi caso la placa de descubrimiento STM32f4
- Un servomotor común, como SG90 o cualquier otro
En términos de software, necesitaremos:
- STM32CubeMX
- Keil uVision
Si tiene todos estos, vaya al siguiente paso:)
Paso 2: Configuración de STM32CubeMX
Como saben, para controlar un servomotor necesitamos la señal PWM. Los requisitos en términos de señal PWM son así:
- El período de PWM debe ser de 20 mS
- El tiempo debe estar entre 0,5 mS y 2,5 mS. Cuando el tiempo es de 0,5 mS, el servo girará 0 grados, 1,5 mS durante 90 grados y 2,5 mS durante 180 grados.
Entonces, necesitamos configurar PWM y para eso usaremos Timer1.
- Primero, seleccione TIM1 en la sección Temporizadores. Este paso
-
Luego, desde la sección Mode
- Elija reloj interno Este paso
- PWM Generation CH1 Este paso
-
Luego, desde la sección Configuración
- Establezca Prescaler en 160 Este paso
- Establezca el período del contador en 2000 Este paso
- Establezca el pulso en 50 Este paso
- Además, desde la configuración del reloj, configure los relojes del temporizador APB1 en 16MHz. Este paso
Ahora, hablemos un poco sobre este paso:
La frecuencia de nuestro reloj APB1 Timer es de 16MHz. Entonces, significa que se requieren 16, 000, 000 ticks para obtener 1 segundo. Sin embargo, configuramos nuestro preescalador en 160. Es decir, dividimos nuestra frecuencia por ese número y disminuimos el número de tics a 100, 000. Entonces, durante 1 segundo, necesitamos 100, 000 ticks. Sin embargo, necesitamos 20 mS de período PWM como dijimos antes. Entonces, basado en matemáticas simples, necesitamos 2000 ticks para 20 ms. Por lo tanto, al establecer el período del contador en 2000, determinamos el período de la señal PWM que es de 20 mS. Ahora necesitamos determinar el número de tick para obtener tiempos de encendido de 0.5 mS a 2.5 mS. Podemos obtener esta ecuación de matemáticas simples y es:
On_Time = (Tick_Number / 100). Tenga en cuenta que este es el on_time que cambia el ángulo del servomotor. Entonces, debajo de la imagen resumo este paso. Si tienes alguna duda escribe en los comentarios y te responderé lo antes posible.
Imagen de cálculos
Después de hacer todo esto, genere código:)
Paso 3: Codificación Keil UVision
Entonces, primero determinemos qué queremos hacer. Queremos escribir una función que acepte grado y escribirlo en el servo. Entonces, ¿cómo lo haremos? Como hemos dicho antes, para cambiar el ángulo necesitamos cambiar el tiempo. Nuestros ángulos cambian entre [0, 180] y nuestro número de tics, lo que determina los cambios de tiempo entre [50, 250]. Entonces, necesitamos una función de mapeo que mapee un ángulo dado al rango de número de tics. Por ejemplo, para ticks de 0 grados 50, para ticks de 180 grados 250 y así sucesivamente … Así que vamos a escribir nuestra función de mapeo:
int map (int st1, int fn1, int st2, int fn2, int value) {return (1.0 * (value-st1)) / ((fn1-st1) * 1.0) * (fn2-st2) + st2; }
Esta es nuestra función de mapeo. ¿Le interesa cómo se deriva? Entonces lee eso. Entonces, tomamos nuestros rangos y el valor que queremos mapear.
Ahora, escriba una función que acepte el ángulo y lo asigne al rango de tics:
void servo_write (ángulo int) {htim1. Instance-> CCR1 = map (0, 180, 50, 250, angle); }
Como puede ver, este código acepta el ángulo y lo asigna al rango de número de tics. Luego, el número de tics se da al registro CCR1 que controla el tiempo de encendido y, por lo tanto, el ángulo.
Sin embargo, para que todo esto funcione, primero iniciamos el pwm, que se puede hacer con solo una línea de código:
HAL_TIM_PWM_Start (& htim1, TIM_CHANNEL_1);
Entonces, tenemos una función que acepta el ángulo y lo escribe en el servo. Probemos y escribamos nuestra función de barrido que es muy fácil:
void servo_sweep (void) {for (int i = 0; i <= 180; i ++) {servo_write (i); HAL_Delay (10); } para (int i = 180; i> = 0; i--) {servo_write (i); HAL_Delay (10); }}
Entonces, solo cuenta hasta 180 y luego hasta 0 y escribe estos valores en el servo:) Entonces, ¡veamos el resultado!
Paso 4: el resultado:)
Así que este es el final. Si tiene alguna pregunta, por favor pregunte. Estaré feliz de poder contestarlas. Muchas gracias por leer y espero verte en el próximo proyecto:)
Recomendado:
Ventilador giratorio con servomotor y control de velocidad: 6 pasos
Ventilador giratorio con servomotor y control de velocidad: En este tutorial aprenderemos a rotar un ventilador con velocidad ajustable usando servomotor, potenciómetro, arduino y Visuino. ¡Mira el video
Control de acceso a la comida para gatos (ESP8266 + servomotor + impresión 3D): 5 pasos (con imágenes)
Control de acceso a la comida para gatos (ESP8266 + Servomotor + Impresión 3D): este proyecto repasa el proceso que utilicé para crear un tazón de comida para gatos automatizado, para mi gato anciano diabético Chaz. Mira, necesita desayunar antes de que pueda recibir su insulina, pero a menudo me olvido de recoger su plato de comida antes de irme a la cama, lo cual spo
Tutorial de Arduino - Control de servomotor con joystick: 4 pasos
Tutorial de Arduino - Control de servomotor con joystick: En este tutorial, aprenderemos cómo usar el servo con Joystick. Controlaremos 1 servomotor con 1 Joystick. Puede implementar sus proyectos de brazo robótico con referencia a este tutorial. Por supuesto, usaremos batería / energía externa al hacer
Tutorial de Arduino - Control de servomotor con potenciómetro: 5 pasos
Tutorial de Arduino - Control de servomotor con potenciómetro: Este instructivo es la versión escrita de mi " Arduino: Cómo controlar el servomotor con potenciómetro " Video de YouTube que he subido recientemente. Te recomiendo encarecidamente que lo pruebes.Visita el canal de YouTube
Control de velocidad del motor de CC mediante el algoritmo PID (STM32F4): 8 pasos (con imágenes)
Control de velocidad del motor de CC mediante el algoritmo PID (STM32F4): hola a todos, Este es tahir ul haq con otro proyecto. Esta vez es STM32F407 como MC. Este es un proyecto de fin de semestre. Espero que les guste. Requiere muchos conceptos y teoría, así que vamos a analizarlo primero. Con la llegada de las computadoras y