¿Cuál es la forma más sencilla de generar PWM sin un microcontrolador?

15

¿Cuál es la forma rápida y elegante de generar PWM sin un microcontrolador para controlar un servomotor? Con potenciómetro u otras formas de controlar el ciclo de trabajo con período fijo.

  • perdón por el desastre, quiero controlar un servo hobby.
pstan
fuente
¿Realmente te refieres a controlar un motor como parte de un sistema de control de servo, o estás preguntando sobre el control de un "servo de hobby"? Ver además de mi respuesta.
Olin Lathrop
1
¿Por qué quieres PWM? PWM es a menudo solo una forma para que un micro se aproxime a una función de control analógico. Si lo que realmente desea es una tensión o corriente analógica, probablemente haya formas mucho mejores de hacerlo.
The Photon
2
@ThePhoton Si está controlando un servo de hobby, PWM es lo que se requiere como señal de control.
Nick Johnson
Si elimina el requisito de período fijo, un oscilador delta-sigma sería una solución muy simple. He visto implementaciones con un solo opamp y un puñado de resistencias / condensadores. Esto supone que no estás hablando de RC-servo.
jippie
1
@jippie - ¿Qué es un oscilador delta-sigma? Sé que un ADC delta-sigma necesita un oscilador, pero siempre supuse que era algo común, ya que en realidad no es parte del convertidor.
stevenvh

Respuestas:

25

Recomiendo el (GASP!) 555 Timer en modo "astable" . Encontrarás todo lo que necesitas en el enlace, ¡pero los copié aquí solo para ti!

El modo estable le brinda una frecuencia PWM variable y también permite un ciclo de trabajo ajustable (ecuaciones de tiempo alto y bajo en el enlace).

El circuito:

555 Temporizador, modo astable

Nota: Agregaría una tapa electrolítica a través de Vcc (cable positivo) y GND (cable negativo) para reducir el efecto de las caídas en el voltaje de la fuente de alimentación.

La frecuencia PWM:

Frecuencia de salida del temporizador 555 en modo astable

Alguna defensa para mi respuesta en comparación con otros en esta publicación. La mayoría de las otras respuestas requieren una forma de onda intermedia para generar una señal PWM variable, como el método común de onda triangular / comparador. No veo mucho sentido en construir un generador de onda triangular (un circuito significativo en sí mismo) solo como un paso intermedio para resolver su problema.

El 555 es un gran chip analógico y hace justo lo que necesita. Desearía que la gente no los odiara tanto.

kevlar1818
fuente
2
Me gustan los 555, pero creo que @supercat tiene razón en que un solo 555 no podrá darle una señal de frecuencia fija y relación de trabajo variable. C se carga a través de R1 + R2 y se descarga a través de R2. Si aumenta R2, aumentará los tiempos de encendido y apagado y, por lo tanto, el período. Si aumenta R1, solo aumenta el tiempo de activación, pero también el período. Si aumenta C, aumentará todos los tiempos, incluido el período. Necesitas dos 555s. Uno, en modo astable, que determinará el período, activando un segundo, en modo monoestable, que determinará la relación de trabajo.
Telaclavo
55
"Encontrarás todo lo que necesitas en el enlace". No. Esa no es la forma correcta de responder. Proporcione los detalles aquí.
stevenvh
1
No odio el 555, solo deseo que la gente no se refiera a ellos como la mejor solución para todo . Un solo 555 no es la mejor manera de controlar un servo hobby.
stevenvh
1
@Telaclavo: tienes razón; no puede variar el ciclo de trabajo y mantener la frecuencia constante. Sin embargo, como menciona WoutervanOoijen, no necesita una frecuencia rígidamente fija para ejecutar un servo. Variar el ciclo de trabajo probablemente crea aproximadamente una oscilación del 10-20% (estimación aproximada) en la frecuencia del pulso, que debería ser lo suficientemente precisa para la mayoría de los servos. Y, de nuevo, no es necesario ajustar el ciclo de trabajo para controlar un servo de todos modos.
kevlar1818
2
@stevenvh Avísame cuando muera Wikipedia. Incluso si lo hace, como Dean demostró con su comentario anterior, el 555 es (era) tan omnipresente que sería difícil no encontrar un libro viejo, un pequeño blog o un sitio web de pasatiempos con información sobre ellos.
kevlar1818
8

