You are on page 1of 12

TEMA:

TRABAJO AUTÓNOMO – DISEÑO DE PROGRAMA


PARA IMPLEMENTAR FILTRO PASA BAJO UTILIZANDO
EL ADC DEL DsPIC Y UNA DAC DEL TIPO R2R O UN
INTEGRADO DAC0808.

CURSO:

ARQUITECTURA DEL PROCESADOR DIGITAL DE SEÑALES

ALUMNOS:

VICTOR ORIHUELA BALQUI COD. 1510784

JULIAN ISIDRO DE LA CRUZ VALENTIN COD. 1011264

CESAR CABRERA CHACÓN COD. 1411283

Lima, 25-11-2017
INTRODUCCION
En la presente práctica se hará el procedimiento de programación del
dsPIC30F4013, para realizar la implementación y comprobación del
funcionamiento de un filtro digital pasa bajo, para programar dicho filtro es
necesario tener instalado el MPLAB.

Un buen diseño de un filtro digital y su eficiente implementación en hardware y/o


software es una tarea fundamental en muchas áreas.

La implementación de filtros digitales en hardware se realiza a través de


dispositivos microcontroladores, como ser PICs y DSPs. Estos dispositivos
deben ser programados en lenguaje C.

En este trabajo autónomo diseñares un programa que pueda implementar un


filtro pasa-bajo de una señal de 25 Hz proveniente de un generador. Para ello
usaremos un archivo de código de programa de filtro.
Marco Teórico:
Filtro Pasa Bajo

Filtro Analógico

Un filtro RC paso bajo es un circuito formado por un resistor y un capacitor


conectados en serie, como se muestra en el gráfico más abajo.
El filtro paso bajo permite sólo el paso de frecuencias por debajo de una
frecuencia en particular llamada frecuencia de corte (Fc) y elimina las frecuencias
por encima de esta frecuencia. Estos filtros RC no son perfectos por lo que se
hacen dos análisis.
Un análisis en el caso ideal y otro en el caso real. La unidad de frecuencia es el:
Hertz, Hercio o ciclo por segundo.
El filtro paso bajo ideal es un circuito formado por un resistor y un capacitor,
que permite el paso de las frecuencias por debajo de la frecuencia de corte (Fc)
y elimina las que sean superiores a ésta.

La reactancia capacitiva cambia con la frecuencia. Para altas frecuencias XC es


baja logrando con esto que las señales de estas frecuencias sean atenuadas.
En cambio a bajas frecuencias (por debajo de la frecuencia de corte) la
reactancia capacitiva es grande, lo que causa que estas frecuencias no se vean
afectadas o son afectadas muy poco por el filtro.
Filtro Digital

x[n]+x[n+1]
La ecuación de un filtro paso bajo digital de primer orden es: 𝑦(𝑛) = A

Donde A ha de ser mayor que uno. También es llamado filtro promediador,


debido a que promedia las muestras de la entrada y por lo tanto suprime
variaciones rápidas, característica que le otorga el carácter de paso bajo.

1(1+𝑧 −1 )
Su transformada Z es: 𝐻(𝑠) = 𝐴

Desarrollo Del Proceso


Materiales y Equipos

Item Und Descripción


1 1 Condensador de 100 nF

2 2 Condensadores de 15 pF

3 8 Resistencias de 20kΩ

4 7 Resistencias de 10kΩ

5 1 Resistencia de 1kΩ

6 8 Resistencias de 300Ω

7 1 Resistencia de 47Ω

8 2 Circuito integrado DSPIC30f4013

9 8 Diodos led´s

10 1 Pulsador de 4 pines

11 1 Pantalla LCD16x2

12 1 Potenciómetro de 10kΩ

13 1 Cristal de 12MΩ

14 2 Protoboard
Procedimiento

Ensamble del Hardware (Fig. 1):

Descripción del proceso e implementación

Este trabajo autónomo se trata de una señal de corte de 25hz, se verifica la


señal con ruido y la señal filtrada.

En el primer circuito se realiza la onda con los datos por el puerto F de 7 bit con
una configuración de R2R.

El programa “generador” en el cual se trabajo fue el dado por el profesor,


dando los valores de la onda a transmitir, declarando el puerto F como salida.
Usamos un FOR dentro de un bucle infinito que va desde cero hasta los mil
datos en la cual sale por el puerto F lo que se encuentra en el puntero.

En el segundo circuito que también tiene una señal de corte de 25hz por el
puerto F, siendo esta la señal filtrada.
En el programa “filtro_main”, los coeficientes se calculan mediante las formulas
dadas en clases y por mediante de matlab se hallan los tres parámetros. Estos
datos se insertan en el programa.

