Thứ Bảy, 5 tháng 3, 2016

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

>> 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

Không có nhận xét nào:

Đăng nhận xét