La forma indicada por Ye Olde para hacer PWM con un ciclo de trabajo controlado analógico es comparar la señal de control analógica con una onda triangular. Haces un generador de ondas triangulares que funciona a la frecuencia PWM deseada. Esto se alimenta a la entrada negativa de un comparador y la señal de control analógica a la entrada positiva. El resultado es completamente alto o completamente bajo, pero el ciclo de trabajo es linealmente proporcional a la señal de control. Los primeros amplificadores de audio de clase D trabajaron en este principio, por ejemplo.

En muchos casos, el PWM no necesitaba ser súper lineal, por lo que la onda triangular no tiene que tener bordes perfectamente rectos. Permitir que sean un poco exponenciales puede simplificar el circuito.

Adicional:

Mark Rages señaló que cuando dices "servomotor", podrías estar refiriéndote a los pequeños motores de pasatiempo controlados por posición utilizados en modelos de aviones y similares. Mi respuesta se aplica al control de un motor, suponiendo que tenga un voltaje analógico proporcional a la fuerza con la que desea conducir el motor. No se aplica a estos "servos de pasatiempo". Esos no están controlados por PWM en el sentido común de ese término, sino por el ancho de los pulsos que generalmente necesitan ser de 1 a 2 ms repetidos cada 20 a 50 ms más o menos. Si esta pregunta es realmente acerca de los servos de hobby, entonces debe solucionarse para que quede claro.

Olin Lathrop
fuente
Si bien esto logra la tarea, es importante tener en cuenta que @pstan quiere conducir un servo, por lo que tener un generador de funciones en su implementación probablemente no sea muy portátil.
kevlar1818
1
Los ciclos de servicio del servomotor son generalmente bastante bajos, como 10% o menos. Y el servo usa el ancho de pulso directamente, no el valor promedio, por lo que es mejor usar un circuito que desacople el ancho de pulso de la frecuencia de repetición.
markrages
1
@kevlar: volví a verificar mi respuesta y todavía no veo mención de un generador de funciones allí. Todo lo que dije fue que necesitas una onda triangular o algo lo suficientemente cerca. Ciertamente no necesitas un generador de funciones para hacer uno de esos.
Olin Lathrop
@Markrages: ¿Eh? Los motores ven el promedio de un tren de pulsos si es lo suficientemente rápido. Unos pocos 100 Hz son lo suficientemente buenos en ese sentido para la mayoría de los motores. La parte del servo se realiza mediante el esquema de control, sobre el cual el OP no preguntó. Parece que ya tiene un nivel analógico proporcional a la dificultad del motor.
Olin Lathrop
@Markrages: ¿Se me ocurrió que estás hablando de servos de hobby, que quieren un pulso de 1-2 ms cada 20 ms? Su comentario tiene algún sentido en ese sentido, pero el OP no mencionó en absoluto los servos de hobby.
Olin Lathrop
7

Onda triangular Comparador. Umbral de control. Esa es la forma básica de hacerlo.

PP

ingrese la descripción de la imagen aquí

Primero genera una onda cuadrada de 50Hz. La forma más simple:

ingrese la descripción de la imagen aquí

Ω resistencia de y un condensador de 100nF le proporcionarán un período de 20 ms.

REXTCEXT

T=REXT×CEXT

μΩ y C en nF.

ΩΩ potenciómetro de .

Podría haber hecho esto con dos LM555, pero necesitaría más componentes externos.

editar (sobre microcontroladores)
Estoy de acuerdo con Olin (ver comentarios) en que excluir un microcontrolador es miope (Olin dijo "tonto"). Hubo un tiempo en que desarrollar un microcontrolador era complicado, pero hoy ya no es cierto. También puede tener una interfaz de programación por unos pocos euros. La solución se vería tan fácil que ninguna solución sin controlador puede competir con ella: usted toma un ATTiny5 (Olin toma un PIC10F220) en un SOT23-6. Conecte un condensador de desacoplamiento a las conexiones de alimentación y el potenciómetro a la entrada ADC. ¡Eso es! 3 (tres) componentes. Convertir la lectura de ADC a una salida de ancho de pulso es tan fácil que es casi ridículo, incluso para un programador principiante.

Una vez que comience con ellos, encontrará que los microcontroladores a menudo ofrecen una solución más simple y más flexible que con otros circuitos integrados o componentes discretos.

una nota
de su otra pregunta que me parece que tú haces microcontroladores de uso. ¿Por qué quieres evitarlos aquí?

