为制作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 来将逆向非线性传感器给搞定了;