Declaramos las entras, salidas del DsPIC, el timer para una prescaler de 1,
declaramos las variables. Cuando el dato recibido se filtra y sale por el puerto F

Observaciones y conclusiones

El filtraje digital constituye una herramienta muy importante para el tratamiento


de una señal analógica, porque se puede variar los parámetros del filtro digital
(frecuencia de corte, ancho de banda, etc.).

El desarrollo de las técnicas de DSP implementa el conocimiento de los procesos


matemáticos que ocurren en la señal al momento de ser tratada.

Los filtros digitales son, sin lugar a duda, la aplicación más conocida de los
sistemas que implementan DSP. En estos encontramos la versatilidad de ser
diseñados bajo ciertos preceptos ya estructurados. De esta forma, el desarrollo
de nuevos sistemas digitales tiene una base ya bien formada.

Cuando el flag del dato recibido empieza la conversión el objetivo será filtrarla y
mostrarla por el puerto F.

Código

Generador

#include <xc.h>

#include <stdio.h>

#include <stdlib.h>

#include <stdint.h>

#include <stdbool.h>

#include "system.h"

#include <libpic30.h>
/*

*/

const uint16_t
data[]={73,72,67,62,58,58,61,68,75,81,83,81,77,71,67,67,70,76,83,88,90,88,83,
77,73,72,74,80,86,91,92,90,84,78,73,71,74,79,85,89,90,87,81,75,69,67,69,74,8
0,84,85,82,76,69,64,62,64,69,74,79,80,77,71,64,59,58,60,65,71,76,77,75,69,63
,59,57,60,66,72,78,79,77,73,67,63,62,65,71,78,84,86,84,80,75,71,70,74,80,87,
93,96,94,90,84,81,80,84,90,97,103,105,103,99,93,89,88,91,97,104,109,111,10
9,104,98,94,93,95,101,107,112,113,110,105,98,93,92,94,99,105,109,110,107,1
01,94,89,87,89,93,99,103,104,101,95,88,83,80,82,87,93,97,98,95,89,82,77,75,
78,83,89,93,94,92,86,80,75,74,77,82,89,94,96,93,88,83,78,78,81,87,94,99,101,
99,95,89,85,85,88,94,101,107,109,108,103,98,94,93,97,103,110,115,117,116,1
11,105,101,100,103,109,116,121,123,120,115,109,105,103,106,111,117,122,1
23,120,115,108,103,101,103,108,114,118,119,116,109,103,97,95,97,101,107,1
11,111,108,102,95,89,87,89,93,99,103,104,101,95,88,82,81,83,87,93,98,99,96,
91,84,79,78,80,86,92,97,98,96,91,85,81,80,83,89,95,101,103,101,96,90,86,86,
89,95,102,107,109,108,103,97,93,93,96,102,109,114,116,114,109,103,99,98,1
01,107,113,118,120,117,112,106,101,100,102,107,113,118,119,116,110,103,9
8,96,98,103,108,112,113,110,103,96,91,88,90,94,100,103,104,101,94,87,81,79
,81,85,91,94,95,92,86,79,73,71,73,78,84,88,89,86,80,74,69,67,69,75,81,86,87,
85,80,73,69,68,71,76,83,88,90,88,83,77,73,72,75,81,88,93,96,94,89,83,79,78,8
1,87,94,99,101,99,94,88,84,83,85,91,97,102,104,101,96,89,84,83,85,90,96,100
,101,98,93,86,80,78,80,85,90,94,95,91,85,78,72,70,71,76,81,85,85,81,75,68,62
,60,61,65,71,75,75,72,66,59,53,51,53,57,63,67,68,65,59,53,48,46,48,54,60,64,
66,63,58,52,47,46,49,55,61,66,68,66,61,55,51,50,53,59,66,71,73,71,66,61,56,5
6,59,64,71,76,78,76,71,65,61,60,62,68,74,79,80,78,73,66,61,60,62,67,73,77,78
,75,69,62,57,55,57,61,67,71,71,68,61,54,49,46,48,52,57,61,61,58,51,44,38,36,
38,42,47,51,52,48,42,35,30,27,29,34,40,44,45,42,36,30,25,23,25,30,37,41,43,4
0,35,29,24,23,26,32,38,43,45,43,38,33,28,28,31,37,43,49,51,49,44,38,34,33,36
,42,49,54,56,54,49,43,39,38,41,46,53,58,59,57,51,45,40,39,41,46,52,56,57,55,
49,42,37,35,36,41,47,51,51,48,42,35,29,27,28,33,38,42,42,39,33,25,20,17,19,2
4,29,33,33,30,24,17,12,10,12,17,22,27,28,25,19,13,8,6,9,14,20,25,27,24,19,13,
9,8,10,16,23,28,30,28,24,18,14,13,16,22,29,35,37,35,30,25,21,20,23,29,36,42,
44,42,37,31,27,26,29,35,41,46,48,45,40,34,29,28,30,36,42,46,47,45,39,32,27,2
5,27,32,38,42,43,39,33,26,21,19,20,25,30,34,35,32,26,19,13,11,13,17,23,27,28
,25,19,12,7,5,7,12,18,22,23,21,15,9,4,3,5,11,17,22,24,21,16,11,6,5,8,14,21,27,
29,27,22,17,13,12,16,22,29,35,37,35,31,25,22,21,24,30,37,43,45,43,39,33,29,2
8,31,37,44,49,51,49,43,37,33,32,34,40,46,51,52,49,44,37,32,30,32,37,43,48,48
,45,39,33,27,25,27,32,37,42,42,39,33,26,21,19,21,25,31,35,36,33,28,21,16,14,
16,21,27,32,33,31,25,19,15,13,16,22,28,33,35,33,28,22,18,17,21,27,34,39,41,4
0,35,30,26,26,29,35,43,48,51,49,45,40,36,35,39,45,52,58,60,59,54,48,44,44,47
,53,60,65,67,65,60,54,49,48,51,56,63,68,69,66,61,55,50,48,50,55,61,66,67,64,
58,51,46,44,46,51,56,61,61,58,52,46,40,38,40,45,51,55,56,53,48,41,36,34,37,4
2,48,53,54,51,46,40,35,34,37,43,49,54,56,54,49,44,40,39,42,48,55,61,63,62,57
,52,48,48,51,58,65,71

};

