Generando una señal de rampa PWM usando puertas lógicas

1

Tengo un microcontrolador que emite una señal de rampa en un pin de E / S en forma PWM. es decir, el ciclo de trabajo aumenta constantemente de 0% a 100%, luego cae a cero y se repite. Después del alisado, termino con una onda de diente de sierra (excepto, por supuesto, la caída repentina a cero lleva un poco de tiempo debido al filtro).

El código de mi microcontrolador utiliza una interrupción de 1 kHz y, tras cada interrupción, decide si la salida debe ser alta o baja según a) el progreso actual a través de la rampa, y b) para cuántos ciclos de interrupción el pin de salida ya ha sido alto o bajo.

Todo esto está muy bien, y funciona bien para mi aplicación, pero necesito una solución más rápida.

Algo me dice que esto se debe realizar con un circuito lógico puro en lugar de con un código de firmware. Después de todo, tenemos un pulso de reloj constante y un aumento constante de 0% a 100%. Pero estoy luchando con el concepto de implementación.

¿Alguien puede pensar en una forma de hacer esto con puertas lógicas, de modo que pueda escribir esto en un FPGA / PLD y se generen muchas ondas (mucho más rápidas)?

-

NB: Para complicar las cosas, la frecuencia debe ser ajustable. En mi código MCU, esto es tan simple como tener una variable que representa cuántas muestras debería durar la rampa.

    
pregunta PanicBear

5 respuestas

3

El PWM filtrado de paso bajo puede hacer lo que quiera, pero necesita que la frecuencia de PWM sea mucho mayor que 500 Hz.

Sí, puede obtener lógica cableada para realizar parte de esta tarea. Utilice el hardware PWM integrado en la mayoría de los microcontroladores. Si la suya no tiene ninguna salida PWM, use uno de los muchos micros que la tienen.

El hardware PWM en el micro se encargará de producir los pulsos individuales para usted. Todo lo que tienes que hacer es establecer el ciclo de trabajo, y el hardware lo toma desde allí. Digamos que el micro puede sincronizar el hardware PWM a 10 MHz (muy fácil de obtener) y que desea una resolución de 8 bits. Eso significa que cada pulso PWM tomará 255 ciclos de reloj, que son 25.5 µs, que salen a una frecuencia de 39 kHz. Eso es mucho más fácil que el filtro de paso bajo para eliminar la frecuencia de pulso de 39 kHz, pero aún así deja un número razonable de armónicos de la señal que deseas.

Ahora puede actualizar el ciclo de trabajo en el registro de hardware independientemente de los pulsos PWM individuales. Con el tipo correcto de hardware PWM, un nuevo ciclo de trabajo entrará en vigencia al inicio del próximo período. Sin embargo, si sus periodos tienen una duración de 255 ciclos de instrucción, entonces puede interrumpir fácilmente una vez por cada uno, ajustando el ciclo de trabajo en cada pulso.

Para calcular el ciclo de trabajo deseado, use un byte o dos o tres bits de fracción debajo del byte del ciclo de trabajo entero. Por ejemplo, puede usar un contador de 32 bits que considere como el byte alto del ciclo de trabajo real que escribe en el hardware, y los 24 bits bajos como la parte fraccionaria para los cálculos intermedios. Para cualquier velocidad de rampa que desee, calcule la cantidad que se agregará a este valor de 32 bits por adelantado. Los valores de incremento más altos darán como resultado rampas más rápidas. Cada interrupción, agregue el incremento en el contador de 32 bits, luego tome su byte alto y escríbalo en el registro de ciclo de trabajo de hardware PWM. Incluso un micro de 8 bits puede lograr esto fácilmente en menos de 255 ciclos de instrucción.

    
respondido por el Olin Lathrop
1

Tal vez considere usar este chip muy simple: -

Todoloquenecesitasparaalimentaresunaseñaldedientedesierrageneradaporunpardeamplificadoresoperacionales:-

Tome la salida del amplificador operacional y redúzcala a través de un divisor de potencial para obtener una salida de 0 a 1 V adecuada para ingresar a la entrada de control de ciclo de trabajo PWM analógica del LT6992. El LT6992 puede producir una forma de onda PWM de baja Hz a 1MHz.

    
respondido por el Andy aka
0

Los circuitos lógicos no funcionarán (realmente) aquí, ya que no es un circuito digital sino analógico.

respondido por el Maxthon Chan
0

Necesitará un contador y un comparador (digital) para esto. Solo cuenta hacia arriba (deja que el contador retroceda a 0) y compara la salida del contador con el valor de entrada. Es posible que deba ajustar la frecuencia de reloj de su contador para obtener una frecuencia PWM adecuada.

    
respondido por el Ilmo Euro
0

Una forma sencilla de generar digitalmente una onda de rampa PWM es tener dos circuitos de división por N con periodos ligeramente diferentes (podrían ser contadores recargables, contadores con un circuito de comparación de recuento de terminales, registros de cambio de realimentación que se restablecen cuando se alcanza un valor particular, o cualquiera de varias otras cosas, junto con un circuito que establece una salida alta cuando recibe un impulso del primer circuito y baja cuando recibe un impulso del segundo. La "tasa de PWM" será aproximadamente el período promedio de los dos contadores, y el período de salida en diente de sierra será el producto de los dos períodos divididos por la diferencia (por ejemplo, los contadores que cuentan 997 y 1004 pulsos a 1MHz tendrán un período PWM de aproximadamente 1000.5us, y genera una onda de diente de sierra con un período de aproximadamente 142998Hz (aproximadamente 7Hz).

    
respondido por el supercat

Lea otras preguntas en las etiquetas