Sie sind auf Seite 1von 4

DISEO CON MICROCONTROLADORES

DISEO DE UN FILTRO DE SEALES DE ANCHO DE BANDA


150HZ EN UN DSPIC 33FJ32GP202 DE LA FAMILIA MICROCHIP
Elas Azcar, ngel Granado
Maestra de Ingeniera Electrnica 8va cohorte UNEXPO, Dpto. de Post-Grado UNEXPO
Vice-Rectorado Puerto Ordaz.
E-mail: elias.azocar@gmail.com , granado.angel@gmail.com

Resumen: Este articulo trata sobre el diseo un filtro (PWM) del PIC se pretende filtrar para obtener una seal
digital (FIR) con un ancho de banda 150Hz. Este se analgica igual a la de entrada, tomamos como partida
simulo en MATLAB y se implemento en un dsPIC de 16 que dicho filtro paso bajo RC tendr un ancho de banda
bits de la familia de la MICROCHIP (dsPIC 33), de 1KHz el cual es suficientemente bajo para filtrar las
especficamente el microcontrolador 33FJ32GP202. En componente de alta frecuencia de la PWM. Al igual que
este articulo se presentan las ecuaciones que soporten el la frecuencia de muestreo de la seal analgica se
diseo, la frecuencia de corte escogida y el tiempo de estableci en 800 Hz (ts=1/800Hz=1.25ms) por debajo de
muestreo con que trabaja el ADC1CON del dsPIC. este valor de corte del filtro paso bajo. Ya con estos
valores desarrollamos el siguiente cdigo en MARLAB:
Palabras claves: DSPIC, Muestro de Seales, Filtros
Digitales, TIMER, Conversor A/D. %-- Parametros y Datos del Diseo para el LAB3
de microprocesadores--
%-- Azocar Elias, Angel Granado. 2013

1. INTRODUCCIN ts = 0.00125; % Tiempo de Muestreo = 1.25 mS


fs = 1/ts; % Frecuencia de Muestreo 800 Hz
Microchip, primer fabricante a nivel mundial de los fc = 150; % Ancho de banda 150 Hz
Wn = fc/fs; % Frecuencia de Corte
microcontroladores de 8 bits, ha entrado en el campo de N = 39; % Coeficientes del filtro N+1 = 40
los DSP con un revolucionario chip que ha denominado B = fir1(N,Wn);
dsPIC y que rene las ventajosas caractersticas de los
microcontroladores con las inherentes a los DSP. Se utilizo la funcin del filtro FIR por mtodo de la
Los Controladores Digitales de Seales (DSCI de ventana fir1(N,Wn) la cual ya establecida en MATLAB.
Microchip se comercializan en ms de medio centenar de En esta funcin se introducen dos valores N el cual es
modelos diferentes de las familias dsPIC30F y dsPIC33F el orden de tu filtro digital (en nuestra caso elegimos un
y consisten en la combinacin de los microcontroladores filtro de N=39) y Wn el cual es la frecuencia de corte de
de 16 bits con los recursos necesarios para soportar las tu filtro y debe ser un valor entre 0 <Wn <1. El valor de
funciones clsicas de los DSP. Wn se obtiene a partir de la frecuencia de muestreo de las
En este trabajo se realiza una aplicacin bsica con el seales analogicas y el ancho de banda de tu filtro
uso del TIMER2, TIMER3 y el AD1CON del dsPIC, (Wn=150Hz/800Hz=0,1875). Ya con esto la funcin fir1
para obtener filtro digital con un ancho de banda de 150 devuelve los coeficientes del filtro los cuales son un
Hz el cual muestrea de una seal analgica de entrada vector de tamao N+1 (En nuestro filtro son 40
compuesta por la suma de dos seales. Esta dos seales coeficientes).
son: una seal de el ruido por encima de la banda del
filtro a 300Hz y la seal que se pretende obtener a una Probamos el funcionamiento del filtro en MATLAB
frecuencia 60Hz. desarrollando un esquemtico en SIMULINK:

2. DESARROLLO DEL PROGRAMA EN


MATLAB

Antes de desarrollar el cdigo se trabajo con el


paquete MATLAB 2011 el cual es una herramienta til
para el trabajo de seales y sistemas analgicos y
digitales. Se parti con la premisa de que nuestras seales
FIGURA 1. Esquematico del filtro FIR en
de entrada y ruido tienen una frecuencia de 60Hz y
MATLAB/SIMULINK.
300Hz respectivamente, por lo que se estableci la
frecuencia de corte del filtro digital en un valor de 150
Hz. Adems conociendo que la seal digital de salida
DISEO CON MICROCONTROLADORES

En este esquemtico se establecen dos seales 0.001461133111894,-0.001475327440166,-


0.001154412436649};
sinusoidales analgicas de diferentes frecuencias (60Hz y float entrada[40]={0};
300Hz) las cuales se suman para obtener una seal con long double acumulador;
ruido. Esta seal es digitalizada con la ayuda de un
mantenedor de orden cero con tiempo de muestreo Ya en este codigo se establecieron los coeficientes
establecido en 1.25 ms. Esta seal digital es pasada por el antes obtenidos por funcion fir1 del paquete
filtro diseado anteriormente y como resultado se obtiene MATLAB.
la seal digital filtrada, se puede observar a continuacin Se pretende trabajar a una Fosc de 45 MHz ajustando
las seales observadas en la simulacin: este valor con el reloj interno, se ajusto la frecuencia
utilizando el pre y el post divisor del PLL, en el cdigo
quedo de la siguiente manera:

PLLFBD = 47; // M = 47
CLKDIVbits.PLLPOST=1; // N2 = 1:4
CLKDIVbits.PLLPRE=0; //N1 = 1:1
__builtin_write_OSCCONH(0x01);
__builtin_write_OSCCONL(0x01);
while (OSCCONbits.COSC != 0b001); // Espera
cambio de oscilador
while(OSCCONbits.LOCK != 1) {}; // Espera
locking del PLL @ 45 MHz

FIGURA 2. Seales del SCOPE del Esquematico El clculo para la frecuencia de reloj es la siguiente:
(SEAL DE ENTRADA, SEAL DE RUIDO, SUMA
ANALOGICA, SUMA DIGITAL Y SEAL
DIGITAL FILTRADA)

Con estos buenos resultados procedimos a programar el


cdigo en MPLAB para su implementacin en el dsPIC.

3. DESARROLLO DEL PROGRAMA EN MPLAB


IDE V8.91

El sistema se configuro para el DSPIC33F.


FIGURA 3. Diagrama del oscilador interno del
El cdigo de la cabecera es el siguiente: DSPIC 33.
#include "p33FJ32GP202.h"
Donde se utiliza la siguiente ecuacin planteada por
_FOSCSEL(FNOSC_FRC); // Iniciar con F_CR la hoja de datos del microcontrolador:
_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF); // Clock
select & OSC2 salida de Fcy