uint16_t *ptr;

int main(int argc, char** argv) {

uint16_t i;

ADPCFG = 0x1FFF;

TRISF = 0x00;

while(true)

ptr=&data;

for(i=0;i<1000;i++)

PORTF = *ptr;

ptr++;

__delay_ms(1);

}
return (EXIT_SUCCESS);

Filtro

#include <xc.h>

#include <stdio.h>

#include <stdlib.h>

#include <stdint.h>

#include <stdbool.h>

#include "system.h"

#include <libpic30.h>

#include "timer.h"

#include "adc.h"

uint16_t ADCvalue;

uint8_t ReadFlagADC;

// Coeficientes del Filtro pasa bajo, para Fc=25 en matlab

#define Coeff_a0 0.07282 // completar

#define Coeff_a1 0.07282 // completar

#define Coeff_b1 0.8544 // completar


uint16_t Xn0,Xn1,XADC,i; //

float Yn0,Yn1; // defino las variables unit16_t entero y flotante

float tmp;

void __attribute__((interrupt,auto_psv)) _ADCInterrupt(void);

void InitPort(void)

ADPCFG= 0X1FDF; // Configurando el Puerto RB5 como entrada analoga


y los demas como I/O Digital

LATB = 0x0000;

TRISB = 0x0020; // Configurando todo el Puerto RB5 como entrada Digital

LATD = 0x00;

TRISD = 0x00; // Configurando el Puerto D como salida Digital

TRISF = 0x00;

/* Programa que configura el LCD y saca un mensaje inicial*/

int main (void)

InitPort();

ADC_init();

Timer3_Init(0x8000,23999,0,DISABLE_INT); // habilito el bit 15

ReadFlagADC=0;
Xn0=0;

Xn1=0;

Yn0=0;

Yn1=0;

XADC=0;

i=0;

while(true)

if (ReadFlagADC==1){

Xn1=Xn0;

Xn0=XADC;

tmp= Coeff_a0*Xn0+Coeff_a1*Xn1+Coeff_b1*Yn1; ; //
completar la ecuacion del filtro

Yn1= Yn0;

Yn0= tmp;

PORTF=(((int32_t)Yn0)>>5); // Salida de datos filtrados

ReadFlagADC=0;

}
void __attribute__((interrupt,auto_psv)) _ADCInterrupt(void){

XADC = ReadBufferADC(0); // Lectura del buffer 0 del ADC.

ReadFlagADC=1; // Activa Flag , semáforo o bandera por software

IFS0bits.ADIF = 0; // Borra el Flag de interrupción

You might also like