[VI ĐIỀU KHIỂN PIC] - BÀI 8: GIAO TIẾP LM35 PIC16F877A TRONG CCS - BeeLab

Monday, June 5, 2017

[VI ĐIỀU KHIỂN PIC] - BÀI 8: GIAO TIẾP LM35 PIC16F877A TRONG CCS


Đặc điểm chính của cảm biến LM35
+ Điện áp đầu vào: 4V - 30V
+ Độ phân giải điện áp đầu ra: 10mV/oC
+ Độ chính xác cao ở 25 C là 0.5 C
+ Trở kháng đầu ra thấp 0.1 cho 1mA tải

Dải nhiệt độ đo được của LM35 là từ -55 C - 150 C với các mức điện áp ra khác nhau. Xét một số mức điện áp sau :

- Nhiệt độ -55 C điện áp đầu ra -550mV

- Nhiệt độ 25 C điện áp đầu ra 250mV
- Nhiệt độ 150 C điện áp đầu ra 1500mV
Tùy theo cách mắc của LM35 để ta đo các giải nhiệt độ phù hợp. Đối với hệ thống này thì đo từ 0 đến 150. Chi tiết các bạn có thể xem trong datasheet của nó
Tính toán nhiệt độ đầu ra của LM35.

? ADC
1023 ADC (10bit)
10 mV
5000mV (Vref = Vdd = 5V)

Suy ra 1 độ C (10mV) = 10*1023/5000 = 2.046 ADC
Nhietdo = read_ADC()/2.046;
Con số 2,046 tính được đó chính là lượng thay đổi trên chân ADC ứng với thay đổi 10mV ở đầu ra LM35 hay ứng với thay đổi 1 độ C trên LM35.

Sai số của LM35
+ Tại 0 độ C thì điện áp của LM35 là 10mV

+ Tại 150 độ C thì điện áp của LM35 là 1.5V = 1500mV

==> Giải điện áp ADC biến đổi là 1500 - 10 = 1490 (mV)

+ ADC 10 bit nên bước thay đổi của ADC là : 2.046mV

Vậy sai số của hệ thống đo là : Y = 2.046/1490 = 0.0014 = 0.14% 
float nhietdo;
int x,dat=0;
unsigned char ma7doan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void hienthi(int num)
{
 output_c(ma7doan[num/10]);output_high(pin_d3);delay_ms(1);output_low(pin_d3);
 output_c(ma7doan[num%10]);output_high(pin_d2);delay_ms(1);output_low(pin_d2);
}
void khoitao_ADC0()
{
   setup_adc_ports(AN0);//thiet lap
   setup_adc(ADC_CLOCK_DIV_2);
   set_adc_channel(0); //chon kenh 0 
   delay_us(100);//on dinh
}
void main()
{
   lcd_init();
   while(TRUE)
   {
      //TODO: User Code
      khoitao_ADC0();
      nut_nhan();
      nhietdo = read_adc()/2.046;
      x = nhietdo;
      hienthi(x);
      lcd_gotoxy(1,2);
    printf(lcd_putc,"LM35: %f",nhietdo);
   }
}