Taller de conversion o´ n el´ electrica e´ ctrica USO DE CONVERTIDORES ADC Y DAC EN MICROCONTROLADORES Felipe Herrera1 , Luis Torres2 Universidad de Talca, Facultad de Ingenier´ Ingenier ´ıa ıa Curico, o´ , Chile
[email protected] ,
[email protected] 2 Resumen—En este trabajo se presenta el problema de transformar una se ˜ se ˜ nal alterna que se encuentra entre -5V y 5V para ser digitalizada en un microcontrolador Arduino UNO. Palabras claves: Comunicaci´ on SPI, Microcontrolador, Microcontrolador, DAC DAC MCP 4822.
I.
´ I NTRODUCCION
En este taller se trabajar a´ la implementaci on o´ n de un programa que sea capaz de digitalizar una se nal n˜ al alterna a trav es e´ s de un microcontrolador. Para esto se har´a un circuito por medio de amplificad amplificadores ores operacionale operacionaless que nos permite permite llevar llevar la se nal n˜ al (-5v a 5V) a una nueva senal n˜ al (0 a 5V) para poder ser enviada al Ardu Arduin ino o UNO, UNO, el motivo motivo de esto esto,, es que si no se hace hace este cambio cambio el microcont microcontrola rolador dor ser a´ da˜ danado. n˜ ado. Al hacer hacer esta esta nueva se˜nal, nal, se env´ env´ıa ıa a la entrada entrada an´aloga aloga del Arduino (Pin A0), cuando se toma la se nal n˜ al an´ analoga a´ loga se procesa dentro del microcontrolador, dado que esta placa no posee un conversor digital digital an´ analogo, a´ logo, se debe utilizar utilizar un circuito circuito integrado integrado DAC MCP 4822, lo cual ayudara a ver la se nal n˜ al digitalizada. II.
Figura Figura 2. Se˜ Senal n˜ al de 0 a 5V
Este Este circui circuito to permit permitee cumpli cumplirr con la exper experien iencia cia b asica a´ sica propue propuesta sta en el labora laborator torio, io, la cual cual consis consistt ´ıa ı a en: en: Hace Hacerr el correcto cableado y la programaci´on on que permita transformar una senal n˜ al en alterna de voltaje (de entre 5[V] y -5[V]) a una se˜ senal n˜ al digital dentro del microcontrolador. Una Una vez vez que que se tiene tiene la se˜ senal n˜ al mostrad mostradaa en la Figura Figura 2, se proced procedi´ i´o a montar montar el circui circuito to regis registra trando ndo las siguie siguiente ntess im´ imagenes. a´ genes.
C IRCUITO
Para Para conse consegui guirr la se˜ senal n˜ al de 0 a 5V como como se menc mencio iono no anteriormente se utilizo el siguiente circuito (Ver Figura 1).
Figura Figura 3. Se˜nal nal de 0 a 5V obtenida en el laboratorio
Figura Figura 1. Circuito Circuito para obtener obtener se nal n˜ al de 0 a 5V
De manera gr´ grafica a´ fica se obtiene la se nal n˜ al que se muestra en la Figura 2. El circui circuito to consta consta de dos resist resistenc encias ias 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 V pp , conectados al amplificador operacional en la entrada no inversora, este amplificador est a´ alimentado con ± 15V.
Figura Figura 4. Montaje Montaje del circuito circuito
Posterior a esto, se realizo una comunicaci o´ n SPI para poder enviar los datos adquiridos en la entrada del Arduino al DAC MCP 4822, para hacer uso de esta comunicaci o´ n se debe considerar lo siguiente: La comunicaci o´ n SPI consta de un minimo de 3 cables siguiendo la siguiente configuraci o´ n:
Figura 5. Comunicaci´on SPI
Donde: MOSI (Master-out, slave-in) para la comunicaci o´ n del maestro al esclavo. MISO (Master-in, slave-out) para comunicaci´on del esclavo al maestro. SCK (Clock) sen˜ al de reloj enviada por el maestro. SS (Slave Select) para cada dispositivo esclavo conectado, para seleccionar el dispositivo con el que se va a realizar la comunicaci´on. Para conectar el DAC MCP 4822 con el Arduino Uno, se debe considerar la siguiente conexi o´ n:
Figura 6. Comunicaci´on SPI entre arduino UNO y DAC MCP 4822
A partir de esto se procedi´o a programar el arduino UNO para lograr la conversi o´ n de la sen˜ al an´a loga a una se˜nal discreta. # i n c l u d e
SPI . beg in ( ) ;
} void loop () { j = a n a l o g R e a d ( SIGNAL ) ; 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 ) ; d a t a = h i g h B yt e ( o u t p u t v a l u e ) ; d a t a = 0 b 00 00 11 11 & d a t a ; d a t a = 0 b 10 1 10 0 00 | d a t a ; S PI . t r a n s f e r ( d a t a ) ; d a t a = l ow B yt e ( o u t p u t v a l u e ) ; S PI . 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 ) ;
} En el c´odigo se declaran una variable del tipo word (tiene 16 bits) llamada outputvalue donde se almacenar a´ la configuraci o´ n del DAC y el valor de salida, la variable SIGNAL le dice al arduino que lea el valor de entrada anal o´ gico en A0, data es una variable de tipo byte (8 bits) que se utilizara para enviar los datos al DAC Y j es una variable que se usa para almacenar los valores que see leen desde A0. Se le indica a arduino que el pin digital 10 es una salida y esta en alto, este pin esta conectado a CS que se activa en bajo y luego se inicializa el SPI. Se leen valores desde la entrada anal o´ gica, 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 funcio´ n map. Se setea el pin digital 10 en bajo activando el DAC, usando la funci´on highByte separamos la variable word outputvalue en los bits 15-8 y la comparamos con 0b10110000 usando la operaci o´ n 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 comparaci´on se almacena en data y se env´ıa usado SPI.transfer(). Finalmente, con lowByte() se seleccionan los bits 7-0 de la variable outputvalue y se env ´ıan al DAC. III.
R ESULTADOS DE EXPERIENCIA AVANZADA
Antes de comparar las se˜nales se tuvo que amplificar la se˜nal dado que el DAC entregaba de 0 a 2V, para esto se utilizo el siguiente circuito, el cual permiti o´ amplificar la se n˜ al para ser comparada.
i n t SIGNAL=0; word o u t p u t va l u e = 0 ; b yt e d a t a = 0 ; i n t j = 0; c on st i n t s s = 1 0; v o id s e t u p ( ) { pin Mod e ( ss , OUTPUT ) ; d i g i t a l W r i t e ( s s , HIGH ) ; Figura 7. Circuito amplificador de se˜nal para comparar las se˜nales
Al implementar la experiencia avanzada con todo lo explicado anteriormente, se obtiene los siguientes resultados
Figura 8. Se˜nales comparadas sobrepuestas
Figura 9. Se˜nales comparadas
IV.
´ C ONCLUSI ON
Por medio de este taller se aprendio a establecer una comunicaci´on SPI desde un microcontrolador a un conversor digital-an´alogo. Se disen˜ o un circuito que permitiera trabajar con una se˜n al de -5V a 5V por una se˜nal 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 hab´ıan separado las tierras, pero para este circuito se uso a todas las tierras en com u´ n. ´ entre el DAC y el microAl establecer la comunicaci on controlador cometimos un error en la conexi o´ n de un pin del arduino, lo cual nos demando bastante tiempo para descubrir este error, ya que pensamos que el error estaba en el c´odigo. La frecuencia hasta la cual se puede hacer una comparaci´on correcta es de 1 KHz. En arduino si se podr ´ıa 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/arduinospi/ [2] DAC MCP 4822, Datasheet.