Publicado 2026-05-06
¿Alguna vez te has encontrado con esta situación?
Después de conectar el servo a la fuente de alimentación, no hay respuesta. Después de escribir el programa, se produjeron nerviosismo aleatorio. Obviamente seguí las instrucciones, pero no pude girarlo.
No entrar en pánico. Usted no está solo.
En este artículo de hoy, con la ayuda del microcontrolador 51, explicaremos detalladamente el control del servo. No hay contenido matemático complicado, ni tablas de registros incomprensibles, solo las ideas más directas y el marco de código más práctico.
Recuerde este punto clave: si el servo permanece estacionario, se debe en gran medida a un problema de sincronización; Si el servo se mueve aleatoriamente, probablemente se deba a una fuente de alimentación insuficiente.
¿Estás listo?
01 ¿Qué es exactamente un mecanismo de dirección?
Mucha gente compra un servo por primera vez y piensa que es un motor. Se puede encender cuando se enciende la electricidad.
Equivocado.
El mecanismo de dirección no es un motor común y corriente. Es más como un pequeño robot con "cerebro".
Le das una orden y gira al ángulo especificado. Entonces detente. Detente en seco.
¿Cómo se logra esto con el pequeño potenciómetro y el tablero de control en el interior? Cuando envías un pulso, hace algunos gestos y se bloquea una vez que alcanza la posición.
Por lo tanto, para controlar el mecanismo de dirección, no es necesario escribir PID ni realizar cálculos de circuito cerrado. Sólo necesitas aprender una cosa: enviar un pulso.
02 Principio fundamental: un número puede girar el ángulo
Abra su hoja de datos. Encuentre esta oración: El ancho del pulso de alto nivel corresponde al ángulo.
En términos simples: un nivel alto de 0,5 milisegundos girará a 0 grados, si dura 1,5 milisegundos girará 90 grados, y si dura 2,5 milisegundos girará 180 grados.
El período se fija en 20 milisegundos.
¿Está claro? Controlar el servo en realidad significa controlar un puerto IO, levantarlo, esperar un período de tiempo, luego bajarlo y luego esperar el tiempo restante.
Es así de simple.
Por ejemplo, el pulso que gira 90 grados:
Primero, realice una operación de extracción hacia arriba, luego realice un retraso que dure 1,5 milisegundos, luego realice una operación de extracción hacia abajo, y luego realice un retraso que dure 18,5 milisegundos, y luego repita los pasos anteriores en un bucle infinito.
Este es un ciclo de control completo.
03 Antes de escribir un programa, primero configure el entorno
No necesitas equipo sofisticado.
Un microcontrolador 51 (STC89C52 es suficiente)

