泉州企业网站维护定制中国个人优秀网站
泉州企业网站维护定制,中国个人优秀网站,手机网站模板下载免费,网站建设咨询公司排名1. 为什么我们需要一个低成本的测温方案#xff1f;
大家好#xff0c;我是老张#xff0c;在嵌入式硬件这块摸爬滚打了十几年。今天想和大家聊聊一个非常实际的问题#xff1a;怎么用最少的钱#xff0c;搞定一个能测高温的玩意儿。比如你想做个电烙铁温控、3D打印机热床…1. 为什么我们需要一个低成本的测温方案大家好我是老张在嵌入式硬件这块摸爬滚打了十几年。今天想和大家聊聊一个非常实际的问题怎么用最少的钱搞定一个能测高温的玩意儿。比如你想做个电烙铁温控、3D打印机热床监控或者就是个DIY的小烤箱核心需求都是测温度而且往往是几百度的高温。这时候K型热电偶几乎就是首选。为啥因为它便宜、皮实、量程宽从零下到一千三百度都能对付。但问题来了热电偶它自己输出的信号太“娇气”了。它产生的是一种叫做“热电势”的微弱电压温度每变化一度电压可能只变化几十个微伏。这还没完如果你测的温度低于了参考点温度比如冰点它还会给你输出个负电压。直接把这么微弱、还可能带负电的信号接到单片机的ADC模数转换器引脚上单片机根本“看不懂”。ADC通常只能测量0到正电源电压比如0-3.3V之间的信号。所以我们需要一个“翻译官”把热电偶的微弱信号放大并“平移”到ADC能轻松读取的范围。市面上有像MAX6675、MAX31855这样的专用芯片它们集成度高、用起来省心但一片的价格可能就够你买好几根热电偶了对于成本敏感的项目来说有点肉疼。所以咱们今天要折腾的就是一个纯用硬件“搭积木”的方案一个普通的运算放大器运放配上几个电阻电容再加上单片机自带的ADC。目标很明确就是在保证能用的前提下把成本压到最低。我前阵子给一个朋友的小作坊做设备改造就用这个思路省下了不少钱实测下来效果挺稳。接下来我就把这里面的门道、怎么设计电路、编程时要注意的坑掰开揉碎了跟大家讲讲。2. 搞定负电压给信号“垫个台阶”咱们先啃最硬的一块骨头负电压怎么办单片机ADC的输入引脚绝大多数情况下都不能接受低于地电平GND0V的电压。强行输入可能会损坏芯片至少也是读数完全错误。而K型热电偶在测量低于其冷端也就是你接线端温度时产生的热电势就是负的。怎么办呢核心思想就一个把整个信号电压整体“抬”起来确保经过我们处理后的最低电压也在0V以上。这就好比你要给一个身高有正有负的人量身高直接量没法量你让他站到一个一米高的台子上那他最矮的时候也有一米高你量起来就方便了最后记得减去这个台子的高度就行。在电路里这个“台子”就是一个稳定的参考电压我们称之为“偏置电压”或“电平移位”。怎么产生它最简单可靠的方法就是用一个电阻分压网络。比如你用两个精度高一点、阻值一样的电阻比如10kΩ接在单片机的3.3V电源和地之间那么中间连接点的电压就是1.65V。这个1.65V就是我们想要的“台子”高度。光有“台子”还不行你得让热电偶的信号稳稳地站上去。这里就需要运放登场了我们通常会采用“同相加法器”或者“差分放大电路”的配置。我更喜欢用同相加法器的思路来解释因为它更直观。在这个电路里热电偶的微弱电压信号和那个1.65V的偏置电压一起送到运放的同相输入端端。运放会把它俩加起来然后按一定的倍数放大。这样即使热电偶送来一个-0.1V的信号加上1.65V再放大输出也肯定是个正电压了。这里有个关键细节这个偏置电压的稳定性直接决定了你整个测温系统的零点稳定性。如果你用简单的电阻分压电源电压的波动会直接导致偏置电压波动。比如单片机电源从3.3V漂移到3.2V你的1.65V基准就变成了1.6V相当于“台子”矮了0.05V换算回温度就是几十度的误差所以在要求稍高的场合我强烈建议你使用一颗TL431之类的廉价基准电压源芯片来产生这个偏置电压它的稳定性比电阻分压好得多成本增加也就几毛钱绝对物超所值。3. 放大微弱信号既要放大倍数也要精度解决了正负问题接下来就是解决“微弱”的问题。K型热电偶的灵敏度大约在40微伏每摄氏度μV/℃左右。也就是说温度变化1度电压才变化0.00004伏。而单片机ADC的测量分辨率是有限的。以一个12位的ADC、参考电压3.3V为例它能分辨的最小电压变化是 3.3V / 4096 ≈ 0.8毫伏mV。0.8mV对比40μV即0.04mV差了20倍。这意味着如果你不放大温度变化20度ADC的读数可能才跳一个字这精度根本没法用。所以我们必须把信号放大让温度每变化1度引起的电压变化能够占据ADC多个“字”的变化这样才能进行精确测量。放大电路的核心就是运放和几个电阻。我们常用同相放大电路来实现。它的放大倍数由两个反馈电阻决定放大倍数 1 (Rf / Rg)。比如你想放大52倍可以选Rf51kΩRg1kΩ。这样热电偶那几十微伏每度的变化经过放大后就变成了毫伏级正好落在ADC擅长处理的区间。这里我踩过一个坑电阻的精度和温漂。你随手抓的普通5%精度的碳膜电阻可不行。假设你的Rf和Rg标称是51k和1k但实际一个偏大5%一个偏小5%你的放大倍数可能就不是52倍而是变成55倍或者49倍了这会引入巨大的增益误差。所以请务必使用1%精度的金属膜电阻。另外运放本身的选择也有讲究。用于这种微小直流信号放大一定要选择“低失调电压”、“低温漂”的运放。像TI的OPA333零漂移运放或者更常见的LMV358低功耗、MCP6002轨到轨都是不错的选择。别用古老的LM358它的输入失调电压太大了可能有好几毫伏比你热电偶信号都大直接就把信号淹没了。4. 实战电路设计与仿真分析纸上谈兵终觉浅咱们来画个具体的电路图并用仿真软件看看它到底行不行。我以最通用的3.3V单片机系统为例设计一个目标测量范围-50℃ ~ 500℃的电路。首先我们需要查K型热电偶的分度表。这里给大家几个关键点电压假设冷端温度为0℃-50℃时输出电压约为-1.889 mV0℃时输出电压为0 mV500℃时输出电压约为20.644 mV我们的设计目标是将-1.889mV ~ 20.644mV这个输入范围线性地映射到单片机ADC易于测量的0.3V ~ 3.0V范围为电源电压留点余量。第一步确定偏置电压Vref。为了让-1.889mV输入时输出为0.3V我们需要计算“台子”的高度。这里涉及一点数学。我们假设最终电路的传递函数是Vout Gain * (Vin Vref)。其中Vin是热电偶电压Vref是我们加的偏置注意这里Vref是个负值才能把负电压抬升。 通过解方程 当 Vin -1.889mV, Vout 0.3V 当 Vin 20.644mV, Vout 3.0V 可以算出放大倍数Gain大约在110倍左右而Vref大约为2.0mV。但注意这个2.0mV是加到输入端的值非常小直接用电阻分压产生这么小的电压很难稳定。因此更实用的方法是我们先产生一个较大的、稳定的偏置电压比如用TL431产生1.250V然后通过电阻分压网络衰减后送入运放的同相输入端与热电偶信号进行叠加。具体计算稍复杂但原理相通。第二步绘制电路原理图。我们可以采用一个单运放实现放大和偏置。这里给出一个简化的、基于仿真的思路图非最终精确参数基准源使用TL431提供稳定的2.5V参考电压。偏置生成用两个高精度电阻如10kΩ和49.9Ω对2.5V分压得到约12.4mV的偏置电压Vbias。注意这个Vbias需要连接到运放电路的正确位置以实现加法。放大电路运放采用同相放大结构。热电偶正极接运放同相端同时通过一个电阻连接到Vbias。反馈电阻Rf和接地电阻Rg决定增益。根据前面计算增益需要约110倍。可以选取Rg1kΩ1%Rf110kΩ1%。低通滤波在热电偶输入端和运放输出端到ADC之间建议加入简单的RC低通滤波例如一个1kΩ电阻串联一个0.1uF电容到地以抑制高频噪声。电源去耦运放的电源引脚附近务必放置一个0.1uF的陶瓷电容和一个10uF的钽电容到地这是保证运放稳定工作的基石千万别省。第三步进行仿真验证。我用Proteus或其他如LTspice搭建了这个电路进行直流扫描仿真。将热电偶电压源从-2mV扫到22mV模拟-50℃到500℃的变化。观察运放的输出电压。 仿真结果理想情况下应该是一条漂亮的直线从0.3V平滑上升到3.0V。这证明我们的放大和偏置设计在理论上是可行的。通过仿真我们还可以检查运放是否工作在线性区输出未饱和以及在不同温度点下的实际输出值用于后续软件校准。注意仿真和实际永远有差距。仿真中电阻是理想的运放模型是理想的没有噪声。实际电路会受到元件精度、温度漂移、电源噪声、电磁干扰等无数因素的影响。所以仿真通过只是万里长征第一步。5. 单片机ADC采集与软件处理要点硬件电路搭好了信号也送到了单片机的ADC引脚接下来就是软件的事了。这里面的讲究一点也不比硬件少。第一ADC配置要精细。以STM32的12位ADC为例别只用默认配置。首先参考电压一定要稳。如果单片机有独立的VREF引脚最好外接一个基准电压源如2.5V。如果使用电源电压作参考那就要确保电源干净、稳定。其次采样时间要设置足够长。热电偶信号经过放大后仍然是变化缓慢的直流信号但运放输出阻抗、ADC输入电容等因素需要一定时间才能将采样电容充电到稳定电压。通常把采样时间设置为所能设置的最大值如239.5个周期有利于提高精度。最后记得启用硬件过采样功能。这是提升有效分辨率的大杀器。比如设置16倍过采样可以将12位ADC的有效分辨率提升到14位能更好地分辨信号的微小变化。第二软件滤波必不可少。即使硬件有滤波ADC读回来的值还是会跳。最简单的就是多次采样取平均。我常用的方法是连续采样64次或128次然后去掉最大最小值再求平均。更高级一点可以用滑动平均滤波或一阶低通数字滤波。对于温度这种变化不快的信号滤波效果非常明显。第三温度换算查表还是计算这是核心算法。你有两种选择公式计算法K型热电偶在特定范围内有近似多项式。例如在0-500℃范围内温度T(℃)与电压V(mV)的关系可以近似为T a*V^4 b*V^3 c*V^2 d*V e。你需要先根据ADC读数反推出放大前的原始热电偶电压记得减去偏置并除以增益然后代入公式计算。优点是节省内存缺点是计算量大且多项式只在特定范围准确。查表法将K型热电偶分度表预先存入程序数组比如每1℃或每10℃一个点。根据计算出的电压值在表中查找相邻的两个点然后进行线性插值。比如你算出电压是12.345mV查表发现12.3mV对应301℃12.4mV对应302℃那么通过插值可以算出温度大约是301.45℃。这种方法精度高、速度快是最常用的方法。虽然占用一些Flash空间但对于现代单片机来说根本不是问题。第四冷端补偿不能忘。我们之前所有的讨论都基于一个假设热电偶的冷端也就是接到我们电路板上的那端温度是0℃。但这在现实中几乎不可能。你的电路板环境温度可能就是25℃。热电偶测量的是热端与冷端的温差。如果冷端是25℃热端是500℃那么热电偶产生的电压对应的是475℃的温差而不是500℃。 因此你必须测量冷端的实际温度然后在计算中补偿回去。方法很简单在电路板上热电偶接线端子附近放置一个数字温度传感器如DS18B20、LM75。软件流程是1. 读取ADC值换算成热电偶热电势E1。2. 读取冷端温度T_cold。3. 查分度表找到T_cold对应的热电势E_cold。4. 真实的热电势 E_true E1 E_cold。5. 再用E_true去查分度表得到真实的热端温度。这一步是工业上热电偶测量的标准步骤自己玩可以忽略但做正经项目一定要加上否则低温段误差会非常大。6. 精度提升与调试经验分享电路搭好了程序也写了一上电发现读数飘得厉害或者和标准温度计对不上别急这是常态。我们来聊聊怎么调优和提升精度。首先校准是王道。业余条件下最实用的两点校准法你需要两个已知的、稳定的温度点。一个低温点比如冰水混合物0℃一个高温点比如沸腾的水注意海拔影响接近100℃。如果没有专业恒温槽这两个点是最容易获得的。将热电偶插入冰水混合物中等待读数稳定。记录下此时ADC的原始读数Raw_Low。将热电偶插入沸水中等待读数稳定。记录下此时ADC的原始读数Raw_High。现在你知道了两个真实温度点T_low, T_high和对应的ADC读数。在软件中你可以建立一个线性校正公式T_actual (Raw - Raw_Low) * (T_high - T_low) / (Raw_High - Raw_Low) T_low。这能有效消除运放增益误差、偏置误差和ADC参考电压误差的综合影响。虽然热电偶本身不是完全线性的但在你关心的一个不太宽的温度段内线性校准效果已经足够好。其次注意布局和接地。测量微伏级信号电路板布局布线至关重要。我的经验是星型接地为模拟部分建立一个干净的“模拟地”所有运放、参考源、滤波电容的地都接到这一点然后用一根粗线单点连接到电源地。信号走线要短热电偶接到板子的走线要尽可能短最好使用屏蔽线并且屏蔽层单端接地接你的模拟地。远离干扰源运放电路要远离单片机、数字开关电源、继电器等噪声源。电源滤波再加码除了每个芯片旁边的去耦电容可以在模拟电路的电源入口处增加一个π型滤波器如10Ω电阻两个10uF电容。最后元器件的选择是基础。再强调一遍1%精度的金属膜电阻低温漂的运放稳定的电压基准。这三样是保证精度的基石。别在这几毛钱上省钱。有一次我偷懒用了5%的电阻结果在300度时出现了近20度的误差排查了半天才发现是反馈电阻飘了。换成1%的精密电阻后误差立刻缩小到3度以内。这个单运放方案它的优势就是极致的成本控制把所有智能处理都交给了软件。它的挑战在于你需要耐心地调试和校准并且要接受它精度和稳定性可能不如专用芯片的事实。但对于很多预算紧张、对精度要求不是极端苛刻比如±5℃以内的DIY项目或小批量产品这个方案经过精心设计和调试后是完全能够胜任的。我做的那个小作坊加热设备用这个方案跑了半年多温度控制一直很稳定老板对成本特别满意。硬件成本算下来不到专用芯片方案的三分之一这其中的折腾和乐趣也只有咱们这些喜欢动手的人才能体会吧。