更多精彩文章,尽在《匠人的百
宝箱》。网址:http://cxjr.21ic.org
《匠人手记》之二
用普通 IO 口检测 AD 值的方法(采集温度)
作者:程序匠人
以下介绍的这个方法是用没有 ADC 功能的芯片来检测模拟量,如
采集温度。
1. 温度检测电路图
2. 温度检测步骤
第一步:放电
P85 和 P86 设置为高阻态,P87 输出“1”,电容放电
第二步:测标准电阻
P85 和 P87 设置为高阻态,P86 输出“0”,电容充电,并对充电时间计时
计时功能说明:计时最小时基为 30US,用定时器中断来实现。每 30US 中断一次,
计时器+1。计时器长度=16BIT,高字节的 BIT4 代表溢出位。所以实际有效长度为 12 位,
超出则判为溢出,可能是被测电阻开路和电容短路等故障引起的。
第三步:放电
P85 和 P86 设置为高阻态,P87 输出“1”,电容放电
第四步:测温度电阻
P86 和 P87 设置为高阻态,P85 输出“0”,电容充电,并对充电时间计时
计时功能说明:(同第二步)
第五步:计算电阻比率
计算公式:
电阻比率=温度电阻÷标准电阻
=温度电阻充电时间÷标准电阻充电时间
第六步:查表求温度
根据电阻比率查表求温度摄氏值
为了提高查表时的分辨率,在上一步骤计算比率时应该将比率值乘以一定系数(在本
项目中该系数=256*64=16384).在表格中的数据也应该同步乘以该系数
如果你的‘芯’是一座作坊,我愿做那不知疲倦的程序匠……
更多精彩文章,尽在《匠人的百
宝箱》。网址:http://cxjr.21ic.org
第七步:温度单位转换
如果是温度单位=华氏值,则将摄氏值转化为华氏值;否则跳过
温度转换公式:
华氏值 = 摄氏值×1.8+32
摄氏值 = (华氏值-32)÷1.8
第八步:数字滤波
采用递推中位平均滤波方法:保留最新 10 个采样值,去掉一个最大值,去掉一个最小
值,剩余 8 个采样值取平均数
3. 电阻-温度图
阻值(K)
比例
60000
50000
40000
30000
20000
10000
0
0
0
1
0123456789
0
1
1
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
1
0
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
2
0
3
1
3
2
3
3
3
4
3
5
3
6
3
7
3
8
3
9
3
0
4
1
4
2
4
3
4
4
4
5
4
6
4
7
4
8
4
9
4
0
5
1
5
2
5
3
5
4
5
5
5
6
5
7
5
8
5
9
5
0
6
1
6
2
6
3
6
4
6
5
6
6
6
7
6
8
6
9
6
0
7
1
7
2
7
3
7
4
7
5
7
6
7
7
7
8
7
9
7
0
8
1
8
2
8
3
8
4
8
5
8
6
8
7
8
8
8
9
8
0
9
1
9
2
9
3
9
4
9
5
9
6
9
7
9
8
9
9
9
40
35
30
25
20
15
10
5
0
如果你的‘芯’是一座作坊,我愿做那不知疲倦的程序匠……