Está en la página 1de 16

LABORATORIO:

Desarrollo y simulación de
voltímetro
Medición de variables
SESION7
Diseño de voltímetro digital con dsPIC
Rango de voltaje : 0-20V

Circuito de
acondiconamiento
PROCESADOR
del voltajes

MODULO LC
J1
1
dsPIC33F
conector del
.
voltimetro CAS
1

J2
.
  
LCD1
LM016L

VDD
VEE

VSS
R1

RW
RS
D7
D6
D5
D4
D3
D2
D1
D0

E
10k

14
13
12
11
10
9
8
7

6
5
4

3
2
1
U1
1 4
MCLR RB0/CN4/RP0/C2IN-/AN2/PGED1
5
RB1/CN5/RP1/C2IN+/AN3/PGEC1
20 6
VCAP/VDDCORE RB2/CN6/RP2/AN4
7
RB3/CN7/RP3/AN5
11
RB4/CN1/RP4/SOSCI
14
RB5/CN27/RP5/ASDA1/PGED3
28 15
AVDD RB6/CN24/RP6/ASCL1/PGEC3
27 16
AVSS RB7/CN23/RP7/INT0
17
RB8/CN22/RP8/SCL1/TCK
18
RB9/CN21/RP9/SDA1/TDO
RB10/CN16/RP10/TDI/PGED2
21 RV2
2 22 1k

50%
RA0/CN2/VREF+/AN0 RB11/CN15/RP11/TMS/PGEC2
R3 3
RA1/CN3/VREF-/AN1 RB12/CN14/RP12/AN12
23
3.0k 9 24
RA2/CN30/CLKI/OSCI RB13/CN13/RP13/AN11
10 25
RA3/CN29/CLKO/OSCO RB14/CN12/RP14/AN10
B1 12
RA4/CN0/T1CK/SOSCO RB15/CN11/RP15/AN9
26
20V
DSPIC33FJ32GP202
100%

R2
1.0k
1k
RV1
conector

𝒄𝒐𝒏𝒆𝒄𝒕𝒐𝒓
 
#include "config.h"
#include "reloj.h" AD1CON2bits.VCFG=0b000;
#include "xlcd.h" AD1PCFGLbits.PCFG0=0; //AN0 COMO ANALOGICO
#include <p33fj12GP202.h> AD1CHS0bits.CH0SA=0b0000; //0
#include <stdio.h> AD1CHS0bits.CH0NA=1; //AN1 NEGATIVO
#include <stdlib.h> AD1CON3bits.ADCS=0b01001; //ADCS=9
//crear variable global AD1CON1bits.ASAM=0; //MUESTREO FORMA MANUAL
char adc_vector[4]=""; AD1CON1bits.SSRC=0b000; //ELEGIR FUENTE DE CONVERSION MANUAL
int adc_val=0; AD1CON1bits.ADON=1; //HABILITAR ADC
float adc_float=0;
char adcg_vector[4]="";
float adcg=0;
int main(void){
XLCDInit();
WriteCmdXLCD(CURSOR_OFF);
XLCDgotoXY(0,0);
putsXLCD("VOLTAJE = ");
XLCDgotoXY(1,0);
putsXLCD("ADC = ");
while(1)
{
AD1CON1bits.SAMP=1;
AD1CON1bits.SAMP=0;
while(!AD1CON1bits.DONE);
AD1CON1bits.DONE=0;
adc_val=ADC1BUF0;

adc_float=(float)adc_val*20/4096;
adcg=(float)adc_val;

sprintf(adc_vector,"%.2f",adc_float);
XLCDgotoXY(0,10);
putsXLCD(adc_vector);

sprintf(adcg_vector,"%.2f",adcg);
XLCDgotoXY(1,7);
putsXLCD(adcg_vector);
}
return 0;
}
Proyecto : Medición de temperatura con dsPIC
Proyecto : Medición de temperatura con dsPIC

El termistor es un transductor (sensor) que se fabrica con óxidos metálicos.


Esto se traduce en que entre las patillas de un termistor siempre podremos
medir una resistencia.

¿NTC? ¿Y PTC?
Existen dos tipos de termistor, las NTC y las PTC. Si solo mirásemos el nombre, la diferencia
entre ambos es la primera letra N o P. Ambos nombres son siglas en inglés que significan:
NTC: Negative Temperature Coeficient
PTC: Positive Temperature Coeficient

Acondicionamiento y como conectar un termistor NTC

Usar en este caso es el circuito potenciométrico. Este circuito está formado por el sensor y una
resistencia, colocadas en serie a modo de divisor de tensión.
𝑅 𝐴𝑈𝑋
  𝑹 𝒏𝒕𝒄   =
