Está en la página 1de 24

INSTITUTO TECNOLÓGICO SUPERIOR

de Ciudad Hidalgo

PROYECTO UNIDAD 1

DISCRETIZACIÓN DE SEÑALES ANALOGICAS

ASIGNATURA:
CONTROL DIGITAL

PROFESOR:
ERIC GONZALEZ VALLEJO

GRUPO:
359-GA

PRESENTA:
VICTOR MANUEL CABALLERO PEREZ

CARRERA:
INGENIERIA MECATRONICA

“Entrega: 22/Sep/22”
Introducción:
A continuación, se muestra y describe el trabajo sobre la discretización de señales
analógicas. Esto a partir de una función x(t) que se encuentra en el dominio del
tiempo, se usa un microcontrolador para recibir la señal y transformarla en datos
digitales, enseguida se debe reconstruir la señal original con un muy pequeño
margen de error.

Junto a esto, se explican los pasos que se realizaron para la simulación y obtención
de las señales mediante el uso de softwares como Matlab y Proteus, que permiten el
análisis y simulación de la función, así como la identificación visual de la misma. Con
el uso de Proteus se detalla los componentes que se utilizaron para generar de
manera correcta la forma de la onda en base a función dada y la manera en que se
reconstruyo la señal mediante el uso de un conversor de digital a analógico.

También se abordará la programación implementada y la manera de configuración


de los registros utilizados para las entradas analógicas a digitales y la conversión de
estos mismos datos, pero de digital a analógico, y la lógica de programación
implementada para realizar este proceso.
Marco teórico:
MCP4922.
El MCP4922 es un DAC analógico dual, un dispositivo de salida de voltaje en búfer
controlado desde una interfaz serie SPI. Emite una proporción del voltaje de entrada.
Dado que es un dispositivo de 12 bits, su resolución es Vref / 4096. Por lo tanto,
puede elegir pasos muy finos dividiendo desde la referencia.
Este dispositivo es similar a los otros chips DAC: MCP4725, MCP4726, MCP4728.
Hay tres diferencias importantes:
1. Utiliza SPI.
2. SIN EEPROM.
3. SIN referencia interna.
Así que las consecuencias de esto son:
1. Es mucho más rápido que los otros DAC mencionados.
2. No puede recordar un voltaje a través de apagado / encendido.
3. Utiliza Vdd como voltaje de referencia.
Este chip tiene la misma función de sincronización que se encuentra en el MCP4728
(la señal de control LDACn) que le permite actualizar las salidas simultáneamente.

Ilustración 1: Diagrama del MCP4922 y Pin Out


Desarrollo:
Grafica Matlab
Primeramente, para iniciar el proyecto, era necesario conocer la forma de la onda
que se estaba manejando, por lo que se realizó una simulación de la ecuación
mediante el uso del software MATLAB, en el cual se elaboró un código que
permitiera graficar y analizar la señal en función de la ecuación proporcionada para el
proyecto.

Ilustración 2: Código de Mathlab

Dicho código permite graficar la forma de la onda de manera exacta, por lo que
resultaría más fácil entender que es lo que se trata de generar mediante el uso de un
micro controlador, sus características como fase, amplitud y frecuencia, así como su
ciclo de trabajo y la determinación del tiempo de muestreo.
Ilustración 3: Señales generadas en mathlab

De este análisis se pudo obtener que el ciclo de trabajo es completado en 0.4


segundos y que el tiempo de muestreo está dado por 3.3 milisegundos. Además de
conocer la forma gráfica de la onda que puede ser una guía visual para la parte que
se debe realizar en el micro controlador.
En la primera imagen se puede apreciar la forma de la onda, mientras que en la
segunda se observa una reconstrucción de la misma con valores obtenidos mediante
discretización.
Circuito proteus
Para la elaboración del circuito, se necesitaba generar de manera análoga la señal
senoideal para para la lectura del micro controlador, esto mediante la implementación
de circuitería externa para representar el comportamiento de la función dada para el
trabajo final.
Para esto, se optó por utilizar el software de simulación de circuitos electrónicos
PROTEUS, dentro del cual, se cuenta con las librerías de los componentes
necesarios para llevar a cabo la simulación de la función.
Primeramente, la función fue generada por partes, tomando como referencia los
valores que acompañan a cada una de las funciones coseno y se generaron de de
manera individual con sus respectivos parámetros de amplitud y frecuencia. Se
colocaron 4 funciones senoidales haciendo uso del generador de ondas con el que
ya cuenta el programa integrado.

