miércoles, 3 de marzo de 2021

Conversión Digital-Analógica por PWM filtrado en PIC16F15313

 Este apunte público tratará muchos conceptos y haré referencias a información extra para mantenerlo corto. Comenzaré con la razón por la que necesité hacer este programa. Requería construir un pulso para caracterizar un sistema (identificación de sistemas) a partir de su la respuesta. Un impulso o Delta de Dirac es una distribución que tiene la peculiaridad de tener un espectro que abarca todas las frecuencias. En teoría, si queremos saber cual será la respuesta de un sistema a todas las frecuencias entonces debemos aplicar como entrada una señal impulsiva. En la práctica hay algunos problemas. Es imposible construir un impulso ideal y a demás los sistemas físicos como los sensores están siempre limitados a una banda de frecuencias. Peor aún, al digitalizar la señal de un sensor analógico se restringe a un más el ancho de banda útil. Es por eso que en algunos casos en mejor utilizar una función Sinc (o seno cardinal) como entrada de caracterización ya que permite definir bastante bien el ancho de banda de trabajo. En mi caso particular, necesito una señal Sinc con un periodo de lóbulo principal de 1/(3.8kHz) o 263.16 us y con los bordes suavizados por una gaussiana. El periodo del lóbulo principal se mide entre sus cruces por 0. Su gráfica en el tiempo y su espectro se muestra a continuación:

 Se puede notar que he establecido mi ancho de banda de trabajo de 0 a 3.8kHz. Ahora lo que procede es escribir un programa en un microcontrolador que me de un PWM que codifique mi señal Sinc. Por restricciones de espacio, mi aplicación requiere de un microcontrolador muy pequeño por lo que elegí el PIC16F15313 que tiene solo 8 pines. Justo los que requería. En México pueden comprarlos en AG Electrónica. El circuito usado es el siguiente:

 
El código para el micro (en XC8) lo pueden encontrar bien comentado en este repo en mi Github. Por último, se diseñó un filtro pasa-bajas de orden 4 utilizando el programa Filter-Pro de Texas Instruments (al parecer ya no se puede descargar pero existe como aplicación web). Se eligió una frecuencia de corte de 12 kHz para tener un buen margen de operación y buena calidad de señal:
 Estoy usando el integrado MCP602 que tiene dos opams por integrado porque son los que tenía a la mano pero pueden utilizar un solo MCP604 que tienen 4 opamps por integrado (pueden comprar ambos en AG). El resultado de la implementación en físico se muestra en la siguiente captura de osciloscopio:

No hay comentarios: