为制作T12烙铁,我们需要使用NTC来检测室温,于是我们进行了以下研究:
采购NTC
我们采购的是1%精度的10K阻值的NTC,型号是:MF52A103F3435 (A1),厂家给出了-55度到125度阻值的对应表;
分析:
按照电路,在25度的时候,NTC阻值10K,因此AD端电压3.3V/2; AD采集到的值是2048;
考虑到计算量,因此我们决定每5度做一个采样;
于是我们按照NTC厂商给的表格得出下表
温度 | 阻值(K) | 计算得到的AD值 | 100-温度 |
---|---|---|---|
-20 | 69.434 | 3580 | 120 |
-15 | 54.425 | 3460 | 115 |
-10 | 43.000 | 3323 | 110 |
-5 | 34.226 | 3169 | 105 |
0 | 27.513 | 3004 | 100 |
5 | 22.144 | 2821 | 95 |
10 | 18.016 | 2633 | 90 |
15 | 14.704 | 2437 | 85 |
20 | 12.092 | 2241 | 80 |
25 | 10.000 | 2048 | 75 |
30 | 8.314 | 1859 | 70 |
35 | 6.948 | 1679 | 65 |
40 | 5.835 | 1509 | 60 |
45 | 4.923 | 1351 | 55 |
50 | 4.168 | 1204 | 50 |
55 | 3.550 | 1073 | 45 |
60 | 3.033 | 953 | 40 |
其中,计算AD值得公式是:
AD/4096=Rntc/(10K+Rntc)
于是:
AD=Rntc*4096/(10K+Rntc)
由于我们的非线性查表函数只支持从小到大的排列顺序,因此我们采用(100-温度) 这个参数作为查表值来计算,因此:
min=40;
max=120;
step=5;
这样,就可以使用代码:
int AD=2048; //采集到的AD值
int bs; //bin句柄
int wd; //温度
bs=newbin(34); //创建一个bin数组
defbin(bs,0,"B9 03 31 04 B4 04 47 05 E5 05 8F 06 43 07 00 08 C1 08 85 09 49 0A 05 0B BC 0B 61 0C FB 0C 84 0D FC 0D ");
wd=getvalbyad(40,120,5,bs,AD);
wd=100-wd;
echo(wd);//25
其中,B9 03 对应的是16进制的0x03b9,也就是10进制的953,是60度的AD值;而后面的31 04即55度的AD值(1073);...... 依次类推
于是,通过100度-wd 来将逆向非线性传感器给搞定了;