Publicado 2026-03-29
Cuando se innova en productos, el mayor temor es que si se reemplaza el chip de control principal, el original bien ajustadoservodejará de girar. Muchos amigos obtuvieron una nueva placa de desarrollo STM32 y quisieron mover laservoprograma utilizado originalmente en otras placas, pero descubrió que no respondía o se sacudía violentamente. De hecho, siempre que se aclaren algunos puntos clave del trasplante, no es nada complicado. Hoy hablaremos sobre cómo "mover" suavemente elservoprograma entre diferentes modelos STM32.
El núcleo del servocontrol es generar una onda PWM con un período de aproximadamente 20 ms y un tiempo de alto nivel que oscila entre 0,5 ms y 2,5 ms. Por lo tanto, el primer paso en la migración del código es encontrar los temporizadores y canales en la nueva placa que puedan generar PWM. Su programa original usaba CH1 de TIM2, pero ahora es posible que deba cambiarlo a CH2 de TIM3. Esta correspondencia deberá confirmarse claramente en la ficha técnica del chip. En realidad, el cambio es sólo una cuestión de unos pocos parámetros. Una vez que se cambian el número del temporizador y el número del canal, se puede utilizar la mayor parte del código.
Después de cambiar la configuración del temporizador, no olvide verificar la frecuencia del reloj. Los diferentes modelos de STM32 pueden tener diferentes fuentes de reloj para el reloj y el temporizador del sistema. Por ejemplo, la frecuencia principal original de 72 MHz utilizada en la serie F1 puede convertirse en 48 MHz cuando se cambia a la serie F0. En este momento, debe volver a calcular el coeficiente de división de frecuencia PWM y recargar el valor para garantizar que el período PWM de salida final siga siendo de 20 ms. En pocas palabras, los dos parámetros ARR y PSC se recalculan en función del reloj del nuevo chip para garantizar que el servo pueda recibir las señales que reconoce.
Al seleccionar pines, no busque simplemente un GPIO y conéctelo. Primero debes buscar aquellos pines con la función "", que son pines de salida de hardware PWM. La ventaja de utilizar hardware PWM es que no ocupa recursos de la CPU, la salida de pulso es muy estable y el servo gira suavemente. Si tiene que usar GPIO normal para simular a través de la función de retardo, la CPU se agotará, y si el programa se vuelve un poco más complicado, la sincronización se estropeará fácilmente y el servo definitivamente temblará.
Después de seleccionar el pin, en la parte de inicialización del programa, debe configurar el modo de trabajo GPIO en salida push-pull multiplexada. Esto es como asignar responsabilidades laborales a este pin y decirle "usted es responsable de emitir la señal PWM". Además, si la placa de circuito original tiene una resistencia pull-up pero la nueva no, debe considerar si habilitar la pull-up interna en el código para garantizar que el pin tenga un cierto estado de nivel cuando esté inactivo para evitar interferencias de señal.
A mucha gente le duele la cabeza al calcular la frecuencia. De hecho, existe una forma sencilla. El ciclo PWM requerido por el servo es de 50 Hz, que es un ciclo de 20 ms. No importa qué temporizador utilices, el objetivo es llevar la frecuencia a 50 Hz. La fórmula de cálculo es simple: frecuencia de salida del temporizador = reloj del sistema / (PSC+1) / (ARR+1). Primero configura el PSC en un número conveniente, como 7200-1, y luego invierte el valor ARR para que el resultado final esté cerca de 50 Hz.
Por ejemplo, si el reloj del sistema es de 72MHz y configura PSC en 7200-1, entonces la frecuencia de conteo del temporizador será de 10kHz. Para que la frecuencia de salida alcance los 50 Hz, se debe configurar ARR en 200-1, de modo que se cuenten cada 200 números, que son 20 ms. Los diferentes chips tienen diferentes frecuencias principales, por lo que puede calcular de acuerdo con esta idea para asegurarse de que el ARR y el PSC calculados finalmente sean números enteros, y que el ARR no debe exceder el valor de conteo máximo del temporizador, para que el programa se ejecute sin problemas.
Si quieres que una placa controle varios servos al mismo tiempo, depende de cuántos canales tenga el temporizador. Un temporizador generalmente tiene 4 canales, cada canal puede generar un PWM de forma independiente y la frecuencia se comparte. Por lo tanto, siempre que todos sus servos funcionen a 50 Hz, puede usar un temporizador para controlar 4 servos, lo que puede ahorrar muchos recursos del temporizador. Sólo necesita configurar varios canales durante la inicialización y establecer sus valores de comparación respectivamente.
Si es necesario controlar más de 4 servos, se debe habilitar un segundo temporizador. Al trasplantar, puede escribir el código de inicialización para controlar un solo servo como una función, llamarlo tantas veces como necesite para controlarlo y pasar el número del temporizador y el número de canal como parámetros. De esta manera, el código es altamente reutilizable y será fácil de mantener sin importar cuántos servos se agreguen en el futuro. Recuerde, el registro de comparación de cada canal es independiente y puede operarlo por separado al configurar el ciclo de trabajo.
¿El programa está grabado pero el servo no responde? No te preocupes, empieza con el hardware más sencillo. Utilice un multímetro para comprobar si la fuente de alimentación y la tierra del servo están conectadas correctamente. El servo tiene altos requisitos de corriente, por lo que debe utilizar una fuente de alimentación externa. No espere que los 3,3 V de la placa de desarrollo puedan encenderse. Si no hay ningún problema con la fuente de alimentación, use un osciloscopio o un analizador lógico para ver si hay una forma de onda de salida en los pines del chip y ver si el período y el ancho del pulso son correctos.
Si la forma de onda es correcta pero el servo aún no gira, puede haber un problema con la lógica del código. Puede escribir primero el programa de prueba más simple y generar un nivel alto fijo de 1,5 ms para devolver el servo a la posición media. Si esto se puede activar, significa que no hay problema con el controlador subyacente y el problema radica en su lógica de control. Agregue funciones gradualmente, cambie poco a poco y utilice el método de eliminación para localizar rápidamente el problema, que es mucho más rápido que adivinarlo usted mismo.
Ahora que hemos realizado el trasplante básico, podemos hacer algunos trucos. Por ejemplo, si desea que el servo gire a un ángulo específico, puede escribir una función de conversión de ángulo para asignar de 0 a 180 grados a un valor de ancho de pulso de 0,5 ms a 2,5 ms. De esta manera, no es necesario recordar esos complicados valores de tiempo. Puede llamar directamente a la función y pasar el ángulo. La legibilidad y portabilidad del código mejorarán enormemente y otros lo entenderán de un vistazo.
Para otro ejemplo, también puede agregar filtrado de software para evitar cambios repentinos en la señal de control que hagan que el servo "tiemble". En proyectos reales, los datos enviados por el sensor inevitablemente tendrán fluctuaciones. Si agrega un filtro de media móvil simple al programa y luego lo envía al servo, el movimiento será mucho más suave. Encapsule estas funciones extendidas en módulos independientes. La próxima vez que se trasplanten a otros proyectos, estas "acumulaciones" se podrán utilizar directamente y se duplicará la eficiencia del desarrollo.
¿Dónde está estancado su proyecto de servotrasplante? ¿Es porque la configuración de los pines no está clara o el cálculo de la frecuencia siempre es incorrecto? Bienvenido a dejar un mensaje en el área de comentarios para hablar sobre su experiencia. Si crees que este artículo te resulta útil, recuerda darle me gusta y guardarlo. ¡También puede buscar en el sitio web oficial de nuestra empresa más casos prácticos y plantillas de código!
Hora de actualización: 2026-03-29
Comuníquese con el especialista en productos de Kpower para recomendarle un motor o caja de cambios adecuado para su producto.