Sei sulla pagina 1di 23

Universidad Politécnica Salesiana

Transformada de Fourier con dsPIC y GLCD

Salesiana Transformada de Fourier con dsPIC y GLCD INTENGRANTES - Armando Alomoto - Santiago Maldonado -

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 Y UN GLCD

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 de Fourier en el dsPIC30F4013

Conocer e implementar el código para los dsPIC

Establecer las diferencias que tienen estos Microcontroladores en 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. 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 en intervalos 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 la Rápida (Discreta) Transformación de Fourier de la señal de 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 diferente de cero

,pero la parte ahora es

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

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 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 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 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

Universidad Politécnica Salesiana

dsPIC30F4013

Universidad Politécnica Salesiana dsPIC30F4013 Un controlador digital de señal (DSC) es un controlador embedded

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; power- onreset; 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.

Universidad Politécnica Salesiana

Universidad Politécnica Salesiana Tarjeta de programación del dsPIC 5

Tarjeta de programación del dsPIC

Universidad Politécnica Salesiana Tarjeta de programación del dsPIC 5

5

Universidad Politécnica Salesiana

ESQUEMATICO

Universidad Politécnica Salesiana ESQUEMATICO Las conexiones ya están realizadas en la tarjeta de programación

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 la glcd con un voltaje negativo de -15 voltios y en vcc 5 voltios haciendo tierras comunes para evitar un corto.

Universidad Politécnica Salesiana

Debido a que contamos con un glcd de 18 pines en nuestro laboratorio aquí tenemos la configuracion correspondiente

Pines

Pines

GLCD

dsPic

pin 1

RB4

pin2

RB5

pin3

GND

pin4

VCC

pin5

Vo

pin6

RF0

pin7

RF1

pin8

RF4

pin9

RB0

pin10

RB1

pin11

RB2

pin12

RB3

pin13

RD0

pin14

RD1

pin15

RD2

pin16

RD3

pin17

VCC

pin18

GND

Universidad Politécnica Salesiana

DIAGRAMA DE FLUJO

INICIO
INICIO

Config los espacios de memoria para la FFT

Definir variables auxiliares
Definir variables
auxiliares

Config y activar el AD

la FFT Definir variables auxiliares Config y activar el AD Config el GLCD Iniciar el AD

Config el GLCD

variables auxiliares Config y activar el AD Config el GLCD Iniciar el AD y el GLCD

Iniciar el AD y el GLCD

y activar el AD Config el GLCD Iniciar el AD y el GLCD Rutina para convertir

Rutina para convertir la In en

GLCD Iniciar el AD y el GLCD Rutina para convertir la In en Rutina para calcular

Rutina para calcular Re e Im de la

para convertir la In en Rutina para calcular Re e Im de la Rutina para dibujar

Rutina para dibujar en el GLCD

para calcular Re e Im de la Rutina para dibujar en el GLCD Rutina para escribir

Rutina para escribir la frecuencia

para dibujar en el GLCD Rutina para escribir la frecuencia Rutina para leer el ADC Rutina

Rutina para leer el ADC

Rutina para escribir la frecuencia Rutina para leer el ADC Rutina para muestrear la señal Main:

Rutina para muestrear la señal

Rutina para leer el ADC Rutina para muestrear la señal Main: Iniciar todo Obtener la FFT
Main: Iniciar todo Obtener la FFT y dibujar en el GLCD
Main:
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 en New Project y se abre una venta como la siguiente

click en New Project y se abre una venta como la siguiente En esta ventana ponemos

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, 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 .

Universidad Politécnica Salesiana

Universidad Politécnica Salesiana 10
Universidad Politécnica Salesiana 10
Universidad Politécnica Salesiana 10

Universidad Politécnica Salesiana

Universidad Politécnica Salesiana CODIGO EN MICROBASIC FOR DSPIC program FFT_123 dim Samples as word[256] absolute $0C00
Universidad Politécnica Salesiana CODIGO EN MICROBASIC FOR DSPIC program FFT_123 dim Samples as word[256] absolute $0C00

CODIGO EN MICROBASIC FOR DSPIC

