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

13

¿Cuál es la manera 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 un período fijo.

  • perdón por el desastre, quiero controlar un servo de pasatiempos.
pregunta pstan

5 respuestas

25

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

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

El circuito:

Nota:agregaríaunatapaelectrolíticaatravésdeVcc(cablepositivo)yGND(cablenegativo)parareducirelefectodelascaídasenelvoltajedelafuentedealimentación.

LafrecuenciaPWM:

Una defensa para mi respuesta en comparación con otras 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 de onda triangular / comparador común. No veo mucho sentido en la construcción del generador de ondas triangulares (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 necesitas. Desearía que la gente no los odiara tanto.

    
respondido por el kevlar1818
8

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

En muchos casos, el PWM no tenía que 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.

Añadido:

Mark Rages señaló que cuando dices "servomotor", podrías estar refiriéndose a los pequeños motores de hobby controlados por posición que se usan en los modelos de aviones y similares. Mi respuesta se aplica al control de un motor, asumiendo que usted tiene un voltaje analógico proporcional a la fuerza con la que quiere impulsar el motor. No se aplica a estos "servos de hobby". 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 deben repetirse de 1 a 2 ms cada 20 a 50 ms o menos. Si esta pregunta es realmente acerca de los servos de hobby, entonces debería arreglarse para que quede claro.

    
respondido por el Olin Lathrop
7

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

Sin embargo, si desea controlar un servo de hobby, esta no es la mejor manera. El ciclo de trabajo varía entre el 5% y el 10% (ancho de pulso de 1 ms a 2 ms en un período de 20 ms), que es corto y lo más probable es que desee controlarlo con cierta precisión. En un triángulo de 5V \ $ _ {PP} \ $, debe variar el umbral del comparador entre 4.5V y 4.75V. Cualquier desviación y no podrá controlar el servo en toda su gama. Eso requiere componentes de precisión. Además, el generador de ondas triangulares necesita 2 puntos de referencia, y luego está el comparador ... Hay una mejor manera.

Primerogeneraunaondacuadradade50Hz.Laformamássencilla:

Para el 74HC1G14, una resistencia de 250 k \ $ \ Omega \ $ y un condensador de 100 nF le darán un período de 20 ms.

Alimente la onda cuadrada en un MMV (multivibrador monoestable). Puede hacer esto con un LM555, o usar un dispositivo lógico como 74HC123A . Si usa este último, el tiempo de pulso se define mediante \ $ R_ {EXT} \ $ y \ $ C_ {EXT} \ $:

\ $ T = R_ {EXT} \ veces C_ {EXT} \ $

Tiempo en \ $ \ mu \ $ s, R en k \ $ \ Omega \ $ y C en nF.

Para obtener un ancho de pulso que varía entre 1 ms y 2 ms, utilice C = 100nF y R = 10k \ $ \ Omega \ $ en serie con un potómetro de 10k \ $ \ Omega \ $.

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 la exclusión de un microcontrolador es miope (Olin dijo "tonto"). Hubo un tiempo en el que desarrollar un microcontrolador era complicado, pero hoy eso ya no es cierto. También puedes tener una interfaz de programación por unos pocos euros. La solución parecería tan fácil que ninguna solución sin controlador puede competir con ella: toma un ATTiny5 (Olin toma un PIC10F220) en un SOT23-6. Conecte un condensador de desacoplamiento a las conexiones de alimentación y el potencímetro a la entrada ADC. ¡Eso es! 3 (tres) componentes. Convertir la lectura de ADC en 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 CI o componentes discretos.

una nota
De su otra pregunta veo que usted do usa microcontroladores. ¿Por qué quieres evitarlos aquí?

    
respondido por el 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 una tensión de control en la otra. Si no se puede obtener una onda triangular pura, se puede aproximar razonablemente a una pasando una onda cuadrada a través de un filtro RC de tal manera que la salida del filtro oscile entre aproximadamente 1 / 4VDD y 3 / 4VDD, y luego aumente la tensión de control. en el comparador de modo que la tensión de control que debe producir un ciclo de trabajo de 0.01% se traduzca a la tensión más baja de la onda cuadrada filtrada, y la tensión de control que debe producir un ciclo de trabajo de 99.99% se traduzca a la tensión más alta del filtro. ola cuadrada. Esto producirá un ancho de pulso que no es linealmente proporcional a la amplitud, pero es lo suficientemente cercano para muchos propósitos. Ajustar el filtro RC para que su salida tenga un giro más estrecho y escalar la tensión de control para que coincida, mejorará la linealidad, pero mi sensibilidad al ruido aumentará.

    
respondido por el supercat
1

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

El UCC3803 es compatible con pines con la serie UCx84x de controladores PWM. Si desea hacer PWM fácil, puede usar el esquema anterior, omitiendo R1, el 2N2222 y el potenciómetro de ajuste ISENSE de 5k (solo ate el pin 3 a tierra). Probablemente, también puede omitir los dos resistores de 4.7 k en serie con el potenciómetro de ajuste de error y 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).

    
respondido por el Adam Lawrence

Lea otras preguntas en las etiquetas