int i; EC.1
unsigned int ciclo_util;
float coeficientes[40]={-0.001154412436649,-
0.001475327440166,-0.001461133111894,- Ya habiendo definidos estos valores en el cdigo se
0.000744826150118, 0.001029303401916, calcula la frecuencia (Fosc)
0.003765012429954, 0.006554921026110,
0.007716817379204, 0.005388685047182,-
0.001443211352180, -0.011900119471930,- DATO FIN=7,37 (Mhz) FREC (Mhz) FMIN FMAX
0.022702147556861,-0.028623831967585,- 0 N1 2 3,685 0,8 8
0.023977933552263,-0.004724729012360,
0.029556760288523, 0.074671334051049,
47 M 49 180,565 100 200
0.122335277338945, 0.162227940946325, 0 N2 4 45,14125 80
0.184961620142798, 0.184961620142798,
0.162227940946325, 0.122335277338945,
0.074671334051049, 0.029556760288523, - Como cada ciclo de instruccin es la mitad de la
0.004724729012360,-0.023977933552263,- frecuencia Fosc. Se puede determinar el TCY
0.028623831967585,-0.022702147556861,-
0.011900119471930, -0.001443211352180,
0.005388685047182, 0.007716817379204, TCY (ns) FCY (Mhz)
0.006554921026110, 0.003765012429954, 44,305374 22,570625
0.001029303401916,-0.000744826150118,-
DISEO CON MICROCONTROLADORES

El dsPIC33FJ32GP202 tiene hasta 13 Mdulos El TIMER 3 se configura con preescalador unitario


Conversores (1:1).
(ADC) de entrada. Utilizaremos el AD1CON1 cuya La configuracin del TIMER3 en el cdigo se dispone a
configuracin se muestra a continuacin: continuacin:
AD1PCFGL = 0xFFFF; //Pines son digitales
AD1CON1bits.AD12B = 0; // ADC en modo 10 bits T3CONbits.TON = 0; // Stop any Timer3 operation
AD1CON2bits.VCFG = 0; //V reference AVdd & AVss T3CONbits.TCS = 0; // Select internal
AD1CON3 = 0x0001; // Tad = 2*Tcy = 88.88 ns @ instruction cycle clock
45MHz. T3CONbits.TGATE = 0; // Disable Gated Timer mode
AD1PCFGLbits.PCFG4 = 0; //Pin AN4 como analog T3CONbits.TCKPS = 0b00; // Select 1:1 Prescaler
Input y se muestrea TMR3 = 0x00; // Clear Timer 3
AD1CHS0bits.CH0NA = 0; //CH0 usa -Vref PR3 = 28125; //Periodo para 28125 x 44.444nS =
AD1CHS0bits.CH0SA = 4; //CH0 convierte AN4 1.25 mS --> ts @ 800Hz --> fs
AD1CHS0bits.CH0SB = 4; IFS0bits.AD1IF = 0; // Borra bandera de ADC
AD1CON1bits.SSRC = 0b010; IFS0bits.T3IF = 0; // Borra bandera de Timer3
AD1CON1bits.ASAM = 1; //Sampling all the time; IEC0bits.AD1IE = 0; // Habilita interrupcion por
AD1CON3bits.SAMC = 1; //Sample 1 Tad ADC
IEC0bits.T3IE = 0;
Se utiliza el ADC en modo de 10 bits utilizando el CH0,
los voltajes de referencia son Vdd=3.3V y Vss=GND. El Se logra contar con el TIMER3 un periodo de
periodo de conversin del ADC se obtiene del siguiente 28125*(TCY) = 1.25mS el cual es nuestro periodo de
diagrama: muestro, cuya frecuencia es de 800Hz, con esto se
garantiza un muestreo de acuerdo a lo establecido en el
diseo planteado.

El TIMER2 se configuro con la idea de generar una seal


PWM de 256 escalones lo cual es una PWM de 8 bits, el
periodo de el TIMER2 es igual a 256* (TCY) = 11,38
uS. Donde al poseer una frecuencia alta de salida de 88
Khz se puede filtrar fcilmente con un filtro RC pasa
bajo el cual ubicamos en una frecuencia de corte de
FIGURA 4. DIAGRAMA DEL PERIODO DE 1KHz. El cdigo del TIMER2 es el siguiente:
CONVERSION DEL ADC
T2CONbits.TON = 0;
T2CONbits.TCS = 0;
En nuestro caso nuestro TCY = 44.444 nS y TAD =
T2CONbits.TGATE = 0;
2*TCY = 88,888 nS. Tambin se configura como entrada T2CONbits.TCKPS = 0b00;
analgica del CH0 el puerto de entrada AN4. TMR2 = 0;
PR2 = 256; // PWM 8 bits
El TIMER 3 utiliza una configuracin muy parecida al IFS0bits.T2IF =0;
TIMER 1 se muestra su diagrama en la figura a IEC0bits.T2IE = 1;
continuacin: T2CONbits.TON = 1;
T3CONbits.TON = 1;
RPOR7bits.RP15R = 0b10010; // RP15R = OC1

Donde en este cdigo tambin se configura como puerto


de salida digital a RP15. Tambien se configura OCM1
para que la salida de este puerto sea la PWM cuyo ciclo
til esta contenido en 0C1RS.

El resto del cdigo del programa es el siguiente:

while(1){
while(!AD1CON1bits.DONE){}; // Espera conversion

for(i=39;i>-1;i--){
entrada[i]=entrada[i-1]; //Desplazamiento en
bufer x[n] n=[1..39]
}

entrada[0] = (float) ADC1BUF0; // type-casting


FIGURA 5. Diagrama del Timer 3 para el DSPIC de int a float
DISEO CON MICROCONTROLADORES

Se cargo el cdigo del programa y se ejecuto el


for(i=0;i<40;i++){
acumulador += entrada[i]*coeficientes[i]; //
simulador contado con la ayuda de un osciloscopio
acumulador de salida y[n] virtual para visualizar la seal de salida del dsPIC, se
} coloco adems un filtro paso bajo RC cuya frecuencia de
corte esta 1000Hz muy por debajo de la alta frecuencia
ciclo_util = (unsigned int) acumulador;
ciclo_util = ciclo_util >> 2; // 1024 -> 256 de la PWM, en la siguiente figura se muestra el
acumulador = 0; // reset acumulador resultado:
};
};