program FFT_123

dim Samples as 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

' Variables Auxiliares

txt

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

'

Universidad Politécnica Salesiana

ADCON3 = $1F3F ' sample time = 31 Tad.

ADCON2 = 0

ADCON1 = $83E0 ' activar el ADC

TRISB.8 = 1

end sub

' RB8 como pin de entrada AD

'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)

' Retardo

Glcd_Fill(0x00) ' Borrar la pantalla

end sub

' Iniciar Main

sub procedure MainInit

InitAdc

InitGlcd

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 input_ as integer) as float

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 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 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

' Si desea omitir la componente DC luego hacer j> = 1

k

= 0

max

= 0

freq

= 0

' Resetear la corriente máxima . 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)

Universidad Politécnica Salesiana

Rer = Fract2Float(Re)

Imr = Fract2Float(Im)

' convertir a IEEE punto flotante

' convertir a IEEE punto flotante

tmpR = Rer * Rer

' Re^2

Rer = tmpR

tmpR = Imr * Imr

' Im^2

Imr = tmpR

tmpR = sqrt(Rer + Imr)

Rer = tmpR*256.

' Amplitud de la corriente de la muestra de la TF

' DFT is scaled down by 1/N, we need to

' tomarlo de Nuevo a fin de tener componentes visibles

Re = Rer

' en el GLCD

if Re > 63 then

if k = 0 then

Re = 0

else

Re = Written[k-1]

end if

' k = 0? tener cuidado con los saltos

end if

if Re > max then

' Encuentra la maxima amplitud

max = Re

freq = k

' Esta debe ser la frecuencia central de la señal

end if

Universidad Politécnica Salesiana

tmpw = Written[k]

if tmpw <> Re then

' Dibuja solo las 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

while l <= 63

' dibujar la línea del fondo de la pantalla

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)

inc(k)

wend

'Mueve la corriente la coordenada X

' Dibuja en cada segundo la coordenada X

' Escribe la 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

Universidad Politécnica Salesiana

sub function 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

end sub

' Obtiene el valor del ADC

'llena las muestras con muestras de entrada in la manera Re, Im, Re, Im

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

donde Im = 0

' "Muestra " ahora contiene 128 pares de <Re, Im>

end sub

' Main programa inicia aqui

main:

MainInit

' Iniciar todo

while true

' Lazo infinito

SampleInput

' Muestra de la señal de entrada

Universidad Politécnica Salesiana

' Realizar FFT (DFT), 7 etapas, 128 muestras de pares de complejos

'Factores Twiddle son tomados de el <TwiddleFactors.dpas>

FFT(7, @TwiddleCoeff_128, Samples)

' DFT mariposa algoritmo de bits de salida se 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 dsPICFLASH que programa la tarjeta EasydsPIC4

dsPICFLASH que programa la tarjeta EasydsPIC4 Seleccionamos el Microcontrolador que tenemos borramos el

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

Universidad Politécnica Salesiana

Fotografías del Circuito

Universidad Politécnica Salesiana Fotografías del Circuito 18
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

Universidad Politécnica Salesiana Fotos circuito funcionando CON UNA ONDA SENOIDAL FRECUENCI A DE 1400 HZ 19
Universidad Politécnica Salesiana Fotos circuito funcionando CON UNA ONDA SENOIDAL FRECUENCI A DE 1400 HZ 19

Universidad Politécnica Salesiana

Universidad Politécnica Salesiana CON UNA ONDA TRIANGULAR 20

CON UNA ONDA TRIANGULAR

Universidad Politécnica Salesiana CON UNA ONDA TRIANGULAR 20

Universidad Politécnica Salesiana

Universidad Politécnica Salesiana Con una onda cuadrada 21

Con una onda cuadrada

Universidad Politécnica Salesiana Con una onda cuadrada 21

Universidad Politécnica Salesiana

Universidad Politécnica Salesiana Conclusiones  Tener en cuenta los requerimientos que debe tener la señal de

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 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 de los fusibles del microcontrolador porque si no activamos el circuito no funcionará

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 nivelar el 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 la transformada de Fourier no es la que 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

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