Đặ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
+ Đ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 lapsetup_adc(ADC_CLOCK_DIV_2);set_adc_channel(0); //chon kenh 0delay_us(100);//on dinh}void main(){lcd_init();while(TRUE){//TODO: User Codekhoitao_ADC0();nut_nhan();nhietdo = read_adc()/2.046;x = nhietdo;hienthi(x);lcd_gotoxy(1,2);printf(lcd_putc,"LM35: %f",nhietdo);}}