44、基于51单片机与AD1674的高精度数字温度计设计与仿真(程序+Proteus)

张开发
2026/4/17 7:05:26 15 分钟阅读

分享文章

44、基于51单片机与AD1674的高精度数字温度计设计与仿真(程序+Proteus)
1. 项目背景与核心器件选型做电子设计的朋友应该都遇到过需要测量温度的场合比如温室大棚监控、工业设备温度检测等。传统的水银温度计虽然简单但无法实现数字化记录和远程监控。今天我要分享的这个基于51单片机和AD1674的数字温度计方案正好能解决这个问题。先说核心器件选型。51单片机作为主控芯片性价比高且资料丰富特别适合初学者上手。我选的是AT89C52这款芯片自带8K Flash ROM完全够用。AD1674是12位精度的模数转换芯片比常见的ADC0809精度高很多实测温度分辨率能达到0.1℃。热敏电阻用的是MF58型负温度系数NTC器件它的阻值随温度升高而下降线性度还不错。这里有个选型细节要注意AD1674的输入电压范围是0-10V但热敏电阻的输出信号通常很小。我在电路里加了LM358运放组成同相放大器把信号放大到适合AD转换的范围。这个设计在Proteus里仿真时发现放大倍数不能太大否则容易引入噪声经过几次调整最终定为15倍。2. 硬件电路设计详解2.1 核心电路连接整个系统的硬件连接其实很有讲究。AD1674的12位数据线直接接在P0口记得要加上拉电阻因为51的P0口内部没有上拉。CS、RD、WR这些控制信号分别接到P2.0-P2.2。热敏电阻与10kΩ精密电阻组成分压电路这个分压值就是我们要测量的模拟信号。有个坑我踩过AD1674的参考电压一定要稳定。最初我用普通电阻分压提供Vref结果温度读数总是漂移。后来改用TL431基准源问题立刻解决。这里建议大家在PCB布局时要把AD1674的模拟地和数字地分开最后单点连接能有效减少干扰。2.2 抗干扰设计高精度测量最怕干扰。我在电路里加了三个关键设计每个IC的VCC脚都并联0.1μF去耦电容模拟信号走线尽量短且远离数字信号线在热敏电阻输入端加入RC低通滤波实际测试发现这些措施让温度波动从原来的±1℃降到了±0.3℃。液晶显示模块用常见的1602就行通过P1口与单片机连接。注意1602的对比度调节电压要合适否则显示会不清楚。3. 软件算法实现3.1 A/D转换数据处理AD1674的驱动程序主要包含初始化、启动转换和读取结果三个部分。这里有个关键点由于12位AD的输出值是0-4095对应0-10V电压但实际热敏电阻的输出范围可能只有0.5-4.5V。我在代码里做了量程映射Voltage0 (float)AD_Result * 1000 / 4095; //转换为毫伏值 if(Voltage0 500) Voltage0 500; //限制下限 if(Voltage0 4500) Voltage0 4500; //限制上限3.2 查表法温度计算热敏电阻的温度-阻值关系是非线性的直接用公式计算会很复杂。我的做法是预先测量一组温度-电压数据做成查表数组。程序里定义了两个数组code unsigned int VOL[] {343,339,...}; //电压值数组 code unsigned int Temper[] {100,150,...}; //对应温度值(放大100倍)查表时采用最近邻算法找到与当前电压最接近的数组元素然后取出对应的温度值。虽然会有些误差但在0-100℃范围内实测误差不超过±0.5℃完全满足一般需求。4. Proteus仿真技巧4.1 仿真模型搭建在Proteus里仿真时有几个关键点要注意AD1674模型要设置正确的参考电压热敏电阻用模拟温度传感器替代更方便1602液晶的仿真模型可能需要调整延时参数我分享一个实用技巧在仿真时可以右键点击热敏电阻选择属性→高级属性直接输入温度值来模拟环境变化比等它慢慢响应快多了。4.2 调试方法仿真时遇到问题怎么办我常用的三板斧用Proteus自带的电压表、示波器查看关键点信号在Keil里设置断点单步执行看变量变化临时增加调试输出比如把中间变量显示在液晶上有一次仿真时温度显示总是不变后来发现是AD1674的转换结束信号没处理好。通过示波器查看BUSY引脚才发现程序里检测该信号的延时不够。这种问题在实际硬件上更难排查仿真环境反而更方便调试。5. 实际制作与优化建议5.1 PCB设计要点如果要做实物建议注意这些细节电源走线要足够宽模拟部分最好采用星型接地热敏电阻的引线不要太长否则会引入干扰预留校准用的可调电阻位置我做的第一版PCB没注意这些结果温度读数总是不稳。后来重新布局把模拟部分单独放在一个区域效果立竿见影。5.2 校准方法要想获得高精度校准是必须的。我的土办法是准备一个精度较高的水银温度计作为参考把热敏电阻和参考温度计同时放入冰水混合物0℃记录AD转换值对应0℃再放入沸水100℃注意海拔影响修改程序中的查表数据有条件的话可以多取几个中间点比如室温25℃、体温37℃等这样校准后的精度能达到±0.3℃以内。

更多文章