Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Nomadas Electronicos
Dudas, proyectos y otras cosas…
Convertidor DigitalAnalógico con PWM
Publicado el 3 de agosto de 2015 por Argos
Hay proyectos en los que tenemos que controlar el nivel de voltaje como: la referencia de una fuente
regulada, la salida de audio, o bien queremos hacer nuestro generador de funciones. Pero estas señales
son analógicas y la mayoría de los microcontroladores de gama baja y media (PICs, AVRs, etc) no tienen
un convertidor DAC.
Una solución muy frecuente es usar un circuito DAC (convertidor digital analógico
(h ps://en.wikipedia.org/wiki/Digital‑to‑analog_converter)) aparte del micro controlador, lo que es muy
útil, pero tiene dos inconvenientes: es un circuito mas, lo que es mas espacio y costo, aparte de que
puede requerir muchas lineas de señales por parte de nuestro procesador, en el caso de que la interfaz
sea paralela.
Pero todos los microcontroladores tienen por lo menos un timer y en la mayoria de los casos se puede
usar como un modulador de ancho de pulso (PWM
(h ps://es.wikipedia.org/wiki/Modulaci%C3%B3n_por_ancho_de_pulsos))
En el caso de que se cuente con estos recursos. se puede usar el timer/PWM para hacer conversiones de
digital a analogico usando un arreglo de una resistencia, un capacitor y un amplificador operacional.
https://nomadaselectronicos.wordpress.com/2015/08/03/convertidordigitalanalogicoconpwm/ 1/6
27/6/2016 Convertidor DigitalAnalógico con PWM | Nomadas Electronicos
(h ps://nomadaselectronicos.files.wordpress.com/2015/08/img_0615.png)
El circuito es un filtro pasabaja (h ps://en.wikipedia.org/wiki/Low‑pass_filter) de primer orden y el
amplificador operacional sirve para evitar que se caiga el voltaje de salida debido a la carga que le
coloquemos.
Sin adentrarnos mucho en el tema, los filtros pasabaja dejan pasar las señales con frecuencia menor a la
frecuencia de corte. En pocas palabras, de la frecuencia de corte para abajo. Para calcular la frecuencia de
corte, en este caso se puede usar la siguiente formula
(h ps://nomadaselectronicos.files.wordpress.com/2015/08/img_0615‑0.png)
Esta frecuencia de corte es importante, ya que nos da la pauta de las frecuencias que podemos
suministrar como señal de salida analógica. Es decir, si nuestra frecuencia de corte es de 1000Hz, con
nuestro dac pwm podemos sacar frecuencias menores de 1000Hz, por ejemplo podemos sacar senoidales
a 600Hz sin problema.
Ahora bien, ya tenemos la frecuencia de corte, pero hace falta otra frecuencia importante a considerar,
que es la frecuencia del PWM. La frecuencia del pwm es la que usara el timer para generar la señal de
salida analógica. No podemos elegir una frecuencia de pwm menor que la frecuencia de corte del filtro,
ya que prácticamente solo veríamos la señal del timer. Tampoco podemos igualarla con la de corte ya
que la señal de salida presentaría mucho ruido debido a que la atenuación empieza en la frecuencia de
corte, es decir, todavía veríamos la señal del timer en la salida analógica.
Asi, debemos elegir una frecuencia de pwm mucho mayor que la frecuencia de corte, para asegurar que
https://nomadaselectronicos.wordpress.com/2015/08/03/convertidordigitalanalogicoconpwm/ 2/6
27/6/2016 Convertidor DigitalAnalógico con PWM | Nomadas Electronicos
Asi, debemos elegir una frecuencia de pwm mucho mayor que la frecuencia de corte, para asegurar que
la frecuencia del timer no llegue a la salida de nuestro convertidor ya que estaría muy atenuada según
nuestro filtro.
En lo personal me ha funcionado bien el convertidor cuando he elegido frecuencias de pwm por lo
menos 20 veces mas alta que la frecuencia de corte. De hecho, generalmente empezaremos viendo cual es
la frecuencia máxima de pwm que podemos tener en el timer/pwm y de allí propondremos la frecuencia
de corte. Al final del día, la velocidad del microprocesador es nuestro limite.
Ejemplo de aplicación
Para ilustrar un poco sobre como es el procedimiento de diseño, vamos a implementar un pequeño
ejemplo usando un micro controlador AVR. El modelo que vamos a usar es el ATmega8, ya que cuenta
con varios timers que podemos usar.
Como habíamos comentado anteriormente, la velocidad del procesador sera nuestro eje de diseño, asi
que empecemos…
El procesador tendrá una frecuencia de operación de 8 MHz, que pueden ser generados internamente o,
de preferencia, a través de un cristal. Esto significa que el timer que elijamos tendrá una frecuencia de
operación también de 8 MHz. Los timers del avr tienen un “prescaler”, que en otras palabras es un
divisor de la frecuencia principal. Dejaremos que trabaje al máximo posible para tener el mayor ancho
de banda disponible (frecuencias que podremos generar con el convertidor DAC) por lo que dejaremos
el prescaler con división de 1.
Ahora bien, usaremos el timer2 ya que es muy sencillo de usar, ya que es de 8 bits y tiene un modo de
trabajo llamado “fast pwm” en donde hay un registro de comparación. La forma de trabajo de este modo
es el siguiente: la frecuencia del reloj principal alimenta el timer, contado de manera ascendente.
También se configura un pin como salida de comparación, que de hecho sera nuestra señal que
alimentara al filtro pasabajas. Cuando el registro de conteo se resetea a cero, la salida de comparación se
pondrá a 1 lógico (5V) y mientras el contador sea menor que el registro de comparación, la salida
continuara en ese estado. El registro de comparación seguirá incrementándose a cada pulso de reloj,
cuando el registro de conteo alcance al registro de comparación, la salida invertirá la señal, es decir
tendrá un cero logico (GND) y continuara así hasta que el contador se reinicie (pase de 0xFF ‑> 0x00),
donde el proceso vuelve a empezar.
Como el contador es de 8 bits la frecuencia máxima de salida que podremos tener para el filtro pasabajas
será de con y con ya que N es el valor puesto en el prescaler, en este
caso, sin división. Lo que nos da un total de 31250Hz como fpwm.
Ahora bien, ya tenemos la frecuencia del pwm. Como comentábamos hace poco, la frecuencia del pwm
debe ser mas grande que la frecuencia de corte del filtro pasa bajas, así que ahora haremos la frecuencia
de corte lo suficientemente baja para que la frecuencia de pwm no se vea en la salida. Si seguimos
nuestro propio consejo de que la frecuencia de pwm sea por lo menos 20 veces mayor que la frecuencia
de corte del filtro, entonces nuestra frecuencia de corte será 31250/20=1562.5Hz máximo.
Para el diseño del filtro pasabajas, la formula requiere de 2 variables, así que propondremos una y
obtenemos el valor de la otra por medio de la formula. Vamos a proponer el valor del capacitor, ya que
en el peor caso un arreglo de resistencias es mas fácil de armar que un arreglo de capacitores. Ta formula
entonces será y si proponemos un valor de capacitancia de 100nF la resistencia resultante
https://nomadaselectronicos.wordpress.com/2015/08/03/convertidordigitalanalogicoconpwm/ 3/6
27/6/2016 Convertidor DigitalAnalógico con PWM | Nomadas Electronicos
entonces será y si proponemos un valor de capacitancia de 100nF la resistencia resultante
es de 1018.59 ohm. Redondeando esta cantidad a 1k ohm la frecuencia que resultaría es de 1591.5 Hz que
no esta mal ni muy alejado de lo que pretendíamos como ideal.
Bien, ya tenemos los valores de resistencia y capacitancia de 1k ohm y 100nF respectivamente. Lo
siguiente es el amplificador operacional. El detalle es que un amplificador operacional común, como el
clásico LM358 no satura hasta Vcc es decir que por mas que aumentemos el voltaje de entrada, el voltaje
de salida no alcanzará Vcc, para solucionar esto, tenemos de dos sopas: o alimentamos al amplificador
operacional con un poco mas de voltaje, o bien, alimentamos al procesador con un poco menos de
voltaje. Por sencillez, haré la segunda opción, alimentaré al AVR con 3.3V, así no saturaremos al LM358 y
la señal de salida sera lo que esperamos. si desean alimentar al operacional con voltaje mas alto, que sea
por lo menos 1.5V mas que lo que alimentan el procesador (al final depende del operacional).
Bueno, ya están todos los cálculos. Ahora a ensusiarnos las manos. Aquí dejo el diagrama, el código
fuente y un video con los resultados.
(h ps://nomadaselectronicos.files.wordpress.com/2015/08/img_0621.png)
1 // Inicializacion del timer2
2
3 // Clock source: System Clock
4 // Clock value: 8000.000 kHz
5 // Mode: Fast PWM top=0xFF
6 // OC2 output: Non‐Inverted PWM
7 // Timer Period: 0.032 ms
8 // Output Pulse(s):
9 // OC2 Period: 0.032 ms Width: 0.016063 ms
10 ASSR=0<<AS2;
11 TCCR2=(1<<PWM2) | (1<<COM21) | (0<<COM20) | (1<<CTC2) | (0<<CS22) | (0<<CS21) | (1
12 TCNT2=0x00;
13 OCR2=0x80;
14
15 ...
16 ...
https://nomadaselectronicos.wordpress.com/2015/08/03/convertidordigitalanalogicoconpwm/ 4/6
15
27/6/2016 ... Convertidor DigitalAnalógico con PWM | Nomadas Electronicos
16 ...
17
18 //loop principal (PWM = OCR2)
19
20 while (1)
21 {
22 //minimo
23 PWM = 0;
24 delay_ms(2000);
25 //maximo
26 PWM = 255;
27 delay_ms(2000);
28 //diente sierra
29 for(i=0; i<50; i++)
30 for( PWM = 0; PWM <255; PWM++)
31 {
32 delay_ms(1);
33 }
34 // senoidal
35 f=0.0;
36 for(i=0; i<50; i++)
37 for(f = 0.0; f < (2*3.141592654); f+=0.01)
38 {
39 PWM = 128 + (unsigned char) ( 127.0 * sin(f) ) ;
40 delay_us(100);
41 }
42
43
44 }
Espero esto les sea de utilidad.
Sin mas por el momento…
https://nomadaselectronicos.wordpress.com/2015/08/03/convertidordigitalanalogicoconpwm/ 5/6
27/6/2016 Convertidor DigitalAnalógico con PWM | Nomadas Electronicos
Sin mas por el momento…
Argos.
Acerca de estos anuncios (https://wordpress.com/aboutthese
ads/)
77% 50%
Curso de Panadería, $40
Pastelría y Repostería
Comprar
Esta entrada fue publicada en Electronica, Microcontroladores, Programacion, Tutoriales y etiquetada
amplificador, avr, capacitor, convertidor dac, dac, DIY, electronica, filtro, frecuencia, fuente de
alimentación, fuente regulada, microcontroladores, pasabajas, programacion, pwm, resistencia, tutorial.
Guarda el enlace permanente.
Blog de WordPress.com. | El Tema Confit.
https://nomadaselectronicos.wordpress.com/2015/08/03/convertidordigitalanalogicoconpwm/ 6/6