You are on page 1of 3

Taller de conversion electrica

USO DE CONVERTIDORES ADC Y DAC EN


MICROCONTROLADORES
Felipe Herrera1 , Luis Torres2
Universidad de Talca, Facultad de Ingeniera Curico, Chile
felherrera12@alumnos.utalca.cl1 , ltorres12@alumnos.utalca.cl2

ResumenEn este trabajo se presenta el problema de trans-


alterna que se encuentra entre -5V y 5V para
formar una senal
ser digitalizada en un microcontrolador Arduino UNO.
Palabras claves: Comunicacion SPI, Microcontrolador, DAC
MCP 4822.

I.
I NTRODUCCI ON
En este taller se trabajara la implementacion de un programa Figura 2. Senal de 0 a 5V
que sea capaz de digitalizar una senal alterna a traves de un
microcontrolador. Para esto se hara un circuito por medio de
amplificadores operacionales que nos permite llevar la senal Este circuito permite cumplir con la experiencia basica
(-5v a 5V) a una nueva senal (0 a 5V) para poder ser enviada propuesta en el laboratorio, la cual consista en: Hacer el
al Arduino UNO, el motivo de esto, es que si no se hace correcto cableado y la programacion que permita transformar
este cambio el microcontrolador sera danado. Al hacer esta una senal en alterna de voltaje (de entre 5[V] y -5[V]) a una
nueva senal, se enva a la entrada analoga del Arduino (Pin senal digital dentro del microcontrolador.
A0), cuando se toma la senal analoga se procesa dentro del Una vez que se tiene la senal mostrada en la Figura 2,
microcontrolador, dado que esta placa no posee un conversor se procedio a montar el circuito registrando las siguientes
digital analogo, se debe utilizar un circuito integrado DAC imagenes.
MCP 4822, lo cual ayudara a ver la senal digitalizada.

II. C IRCUITO
Para conseguir la senal de 0 a 5V como se menciono
anteriormente se utilizo el siguiente circuito (Ver Figura 1).

Figura 3. Senal de 0 a 5V obtenida en el laboratorio

Figura 1. Circuito para obtener senal de 0 a 5V

De manera grafica se obtiene la senal que se muestra en la


Figura 2.
El circuito consta de dos resistencias de 22 k, una de
estas se encuentra conectada a un voltaje de 5V y la otra al
generador de funciones con una frecuencia de 200 Hz con 10
Vpp , conectados al amplificador operacional en la entrada no
inversora, este amplificador esta alimentado con 15V. Figura 4. Montaje del circuito
Posterior a esto, se realizo una comunicacion SPI para poder SPI . b e g i n ( ) ;
enviar los datos adquiridos en la entrada del Arduino al DAC }
MCP 4822, para hacer uso de esta comunicacion se debe
considerar lo siguiente: void loop ( ) {
La comunicacion SPI consta de un minimo de 3 cables j = a n a l o g R e a d ( SIGNAL ) ;
siguiendo la siguiente configuracion: o u t p u t v a l u e = map ( j , 0 , 1 0 2 4 , 0 , 4 0 9 5 ) ;
d i g i t a l W r i t e ( s s ,LOW) ;
data = highByte ( outputvalue ) ;
d a t a = 0 b00001111 & d a t a ;
d a t a = 0 b10110000 | d a t a ;
SPI . t r a n s f e r ( d a t a ) ;
d a t a = lowByte ( o u t p u t v a l u e ) ;
SPI . t r a n s f e r ( d a t a ) ;
d i g i t a l W r i t e ( s s , HIGH ) ;
Figura 5. Comunicacion SPI
}
Donde:
En el codigo se declaran una variable del tipo word (tiene
MOSI (Master-out, slave-in) para la comunicacion del 16 bits) llamada outputvalue donde se almacenara la configu-
maestro al esclavo. racion del DAC y el valor de salida, la variable SIGNAL le
MISO (Master-in, slave-out) para comunicacion del es- dice al arduino que lea el valor de entrada analogico en A0,
clavo al maestro. data es una variable de tipo byte (8 bits) que se utilizara para
SCK (Clock) senal de reloj enviada por el maestro. enviar los datos al DAC Y j es una variable que se usa para
SS (Slave Select) para cada dispositivo esclavo conec- almacenar los valores que see leen desde A0.
tado, para seleccionar el dispositivo con el que se va a Se le indica a arduino que el pin digital 10 es una salida y
realizar la comunicacion. esta en alto, este pin esta conectado a CS que se activa en
Para conectar el DAC MCP 4822 con el Arduino Uno, se bajo y luego se inicializa el SPI. Se leen valores desde la
debe considerar la siguiente conexion: entrada analogica, como los valores almacenados por el ADC
de arduino van de 0 a 1023 debemos escalarlos de 0 a 4093
y esto se hace con la funcion map.
Se setea el pin digital 10 en bajo activando el DAC, usando
la funcion highByte separamos la variable word outputvalue
en los bits 15-8 y la comparamos con 0b10110000 usando
la operacion bitwise OR entonces escribe un 1 donde hay un
cero (lo que nos permite configurar el DAC) y no afecta a los
bits correspondientes al valor de salida, el resultado obtenido
de esta comparacion se almacena en data y se enva usado
SPI.transfer(). Finalmente, con lowByte() se seleccionan los
bits 7-0 de la variable outputvalue y se envan al DAC.
Figura 6. Comunicacion SPI entre arduino UNO y DAC MCP 4822

A partir de esto se procedio a programar el arduino UNO III. R ESULTADOS DE EXPERIENCIA AVANZADA
para lograr la conversion de la senal analoga a una senal
Antes de comparar las senales se tuvo que amplificar la
discreta.
senal dado que el DAC entregaba de 0 a 2V, para esto se utilizo
# i n c l u d e <SPI . h> el siguiente circuito, el cual permitio amplificar la senal para
ser comparada.
i n t SIGNAL = 0 ;
word o u t p u t v a l u e = 0 ;
byte data = 0;
i n t j =0;
const i n t ss = 10;

void setup ( ) {

pinMode ( s s , OUTPUT ) ;
d i g i t a l W r i t e ( s s , HIGH ) ;
Figura 7. Circuito amplificador de senal para comparar las senales
Al implementar la experiencia avanzada con todo lo expli-
cado anteriormente, se obtiene los siguientes resultados

Figura 8. Senales comparadas sobrepuestas

Figura 9. Senales comparadas

IV. C ONCLUSI ON
Por medio de este taller se aprendio a establecer una
comunicacion SPI desde un microcontrolador a un conversor
digital-analogo. Se diseno un circuito que permitiera trabajar
con una senal de -5V a 5V por una senal que estuviera de 0
a 5V para poder trabajar con ella en un microcontrolador.
Dentro de este laboratorio se nos presentaron las siguientes
dificultades:
En un comienzo se haban separado las tierras, pero para
este circuito se uso a todas las tierras en comun.
Al establecer la comunicacion entre el DAC y el micro-
controlador cometimos un error en la conexion de un pin
del arduino, lo cual nos demando bastante tiempo para
descubrir este error, ya que pensamos que el error estaba
en el codigo.
La frecuencia hasta la cual se puede hacer una compa-
racion correcta es de 1 KHz. En arduino si se podra
modificar el resultado, pero no es recomendable cambiar
la frecuencia de muestreo porque los resultados serian
imprecisos .
V. R EFERENCIAS
[1] Bus SPI en arduino, https://www.luisllamas.es/arduino-
spi/
[2] DAC MCP 4822, Datasheet.