Beruflich Dokumente
Kultur Dokumente
PRACTICA 6
PROFESOR:
- INTRODUCCIÓN
1 – ajustado a la derecha
0 – ajustado a la izquierda
Los bits 3-0 muestran la configuración del número de canales de entrada analógicos
de acuerdo a la siguiente tabla:
El tiempo de conversión por bit TAD, se debe seleccionar menor a 1.6 µs, y el
tiempo mínimo para realizar la conversión a 10 bits es: 12 TAD. El valor de TAD lo
determina la fuente del reloj al convertidor A/D y puede tomar cuatro posibles
valores:
El módulo A/D dispone de un S/H que utiliza un capacitor para mantener el valor de
la señal de entrada fijo durante el tiempo que tarde la conversión. Para cargar el
capacitor se requiere un tiempo TACQ, que se calcula de la siguiente forma:
donde:
TC = CHOLD (RIC + RSS + RS) Ln(1/2047) =- 120pF (1k+ 7k+ 10k)
Ln(0.0004885) =16.47µs
Por lo tanto:
TACQ =2µs + 16.47µs + [(50°C -25°C)(0.05µs/°C)
=19.72µs
El diagrama de bloques del convertidor esta mostrado en la siguiente grafica:
Modo de Compara
Para esta practica se utilizo una resolución de 10 bits, es decir que se incremento la
velocidad de muestreo a 19.6KHz. Este muestreo fue implementado por medio del
modulo COMPARE del PIC, donde cada cruce por cero del TIMER1 el modulo
COMPARE manda una interrupción activando al mismo tiempo el convertidor A/D.
El periodo del muestreo es implementado en el MODULO CCP2 con los valores de
los registros CCPR2H y CCPR2L.
La configuración del convertidor A/D s realizo con los voltajes internos como
referencias y solo el canal AN0.
El filtro utilizado fue diseñado para una frecuencia de corte de 15KHz, acoplado a
un amplificador no inversor con ganancia de 2.
PR2 = 0xFF;
1% = (0.01)(51uS)/(0.05uS*1) = 10.2
Ctpwm = 1%
Resolucion= log(Fosc/Fpwm)/log(2)
CCPR1L = 0xFF
CCP1X = 0
CCp1Y = 0
Ct = 1 % = 10 d = 0 0000 1010 b
CCPR1L = 0x02
CCP1X = 1
CCP1Y = 0
PERIODO DE MUESTREO DE 51 uS
CCPR2H = 0x00;
CCPR2L = 0xFF;
El software creado para la practica tendrá el siguiente desarrollo:
- CIRCUITO COMPLETO
#include <pic.h>
#define PORTBIT(adr,bit) ((unsigned)(&adr)*8+(bit))
main()
{
/*************************************/
/* CONFIGURACION DE LOS PUERTOS */
/*************************************/
/* CONFIGURACION DEL CONVERTIDOR A/D */
//ADCON1
ADFM = 1; //justificado a la derecha
//ADCON0
ADCS1 = 0;
ADCS0 = 1; //conversion en Fosc/8
/***************************************/
/* CONFIGURACION DEL MODULO COMPARE */
//PERIODO DE MUESTREO DE 51 uS
CCPR2H = 0x00;
CCPR2L = 0xFF;
TMR1H = 0;
TMR1L = 0;
TMR1ON = 1;
T1SYNC = 0;
/*********************************************/
/* CONFIGURACION DEL MODULO PWM */
PR2 = 0xFF;
// Ctpwm = 1%
// CCPR1L:CCP1CON<5:4> = 0000 0010:1:0 = 10 = 0x0A
//Resolucion= log(Fosc/Fpwm)/log(2)
//CCPR1L = 0xFF
//CCP1X = 0
//CCp1Y = 0
//CCPR1L = 0x02
//CCP1X = 1
//CCP1Y = 0
CCPR1L = 0x02;
CCP1X = 1;
CCP1Y = 0;
//Enciende TMR2
TMR2ON = 1;
/**************************************************/
/* SE CONFIGURAN LAS INTERRUPCIONES */
CCP2IE = 1;
PEIE = 1;
CCP2IF = 0;
GIE = 1;
/*************************************************/
/* INICIA CICLO DE ESPERA */
for(;;)
continue;
}
//rutina de interrupcion, aqui se hace la lectura del A/D y se
//envia al D/A para su salida en el CCP1
void interrupt CONTROL(void)
{
//La interrupcion cada 51uS
if (CCP2IF)
{
CCP2IF = 0;
if (RD2 == 0) RD2 = 1;
else RD2 = 0;
}
}