Arduino PWM pin vs digital pin PWM simulation

2

¿Lo entiendo correctamente de este hilo, ¿Por qué algunos pines tienen signos '~' junto a sus números? , que los pines PWM generan una señal de onda cuadrada independientemente de lo que hace el código cargado en el chip después de iniciar la salida PWM? En otras palabras, si mi código contiene todo tipo de funciones delay() que se detienen por más tiempo que el período de la señal PWM, la señal PWM aún se generará correctamente, ¿correcto?

Por otra parte, si decidiera implementar mi propio PWM en un pin digital en lugar de cambiar el estado entre ALTO y BAJO en mi código a intervalos regulares, la presencia de otras llamadas delay() en otras partes del código afectaría directamente mi capacidad para generar la señal PWM consistente deseada. ¿Es esto correcto? Espero que esta pregunta tenga sentido (un poco difícil de hacer la pregunta).

    
pregunta pkout

1 respuesta

7

Has entendido bien. Los pines con el símbolo de tilde (~) son pines que están vinculados a un módulo PWM de hardware (es decir, un temporizador). Como es un módulo de hardware, es independiente de lo que haga su CPU. Como tal, si se queda atascado en un retraso, su PWM de hardware continuará generando la señal de salida adecuada. Por otro lado, un PWM de software (uno que generaría con un cambio de pin manual) se interrumpiría por su retraso.

La mayoría de las veces, debería preferir el hardware PWM sobre el software PWM por muchas razones:

  1. Es más confiable;
  2. Consume menos energía (puede dormir en su MCU mientras sigue generando PWM);
  3. Le permite hacer otra cosa en lugar de atender el cambio;
  4. Permite frecuencias más grandes, porque normalmente puede obtener frecuencias hasta la frecuencia de funcionamiento de su MCU, mientras que la emulación de software involucra algunas operaciones, por lo que no puede mantenerse al día;
  5. Es más preciso: el hardware PWM es simplemente un divisor en la frecuencia de operación de su MCU, mientras que el software PWM usa instrucciones de la CPU, que requieren bifurcación. Dado que es un código compilado, es más o menos determinista, por lo que su ciclo de trabajo no sería exactamente el que espera (cercano, pero no perfecto ni estable si se hace otra cosa al mismo tiempo).
respondido por el Mishyoshi

Lea otras preguntas en las etiquetas