¿Por qué no debo usar la fuerza bruta PWM?

6

Así que he estado jugando con un ATtiny45, y se me ocurre que probablemente podría ejercer una fuerza bruta de PWM calculando un cronómetro a sysclock / 64, luego ejecutando el código ISR que activa o desactiva las salidas de forma manual según las variables globales Establecer en otro lugar en el código o vía IO. A una velocidad máxima de sysclock de 20MHz debo obtener una resolución decente, y usaré todos mis pines IO como PWM en lugar de los dos que proporciona el chip, así que la gran pregunta es ... ¿por qué no? Aparte de usar una gran cantidad de ciclos de sysclock, realmente no veo desventajas ... ¿podría alguien darme algo?

    
pregunta TSL

6 respuestas

6

Las tres desventajas son el consumo de energía, la vinculación de un temporizador y la interrupción de otro código. Si no le importan los modos de baja potencia, no necesita el temporizador y no tiene un código crítico que no pueda soportar algunos ciclos de reloj para atender la interrupción, no hay desventaja. Algunos proyectos son bastante simples y no consumen ni una décima parte del poder del microcontrolador, así que no dejes que nadie te diga que lo estás haciendo mal aprovechando los temporizadores de esa manera. El software PWM está bien si se ajusta a sus necesidades.

    
respondido por el Passerby
4

Recientemente he estado jugando con un montón de cosas de fuente de alimentación de conmutación PWM, y tienes razón, hay razones perfectamente válidas para las señales moduladas de ancho de pulso "bit bang". Pero una de las principales fallas de este método es cuando necesita un control de retroalimentación inmediato del ciclo de trabajo generado.

Incluso con un reloj integrado de 20 MHz, el tiempo de ciclo es de 50 nanosegundos. Computacionalmente, tendría que adquirir la señal que se está monitoreando, restarla del nivel de referencia y luego reanudar la generación del ciclo de trabajo. Esto creará "jitter" donde el ciclo de trabajo es inconsistente. El uso de un DAC integrado no está fuera de discusión, pero consume ciclos. Para reducir esto, puede agregar un DAC externo, pero luego ha comprometido aproximadamente 8 o 12 pines del microcontrolador al DAC externo para una lectura rápida (dependiendo de la resolución que desee). Entonces debe preocuparse por el retraso adicional en la propagación de la señal a través de los componentes de conmutación.

Si lo que quiere es un rápido control de retroalimentación, es difícil superar un IC de ciclo de trabajo independiente. El retraso del amplificador de error a bordo es tan pequeño que está más preocupado por el cambio de ganancia a altas frecuencias. La propagación de la señal a través de la conmutación sigue siendo el mismo riesgo, por supuesto, y tiene que diseñarse alrededor.

También vale la pena señalar que muchos paquetes PWM IC tienen funciones de apagado y entradas de control de tiempo muerto que pueden hacer cosas realmente ingeniosas cuando se combinan con un microcontrolador, todo en un paquete de 8 o 16 pines.

Depende de usted decidir si el método bit bang puede satisfacer sus necesidades. En realidad, puede aumentar la frecuencia bastante alto si usa un prescaler más bajo. El ciclo de trabajo que obtendrás mostrará un error de cuantificación, pero eso puede que no sea un gran problema dependiendo de lo que estés haciendo y de lo alto que tomes la resolución; pero nuevamente, una resolución más alta tiene el costo de una frecuencia más baja. Si no necesita un control de retroalimentación instantáneo, y su aplicación puede manejar un poco de jitter, entonces el bitging puede ser el camino a seguir.

    
respondido por el Sean Boddy
3

El punto de tener dispositivos de hardware en el chip es liberar el procesador para otras tareas. Si utiliza hardware PWM, puede realizar simultáneamente otras tareas del microcontrolador.

Ahora creo que ha captado este bit porque está preguntando sobre el uso de un ISR en lugar de ejecutar un contador de fuerza bruta de bucle for / while, pero nuevamente es la misma respuesta. Si no cambiamos el ancho del pulso, ¿por qué querríamos interrumpir nuestras otras tareas innecesariamente?

    
respondido por el SomeEE
1

Puedes hacer fácilmente lo que dices, lo he hecho varias veces. Es más útil si desea cambiar su PWM en tiempos predecibles; puedes hacer esto contando la cantidad de ciclos de PWM, y necesitarías un temporizador para hacerlo de todos modos.

Sin embargo, existe una compensación entre la resolución de PWM / # de salidas y la cantidad de tiempo libre del procesador. Llegará a un punto en el que no tiene suficiente CPU libre para que funcione.

Recomiendo conectar un alcance a un pin libre, y luego establecer ese pin alto al principio del ISR y bajo al final. Esto le permitirá ver la proporción del tiempo que usa su rutina.

    
respondido por el Eric Gunnerson
0

El software PWM no tiene que hacer un uso intensivo de la CPU si se realiza de manera correcta, como usar Código binario Modulación . Con esta técnica agradable y simple, puedes tener muchos canales SoftPWM sin una gran sobrecarga de CPU.

    
respondido por el avra
0

Personalmente, he encontrado que los PWM con temporizador son más rápidos y consistentes (en el rango total de 256, si no necesita tal resolución, el software ["fuerza bruta") puede ser más rápido), y cuando necesito más de 2 probé PWMing suave junto con PWM duros y no fue muy suave, así que opté por hacer todo PWM en software y resultó genial.
Lo único es cuando los cálculos / procesamientos / interrupciones intermedios que toman un poco de tiempo, el PWM suave se detiene y puede ser muy notable.

    
respondido por el EkriirkE

Lea otras preguntas en las etiquetas