Universidad Politécnica Salesiana
Transformada de Fourier con dsPIC y GLCD
INTENGRANTES -
-
Armando Alomoto Santiago Maldonado Jimmy Andrade -
Tutor: Ing. LUIS OÑATE 2010-2011 LA TRANSFORMADA DE FOURIER DE UN SEÑAL CON EL dsPIC30F4013 dsPIC30F4013 Y UN GLCD 1
Universidad Politécnica Salesiana
OBJETIVOS
Utilizar y darle una aplicación práctica a los conversores AD del microcontrolador dsPIC30F4013
Utilizar y darle una aplicación práctica al GLCD Observar el espectro de la transformada transformada de Fourier en el dsPIC30F4013 dsPIC30F4013 Conocer e implementar el código para los dsPIC Establecer las diferencias que tienen estos Microcontroladores Microcontroladores en comparación comparación con los PI Sacar la transformada de Fourier de una onda cuadrada, triangular, senoidal y mirar los resultados en la Glcd y en el ocsiloscopio.
PLANTEAMENTO DEL PROBLEMA Este proyecto está diseñado para trabajar con el DSPIC 30F4013. 30F4013. Este proyecto ya ha sido probado y funciona correctamente En la placa EasydsPIC4 que es un entrenador DSPIC y con un cristal de 10 Mhz puede trabajar correctamente sin tener problemas, si utilizamos otro cristal la frecuencia de operación será mayor que 60 Mhz. Por ejemplo si tu estas usando un cristal de 10Mhz tú debes asegurarte de activar la opción 8xPLL, de esta manera la frecuencia de operación será de 80 Mhz . Debes tener en cuenta que la máxima frecuencia de operación de un DSPIC es de 120 Mhz Con pequeños ajustes, este ejemplo debería funcionar con cualquier otra MCU dsPIC, EL DSPIC30F4013 tiene solo un conversor AD Este código demuestra como calcular o interpretar la Transformada de Fourier FFT ¿DFT? De una señal analógica con conceptos básicos La señal de entrada es muestreada muestreada en intervalos regulares regulares y almacenados en un buffer . El buffer es interpretado como un complejo arreglo de muestras donde la parte Real es una muestra actual, mientras la parte Imaginaria es igual a cero Una vez que el buffer está lleno con muestras este es pasado al sub proceso de la FFT El sub proceso FFT calcula calcula la Rápida (Discreta) Transformación Transformación de Fourier de la señal de entrada entrada y vuelve de nuevo las muestras de la FFT en el buffer de entrada. Las muestras de la FFT son también obtenidas en formato Re, Im, Re, Im...,pero la parte ahora es diferente de cero La amplitud de de cada muestra de la FFT es calculada como F[k] = sqrt (Re[k] ^2+Im[k] ^2). Puesto que el espectro de la FFT es simétrico, solo la primera mitad del buffer de entrada es considerado La amplitud del espectro es dibujado en el GLCD. Todo el proceso se repite infinitamente 2
Universidad Politécnica Salesiana Dando la impresión de que el espectro es dibujado en tiempo real La potencia de la señal puede ser calculada como la suma de toda las muestras de la transformada de Fourier (FFT) Pw = sum (k=0...N-1) (F[k]) Requisitos de la señal de entrada Como la señal de entrada es analógica la frecuencia máxima máxima no debe exceder los 6 khz Su amplitud es de casi 1 V, mientras que su valor DC también debe ser de 1V Otros valores de estos pueden causar saturación saturación y distorsión en la señal de salida Si usted experimenta extraños dibujos en GLCD, intente Con la alteración de los niveles de señal de entrada hasta que la imagen se estabilice. Con el fin de analizar las señales más rápido que 6kHz, buffer de entrada matriz debe ser aumentada. De todos modos, la frecuencia de muestreo debe ser al a l menos 2 * Fmax (Criterio de Nyquist).
MARCO TEORICO GLCD Dimensiones 78 x 70 x 15 mm VA: 62 X 44 mm AA: 56.27 x 38.25 mm Resolución: 128 x 64 dots Driver: KS0107/KS0108 o equivalente Tipo de LCD: SNT, panel verde-amarillo transflectiva Top -20-70 grados centígrados, Tst -30-80 grados centígrados Fuente de alimentación -5 V Interface: 8 bits en paralelo Dirección de la vista: 6.00
3
Universidad Politécnica Salesiana
dsPIC30F4013
Un controlador digital de señal (DSC) es un controlador embedded single-chip que integra de manera compacta las capacidades de control de un microcontrolador (MCU) con las capacidades de computación y rendimiento de un procesador digital de señal (DSP) El controlador digital de señal dsPIC30F de Microchip ofrece todo lo que se puede esperar de un poderoso MCU de 16-bit: gestión de interrupciones rápida, flexible y sofisticada; un amplio array de periféricos analógicos y digitales; gestión del consumo; opciones de reloj flexibles; poweronreset; Brown-out; watchdog; seguridad en código, emulación en tiempo real a plena velocidad; y soluciones de depuración en circuito a plena velocidad. Añadiendo con destreza la capacidad de un DSP a un poderoso microcontrolador de 16-bit, el controlador digital de señal dsPIC30F de Microchip consigue lo mejor de ambos mundos y marca el comienzo de una nueva era en el control embedded.
Familia de propósito general La familia de propósito general dsPIC30F es idónea para una amplia gama de aplicaciones embedded que requieren un MCU de 16-bit. Además, las variantes con interfaces para CODEC están especialmente indicadas para aplicaciones de audio. 4
Universidad Politécnica Salesiana
Tarjeta de programación del dsPIC
5
Universidad Politécnica Salesiana
ESQUEMATICO
Las conexiones ya están realizadas en la tarjeta de programación EasydsPic4A lo único que tenemos que conectar externamente es el GLCD de los jumpers que tiene determinados para el GLCD correctamente observando la distribución de pines de nuestro GLCD. No debemos olvidar polarizar polarizar la glcd con un voltaje voltaje negativo de -15 voltios y en vcc 5 voltios haciendo tierras comunes para evitar un corto.
6
Universidad Politécnica Salesiana Debido a que contamos con un glcd de 18 pines en nuestro laboratorio aquí tenemos la configuracion correspondiente
Pines GLCD pin 1 pin2 pin3 pin4 pin5 pin6 pin7 pin8 pin9 pin10 pin11 pin12 pin13 pin14 pin15 pin16 pin17 pin18
Pines dsPic RB4 RB5 GND VCC Vo RF0 RF1 RF4 RB0 RB1 RB2 RB3 RD0 RD1 RD2 RD3 VCC GND
7
Universidad Politécnica Salesiana
DIAGRAMA DE FLUJO
INICIO
Config los espacios de memoria para la FFT
Definir variables
Config y activar el AD
Config el GLCD
Iniciar el AD y el GLCD
Rutina para convertir la In en
Rutina para calcular Re e Im de la
Rutina para dibujar en el GLCD
Rutina para escribir la frecuencia
Rutina para leer el ADC
Rutina para muestrear la señal
Iniciar todo
Obtener la FFT y dibujar en el GLCD 8
Universidad Politécnica Salesiana
PASOS PARA REALIZAR EL PROGRAMA CREAR UN NUEVO PROYECTO Al iniciar microbasic for DSPIC hacemos click en Project y luego click cl ick en New Project y se abre una venta como la siguiente
En esta ventana ponemos el nombre de nuestro proyecto (Project Name:) y la ubicación en donde guardaremos el proyecto (Project Path:), en el menú desplegable de device tenemos una gran cantidad de microcontroladores pero seleccionamos el P30F4013 que utilizaremos en esta práctica, práctica, además ponemos un valor de 8 Mhz como señal de reloj del microcontrolador (clock:)
CONFIGURACION DE LOS FUSIBLES Para la configuración de los fusibles es necesario activar los siguientes fusibles .
9
Universidad Politécnica Salesiana
10
Universidad Politécnica Salesiana
CODIGO EN MICROBASIC FOR DSPIC program FFT_123 dim Samples as word[256] word[256] absolute $0C00 ' Y data space for P30F4013- required by FFT routine ‘Ver la hojas de datos de nuestro DSPIC y vemos los Y limites
espacios de memoria freq as word txt
' Variables Auxiliares
as string[5]
Written as word[64]
‘Inicialización del conversor AD
sub procedure InitAdc
ADPCFG = 0x00FF ' PORTB es la entrada análoga ADCHS = 8
' Conectar RBxx/Anxx como entrada CH8. RB8 es el pin de la entrada
ADCSSL = 0
' 11
Universidad Politécnica Salesiana ADCON3 = $1F3F $1F3F ' sample time = 31 Tad. ADCON2 = 0 ADCON1 = $83E0 ' activar el ADC TRISB.8 = 1
' RB8 como pin de entrada entrada AD
end sub
'Inicializar el GLCD para el programador EasydsPIC4 sub procedure InitGlcd Glcd_Init_EasydsPIC4() Glcd_Set_Font(@FontSystem5x8, 5, 8, 32) Glcd_Fill(0xAA) ' Show stripes on GLCD to signalize startup
Delay_ms(500) Delay_ms(500) ' Retardo Glcd_Fill(0x00) Glcd_Fill(0x00) ' Borrar la pantalla end sub
' Iniciar Main sub procedure MainInit InitAdc InitGlcd Vector_Set(Written, Vector_Set(Written , 64, $FFFF) ' Llenar "Written" con $FFFF Glcd_Write_Text(" Hz", 100, 0, 1) end sub ‘Función auxiliar para convertir 1.15 en punto base de tipo float (necesita para sacar la raiz
cuadrada). sub function Fract2Float(dim Fract2Float(dim input_ as integer) as float 12
Universidad Politécnica Salesiana if (input_ < 0) then input_ = - input_ end if result = input_/32768. end sub
' Datos de salida de la sub rutina . estos datos de la sub rutina serán dibujados en el GLCD. 'GLCD coordina el sistema y empieza en la l a esquina superior izquierda, Por tanto 'el dibujo de la línea tuvo que ser modificada a fin de lograr ' un espectro visible en la pantalla 'Muestra 'Muestra en ese momento contiene DFT de la señal en la manera Re, Im, Re, Im... sub procedure WriteData dim Re, Im, tmpw, j, k, l, max as word Rer, Imr, tmpR as float
j
=0
k
=0
' Si desea omitir la componente componente DC luego hacer j> = 1
max = 0 freq = 0
' Resetear la corriente máxima . Frecuencia Frecuencia para una nueva lectura
while k <= 63 Re = Samples[j]
' Parte real de la muestra de la TF
inc(j)
Im = Samples[j]
' Parte imaginaria de la muestra de la TF
inc(j) 13
Universidad Politécnica Salesiana
Rer = Fract2Float(Re) Fract2Float(Re)
' convertir a IEEE punto flotante
Imr = Fract2Float(Im) Fract2Float(Im)
' convertir a IEEE punto flotante
tmpR = Rer * Rer
' Re^2
Rer = tmpR tmpR = Imr * Imr
' Im^2
Imr = tmpR tmpR = sqrt(Rer sqrt(Rer + Imr) Imr) Rer = tmpR*256. tmpR*256.
' Amplitud de la corriente corriente de la muestra muestra de la TF ' DFT is scaled down by 1/N, we need to
' tomarlo de Nuevo a fin de tener componentes componentes visibles ' en el GLCD Re = Rer
if Re > 63 then if k = 0 then Re = 0 else Re = Written[k-1] Written[k-1]
' k = 0? tener cuidado con los saltos
end if end if
if Re > max then
' Encuentra la maxima amplitud amplitud
max = Re freq = k
' Esta debe ser la frecuencia frecuencia central de la señal
end if 14
Universidad Politécnica Salesiana
tmpw = Written[k] if tmpw <> Re then
' Dibuja solo las componentes componentes que son cambiadas
l = 64 - tmpw
' 64 líneas en el GLCD en el eje Y
while l <= 63
' Limpiar la línea del fondo de la pantalla
Glcd_Dot(k, l, 0) inc(l) wend
l = 64 - Re
' dibujar la línea del fondo de la pantalla
while l <= 63 Glcd_Dot(k, l, 1) inc(l) wend Written[k] = Re
' Marca que la muestra de la corriente ha sido dibujada
end if inc(k)
'Mueve la corriente la coordenada X
inc(k)
' Dibuja en cada segundo la coordenada X
wend ' Escribe la frecuencia frecuencia máxima de la muestra freq = freq * 100 WordToStr(freq, txt) Glcd_Write_Text(txt, 70, 0, 1) end sub
' Toma la muestra de corriente 15
Universidad Politécnica Salesiana sub function function ReadAdc ReadAdc as word ADCON1.1 = 1
' Inicia el conversor AD
while ADCON1.0 = 0
' Espera hasta que termine el conversor AD
nop wend result = ADCBUF0
' Obtiene el valor del ADC
end sub
'llena las muestras muestras con muestras muestras de entrada entrada in la manera Re, Im, Re, Re, Im... donde Im = 0 sub procedure SampleInput dim i as integer i =0 while i <= 255 Samples[i] = ReadAdc ' Re inc(i) Samples[i] = 0 inc(i)
' Im
wend ' "Muestra " ahora contiene 128 pares de end sub
' Main programa inicia aqui main: MainInit
' Iniciar todo
while true
' Lazo infinito
SampleInput
' Muestra de la señal de entrada 16
Universidad Politécnica Salesiana
' Realizar FFT (DFT), 7 etapas, 128 muestras de pares de complejos 'Factores Twiddle son son tomados tomados de el FFT(7, @TwiddleCoeff_128, Samples) ' DFT mariposa algoritmo de bits de salida se invierte invierte muestras. ' Tenemos que restaurar en orden natural. BitReverseComplex(7, Samples) ' Dibuja la TF en el GLCD WriteData wend end.
BAJAR EL PROGRAMA AL PIC Para bajar el programa microcontrolador abrimos el programa mikroElectronika mikroElectroni ka dsPICFLASH que programa la tarjeta EasydsPIC4
Seleccionamos el Microcontrolador que tenemos borramos el microcontrolador dando click en el botón Erase , Cargamos el archivo generado como punto hex dando click en el botón Load HEX y finalmente para bajar el programa damos click en el botón Writte
17
Universidad Politécnica Salesiana
Fotografías del Circuito
18
Universidad Politécnica Salesiana
Fotos circuito funcionando CON UNA ONDA SENOIDAL FRECUENCI A DE 1400 HZ
19
Universidad Politécnica Salesiana
CON UNA ONDA TRIANGULAR
20
Universidad Politécnica Salesiana
Con una onda cuadrada
21
Universidad Politécnica Salesiana
Conclusiones
Tener en cuenta los requerimientos que debe tener la señal de entrada de 1 voltio pico pico y que además solo tiene que ser de valores positivos
La señal de entrada además para este proyecto es ingresada i ngresada por el pin Rb8 que es la señal analógica del micro
Podemos observar que la aplicación de los ds pics son muy importantes ya que como pudimos observar el espectro de Fourier se miro muy bien.
Recordar siempre la activación activación de los fusibles del
microcontrolador microcontrolador porque porque si no
activamos el circuito no funcionará
22
Universidad Politécnica Salesiana
Debemos tener en cuenta la polarización del GLCD porque si no tomamos en cuenta esto nunca se nos va a prender el GLCD y no podremos podremos nivelar el el contrasate. contrasate.
Aprendimos a utilizar la tarjeta para programar los dsPIC30Fxx la cual es muy sencilla de utilizar y de gran ayuda para realizar el proyecto
La señal de entrada solo tiene que llegar hasta una frecuencia máxima de 6 Khz pasado esta frecuencia frecuencia la transformada de Fourier no es la que qu e tendría que salir en el GCLD
Bibliografía:
CONECCION GLCD 18 PINES/Hojas guías de Practicas, Sistemas Microprocesados I, Ing. Luis Oñate, UPS 2010
ESQUEMA DE CONECCION/ http://www.mikroe.com/eng/downloads/get/333/easydspic4a_manual_v100.pdf / 10/07/2010
GUIA DEL PROGRAMA PARA FFT/ http://www.mikroe.com/eng/home/index/ / 10/07/2010
FFT /Archivos de programa\Mikroelektronika\mikroBasic dsPIC\Examples\EasydsPIC4\Extra examples\Dsp\P30F4013\FFT-/10/07/2010
23