1 Laboratorio 1: Conversiones A/D y D/A de señales Santiago Avila Quiroz, Nikolas David Riapira Rodríguez, Andrés Felipe Hernández Jurado Resumen – En el siguiente documento consigna la información referente hacia la conversión digital análoga de señales digitales, en ello hay presencia de observar cómo varían las funciones discretas de acuerdo con su tiempo de muestreo, en ello la presencia de programación en el momento de asunto para el estudio de control digital Para comenzar a hablar de programación, antes, hay que hablar acerca de las características del PIC18F46K22, es un microcontrolador con arquitectura RISC de 8 bits, cuenta con periféricos, como lo son puertos digitales análogos, en conjunto con puertos de comunicación SPI, I2C, entre otros I. INTRODUCCION Este informe presenta la implementación de un sistema generador de señal analógica utilizando un microcontrolador para obtener una señal sinusoidal discreta con una resolución de 10 bits. Para lograrlo, se utilizaron circuitos conversores digitales-analógicos para reconstruir la señal analógica a partir de la codificación digital. A lo largo del informe, se describen detalladamente los métodos utilizados en la implementación del sistema y se presentan los resultados obtenidos. En particular, se analizan las características de la señal obtenida y se discuten las limitaciones y posibles mejoras del sistema. II. MATERIALES Y METODOS Teniendo en cuenta las siguientes características de la señal sinusoidal a generar mediante el microcontrolador, donde su resolución debe estar dada en 10 bits con amplitud variable y tiempo de muestreo variable menor a 1 segundo, se aplica la siguiente función. 𝑦(𝑘 ∗ 𝑇𝑠) = 𝛼 ∗ 𝐴1 ∗ 𝑠𝑒𝑛(𝜔 ∗ 𝑘 ∗ 𝑇𝑠) Siendo α un factor de escalización dependiente de la amplitud, A1 la amplitud de la onda, ω la frecuencia angular, k la variable independiente del tiempo discreto y Ts el tiempo de muestreo. La señal analógica reconstruida debe variar entre 0V y 7V. Ante ello, se selecciona un microcontrolador con las características idóneas para dicha tarea, entre estas que cuente con un temporizador con una preescala amplia para alcanzar el rango de aproximadamente un segundo, en el mercado existen variedades de microcontroladores con dicho rango y preescalas aún mayores, pero por opción en confiabilidad y sencillez de programación, se toma como microcontrolador el PIC18F46K22 de la empresa Microchip para cumplir dicho rol en la generación de la señal discreta Figura 1. PIC18F46K22 PDIP 40 Además de ello, el microcontrolador PIC18F46K22, cuenta con temporizadores, que cuentan con preescalas desde 1 hasta 256 bits, por lo que se podría llegar a un tiempo de cuenta de 4.1 segundos, lo que abre puerta a jugar con dichos tiempos y emplear alto rango de vertibilidad en tiempo de muestreo Por ello el PIC cuenta con 3 módulos de temporizado, denominados timer 0,1/3/5 y timer 2/4/6, en el cual el timer 0, cuenta con una preescala de hasta 256 bits, lo que lo hace idóneo ante la tarea. Ante ello, el PIC 18F46K22, cuenta con temporizadores configurables de 8 y 16 bits, el empleado durante la practica sera de 16 bits, con configuración de temporización a cada 4 ciclos de reloj del microcontrolador Por lo que se tiene que el tiempo de cuenta del microcontrolador llega a ser hasta de 65535, el medio que operan las interrupciones en el microcontrolador en el timer es mediante desbordamiento, existe el registro TMR0H y TMR0L, donde se aloja la cuenta del microcontrolador, donde se sitúa un valor de cuenta inicial, para allí, experimentar con el tiempo de cuenta para alcanzar un mayor o menor tiempo. 2 Figura 5. Configuracion de funciones de la señal Figura 2. Timero0 a 16 bits de operacion Para ello el fabricante ofrece la siguiente fórmula para calcular el tiempo de retraso, partiendo que el periodo del timer es el inverso de la frecuencia de oscilación por 4, lo que corresponde a una frecuencia de oscilación de 16MHz interna Donde void settings es la funcion encargada del de alojar las configuracions por defecto de los puertos digitales y uso del timer, en conjunto con configuraciones de habilitacion de interrupciones globales y perifericas, la funcion void interrupt, en el IDE de Microchip(MPLAB), funciona para llamar la interrupcion por desbordamiento del timer, ejecutando la funcion alojada dentro de la llamada, por ultimo se encuentra la funcion pulsadores que aloja las intrucciones presente en el bucle principal de programa Por lo que dado el delay que puede variar, el registro TMR0 se debe variar, para variar también el tiempo de muestro, por lo que despejando TMR0 Figura 6. Configuracion de variables de codigo Por lo que en el código de programación, se desea variar el tiempo de muestreo cada 10ms, mediante dos pulsadores, donde uno se encargara de aumentar dicho tiempo cada 10ms y el pulsador restante en disminuirlo en un tiempo menor, esto en caso de querer comenzar con disminuirlo en 10ms, no se apague la señal, en ello se explica a continuación la dinámica del código En primera instancia se configura el tiempo de oscilación del microcontrolador, en conjunto con el apagado de el temporizador por perro guardián y desactivación de bajo voltaje, también se hace adición de la librería math.h para adición de funciones trigonométricas a la señal Figura 3. Configuracion de condiciones iniciales del codigo En conjunto con las configuraciones iniciales, se define como constante de configuración la configuración interna de oscilación, definida de 16 MHz, en conjunto con definir la constante PI, en el empleo graficacion de la formula Figura 4. Configuracion de frecuencia de oscilacion y constante PI En consiguiete, se explica las funciones implementadas en el codigo La configuracion de variables del codigo, se realizan de acuerdo a la funcionalidad y naturaleza de las mismas un ejemplo de ello es la variable double valSIN, que por defecto al llamar la funcion seno en math. H debe ser una variable double que aloje el resultado del calculo de dicha, según datos de fabricante, en conjunto, se albergan en las funciones de tiempo y entero, la variable de tipo volatile, que hace que dichas opciones se alojen en la memoria SRAM del PIC, esto para aumentar la tasa de cambio de las variables en cuestion, en conjunto con la variable de conteo para el tiempo de muestreo La configuracion de variables del codigo, se realizan de acuerdo a la funcionalidad y naturaleza de las mismasm un ejemplo de ello es la variable double valSIN, que por defecto al llamar la funcion seno en math. H debe ser una variable double que aloje el resultado del calculo de dicha, según datos de fabricante, en conjunto, se albergan en las funciones de tiempo y entero, la variable de tipo volatile, que hace que dichas opciones se alojen en la memoria SRAM del PIC, esto para aumentar la tasa de cambio de las variables en cuestion, en conjunto con la variable de conteo para el tiempo de muestreo 3 Figura 7. Ajustes de codigo Dentro de los tiempos de configuracion, se utilizan diversos registros para configurar ajustes del microcontrolador, el registro OSSCON es encargado de realizar ajustes hacia la frecuencia de oscilacion interna, ademas en configuracion de registros, para generar una señal de 10 bits en un DAC, aloja 10 bits de la señal de salida, donde por naturaleza del microcontrolador y de la señal, se habilitan dos puertos, para habilitar los bits menos significativos de la señal y en otro puerto se habilitan los bits mas significativos de la señal senosoidal, en la señal, por efectos de distribucion de datos, se alojan los 2 bits menos significativos de la señal en el puerto C del microcontrolador,y los 8 bits mas significativos seran alojados en el puerto D, en ello, se configuran los pines RC0,RC1 como salidas, en conjunto, todo el puerto D seran salidas digitales, habilitando el registro en 0x00 Tambien son configurados la hablitacion de interrupciones perifericas, mediante los registros GIE y PEIE, que habilitan las interrupcion por temporizador, para configurar los registros del temporizador, se activan las interrupciones por TIMER0, donde al configurarlo en 1, se activa la habilitacion de la interrupcion, como indicar que la bandera no se ha activado y situar la prioridad de la interrupcion en alto con el registro TMR0IP, es asignado la variable timer a el registro TMR0 para variar el tiempo de acuerdo a los valores de pulsadores, El registro T0CON es encargado de configurar la preescala del timer, en este caso sera configurado a una preescala de 64, y configurado como temporizador Figura 8. Ajustes de pulsadores Dentro de el area de la funcion pulsadores, se conmuta mediante resistencias pull up, en ello, se configuran los pines RC2 y RC3 como entradas, dado a esto el problema del rebote es constante, por lo que en codigo se corrije mediante una linea antirrebote, que llama una variable llamada aumentar o disminuir cuando el pulsador es accionado, seguido de esto, se evalua en un condicional cuando llegue a ser equivalente a 1 logico la entrada del pin en conjunto en activado el indicador, ejecuta la orden de aumentar o disminuir el tiempo de muestreo, esto con el fin de no variar el tiempo de muestreo a un ritmo irregular del propuesto, es de resa i En conjunto a ello, se ha alojado dentro de bucle de funcionamiento, la variable timer, que variara el retardo a medida que varie el tiempo con los pulsadores, en conjunto, la variable valSIN, alojara el resultado de la señal seno, a partir del tiempo de muestreo presente en la ecuacion, y la variable independiente k de muestras recolectadas, se situa en la ecuacion una frecuencia angular de 2π, en ello, se realiza un aumento de amplitud y punto de corte en la señal, esto con el fin de hacer reservaciones de bits negativos a otros pines, por lo que si se tiene un DAC de 10 bits, el pico de amplitud de la señal debe ser 1023 bits, en conjunto, si se tiene que sea una señal unipolar, el valor minimo de la señal debe ser cero, por lo que se hace una suma a la variable de 511.5, mitad de 1023, para alcanzar el valor inicial en ese punto, y una amplitud de onda de 511.5 para alcanzar valor pico de 1023 Finalmente es activado el timer0 para realizar el conteo mediante TMR0ON Figura 9. Valor Sinusoidal x=511.5*sin(2π*t)+511.5 4 𝑅𝑥 = Por lo que tambien, se toma el resultado de la señal seno, y es bifurcado en 2 segmentos, las variables highbyte y lowbyte, que alojaran los 8 MSB y 2 LSB respectivamente, esto mediante un corrimiento de dos bits a la izquierda en highbyte, y en lowbyte mediante la operación bitwise AND 0x03 que realizara un enmascaramiento a los 8 bits mas significativos, permitiendo alojar en dicha variable los 2 bits menos significativo, cabe destacar que el resultado de la señal seno, se debe forzar a entero para almacenarse en las variables de puerto LATD y LATC, que realizaran una conversion interna de entero sin signo a caracteres sin signo, desplegando la salida de la señal en bianrio al conversor digital analogo Reemplazando 𝑅𝑥 = Conversores digitales – analógicos Se utilizaron dos métodos de conversión, resistencias ponderadas y red escalera R-2R. se implemento como amplificador operacional el LM358, de polarización simple Para la implementación de la configuración de red escalera R2R teniendo en cuenta el rango de variación de la señal se realizó el siguiente calculo para obtener como valor pico los 7v conociendo que las salidas digitales del microcontrolador PIC 18F45K22 son de 5v, a partir de la fórmula para la red escalera. 1000Ω ∗ 1400Ω 1000Ω − 1400Ω Resultando 𝑅𝑥 = −3500Ω Conluyendo que si el valor de Rx, es negativo debe ser conectada a tierra desde el pin inversor del amplificador operacional, en caso contrario se conecta a tierra igualmente, desde el pin no inversor Obteniendo de esta manera el siguiente circuito para la red escalera R-2R Figura 10. Valor Sinusoidal x=511.5*sin(2π*t)+511.5 Hacia la funcion de interrupcion, es alojada las tareas de aumento de contador de la variable discreta, esto con el fin de aumentar cada desborde del temporizador las muestras de la señal senosoidal, esto se realiza cuando la bandera de interrupcion TMROIF es igual a uno, en conjunto, en software debe ser limpiada la bandera de interrupcion y situar en el valor de TMR0, el calculo de timer, para realizar la actualizacion de tiempo de muestreo cada desborde del temporizdor 𝑅 ∗ 𝑅𝑓 𝑅 − 𝑅𝑓 Figura 11. Red escalera R-2R (Proteus) Con respecto a la configuracion de resistencias ponderadas , al igual que la red escalera R-2R se establece a partir de la formula y con una resistencia inicial de 100Ω lo siguiente. 𝑣 𝑣 𝑣 𝑣 𝑉0 = (𝑅𝑓) ( + + + ⋯+ ) = 7𝑣 𝑅 2𝑅 4𝑅 512𝑅 0.99𝑣/Ω 𝑅𝑓 = ( ) = 70Ω 7𝑣 E igualmente se sitúa una resistencia de estabilización para trabajar en polarización sencilla, mediante la ecuación para Rx Que en este caso es el cociente de Rf entre 1- la ganancia 𝑅𝑓 𝑅𝑥 = 1−𝐴 70Ω 𝑅𝑥 = = −175Ω 1 − 1.4 Igualmente, esta resistencia al estar en un valor negativo, se debe conectar del pin inversor a tierra 𝑅𝑓 𝑣 𝑣 𝑣 𝑣 𝑉0 = ( ) ( 1 + 2 + 3 + ⋯ + 10 ) = 7𝑣 𝑅 2 2 2 2 R57 R35 175 70 U3 R25 R26 R27 R28 R29 R30 R31 R32 R33 R34 51200 25600 12800 6400 3200 1600 800 400 200 100 7𝑣(1000Ω) 𝑅𝑓 = = 1400Ω 5𝑣 En conjunto a un valor Rx de estabilización para manejar el montaje en polarización sencilla A partir de la formula 10 9 8 7 6 5 4 3 1 2 OPAMP 𝑅𝑓 (5𝑣) 7𝑣 = 1000Ω Figura 12. Resistencias ponderadas (Proteus) Finalmente se realiza calculo en común a los DAC en resolución y FS 𝑅𝑒𝑠𝑜𝑙𝑢𝑐𝑖𝑜𝑛 = 𝐴 ∗ 𝑉𝑟𝑒𝑓 2𝑁 − 1 5 Siendo un DAC de 10 bits y 5V de referencia 1.4 ∗ 5𝑉 𝑅𝑒𝑠𝑜𝑙𝑢𝑐𝑖𝑜𝑛 = = 6.843𝑚𝑉 1024 − 1 Expresado en %de FS=7V 𝑅𝑒𝑠𝑜𝑙𝑢𝑐𝑖𝑜𝑛 %𝐹𝑆 = ∗ 100 𝐹𝑆 6.843𝑚𝑉 %𝐹𝑆 = ∗ 100 = 0.097% 7𝑉 Resultados en Simulación Figura 15. Señal Senosoidal y(KT)=511.5*sin(2π*(KT))+555.5 K=0;100; T=10ms Figura 13. Montaje en Proteus Dado la condición inicial de código en iniciar con una señal con tiempo de muestreo de 10ms, equivalente a tomar 100 muestras por segundo, en el canal 1 del osciloscopio(amarillo), se encuentra el tratamiento de la señal por medio de R2R y en el canal 2(azul), se encuentra el tratamiento a la señal por medio de resistencias ponderadas, cabe resaltar que los cursores muestran la condición de frecuencia de 1Hz y la amplitud máxima de 7V Figura 16. Demostracion de Tiempo de muestreo a 10ms Con 20 muestras Figura 14. Salida R2R (Amarillo) y Resistencias Ponderadas (Azul) 100 muestras En conjunto se visualiza tambien el proceso discreto en MATLAB, con diferentes tiempos de muestreo Figura 17. Salida R2R (Amarillo) y Resistencias Ponderadas (Azul) 20 muestras 6 Figura 18. Señal Senosoidal y(KT)=511.5*sin(2π*(KT))+555.5 K=0;20 T=50ms Figura 21. Señal Senosoidal y(KT)=511.5*sin(2π*(KT))+555.5 K=0;10 T=100ms Figura 22. Demostracion de Tiempo de muestreo a 100ms 1 segundo Figura 19. Demostracion de Tiempo de muestreo a50ms Con 10 muestras Figura 23. Salida R2R (Amarillo) y Resistencias Ponderadas (Azul) 1 muestras Figura 20. Salida R2R (Amarillo) y Resistencias Ponderadas (Azul) 10 muestras Figura 24. Señal Senosoidal y(KT)=511.5*sin(2π*(KT))+555.5 K=0;1 T=1s 7 III. RESULTADOS MONTAJE R2R Figura 28 Señal de Salida R2R a tiempo de muestreo de 27ms Figura 25 Montaje en Fisico DAC R2R Figura 26 Salida de Señal R2R a 10ms de tiempo de muestreo Figura 28 Señal de Salida R2R a tiempo de muestreo de 62ms Montaje Resistencias Ponderdadas Figura 26 Demostracion de tiempo de muestreo de 10ms Figura 29 Microcontrolador PIC1846K22 con pulsadores de variacion de tiempo de muestreo y DAC por resistencias ponderadas Figura 27 Señal de Salida R2R, con tiempo de muestreo aumentado Figura 30 Señal de salida de DAC Rponderadas con demostracion de periodo de señal 8 Figura 31 Microcontrolador PIC1846K22 con pulsadores de variacion de tiempo de muestreo y DAC por resistencias ponderadas Figura 35 Demostracion de tiempo de muestreo de 10ms en señal DAC por resistencias ponderadas IV. ANALISIS DE RESULTADOS Figura 32 Señal de Salida DAC R ponderadas a 120ms de muestreo Al realizar la verificación de la señal sinusoidal reconstruida a partir del microcontrolador y las configuraciones de los conversores digitales – analógicos se evaluó la precisión y la resolución del circuito y se encontró que era bastante buena. La resolución del circuito era de 10 bits, lo que significa que era capaz de representar la señal con una precisión de hasta 1024 niveles discretos. Por otro lado, la precisión del circuito fue evaluada comparando los valores de voltaje generados por el circuito con los valores esperados y se observó que la mayoría de los valores eran bastante precisos, aunque algunos valores presentaron pequeñas desviaciones. Para evaluar la resolución del DAC de 10 bits, se utilizó un osciloscopio para medir la señal generada donde se pudo observar que la señal resultante por el DAC es una aproximación muy cercana de la señal sinusoidal. Además, se calculó la resolución del DAC dividiendo la amplitud máxima de la señal de salida del microcontrolador (5 V) entre el número máximo de niveles discretos (1024), lo que resultó en una resolución de 0.0049 V por nivel. Figura 33 Señal de Salida DAC R ponderadas a 18ms de muestreo Durante las pruebas realizadas en la practica se llego a obtener una señal con distintas anomalías como lo eran picos altos y bajos de voltajes, en donde se establece que tanto el circuito de red escalera R-2R como el de resistencias ponderadas solo reciben la información del microcontrolador para posteriormente realizar el tratamiento de los 10 bits y generar la señal, de esta manera se da a entender que cualquier alteración en la señal final es debido a la codificación aplicada en el microcontrolador. También con respecto a cada una de las dos configuraciones, se analiza que en cuanto a la red escalera R-2R tiene una exactitud mucho mejor que el circuito de resistencias ponderadas pero su configuración es un poco mas compleja que la anterior mencionada. Figura 34 Señal de Salida DAC R ponderadas a 10ms de muestreo V. CONCLUSIONES • El uso del circuito para manejar el entorno discreto puede suponer que es posible caracterizar una gran 9 variedad de señales o emular muchos sistemas, esto es muy importante en dado caso de que se necesite realizar pruebas sobre un sistema en concreto • La configuración de resistencias R-2R, tiene una gran utilidad en el muestreo de valores de la señal generada digitalmente, así mismo se involucra el tiempo de muestreo como una variable de vital importancia para observar la señal solicitada con un detalle considerablemente bueno. • Se decidio utilizar el microcontrolador PIC18F46K22 debido a su mayor facilidad en el uso de registros y estructura puesto que se necesita un seguimiento muy preciso en la señal para poder cumplir con los propósitos del laboratorio • Respecto a las aplicaciones del laboratorio antes presentado, estás configuraciones serían una versión minusiosa y en cierto modo la representación de un conversor digital análogo, suponiendo que en este caso su importancia se basa en el muestreo o caracterización de magnitudes para su posterior uso o parametrización en entornos de trabajo de la industria • El uso de temporizadores en los microcontroladores ayuda a implementar tareas con ocupacion de computo minimo, y se pueden implementar tareas de procesos casi simultaneos con ayuda de la configuracion, para optimizacion de procesos, y un mejor rendimiento en las tareas • Las resistencias ponderadas es un buen metodo para convertir señales digitales en analógicas, sin embargo su exigencia de precision en los valores de dichas resistencias, hace que el metodo sea sumamente dificil de implementar y requiriese de los valores exactos en el formulado • Las aplicacione de muestreos en señales, se pueden implementar en aplicaciones de emulacion de sistemas, o respuestas de estos mismos a partir de estimulos, pueden ser a partir de una lectura analogica o señales discretas • La implementacion de las configuraciones R2R puede variar segun su tipo de montaje, ganancia y si es implementado unicamente con componentes pasivo, o bien dicho se agregen componentes activos • La precision ante los dos metodos puede variar de acuerdo a la resolucion del DAC, y en el valor de resistencia seleccionados para los montaje • La implementacion de conversores digital analogia mediante resistencias R2R y Resistencias ponderadas, es dificl cuando hay mas 10 bits de resolucion, por lo que comercialmente se comercializan modulos convertidores, de una señal de entrada y salida unica, de modo que son comunicados con un microcontrolados mediante diversos protocolos de comunicación y diversos niveles de voltaje • El muestreo insuficiente de partes de la señal, puede provocar visualmente que la señal desplegada en fisico, sea vea totalmente diferente a la señal planteada, conociendose esto como aliasing, y incumplimiento del teorema de muestreo de Nysquit • El uso de conversores digitales analogicos, se puede implementar no solo en el desplegado de señales de estimulo, sino para generar señales bastante especificas, que solo un componente de computo puede generar VI. REFERENCIAS [1]. J. E. Cote B, "Introducción control digital", presentación en diapositivas, Universidad ECCI, Bogotá, Colombia, 03-feb2023.