𝑅
𝑽 𝒎 =𝑽 𝒄𝒄 ∗ 𝑛𝑡𝑐
𝑉 𝑐𝑐
𝑹 𝒏𝒕𝒄+ 𝑹 𝑨𝑼𝑿 𝑉𝑚
−1
LCD1
LM016L

VDD
VEE

VSS
R1

RW
RS
D7
D6
D5
D4
D3
D2
D1
D0

E
10k

14
13
12
11
10
9
8
7

6
5
4

3
2
1
U1
1 40
MCLR AVDD
2 39
RB0 AVss
3 38
RB1 RB9
4 37
RB2 RB10
5 36
RB3 RB11
6 35
RB4 RB12
7 34
RB5 RD0
8 33
RB6 RD1
9 32
RB7 VDD
10
RB8 VSS
31 RV2
11 30 1k

50%
VDD RF0
RAUX 12
VSS RF1
29
1.0k 13 28
OSC1/CLKI RF4
14 27
OSC2/RC15 RF5
VCC 15
RC13 RF2/RX
26
5V 16 25
RC14 RF3/TX
17 24
INT0/RA11 RF6
18 23
INT2/RD9 INT1/RD8
RNTC 19
RD3 RD2
22
10.0k 20 21
-tc VSS VDD

DPIC30F4011
Ecuación de thermistor

Esta curva corresponde a una relación


claramente exponencial y es por esto que la
ecuación de las NTC es: Curva calibración teórica NTC

•β es la constante de la NTC

T0, R0 y β, son parámetros que nos proporciona el


fabricante en el datasheet del componente.
Para la NTC que usaré más adelante. T0 es 25ºC, R0 es
10KΩ y β es 3977.
Calcular la temperatura
podemos calcular cuanto debe ser la temperatura que está midiendo la NTC.
−1
  𝑅 𝑛𝑡𝑐

𝑇 =[
ln
( )
𝑅0
+
1

𝛽 𝑇0
#include "config.h"
#include "reloj.h" void ADC_Init(void); //Función prototipo para ADC
#include <libpic30.h> void ADC_Init(void)
#include "xlcd.h" {
#include <p30F4013.h> ADCON2bits.VCFG = 0b000; //AVss y AVdd
#include <stdio.h> ADPCFGbits.PCFG3 = 0; //RB3 como entrada analógica
#include <math.h> ADCHSbits.CH0SA = 0b0011; //Toma el canal analógico AN3
//crear variable global ADCHSbits.CH0NA = 0; //Toma Vref- como negativo de ref
char adc_vector[4] = ""; ADCON3bits.ADCS = 0b01001; //ADCS = 9
int adc_result = 0; ADCON1bits.ASAM = 0; //Muestreo manual
float vm = 0; ADCON1bits.SSRC = 0b000; //Limpiar el bit SAMP //e inicia la
conv
float rntc = 0; ADCON1bits.ADON = 1; //Habilitar el ADC
float temperaturaK = 0; }
float temperaturaC = 0;
float adc_float = 0;
float rAux = 10000;
float vcc = 5;
float beta = 3977; //Beta de 10Kohm para NTC
float temp0 = 298.0; //Temp en grados Kelvin(0)
float r0 = 10000; //RNTC cuando la temp. es 0
int main()
vm = (float)adc_result*5/4096; //0 ~ 4095 (palabra de 12 bits)
{
rntc = rAux/((vcc/vm)-1);
XLCDInit(); //Inicia la pantalla LCD temperaturaK = beta/(log(rntc/r0)+(beta/temp0));
UART_Init(); //Inicia el UART1 temperaturaC = temperaturaK - 273.15;
ADC_Init(); //Inicia el ADC __delay_ms(10);
WriteCmdXLCD(CLEAR_XLCD); //Limpia la pantalla sprintf(adc_vector,"%.2f",temperaturaC);
// LCD al reiniciar printf("%.2f\n",temperaturaC);
XLCDgotoXY(0,0); XLCDgotoXY(1,6);
putrsXLCD("PROYECTO"); putrsXLCD(adc_vector);
__delay_ms(3000); XLCDgotoXY(1,12);
WriteCmdXLCD(CLEAR_XLCD); putrsXLCD("C");
XLCDgotoXY(0,0); }
putrsXLCD("MICRO"); return 0;
XLCDgotoXY(1,0); }
putrsXLCD("Temp: ");
XLCDgotoXY(1,6);
while(1){
ADCON1bits.SAMP = 1; //Inicio del muestreo
__delay_ms(500); //Tiempo de muestreo
ADCON1bits.SAMP = 0; //Finalizar el muestreo
while(!ADCON1bits.DONE);
ADCON1bits.DONE = 0;
adc_result = ADCBUF0;
REALIZAR PRUEBAS

También podría gustarte