01 · Punto de partida
Del encendido al ajuste de marcha
En el tema anterior vimos los estados del puente H: marcha, rueda libre y frenado. Ahora vamos a alternar estados rápidamente para modificar la energía entregada al motor. La técnica se llama modulación por ancho de pulso, o PWM.
El transistor trabaja principalmente como interruptor: conduce o deja de conducir. Cambiamos la duración relativa de esos estados, en lugar de pedirle que disipe toda la diferencia de tensión como una resistencia variable.
En este tema la orden se ajusta en lazo abierto. Usaremos los encoders del tema 9 cuando estudiemos control de velocidad con realimentación.
02 · Geometría temporal
Período, frecuencia y ciclo de trabajo
Un período T contiene un tiempo activo Ton y uno inactivo Toff. La frecuencia indica cuántos períodos ocurren por segundo; el ciclo de trabajo D indica qué fracción del período está activa.
f = 1 / T
D = Ton / T
Ton = D · T; Toff = (1 − D) · T
Con f = 500 Hz, T = 2 ms. Si D = 25 %, Ton = 0,5 ms y Toff = 1,5 ms. Con D = 75 %, la frecuencia sigue en 500 Hz, pero Ton pasa a 1,5 ms.
Expresá D como 0,25 en las ecuaciones o como 25 % al mostrarlo. Mezclar ambas escalas es un error frecuente. A 0 % no hay intervalos activos y a 100 % no hay intervalos inactivos en la señal ideal.
Cambiar frecuencia no es lo mismo que cambiar D. A 20 kHz y 25 %, Ton es 12,5 µs: la proporción se conserva, pero cada pulso es mucho más corto.
03 · Lo que recibe la carga
Tensión media y corriente del motor
Una señal ideal que alterna entre 0 y VM tiene valor medio D · VM. Con 6 V y 50 %, ese promedio es 3 V. Pero durante cada pulso sigue alcanzando 6 V; no se convirtió en una fuente continua perfecta de 3 V.
La corriente depende de resistencia, inductancia, fuerza contraelectromotriz y caminos de recirculación. Puede continuar durante el intervalo inactivo. La inercia también evita que la velocidad siga cada flanco como si el eje pudiera acelerar y detenerse instantáneamente.
En ciertas condiciones de conducción y frecuencia, un modelo promediado permite aproximar el comportamiento. No es una igualdad universal entre D y velocidad:
La tensión real entre terminales depende de los estados del puente. En rueda libre puede quedar determinada por diodos y corriente; no hay que asumir automáticamente que Toff equivale a cero voltios en el motor.
04 · Interfaz de potencia
Qué estados conmuta el driver
La señal PWM llega a una entrada lógica, pero la corriente circula por la etapa de potencia. Para el DRV8833 del tema anterior, despierto y sin inhibición:
| IN1 | IN2 | Durante marcha | Durante el resto |
|---|---|---|---|
| PWM | 0 fijo | 10: polaridad positiva | 00: rueda libre / decaimiento rápido |
| 1 fijo | PWM complementario | 10: polaridad positiva | 11: frenado / decaimiento lento |
En la segunda fila, «complementario» significa que IN2 está bajo durante la fracción de marcha y alto durante el resto. Por eso aumentar el tiempo alto de IN2 puede reducir el tiempo de marcha: hay que definir qué ciclo estamos llamando orden.
Los términos rápido y lento describen el decaimiento de corriente en esos modos, no una velocidad mecánica garantizada. La recirculación cambia la respuesta a bajo D y el rizado de corriente.
Otros drivers tienen un pin PWM separado, una interfaz dirección/habilitación o reglas distintas. Revisá la tabla antes de aplicar una señal. En el ejemplo Arduino usaremos solamente PWM en IN1 con IN2 en LOW y un único sentido.
05 · Elegir una escala temporal
Elegir frecuencia
Una frecuencia baja puede producir sonido, vibración y variaciones grandes de corriente. Una más alta puede reducir ciertos efectos audibles y el rizado, pero aumenta el número de conmutaciones y puede elevar pérdidas del driver.
| Aspecto | Qué comprobar |
|---|---|
| Motor y carga | Ruido, vibración, corriente y respuesta a bajo ciclo |
| Driver | Frecuencia admitida, pulsos mínimos, retardos y pérdidas |
| Microcontrolador | Temporizador, resolución y conflictos con otras funciones |
| Control | Intervalo de actualización de la orden y tiempo de medida |
Pololu describe el compromiso entre frecuencia PWM y comportamiento de su controlador. Evitar una frecuencia audible no garantiza silencio total ni elimina todas las pérdidas.
No hay una frecuencia única válida para cualquier motor. Elegí dentro de las especificaciones, medí temperatura y corriente y repetí con la carga real. Un pulso muy corto puede no producir la misma respuesta que sugiere un promedio ideal.
06 · Representar la orden
Resolución y temporizadores
En una interfaz de 8 bits se usan códigos de 0 a 255. Como conversión nominal de porcentaje a código:
Dnominal del código ≈ código / 255
Una orden de 50 % se redondea a 128, aproximadamente 50,2 % en esa escala. El paso nominal es 100/255 ≈ 0,392 puntos porcentuales. La forma exacta de los flancos y los extremos depende del modo del temporizador.
En UNO R3, analogWrite() permite PWM en pines específicos, incluidos 9 y 10. La guía oficial de PWM de Arduino documenta pines y resolución. El nombre de la función no implica una salida analógica continua en esos pines.
Con la configuración habitual, analogWrite(pin, valor) ajusta el ciclo, no una frecuencia arbitraria. Esta depende de placa, núcleo, pin y temporizador. Cambiar registros para modificarla puede afectar bibliotecas, otras salidas o funciones de tiempo.
Para un reloj y esquema de temporización dados, aumentar la frecuencia puede reducir la cantidad de cuentas disponibles por período. Más frecuencia y más resolución no son recursos independientes ilimitados.
07 · El motor no arranca desde cero ideal
Zona muerta e histéresis de arranque
Con órdenes pequeñas, el torque puede no alcanzar para vencer fricción estática y carga. El motor puede consumir y calentarse sin girar. Ese intervalo de órdenes sin movimiento útil se suele llamar zona muerta.
Una vez en marcha, puede seguir girando con una orden menor que la necesaria para arrancar. Por eso conviene medir dos umbrales: el de arranque al subir D y el de parada al bajarlo.
En el laboratorio usaremos un modelo ficticio: arranca a partir de 25 % y se detiene al llegar a 15 % o menos. Entre ambos límites, la respuesta depende de si ya estaba girando. Esa memoria es una histéresis mecánica simplificada, distinta de la histéresis de clasificación del tema 7.
Los valores reales cambian con carga, batería, temperatura, frecuencia, modo de recirculación y sentido. Una tabla medida con ruedas levantadas no necesariamente sirve en el suelo.
08 · Cambiar la orden gradualmente
Rampas de orden
Una rampa limita cuánto cambia el ciclo entre actualizaciones. Puede reducir tirones y exigencias de arranque, pero no establece directamente una aceleración mecánica.
cambio_máximo = tasa_de_cambio · Δt
Si una orden puede subir 20 puntos porcentuales por segundo y se actualiza cada 20 ms, el incremento máximo es 0,4 puntos porcentuales por actualización. Una representación entera puede necesitar un acumulador de mayor resolución para conservar ese paso.
Una rampa lenta puede pasar bastante tiempo en la zona sin giro, con corriente y calentamiento. Hay que coordinarla con el arranque y los límites eléctricos. Una protección de corriente sigue siendo necesaria cuando el conjunto lo requiere.
Al detener por una condición que exige reacción rápida, no siempre corresponde mantener una larga rampa de bajada. Definí qué solicitudes usan rampa y cuáles deben cambiar inmediatamente de estado. Invertir requiere además las precauciones del tema 12.
09 · Código para la placa
Prueba con Arduino y DRV8833
Continuamos con UNO R3 y la placa Pololu DRV8833 del tema 12: AIN1 a D9, AIN2 a D10, SLP a D8 y FLT a D2, con motor entre AOUT1/AOUT2, alimentación adecuada y masa común. Prepará el montaje sin energía y contené el movimiento antes de activar.
C rearma sin mover. Las órdenes 1, 2 y 3 solicitan códigos 64, 128 y 192, respectivamente, durante un máximo de 1500 ms. La orden sube de cuatro en cuatro cada 20 ms. S y los fallos observados desactivan inmediatamente el PWM y enclavan la inhibición.
const byte IN1 = 9, IN2 = 10, SLEEP = 8, FALLO = 2;
bool activo = false;
bool inhibido = true;
int aplicado = 0, objetivo = 0;
unsigned long inicio = 0, ultimoPaso = 0;
void detener() {
analogWrite(IN1, 0);
digitalWrite(IN2, LOW);
aplicado = objetivo = 0;
activo = false;
inhibido = true;
}
void setup() {
digitalWrite(IN1, LOW); digitalWrite(IN2, LOW);
pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
digitalWrite(SLEEP, LOW); pinMode(SLEEP, OUTPUT);
pinMode(FALLO, INPUT_PULLUP);
Serial.begin(115200);
digitalWrite(SLEEP, HIGH);
delay(2); // Despertar, solo en setup y sin orden de marcha.
Serial.println("C: rearmar; 1/2/3: prueba PWM; S: desactivar");
}
void loop() {
const unsigned long ahora = millis();
if (digitalRead(FALLO) == LOW) {
detener();
return;
}
if (activo && ahora - inicio >= 1500) detener();
if (Serial.available() > 0) {
const char cmd = Serial.read();
if (cmd == 'S') detener();
else if (cmd == 'C' && !activo) inhibido = false;
else if (cmd >= '1' && cmd <= '3' && !inhibido && !activo) {
objetivo = (cmd - '0') * 64;
inicio = ultimoPaso = ahora;
activo = true;
}
}
if (activo && ahora - ultimoPaso >= 20) {
ultimoPaso = ahora;
aplicado = min(aplicado + 4, objetivo);
analogWrite(IN1, aplicado);
}
}
IN2 permanece LOW: se alternan marcha positiva y rueda libre. El PWM lo genera el temporizador, aunque el programa solo actualice el código cada 20 ms. La prueba mantiene la configuración de frecuencia del entorno Arduino; no intenta generar 20 kHz.
El máximo de 1500 ms incluye la rampa. A ritmo ideal, el código 192 se alcanza en 960 ms. Si el lazo se retrasa, la rampa también: este ejemplo no recupera pasos atrasados. No se miden RPM ni corriente, así que el código no garantiza una velocidad o un arranque concreto.
Detener deja 00, que aquí significa rueda libre, no frenado activo. La lectura de fallo es por sondeo y las órdenes serie pueden quedar almacenadas; esta prueba manual no sustituye un protocolo con órdenes vigentes ni la parada apropiada de una máquina.
10 · Exploración interactiva
Laboratorios: señal y respuesta con memoria
1. Forma de onda ideal
Se dibuja una señal ideal entre 0 y VM. Es una ilustración temporal, no una simulación de la tensión de un motor durante recirculación.
Modificá ciclo y frecuencia.
El gráfico usa el ciclo ideal solicitado; el código de 8 bits es una comparación de cuantización y no cambia la onda dibujada. Con 50 %, 500 Hz y 6 V: T = 2000 µs, Ton = Toff = 1000 µs y media ideal de 3 V. El código más cercano es 128.
Pasá a 20 kHz: el período baja a 50 µs y Ton a 25 µs. El promedio ideal sigue siendo 3 V. El dibujo conserva tres períodos y por eso ocupa el mismo ancho: cambiaron sus tiempos, no la proporción.
2. La misma orden puede dar dos estados
Modelo ficticio de régimen: arranca si D ≥ 25 %, se detiene si D ≤ 15 %. Cuando gira: RPM = 300 · (D − 15) / 85. Se omiten inercia, corriente y frecuencia; cada aplicación supone que terminó el asentamiento.
El modelo empieza detenido. Mover el control no aplica una orden.
| Paso | Orden | Estado previo | Estado final | RPM |
|---|---|---|---|---|
| Sin órdenes aplicadas. | ||||
Recorrido guiado de arranque
- Aplicá 20 % desde reposo: el modelo queda detenido.
- Aplicá 40 %: arranca y se establece en unas 88,2 RPM.
- Volvé a aplicar 20 %: sigue girando a unas 17,6 RPM. La misma orden no tuvo el mismo resultado que al comenzar.
- Aplicá 15 %: se detiene. Subir luego a 20 % ya no alcanza para arrancar.
- Ejecutá el barrido completo y compará las filas de 20 % en subida y bajada. Reiniciar devuelve el eje al reposo del modelo y borra el historial.
Los umbrales y las RPM son ilustrativos, no una curva medida. El estado «detenido» no implica corriente cero en un motor real. Tampoco se modela cuánto tarda en detenerse al aplicar cero.
11 · Código ejecutable
Un barrido de órdenes en Python
El siguiente código reproduce el segundo laboratorio. El estado anterior forma parte de la entrada del modelo; no basta una función que dependa solo del porcentaje.
Probalo en el navegador. Python se descarga con Pyodide la primera vez y requiere conexión. Podés editar el ejemplo; no controla hardware.
ordenes = [0, 10, 20, 25, 40, 70, 100, 70, 40, 25, 20, 15, 0]
girando = False
for duty in ordenes:
previo = girando
if girando and duty <= 15:
girando = False
elif not girando and duty >= 25:
girando = True
rpm = 300 * (duty - 15) / 85 if girando else 0.0
codigo = int(255 * duty / 100 + 0.5)
print(f"D={duty:3} %; código={codigo:3}; "
f"antes={previo}; ahora={girando}; RPM={rpm:.1f}")La primera orden de 20 % produce 0 RPM. La segunda, después de haber arrancado, produce unas 17,6 RPM. La orden de 25 % inicia el giro en el barrido y la de 15 % lo detiene.
Si cambiás los umbrales, asegurate de conservar un umbral de parada menor que el de arranque y modificá también la curva de régimen si corresponde. Un modelo sencillo sirve para explorar una idea; no sustituye las mediciones del actuador.
12 · Método y diagnóstico
Medir, calibrar y cerrar el lazo
- Fijá tensión, frecuencia, modo del driver, carga y sentido de giro.
- Subí la orden por etapas controladas y registrá corriente, RPM, estado de arranque y temperatura.
- Repetí bajando para identificar el umbral de parada y la histéresis.
- Repetí con batería y carga dentro del rango previsto, sin sostener un bloqueo.
- Definí límites, tiempo de intento de arranque y respuesta ante ausencia de movimiento.
- Usá encoder y control con realimentación cuando necesites mantener una velocidad ante perturbaciones.
Una tabla D→RPM calibrada puede dar una orden inicial aproximada, pero no corrige por sí misma una pendiente o un cambio de batería. En un lazo cerrado, comparás RPM deseadas y medidas para ajustar la salida dentro de límites.
«50 % PWM significa media velocidad»
La velocidad depende de carga, alimentación, pérdidas y recirculación. El porcentaje describe tiempo de una señal, no una medición de giro.
«Aumentar la frecuencia hace que gire más rápido»
Puede cambiar el comportamiento y las pérdidas, pero no equivale a aumentar la orden. A igual ciclo, el promedio de una señal ideal 0–VM se conserva.
«analogWrite cambia automáticamente frecuencia y voltaje continuo»
En los pines PWM del UNO R3 ajusta una señal temporizada. Sus parámetros dependen del hardware y del núcleo; no es una fuente analógica regulada.
«Una rampa de PWM fija la aceleración del robot»
Limita la variación de la orden. La aceleración física depende del torque neto, masa, transmisión y superficie.
«Si no gira, bajo la orden y ya no consume»
Puede seguir circulando corriente sin movimiento. Un atasco o una orden bajo el umbral requiere límites de tiempo y corriente adecuados.
13 · Práctica guiada
Predecí antes de comprobar
1. Tiempos de una señal
Una PWM tiene frecuencia de 2 kHz y ciclo de 30 %. Calculá período, Ton y Toff.
Ver solución
T = 1/2000 = 0,5 ms = 500 µs. Ton = 150 µs y Toff = 350 µs.
2. Media ideal
Una señal alterna entre 0 y 8 V con D = 40 %. ¿Qué promedio tiene? ¿Podés afirmar que el motor gira al 40 %?
Ver solución
Promedio ideal: 0,4 × 8 = 3,2 V. No determina las RPM: faltan motor, carga, recirculación y condiciones eléctricas.
3. Conversión a 8 bits
¿Qué código cercano corresponde al 75 % en una escala 0–255?
Ver solución
redondear(0,75 × 255) = 191. Su porcentaje nominal es 191/255 × 100 ≈ 74,90 %.
4. Arranque con memoria
Con los umbrales del modelo, ¿qué ocurre al aplicar 20 % desde reposo y luego al aplicar 20 % después de haber girado al 40 %?
Ver solución
Desde reposo no arranca. Después de girar se mantiene a unas 17,6 RPM de régimen ficticio, porque 20 % es mayor que el umbral de parada de 15 %.
5. Rampa
La orden sube cuatro códigos cada 20 ms, desde 0 hasta 128. ¿Cuánto tarda idealmente? ¿Eso fija las RPM finales?
Ver solución
Necesita 32 pasos: 32 × 20 = 640 ms. Es una rampa de orden, no una garantía de velocidad física final.
6. Dos frecuencias
El PWM funciona a 20 kHz y la orden se actualiza cada 20 ms. ¿Cuántos períodos de portadora transcurren entre actualizaciones?
Ver solución
20000 × 0,020 = 400 períodos. La generación de la señal es mucho más rápida que la actualización del lazo.
14 · Síntesis
Ideas para recordar
- PWM cambia tiempos de conmutación; frecuencia y ciclo de trabajo son parámetros distintos.
- El promedio D · VM pertenece a una señal ideal de dos niveles, no a toda condición de un motor con recirculación.
- La interfaz y el estado inactivo del driver modifican corriente y respuesta.
- Más frecuencia puede reducir ciertos efectos y aumentar pérdidas; debe verificarse en el conjunto.
- Resolución, frecuencia y temporizadores tienen límites y posibles conflictos.
- La zona muerta y la histéresis hacen que la misma orden no siempre produzca el mismo estado.
- Una rampa limita el cambio de orden y no garantiza aceleración o corriente.
- Para mantener velocidad frente a perturbaciones hace falta medición y realimentación.
¿Listo para el tema 14?
Antes de avanzar, calculá los tiempos de una PWM, explicá por qué el promedio no basta para conocer RPM y describí cómo medirías los umbrales de arranque y parada de tu robot.
En el próximo tema estudiamos motores paso a paso: pasos, microstepping, drivers y control de posición en lazo abierto.