Wednesday, September 3, 2014

Đo nhiệt độ dùng cảm biến NTC

>> Mạch đo nhiệt độ dùng cảm biến NTC, sử dụng ADC 12bit và vi điều khiển AT89S52



>> Sơ đồ khối phần cứng được hiển thị trong hình. 2. cảm biến là epoxy đúc nhiệt điện trở. Các mạch điều tín hiệu điện áp chia đơn giản. ADC là 12-bit giao diện SPI LTC1298 analog-to-kỹ thuật số chuyển đổi. Các vi điều khiển là Atmel 89S52. Màn hình hiển thị có bốn chữ số 0,5 inch 7-segment LED. Người lái xe phân khúc cung cấp 32-bit CMOS.


- |Phần cứng:
>> Hoàn chỉnh sơ đồ mạch phần cứng được thể hiện trong hình 3 là ADC 12-bit giao diện SPI LTC1298 hoặc MC3202. Có hai kênh, CH0 và CH1. Các tín hiệu đầu vào từ nhiệt điện trở cho kênh ADC 0 là điện áp chia đơn giản. Channel1 có sẵn cho các cảm biến khác. Các mẫu được hiển thị trong sơ đồ là HIH-3160 Honeywell Độ ẩm cảm biến. Chip ADC được giao tiếp với MCU, 89S52 với P1.1, P1.2 và P1.3. Màn hình hiển thị có 4 chữ số LED. Các 4094 ca CMOS đăng ký ổ đĩa đèn LED trực tiếp.



- Phần mềm:
The main function is time triggered by 10ms timer0 running. The ADC is updated on LED every 10 ticks.

while(1)
{
while(!cputick)
continue;
cputick=0;
print_ADC();
}
The function that reads 12-bit data from ADC is read_ADC(char n). The function has two loops. First loop is to send 4-bit command. And the second loop is 12-bit to shift the data from ADC.
sbit Data = P1^1;
sbit CLK = P1^2;
sbit CS = P1^3;


int read_ADC(char n)
           { int k; 
           char i,channel; 
           k=0;
           CS=0;
           if(n==0) channel=0x0d;
           else channel=0x0f;
 for(i=0;i<4;i++)
           {
           CLK = 0;
           if(channel&8) Data = 1;
           else Data = 0;
           CLK = 1;
           channel <<=1;
           }
           Data = 1;
           CLK = 0;
 for(i=0;i<12;i++)
           {
           k<<=1;
           CLK=1;
           CLK=0; 
           if(Data) k|=1;
           else k&=~1;
           }
           CS = 1;
           return k&=0xfff;
           }
To provide smooth reading, I added the 5-point moving average to the raw data. The function low_pass_filte1( ) is used to filter the high frequency noise. The reading is calibrated to degree Celsius with Platinum 100 standard thermometer. We found the equation y=0.0323x-15.122.

int low_pass_filter1(void)
{
 x5=x4;
 x4=x3;
 x3=x2;
 x2=x1;
 x1=read_ADC(0);
 return(x1+x2+x3+x4+x5)/5;
}
float read_temp1_filter(void)
           {
           return(0.0323*low_pass_filter1()-15.122);
           }

Download

Schematicschematic.pdf
C source codethermistor.c
Orcad Schematic FileUss.dsn
Intel-Hex filethermistor.hex
HIH-3160 Humidity Sensor Datasheethih3160.pdf


Nguồn:http://www.kmitl.ac.th/~kswichit/thermistor/thermistor.htm




No comments:

Post a Comment