stevenvh
fuente
¿Cuál es la forma de obtener una onda triangular?
m.Alin
1
@ m.Alin - Si quieres un triángulo muy limpio, esta es la forma correcta. Pero la entrada del inversor en mi oscilador también se aproxima a un triángulo, aunque las pendientes son realmente exponenciales.
stevenvh
1
hablando localmente, 555 es más barato que 74HCT1G14 aquí. +1 BTW. \
Standard Sandun
3
@stevenvh "Si quieres un triángulo muy limpio, esta es la forma correcta". Según su lógica, esto es completamente inaceptable. Incluya esto en su respuesta muy informativa y completa.
kevlar1818
2
@pstan: si sus especificaciones no son demasiado altas, probablemente usaría el circuito 555. Está lejos de ser perfecto: la frecuencia varía con el ciclo de trabajo y el control no es lineal. El generador de triángulos + comparador resuelve esos inconvenientes.
stevenvh
4

La forma más sencilla de generar una señal PWM es alimentar una onda de diente de sierra o una onda triangular en una entrada de un comparador analógico y un voltaje de control en la otra. Si no se puede obtener una onda triangular pura, se puede aproximar razonablemente una pasando una onda cuadrada a través de un filtro RC de modo que la salida del filtro oscile entre aproximadamente 1 / 4VDD y 3 / 4VDD, y luego escale el voltaje de control. en el comparador para que el voltaje de control que debe producir el ciclo de trabajo del 0.01% se traduzca al voltaje más bajo de la onda cuadrada filtrada, y el voltaje de control que debe producir el ciclo de trabajo del 99.99% se traduzca al voltaje más alto del filtrado ola cuadrada. Esto producirá un ancho de pulso que no es linealmente proporcional a la amplitud, pero está lo suficientemente cerca para muchos propósitos.

Super gato
fuente
1
Y esto es exactamente lo que hace el circuito NE555 según lo propuesto por kevlar1818 ...
Cees Meijer
2
@CeesMeijer: El póster solicitó un ciclo de trabajo variable y un período fijo. No conozco ninguna forma de usar un solo 555 para convertir un voltaje de control en una onda de ciclo de trabajo variable de frecuencia fija. Sin embargo, podría servir muy bien generar una onda triangular para alimentar un comparador.
supercat
Han pasado 20 años desde que construí este circuito, así que tuve que buscarlo. Y de hecho tienes razón. Usé un disparador externo para obtener una frecuencia constante. Sin embargo, podría usar un segundo 555 para eso.
Cees Meijer
2

Recomiendo usar un IC de control de fuente de alimentación de bajo voltaje (BiCMOS) como el UCC3803 . La frecuencia de funcionamiento se puede configurar fácilmente con un simple R y C, y el control del ciclo de trabajo se realiza fácilmente con un potenciómetro. Funcionará en un carril de 5V.

Extracto de la hoja de datos TI UC3842

El UCC3803 es compatible con clavijas con la serie UCx84x de controladores PWM. Si desea hacer PWM fácil, puede usar el esquema anterior, omitiendo R1, el potenciómetro de ajuste 2N2222 y 5k ISENSE (solo ate el pin 3 al suelo). Probablemente también puede omitir las dos resistencias de 4.7k en serie con el potenciómetro de ajuste del amplificador de error e ir directamente a Vref y Gnd, o usar un divisor de voltaje explícito si el ajuste no es necesario. (No especificó si necesita cambiar fácilmente el ciclo de trabajo).

El IC es capaz de conducir alrededor de 1A de corriente. (Si su servomotor tiene una entrada PWM, este es un punto discutible).

Adam Lawrence
fuente
"puede necesitar un controlador externo para alimentar realmente el motor". ¿Estás seguro? Siempre pensé que la entrada PWM es solo un nivel de señal de baja corriente. Para el poder, un servo tiene una tercera conexión.
stevenvh
Además, solo recuerdo que el ciclo de trabajo es solo del 5 al 10%. Esa puede ser la forma correcta de suministrar energía.
stevenvh
Esto es bonito. Pero aún cuenta con muchos componentes externos.
Estándar Sandun
Se parece más a un UEMIG: Generador EMI innecesario. :-(
stevenvh
También parece necesitar una entrada mínima de 10V. Tal vez no sea la mejor opción ...
stevenvh