Pages: [1]   Go Down
Author Topic: Frecuencia de las salidas PWM  (Read 6888 times)
0 Members and 1 Guest are viewing this topic.
ALCALA DE HENARES
Offline Offline
Sr. Member
****
Karma: 13
Posts: 279
Centro de Robótica Educativa
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
www.complubot.org
« Last Edit: November 19, 2008, 04:00:09 am by complubot » Logged

Centro de Robótica Educativa
www.complubot.com

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola Eduardo!!

Muy buena info.  Gracias!
¿Donde esta en la web de arduino la información del hardware interno que se usa para implementar las funciones software?
Por ejemplo, has expuesto que las funciones de retardo usan el timer 0.

Gracias de antemano. smiley-wink


Igor R.
Logged


ALCALA DE HENARES
Offline Offline
Sr. Member
****
Karma: 13
Posts: 279
Centro de Robótica Educativa
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Yo lo he encontrado mirando directamente el código que se usa para implementar las distintas funciones. Lo tienes en la carpeta hardware\cores\arduino
Logged

Centro de Robótica Educativa
www.complubot.com

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

GRACIAS!!
Logged


Marbella
Offline Offline
Newbie
*
Karma: 0
Posts: 33
DIY forever
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ante todo muchisimas gracias por compartir estos conocimientos con todos.

Me surge una pregunta, en la etapa de potencia (p.e. L293D) ¿donde aplicas PWM... en los pines de Enable o en los pines de control del motor?...

Yo soy de los que dejan fijos los "Enable" y el PWM lo aplico en los pines de control pero iba a montar una nueva y he dudado si hacerla al contrario... ¿puede haber diferencia de rendimiento?

Gracias.
furri.
Logged

ALCALA DE HENARES
Offline Offline
Sr. Member
****
Karma: 13
Posts: 279
Centro de Robótica Educativa
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Yo creo que esta es la forma más correcta de hacerlo http://arduino.cc/es/L293D/L293D

Una cosa, el L293 usa tecnología bipolar (una caida de tensión importante en los transistores del puente en H). Hay opciones mucho más interesantes  (Tecnología DMOS) como el L6202 o el L6203 pero bueno, también depende mucho del tamaño (consumo) del motor que quieras controlar.

Un saludo:

Eduardo
Logged

Centro de Robótica Educativa
www.complubot.com

Pages: [1]   Go Up
Jump to: