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.