Ilustración 4: Señales senoidales

El valor de las resistencias de 50k ohms se decidió que fuese elevado debido a que
el operacional amplificador es un circuito que trabaja con señales de voltaje, por lo
que hacer que circule una corriente elevada y no limitada puede terminar dañando el
circuito de manera física.
Las amplitudes utilizadas para las señales fueron de 2, 1, 1.5 y 0.5 volts
respectivamente con la configuración de offset para lograr que la señal estuviera
dentro del cuadrante positivo y fuera posible leerla con el micro controlador. Todas
las señales poseen un ángulo de desfase de 90° y su frecuencia es de 2, 12.5. 20 y
150 Hz respectivamente.

Ilustración 5:Valores de frecuencia y amplitud


Una vez generadas las funciones, se utilizó un operacional amplificador en la
configuración de sumador no inversor, para este caso se optó por utilizar el modelo
LM741, debido a su elevada ganancia y cuya configuración sumador no inversor está
dada por la siguiente formula:

Donde se explica que Rf será n veces mayor que R para esta configuración y n es el
número de señales que se desean sumar, para este caso 4, por lo que Rf será 3
veces mayor que R. Se optó nuevamente por una resistencia de 10k Ohms para
limitar la corriente del circuito para el valor de R, por lo que Rf será de 30k Ohms.

Ilustración 6: Configuración de amplificador operacional

Con esta configuración existe retroalimentación negativa y a la pata 2 y se recibe la


señala de la función en la pata 3. Se alimenta el operacional con fuente simétrica de
12v.
Posteriormente a esto, la señal que se recibe comprendía un voltaje máximo de 10v,
lo que está fuera del rango de lectura del micro controlador, para ello se utilizó un
divisor de voltaje para bajar el voltaje hasta un rango que este comprendido entre los
0 y 5v, nuevamente se utilizaron resistencias de valores altos para limitar la corriente,
ambas del mismo valor para que la caída de voltajes sea uniforme en ambas, este
caso, 2 resistencias de 10k ohms.

Ilustración 7: Divisor de voltaje

Con todo esto se armó la primera etapa del circuito donde ya se podía observar la
forma reconstruida de la señal y como es que esta se comportaba, junto con los
valores pico que la gráfica alcanzaba, esto siendo muy similar a los resultados de las
gráficas obtenidas en el análisis de MatLab.
Ilustración 8: Señal senosoidal

Posteriormente se colocó el micro controlador, que para este caso se utilizó el


PIC18F4550 para cargar la programación y realizar la toma de muestras y
reconstrucción de la señal de entrada, sin embargo, este micro controlador no cuenta
con un conversor digital analógico, por lo que se necesita hacer uso de un circuito
externo para reconstruir la onda mediante datos digitales. Se utilizó el DAC
MCP4922 con comunicación SPI.

Ilustración 9: Pic y DAC externo

Con todo esto, se realizó la programación y se cargó al micro controlador para


realizar la simulación de la lectura y reconstrucción de la señal senoideal.
Calculos.

Ilustración 10: Cálculos 1/2


Ilustración 11: Cálculos 2/2
Programación.

Para realizar la programación se utilizó el software MPLAB X IDE. Primeramente, se


creó un nuevo archivo y se seleccionó el compilador XC8.
Una vez creado el programa, procedemos a configurar el set de bits de configuración
en el apartado Production>set configuration bits. Aquí seleccionamos el oscilador que
vamos a usar, encendemos el power-up timer y apagamos el watch dog timer como
se muestra a continuación.

Ilustración 12: Set configuration bits

Una vez configurado esto, se coloca el código en un archivo de cabecera llamado


newfile.h. Posteriormente se crea un archivo main en el cual vamos a colocar toda
nuestra programación el cual lleva por nombre main.c.
Una vez creado el archivo main, vamos a mandar llamar el archivo de cabecera con
la función include, así como vamos a incluir la frecuencia del cristal a la que
trabajaremos, que es de 4Mhz, así como algunas variables que utilizaremos, como
se muestra a continuación.

Ilustración 13: Librerias, frecuencia y variables a utilizar

