Hola a todos
La placa Diecimila con la que estamos trabajando dispone de 6 salidas de modulación por anchura de pulso (PWM) que son ideales para controlar el voltaje aplicado a una carga. El problema es que la frecuencia de este PWM es de tan solo 490 Hz y esto puede ser adecuado para un control de iluminación pero no es lo mejor opción para controlar la velocidad de un motor DC (entre 4KHz y 40KHz normalmente).
Las 6 salidas PWM son controladas por 3 contadores, cada contador se encarga de dos salidas PWM:
Contador 0: D6 (PD6) y D5 (PD5)
Contador 1: D9 (PB1) y D10 (PB2)
Contador 2: D11(PB3) y D3 (PD3)
Entre paréntesis pongo el nombre de la pata del Atmega168 y las que empiezan por "D" son los nombres de las líneas digitales del Arduino
En el Arduino la frecuencia del PWM se consigue a partir de la frecuencia de reloj y de un divisor programable llamado "prescaler". Par conseguir subir los 490HZ de frecuencia del PWM hay que modificar el factor de división del prescaler (64 por defecto) disminuyéndolo hasta conseguir la frecuencia deseada. Estas son las frecuencias que se consiguen:
Contador 1 Contador 2
Prescaler Frecuencia Registro TCCR1B Registro TCCR2B
64 490Hz 3 4
32 984Hz -- 3
8 3936Hz 2 2
1 31360Hz 1 1
Nota, el contador 1 no admite el prescaler de 32
Como el Contador 0 se utiliza para las funciones de retardo, si modificamos la configuración de este contador dichas funciones no funcionarán correctamente. Por ello podemos modificar las salidas PWM asociadas a los contadores 1 y 2, esto es: D3, D9, D10 y D11. Por ejemplo para configurar estas cuatro últimas salidas PWM con una frecuencia de 31360Hz añadiremos las siguientes líneas en la configuración de nuestro programa:
TCCR1B =1;
TCCR2B =1;
Esto se contradice un poco con lo que pone aquí (habla de un PWM de 30769 Hz), http://www.arduino.cc/es/DCMotor/DCMotor pero creo que el problema es que la información no está actualizada.
Un saludo:
Eduardo