基于单片机实现查表测温与加热控制

2021-09-10 07:22决蒙颜志强
科技研究 2021年13期
关键词:暖手阻值测温

决蒙 颜志强

前期设计了一款暖手宝加热电路,主控芯片使用了具有10bit精度ADC和5K字节FLASH存储空间的STC15W402AS单片机,驱动两位LED显示温度,温度检测使用了置于暖手宝内的10KΩ(25°C时)铂金电阻。为了既符合温度检测精度要求,又避免单片机温度检测复杂计算,采取巧妙的电路设计和采样后直接查表代替复杂计算的方法,在极短时间内求得实时温度,降低了编程难度,缩短了程序代码。

为了减少外围元件以降低成本,系统时钟选择使用单片机内部自带的24兆IRC时钟。铂金测温电阻Rk一端接地,另一端接单片机的P1.4脚,该脚还通过10KΩ高精度电阻R1上接5.12V电源的正极。单片机系统在内部以10位的精度对P1.4脚上电压进行数字采样,因此该系统的采样分辨率为5mV(=5.12V/210),采样输出结果(设为X)乘以5mV就是P1.4脚上的测得电压(即0.005*X)。同时电路Rk与R1串联共接于5.12V电源正极,通过串联分压计算,Rk上分得的电压为5.12V*Rk/(Rk+R1),该数取整后与P1.4脚上的测得电压0.005*X应相等,即0.005*X=5.12*Rk/(Rk+R1),把两边取倒数,得到:

(1/X)=1/1024+R1/(1024*Rk)······式①

从式①中可以看到,X与Rk是一一对应且关系唯一(但不是线性关系),而根据阻值与温度手册查询得知,每一个Rk值与一个唯一的温度值相对应,从而可以推出X与温度值也是一一对应且关系唯一。若把式①再化简得到:

(1/X)=(R1/1024)(1/R1+1/Rk)······式②

R1=10000代入第一个括号内得

(1/X)≈ 9.77(1/R1+1/Rk)······式③

那么式③中X的物理意义就变成了定值电阻R1与测温电阻Rk并联后的阻值缩小9.77倍(倍数为R1/1024,随R1而改变),若把R1换为1024Ω,X值就等于定值电阻R1与Rk并联后的阻值。从式③中也可以看到,X值测量,最终与电源电压无关,但为了提高测量准确度,电源电压尽量高。

测温时,若根据式③这种关系,在程序中把采样结果用计算方式得到实时温度仍然是非常麻烦的。为此,在编程之前,利用式③这种关系使用excel电子表格推导出不同Rk与R1并联缩小R1/1024倍的X整数值,和与之对应温度值。测温电阻使用手册中,只给出了-20°C至120°C之间140个整点温度对应的Rk阻值,通过这些阻值,根据式③关系推导出X值,把X值作为相对存储地址,这些地址存储当前Rk值对应的温度值。因为大批量生产,虽不可能对每一只测温电阻进行测量,但编程之前,仍手动测量了非整数温度点对应的Rk,与上述推导结果一并存入电子表格中,转化后固化到STC15W402AS的EEPROM中。

具体方法:X取值范围即ADC输出值为0~1023(即20-1~210-1),既对应了1024个Rk值,又对应了1024个温度值,通过excel电子表格推导或手动测量得出1024个X值和对应的1024个温度值,并按X由0至1023的顺序排列出这1024个温度值,而后存入到一个与程序代码文件类型一致的TEMPERATURE文件中。程序固化时,程序代码空间选择从地址0000H开始到07FFH地址结束,大小2048个字节;文件TEMPERATURE选择从0800H地址开始到0BFFH地址结束,这块区域是数据存储区,0C00H之后还有3K字节的数据存储区,可以另作他用。固化结束后,地址800H到BFFH之间,顺序存入了1024个温度值。编程时,采样得到的10位结果值X,低八位送给DPL,高两位加十进制数12送给DPH,A清零,使用MOVC A,@A+DPTR指令通过查表功能而得到实时温度。从EEPROM存储的整体数据来看,R1使用10KΩ电阻,大于100°C时,理论测量精度约为1°C;85°C至 100°C时,理论测量精度约为0.5°C;70°C至 85°C时,理论测量精度约为0.35°C;40°C至 70°C时,理论测量精度约为0.2°C;0°C至 40°C时,理论测量精度约为0.1°C;-20°C至0°C左右时,理论测量精度约为0.2°C。后来,为了提升70°C左右的测量精度,R1使用了1000Ω和24Ω电阻串联代替原10KΩ电阻,使70°C左右的温度测量精度提升到0.15°C左右,而25°C左右的测量精度则下降到0.25°C左右。由此可以看到,使用不同阻值的R1,可以提升Rk=R1对应温度区间的测量精度。改变R1时,不用重写程序代码,只需更改TEMPERATURE文件,重新固化代码程序和EEPROM数据区即可。系统使用24兆时钟,测温一次约需80us。最高加热温度70°C,其测量精度虽然约为0.15°C(此时R1=1024Ω),但由于成本和体积限制,使用了两位LED,显示精度则是1°C。

系统加电后,单片机首先断开加热、关闭蜂鸣器,初始化定时器、中断入口、A/D采样、休眠等一些必要的参数,而后调用测温子程序检测暖手宝实时温度,当温度采样值为3FF或0时,说明暖手宝未与加热器相连或加热器测温电路短路,禁止加热,LED显示“□□”。當温度在70°C以下时,开始加热,每0.25秒检测一次暖手宝温度,LED实时显示当前温度;当检测到实时温度达到68°C时,停止加热15秒,利用加热器的余热继续加热,如果不能达到最高温度,则采取加热6秒停止10秒的方式继续加热,从而最终把暖手宝加热到70°C,并终止加热,蜂鸣器发出六组叫声,提示主人取下暖手宝,完成本次暖手宝测温加热。如果暖手宝及时取下来,下次插上可以再次加热。但如果暖手宝加热完毕一直没有取下来,系统采取每秒钟检测一次暖手宝温度,当其温度下降到65°C以下时,启动加热程序,使暖手宝再次加热到70°C。系统共检测15分钟,超过15分钟后,彻底不再加热,进入休眼,防止长久加热出现危险,只有暖手宝断电重启后才能再次启动温度检测和加热功能。

猜你喜欢
暖手阻值测温
智能防疫测温机器人朔州“上岗”
肯尼亚:测温枪需及时校准
充电暖手宝的正确使用方法
对一道电学实验题的思考
“暖经济”火热选错暖手宝隐患多
“暖经济”火热选错暖手宝隐患多
高速CCD像机的测温系统标定方法
发热
电桥平衡条件的应用
测温电路探讨