Posteriormente, vamos a utilizar una serie de subprogramas los cuales están fuera
del void main, con la finalidad de que solamente mandemos llamar con una sentencia
alguno de estos sin necesidad de desarrollarlo todo en el main void. A continuación,
se observa lo descrito anteriormente.
Ilustración 14: Subprogramas utilizados en el código
Como se mencionó anteriormente, el PIC18F4550 no cuenta con DAC integrado, por
lo que se decidió utilizar un ADC externo, como lo es el DAC MCP4922.
Para nosotros realizar una conexión con este DAC, es necesario utilizar la
comunicación MSSP (MASTER SYNCHRONOUS SERIAL PORT), por lo que se usó
el modo SPI para lograr una comunicación maestro-esclavo entre el PIC y el DAC.
Como se observa en la imagen anterior, se tienen subprogramas de la comunicación
SPI en la cual se almacena la variable SSPBUF, la cual contiene en mensaje que se
transmitirá por la comunicación SPI. También se tiene un subprograma del DAC en el
cual se almacenan algunos comandos que nos permiten que el DAC no tenga
ganancias, otros para separar el bit en alto y en bajo y al final mostrarlo todo junto,
así como un comando para elegir que canal se quiere elegir del DAC ya que este
modelo cuenta con 2 canales para la conversión Digital-Analógica.
También se tiene un subprograma del ADC en el cual se tienen los registros
necesarios que nos permiten elegir que pin de los 2 que se habilitaron como entradas
analógicas se va a utilizar, esta va asociada a la subrutina del DAC con la variable
canal. Así como los registros para encender el ADC y la bandera que nos hace saber
si hay un dato en proceso. Y por último los registros que nos permiten agrupar los
bits en una misma variable para así poder procesarla. Además, se tiene el
subprograma correspondiente al Timer0, en el cual como se puede observar, se
tienen todas las configuraciones de los registros como el prescaler, las banderas, la
resolución etc.
Ilustración 15: Void Main
Posteriormente tenemos el void main en el cual se encuentran algunas
configuraciones que el microcontrolador ejecuta solamente una vez, como registros,
los estados de las entradas, configuraciones del SPI, del ADC, la inicialización del
Timer0 y el ciclo while en el cual se incluye la tasa de muestreo que calculamos.
Como se puede observar, en el ciclo while, se tiene una variable con el valor de la
tasa de muestreo calculada anteriormente, además de la lectura del ADC
almacenada en la variable código. Posteriormente se tienen los valores calculados
del timer 0 para un tiempo de 0.0040s, esto con el fin de que tengamos un conteo y
poderlo interceptar antes de que llegue a su límite. Se guarda en 2 variables ya que
es de 16 bits de resolución el timer pero después lo juntamos en una sola variable.
Después tenemos una condicional if, en la que se declara que si el valor del contador
es mayor al de la tasa de muestreo que saque por el DAC el valor que está leyendo
en ese momento el ADC y posteriormente que las banderas del Timer 0 se apaguen
con el fin de reiniciarlo y comenzar la cuenta de nuevo.
Es importante mencionar que el microcontrolador tiene una resolución de 10 bits y el
ADC de 12 bits, por lo que esto podría generar problemas al momento de pasar
datos de uno a otro. Pero para solucionar esto se multiplicó por 4 la variable código
que es donde se almacena la lectura del ADC para que con esto no nos generen
problemas por tener resoluciones diferentes.

Resultados.
Con ayuda del osciloscopio se pudo observar las dos señales obtenidas, mientras
que una es la señal original, al otra se realiza una aproximación con a la salida de
DAC.
Ilustración 16: Comparación de señales

Como se puede observar, la forma de la onda reconstruida es muy similar a la onda


original, esto debido a que el DAC cuenta con un sistema de retención de orden ceo
integrado en el mismo, por lo que es muy aproximado, pero no exacto.
Conclusión:
A través de esta práctica se pudo observar y comprobar el funcionamiento y
aplicación de los módulos de conversión analógica a digital y de digital a analógicos,
para la captura y reconstrucción de señales analógicas de voltaje, además de que se
puede implementar en diferentes áreas que facilitan el aprendizaje y comprensión de
estos temas. Al observar las señales originales y reconstruidas se puede entender
mejor el funcionamiento de este tipo de dispositivos, además de aplicar los
conocimientos necesarios para el control de estas señales.

También podría gustarte