Un servo (el SG90 o MG995 común servirá)
Algunos cables Dupont
Hay una fuente de alimentación de 5 V, así que no espere que funcione con un microcontrolador. Permítanme decir cosas importantes tres veces: no esperen que funcione con un microcontrolador.
Los servos de muchas personas tiemblan y no giran correctamente. No es un error del programa, sino energía insuficiente.
Cuando el servo está en el momento del arranque, la corriente puede alcanzar más de 1A y la pequeña cantidad de energía consumida por el USB no puede alimentarlo por completo.
¿Qué hacer? Fuente de alimentación externa. Terreno común. Terreno común. Terreno común.
El terminal positivo de la fuente de alimentación debe ser VCC y el terminal negativo de la fuente de alimentación debe ser GND. El GND del microcontrolador también debe conectarse a la fuente de alimentación GND, y luego la línea de señal debe conectarse al puerto IO del microcontrolador.
¿Está conectado el circuito? Felicidades. Se completa la mitad más difícil.
04 Codificación práctica: comience desde lo más simple
No jugamos a lo falso. Proporcione directamente el código que se puede ejecutar.
Puntos clave: utilice un temporizador para generar una interrupción con un período de 20 ms y controle de manera flexible la duración del nivel alto durante la interrupción.。
Idea:
Defina una variable para almacenar el tiempo de alto nivel requerido actualmente, como ese 15, y este 15 representa 1500 microsegundos, que son 1,5 ms.。
Al comienzo de cada período de 20 ms, primero levante el puerto IO.
Retrasar el tiempo de alto nivel.
Baje el puerto IO.
Retrasar el tiempo restante.
Escrito como pseudocódigo:
void main() { Inicializar el temporizador (establecer una interrupción de 20 ms); while(1) { // No hacer nada, confiar en las interrupciones } } void timer interrupción () interrupción 1 { Tirar alto; retraso (tiempo de alto nivel); tirar hacia abajo; retraso (20 ms - tiempo de alto nivel); }
Importante: Los retrasos precisos a nivel de microsegundos requieren el uso de funciones de retraso. Cuando la frecuencia principal de 51 microcontroladores es 11,0592 MHz, un nop equivale aproximadamente a 1,085 microsegundos. Para escribir una función delay_us, la función debe pasar el número de microsegundos e implementarlo restándolo a través de un bucle while.
No tengas miedo de los problemas. Este tipo de depuración de aproximaciones sucesivas es la norma en los sistemas integrados.
05 Deja que el timón se mueva: adelante, atrás, cualquier ángulo
Ahora necesitas lograr: presionar el botón 1, girar a 0 grados; presione el botón 2, gire a 90 grados; presione el botón 3, gire a 180 grados.
Agregue detección de claves en pseudocódigo:
si (se presiona el botón 1) tiempo de nivel alto = 500; // 0,5 ms -> 0 grados si (se presiona el botón 2) tiempo de nivel alto = 1500; // 1,5 ms -> 90 grados si (se presiona el botón 3) tiempo de nivel alto = 2500; // 2,5 ms -> 180 grados

Importante: La unidad de tiempo de alto nivel es microsegundos. 500, 1500, 2500.
No escribas 1, 2, 3. Son milisegundos. 1000 veces peor.
¿Entonces qué? Entonces el servo girará obedientemente al ángulo correspondiente.
¿No lo crees? Inténtalo.
06 Escollos que quizás hayas pisado (P/R)
P: ¿El servo no gira, solo emite un zumbido?
En primer lugar, A, la corriente de suministro de energía es insuficiente o el ancho del pulso es inexacto. Es necesario cambiar la fuente de alimentación a una fuente de alimentación superior a 5 V/2 A y luego verificar si el tiempo de alto nivel está entre 500 y 2500 us.
P: ¿El servo puede girar pero tiembla mucho?
Agregue un condensador grande (valor 470 uF) a ambos extremos de la fuente de alimentación del servo debido a la situación mencionada en A, es decir, hay una diferencia excesiva entre dos ciclos de control adyacentes o la fuente de alimentación tiene ondulaciones.
P: ¿No hay respuesta cuando se graba el programa, pero se desvía cuando se desconecta el cable de señal?
R: El estado de nivel del puerto IO al principio es incierto o el período de tiempo en el que está en nivel alto excede el rango especificado. Al encender el dispositivo, primero debe bajar el nivel del puerto IO y luego darle el valor inicial.。
P: ¿Quiere controlar la rotación continua (como el servo de 360 grados)?
Si esto no funciona, deberás reemplazarlo con un servo que pueda girar continuamente 360 grados. Si el nivel alto es 1,5 ms, el servo dejará de girar. Si es superior a 1,5 ms, el servo girará hacia adelante. Si es inferior a 1,5 ms, el servo girará en sentido inverso.
P: Si no tengo un osciloscopio a mano, ¿cómo puedo confirmar que los pulsos son correctos?
Programe el servo para alternar entre 0 grados y 90 grados cada 1 segundo. Utilice un analizador lógico o un método LED simple para observar si su oscilación es regular.
07 Actualización: deja que el servo se mueva según la curva que dibujes
Un programa con ángulos codificados es demasiado elemental.
Una forma más avanzada de jugar: deja que el servo vaya lentamente de 0 grados a 180 grados y luego regresa lentamente.
¿Cómo hacerlo?
Utilice una variable de bucle llamada ángulo para aumentar de 0 a 180, y el valor del paso no debe ser demasiado grande. Por ejemplo, aumente 1 grado cada vez.。
Por cada incremento de 1 grado, vuelva a calcular el tiempo de nivel alto:
El tiempo de alto nivel es igual a 500 más el ángulo multiplicado por 2000 dividido por 180.
Cabe señalar que 500 corresponden a 0 grados, 2500 corresponden a 180 grados y el rango total es de 2000 microsegundos, que se divide en 180 partes iguales.
Luego retrase 20 ms. Hazlo de nuevo.
El efecto es un swing suave. Como un robot saludando.
Puedes llamar a esto algo llamado "servocinemática", pero no te asustes por su nombre. En esencia, se trata de una especie de interpolación lineal.
08 Vaya un paso más allá: utilice el puerto serie para controlar remotamente el servo
Añadir comunicación serie. La computadora envía un número y el servo gira al ángulo correspondiente.
Por ejemplo, pronuncie "0" y gire 0 grados. Di "90" y gira 90 grados.
Puntos clave:
En el puerto serie del microcontrolador que recibe la interrupción, se analiza la cadena.
Nota: Es posible que no puedas recolectar todo de una vez. Para determinar si se recibe un carácter de nueva línea.
Después de recibir el número completo, el rango se limita a 0~180.
Convierta a tiempo de alto nivel y actualice la variable.
De esta forma, su servo se convierte en un actuador programable. Después de conectarse al módulo Bluetooth, incluso su teléfono móvil puede controlarlo.
09 Resumen: Tres elementos para controlar el mecanismo de dirección
fuente de alimentación. Proporcione suficiente corriente y estabilice el voltaje a la tierra común.
Momento. Período 20 ms, nivel alto 500-2500us.
No realices operaciones de bloqueo, usa interrupciones de temporizador en lugar de usar retrasos que siguen esperando, de lo contrario no podrás hacer nada.
Una vez que domines estas tres cosas, podrás controlar el 99% de los servos del mercado.
Recuerde: al escribir un programa, piense un paso más en "qué pasará si la fuente de alimentación tiembla repentinamente" en lugar de "es suficiente para que el programa se ejecute sin problemas".
10 Ahora es tu turno de actuar
No considere este artículo simplemente como una colección. Encienda su Keil, conecte la placa de desarrollo correctamente y escriba el código anterior una vez.
Existe una alta probabilidad de que las tres primeras veces no giren. No tengas prisa. Tome un multímetro para medir el voltaje y use un analizador lógico para capturar la forma de onda. Si realmente no hay otra manera, prueba a cambiar el servo.
Cada vez que resuelves un problema, tu comprensión del arraigo se profundiza.
Mirando hacia atrás, unos años más tarde, descubrirá que el día en que dominó el mecanismo de dirección fue el punto de partida para comprender verdaderamente "controlar el mundo físico a través del código".。
El pequeño y zumbante servo que tienes en la mano es la primera clave para acceder al mundo de los robots.
No esperes más. Enciéndelo ahora.
Probar.
Hora de actualización: 2026-05-06
Comuníquese con el especialista en productos de Kpower para recomendarle un motor o caja de cambios adecuado para su producto.