PDA

View Full Version : mạch đo nhiệt độ dùng lm35


pdkxlily
09-04-2011, 01:03 PM
adc=8
while(TRUE)
{
lcd_init();
read=read_adc();
read =read*1.960784314;
printf(lcd_putc,"\rNhiet do: %u",read);
delay_us(20);
}
cho mình hỏi dãy số 1.960784314 (bài này mình lấy tham khảo) sao lúc mô phỏng nó sai 1 độ

adc=10

while(TRUE)
{
lcd_init();
read=read_adc();
read =(read-558.5)/2.048+16;
printf(lcd_putc,"\rNhiet do: %u",read);
delay_us(20);
}

đây là bài mình sửa làm theo công thức value = (value ‐ 558.5)/2.048; // For 5V supply
// value = (value ‐ 754.8)/2.048; // For 3.7V Supply
// value = (value ‐ 698.2)/2.048; // For 4V supply
trong datashet nhưg chậm nhiệt độ thực tế 16C nên mình fai cộng 16C .ai có thể giải thích giồng mình vấn đề này đc ko à.thaks

hein_ts
16-04-2011, 03:16 PM
hjhj.
- Về sai số nhiệt độ 1 độ C ý, đó là mô phỏng thôi chứ còn khi mạch thật là <= 2 độ kia bạn ạ. Nếu dùng chế độ 8 bit thì phải chấp nhận thôi. Còn dùng chế độ 10 bit thì chính xác tới 0,5 độ C. Và cũng phụ thuộc vào tính toàn nữa. Khi hiển thị là số làm tròn rồi bạn ạ, chứ không hiển thị số thực được. ( Được nhưng mà không xét ở khía cạnh này)
- Về sai số 16 độ C đó chắc là bạn dùng hai loại cảm biến khác nhau thôi. Con LM335 khác con LM35, lại khác hơn con LM35DZ. Tôi thấy hình như bạn dùng LM35DZ, nhiệt độ cứ tăng dần 10mili vol/1 độ C tính từ 0 độ ứng với 0V. Còn loại theo công thức tính trên là theo độ K, nghĩa là 10 milivol/ độ tính từ 0 độ ứng với 273 độ K=2730 milivol.
Những cái này bạn phải tìm hiểu thực tế. Đôi khi chỉ chăm chăm tìm công thức của người khác sẽ không hay lắm. Đối với LM35 thì cứ dùng VOM mà đo là biết ngay loại nào thôi mà.
Thân

pdkxlily
30-06-2011, 11:50 PM
đúng là mình xài lm35DZ vậy tính nhiệt độ theo công thức nào bạn .

phatcddt08a
01-07-2011, 02:16 AM
cho mình hỏi dãy số 1.960784314 (bài này mình lấy tham khảo) sao lúc mô phỏng nó sai 1 độ


đây là bài mình sửa làm theo công thức value = (value ‐ 558.5)/2.048; // For 5V supply
// value = (value ‐ 754.8)/2.048; // For 3.7V Supply
// value = (value ‐ 698.2)/2.048; // For 4V supply
trong datashet nhưg chậm nhiệt độ thực tế 16C nên mình fai cộng 16C .ai có thể giải thích giồng mình vấn đề này đc ko à.thaks

uc = 5v
gui bạn cái này.mình làm theo dang so sánh nên chổ nào bị sai thì mình điều chỉnh lại. mình có từng viết bằng asm nhưng cách viết thủ công kiều .độ phân giải 0 dến 150 không bi sai số độ nào cả.mình gũi bạn code c va code asm tham khảo nhé đảm bảo không sai độ nào cả.công thức trên chỉ xác xuất thôi thực tế mô phỏng nó không chính xác t dc .

pdkxlily
01-07-2011, 09:44 AM
/* Cap nhat nhiet do -> CYCLE_BUTTON() tr ...------------*/
void UPDATE_TEMP() {
// int temp1, temp2;
temp1 = Adc_Read(0); //Doc nhiet do tu cong ADC
temp2 = (temp1 - 558)/2; //Doi ra do C
IntToStr(temp2, degree); //Chuyen kieu byte sang String
}
/* Xu ly Du lieu nhiet do tu LM335 -> MODE_2() tr ...-----*/
void TEMPERATURE() {
// int temp1, temp2;
temp1 = Adc_Read(0); //Doc nhiet do tu cong ADC
temp2 = (temp1 - 558)/2; //Doi ra do C
IntToStr(temp2, degree); //Chuyen kieu int sang String
LCD_Out_CP(degree); //Hien thi LCD
LCD_Chr_Cp(223); //Hien thi ky tu co ma ASCII la 223: ky hieu do
LCD_Chr_Cp('C'); //hien thi ky tu 'C'
cho mình hỏi cái chuyển int sang string trong ccs là lệnh nào . code trên là của miko C