void __attribute__((interrupt, no_auto_psv))


_T2Interrupt(void)
{
OC1RS = ciclo_util;
IFS0bits.T2IF = 0; //borrar bandera
}
}

El funcionamiento de este codigo es el siguiente se


espera a la finalizacin de la conversin ADC de entrada.
Cuando esta termina, se van acumulando todos los
valores obtenidos en el BUFER (ADC1BUF0) del conversor
ADC1CON en una variable llamada entrada y haciendo a
la vez un cambio de variable a float. Luego estos valores
ya cargados en la variable entrada son multiplicados y
FIGURA 4. OSCILOSCOPIO VIRUTAL DEL
acumulados uno por uno con los 40 coeficientes del filtro
PROTEUS, SEAL ANALOGICA DE ENTRADA
diseado, en una variable denominada acumulador.
60HZ (AMARILLO) SEAL ANALOGICA
SUMADA CON RUIDO (AZUL) SEAL DIGITAL
A acumulador se le hace un cambio de variable a
PWM DE SALIDA DEL PIC (ROJO), SEAL
unsigned int y se guarda en la variable ciclo_util, esto
FILTRADA (VERDE)
para poder ser cargado posteriormente a 0C1RS. Se
espera a que ocurra una interrupcin de TIMER2 para ser
4. CONCLUSIONES
asignado ciclo_util a la salida OC1RS obteniendo como
salida una seal PWM digital filtrada acorde a la entrada
analgica. En este trabajo se diseo un programa para un
microcontrolador de 16bits de la familia MICROCHIP.
4. SIMULACION E IMPLEMENTACION El diseo se trabajo en MATLAB 2011 y en MPLAB
MEDIANTE EL PROGRAMA PROTEUS 8 IDE v8.91, se simul en PROTEUS 8 y finalmente se
probo en un circuito real implementando en un
Utilizando el paquete de simulacin PROTEUS 8 el cual
protoboard, utilizando los componentes necesarios y
cuenta con las libreras de todos los dsPIC33 se pudo
obteniendo resultados satisfactorios.
demostrar el buen funcionamiento del cdigo del
programa antes de ser implementado en el laboratorio. REFERENCIAS
[1] Aguirre Miguel, DISEO DE UN GENERADOR
DE FRECUENCIA VARIABLE IMPLEMENTADO EN
DSPIC Y EN PIC24 DE LA FAMILIA MICROCHIP,
Dpto. de Post-Grado UNEXPO Vice-Rectorado Puerto
Ordaz.

[2] dsPIC33FJ32GP202/204 and dsPIC33FJ16GP304


Data Sheet. High-Performance, 16-bit Digital Signal
Controllers. 2009 Microchip Technology Inc.
(www.microchip.com)

FIGURA 6. ESQUEMATICO EN PROTEUS DEL


DSPIC 33FJ32GP202

Das könnte Ihnen auch gefallen