Esas no son las únicas frecuencias disponibles para las señales PWM. Sin embargo, son las frecuencias determinadas por el preescalador aplicado (que puede cambiar fácilmente como se detalla a continuación).
Cada uno de los 3 pares de pines PWM está vinculado a un temporizador, cada uno de los cuales tiene su propia frecuencia base, de la siguiente manera:
- Los pines 5 y 6 están emparejados en el temporizador 0, con una frecuencia base de 62500Hz
- Los pines 9 y 10 están emparejados en el temporizador 1, con una frecuencia base de 31250Hz
- Los pines 3 y 11 están emparejados en el temporizador 2, con una frecuencia base de 31250Hz
Luego, cada conjunto de pines tiene una serie de valores de preescalador que se pueden elegir, que dividirán la frecuencia base de ese par de pines. Los valores disponibles del preescalador son:
- Los pines 5 y 6 tienen valores de preescalador de 1, 8, 64, 256 y 1024
- Los pines 9 y 10 tienen valores de preescalador de 1, 8, 64, 256 y 1024
- Los pines 3 y 11 tienen valores de preescalador de 1, 8, 32, 64, 128, 256 y 1024
Las diferentes combinaciones producen diferentes frecuencias en un pin PWM dado. Observe que el temporizador 2 (vinculado a los pines 3 y 11) tiene más valores de preescalador disponibles, lo que resulta en más frecuencias disponibles.
Ahora, por qué el temporizador 2 es diferente, esa es una pregunta separada.
Editar: Aquí hay una lista de posibles frecuencias PWM por pin (de este artículo ):
Para los pines 6 y 5 (OC0A y OC0B):
- Si TCCR0B = xxxxx001, la frecuencia es de 64 kHz
- Si TCCR0B = xxxxx010, la frecuencia es de 8 kHz
- Si TCCR0B = xxxxx011, la frecuencia es de 1 kHz (este es el valor predeterminado del gestor de arranque Diecimila)
- Si TCCR0B = xxxxx100, la frecuencia es 250Hz
- Si TCCR0B = xxxxx101, la frecuencia es 62.5 Hz
Para los pines 9, 10, 11 y 3 (OC1A, OC1B, OC2A, OC2B):
- Si TCCRnB = xxxxx001, la frecuencia es de 32 kHz
- Si TCCRnB = xxxxx010, la frecuencia es de 4 kHz
- Si TCCRnB = xxxxx011, la frecuencia es 500Hz (este es el valor predeterminado del gestor de arranque Diecimila)
- Si TCCRnB = xxxxx100, la frecuencia es 125Hz
- Si TCCRnB = xxxxx101, la frecuencia es 31.25 Hz
TCCRnB
es donde establece los bits de preescalador para el temporizador n
, reemplazándolos n
por 0, 1 o 2, según el temporizador que desee configurar. Si aún no está seguro acerca de las operaciones bit a bit, lea este tutorial de matemáticas de bits .
Mis fuentes:
Tenga en cuenta que parece haber divergencia en esas fuentes sobre si los pines 9 y 10 tienen el mismo comportamiento que 5 y 6 o 3 y 11, pero de todos modos se entiende la idea. Estoy leyendo el datashet para tratar de descubrir cuál es el correcto, o si esto es una diferencia entre los tableros.
No conozco las consideraciones de diseño, pero si revisa la hoja de datos del microcontrolador en su Arduino, notará que los pines PWM están agrupados y por grupo conectados a un temporizador. La velocidad a la que se incrementa este temporizador varía según el preescalador configurado. Si cambia el preescalador para un determinado temporizador, cambia la frecuencia PWM para los pines PWM relacionados. Creo que algunos temporizadores se duplican para otros fines, como la
millis();
función. Si cambia el preescalador para ese temporizador, los valores devueltos pormillis()
se desactivarán por el mismo factor.Puede calcular la configuración para el preescalador de la siguiente manera:
$$ \ text {prescaler} = \ dfrac {f_ {CPU}} {PWMresolution × f_ {PWM}} = \ dfrac {16 \ text {MHz}} {256 × 490} \ aproximadamente 128 $$
Consulte la hoja de datos y verá que 128 es uno de los valores de preescalador que puede seleccionar.
fuente