ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

茶吧机控制板方案:XBL1509B 5.0与ULN2003ABDTR选型调试

茶吧机控制板方案:XBL1509B 5.0与ULN2003ABDTR选型调试 做小家电控制板这几年茶吧机算是麻雀虽小五脏俱全的典型一台机器里塞了抽水、加热、保温、制冷、消毒、显示、按键、水位检测七八个功能模块成本还压得很死。我手上这套茶吧机控制板方案主控用的是XBL1509B 5.0执行侧用ULN2003ABDTR做驱动级板子从打样到量产跑了三批稳定性还算过得去。这套组合最大的价值在于主控资源刚好够用、驱动级便宜且皮实、外围电路能压缩到两层板搞定特别适合做小家电方案选型、想自己折腾控制板的硬件爱好者以及刚接手这类项目、需要快速摸清电路骨架的工程师参考。下面把整套方案从选型逻辑、电路细节、实操调试到踩坑记录完整拆一遍。1. 方案整体架构与选型逻辑1.1 茶吧机控制板到底要管哪些事先把功能清单摆出来不然选型就是空谈。一台常见的茶吧机控制板要处理的输入输出大致分四类。第一类是人机交互按键或者触摸面板负责开关机、温度设定、出水、模式切换输出侧是数码管、LED 指示灯或者小尺寸段码屏再加上一颗蜂鸣器做按键反馈和报警提示。这部分看着简单但按键的防抖、长按连击、触摸的基线漂移都是实际调试里最耗时间的活。第二类是水路控制抽水泵把桶装水抽到加热壶或者冷胆里。泵有两种主流选择一种是有刷直流小水泵一种是小功率电磁泵交流或直流。这两种都是感性负载关断瞬间的反向电动势必须处理干净否则轻则复位重则打死 MCU 的 IO。第三类是加热与制冷加热管功率通常在 800W 到 1800W 之间走市电必须由继电器或者可控硅隔离控制制冷多用半导体制冷片功率几十瓦同样需要继电器或者 MOS 通断。温度采集靠 NTC 热敏电阻贴壁或者插在水壶底部。第四类是安全保护水位检测防止干烧超温保护防止失控还有加热超时保护。这几项在很多低成本方案里被砍掉但一旦出问题就是安全事故我个人的习惯是宁可多花两毛钱的阻容也要把干烧和超温这两条兜住。把这四类功能拆完对主控的要求就清楚了至少十几路 GPIO、两到四路 ADC、三四路定时器一路做 1ms 系统滴答、一路做数码管扫描、一路做蜂鸣器或 PWM、最好内置一个比较器用来做水位或者过零检测。这个需求画像基本就是小家电 8 位 MCU 的舒适区。1.2 为什么是 XBL1509B 5.0 加 ULN2003ABDTR 这个组合选 XBL1509B 5.0 作为主控核心逻辑有三条。第一条是 IO 数量和资源刚好卡在成本线上。这类芯片通常提供二十多个可复用 IO内置多通道 10 位或 12 位 ADC带内部振荡器可以省掉外部晶振还内置看门狗和低压复位。对茶吧机这种不需要跑复杂算法、不需要联网、不需要大容量存储的场景8 位内核完全够用。用 32 位 MCU 来做这事属于用高射炮打蚊子BOM 成本上去了、功耗上去了、开发周期还更长。第二条是供电和电平兼容性。小家电里最常见的供电组合是 5V 系统因为继电器、数码管、蜂鸣器这些器件天然适配 5V。XBL1509B 5.0 工作在 5V 域可以直接驱动 ULN2003 的输入端中间不需要任何电平转换这一点在成本敏感的项目里非常关键——省掉一颗电平转换芯片省掉两路走线还省掉一个潜在的故障点。第三条是驱动级的匹配。ULN2003ABDTR 是七路达林顿阵列SOIC-16 封装每一路可以吃 500mA 的集电极电流内部自带基极串联电阻和续流二极管。这意味着 MCU 的 IO 可以直接怼上去不需要外接基极电阻继电器或者小水泵的关断尖峰也有内部二极管兜着。一颗芯片解决七路负载抽水泵、加热继电器、制冷继电器、消毒继电器、蜂鸣器再加两路备用一个 ULN2003 全包了比用七颗分立三极管方案在贴片面积和焊接良率上都占优。这里插一句选型对比。有人会问为什么不用 MOS 管阵列比如低边驱动的 MOSFET 阵列。MOS 的导通电阻更低、发热更小但驱动继电器这种几十毫安级别的负载MOS 的低导通电阻优势体现不出来反倒是 MOS 的栅极容易被干扰击穿需要额外的栅极电阻和稳压管钳位电路反而更复杂。ULN2003 这种傻大黑粗的达林顿阵列抗造、便宜、不容易坏非常适合小家电这种电磁环境恶劣、用户使用粗暴的场景。至于那些更高端的芯片比如 ADS1292 这类多通道高精度 ΔΣ 前端精度是够高但那是给生物电信号采集准备的用在测 NTC 上属于彻底的资源浪费成本更是翻十几倍完全没有必要。茶吧机测水温10 位 ADC 配合 B 值 3950 的 NTC做到 ±2℃ 完全没问题。1.3 电源分区与地线规划的整体思路在动手画原理图之前有一件事必须先想清楚电源怎么分地怎么走。茶吧机控制板上有三个电世界市电侧220V 加热管、变压器初级、中间直流侧继电器线圈、水泵、制冷片一般是 12V 或 5V、弱电逻辑侧MCU、ADC、按键、显示。这三个世界之间的隔离和回流路径设计直接决定了板子能不能通过 EMC 测试也决定了用户家里会不会出现一按出水就花屏的现象。我的做法是把板子从物理上劈成左右两半。左半边全部是强电包括继电器触点、接线端子、保险丝、压敏电阻走线尽量短粗间距至少留 3mm必要时开槽。右半边是弱电MCU、NTC 分压、按键、显示全部集中在这一侧。两半之间只有两个连接点一个是继电器的驱动信号从 MCU 出来经过 ULN2003一个是电源模块输出的直流电。电源部分量产方案我一般选非隔离的降压方案比如 Buck 或者阻容降压加线性稳压的组合因为成本低、体积小。但要注意非隔离方案的地是带市电电位的如果按键或者触摸面板是金属的必须做绝缘处理或者在按键回路里加隔离。这一点是安全底线不能省。地线方面我习惯把地分成三块功率地继电器线圈、水泵回流、电源输入电容的地、模拟地NTC 分压、ADC 参考的地、数字地MCU、显示、按键的地。三块地在电源输出电容的负极处单点汇合中间不做铺铜连接。ULN2003 的 GND 脚属于功率地必须离 MCU 的 GND 脚远一点最好中间隔一条窄的地缝。注意ULN2003 内部续流二极管的公共端是 COM 脚这个脚必须接到负载电源的正极而不是悬空。悬空的话继电器关断时内部二极管不导通尖峰电压会顺着集电极打到芯片内部轻则误动作重则永久损坏。2. 核心电路细节拆解2.1 主控最小系统供电、复位、时钟怎么配XBL1509B 5.0 的最小系统说白了就是三件事把电供干净、把复位做可靠、把时钟定下来。供电部分芯片的 VDD 和 VSS 之间必须放一颗 0.1μF 的陶瓷电容位置要贴着引脚走线越短越好。这个电容的作用是给芯片内部开关瞬间提供电荷电容离得远走线电感就会让去耦失效表现出来就是 ADC 采样跳变、偶尔复位。除了 0.1μF我一般还会在电源入口处并一颗 10μF 到 47μF 的钽电容或者电解电容做低频储能。这两颗电容的组合一颗管高频、一颗管低频是标准配置。复位电路如果芯片支持内部上电复位外部只需要一颗 10kΩ 上拉到 VDD 加上一颗 100nF 到地就够了。这里的门道在于上拉电阻不能太大太大了抗干扰能力差也不能太小太小了复位脚灌电流大。10kΩ 是一万次验证下来的经验值。另外复位脚最好串一颗小电阻100Ω 到 1kΩ再走长线防止外部静电直接打到芯片引脚。时钟方面能省外部晶振就省。小家电对时钟精度的要求不高内部 RC 振荡器 ±2% 的精度完全够用只有做定时预约这种需要长期计时的功能才需要外挂 32.768kHz 晶振或者干脆上一颗 RTC 芯片后面会说到 BM8563 这类方案。还有一个容易被忽略的点未使用的 IO 不要悬空。悬空的 IO 处于高阻态容易受干扰翻转还会增加功耗。我的处理方式是把它们统一配成输出低电平或者配上拉输入。这一步在样机上可能看不出区别但到了批量生产和长期使用阶段能少掉很多莫名其妙的故障。2.2 ULN2003ABDTR 驱动级的内部结构与外围设计ULN2003 这颗芯片看着简单实际上有几个关键点必须搞清楚不然调试的时候会怀疑人生。先看内部结构。每一路的核心是一对达林顿连接的 NPN 三极管前级管做射极跟随后级管做功率放大总电流增益大约在 1000 量级。这意味着只要给它很小的基极电流就能控制几百毫安的集电极电流。输入端串联了一颗 2.7kΩ 的基极电阻这个电阻的存在非常关键——它让 MCU 的输出电压即使有波动基极电流也能被限制在合理范围内同时省掉了外部电阻。芯片内部每一路还并联了一颗续流二极管阳极接集电极也就是输出脚阴极统一接到 COM 脚。当负载是继电器线圈或者电机这种感性负载时关断瞬间线圈产生的反向电动势会通过这颗二极管泄放到 COM 脚连接的电源正极把电压钳位在电源电压加二极管压降的水平保护内部的输出三极管。外围电路怎么接分几种典型负载说。驱动继电器时继电器线圈一端接负载电源比如 12V另一端接 ULN2003 的输出脚COM 脚接 12V。MCU 的 IO 接输入脚。IO 输出高电平达林顿导通线圈得电继电器吸合。这里要注意如果 MCU 是 5V 系统而继电器线圈是 12V这没问题ULN2003 的输入电压不敏感只要基极电流够就行但 COM 脚一定要接 12V不能接 5V否则续流二极管会被反向偏置起不到保护作用。驱动直流水泵时情况类似但水泵的启动电流比额定电流大好几倍选型时要留足余量。我一般让水泵的稳态电流不超过 ULN2003 单路额定电流的三分之一比如水泵额定 150mA那用 ULN2003 驱动就比较从容。另外水泵的换向火花会产生高频干扰除了内部二极管我还会在水泵两端并一颗 100nF 的陶瓷电容再串一个磁珠把高频噪声拦住。驱动蜂鸣器就简单了有源蜂鸣器直接接输出脚无源蜂鸣器则要用 MCU 的 PWM 输出接到输入脚通过 ULN2003 放大。这里有个细节蜂鸣器响的时候电流突变大如果和 ADC 采样共用一条地线会造成采样误差所以蜂鸣器的地要单独回到功率地。参数计算部分以驱动 12V/30mA 的继电器为例。输入高电平按 5V 算内部基极电阻 2.7kΩ达林顿前级和後级的 Vbe 加起来约 1.4V那么基极电流大约是 (5 − 1.4) / 2.7k ≈ 1.33mA。达林顿增益按 1000 算理论集电极电流能力远超 30mA实际工作中输出三极管会进入深度饱和饱和压降大约 0.9V 到 1.2V。这个压降意味着继电器线圈实际得到的电压是 12 − 1.0 ≈ 11V对绝大多数 12V 继电器来说11V 已经足够可靠吸合但如果你选的是 12V 且吸合电压阈值很高的继电器就要注意留余量或者改用 MOS 驱动。提示ULN2003 的输入端内部有下拉电阻不同厂家阻值略有差异常见约 7kΩ 左右但为了在上电瞬间保证负载不误动作最好在 MCU 的 IO 上再并一颗 10kΩ 下拉电阻或者在软件里先把所有输出脚配成低电平再初始化。2.3 温度采集与水位检测的模拟前端温度采集这条链路是整块板子上最容易出问题的地方也是决定用户体验的关键。NTC 分压电路怎么设计。我通常用一颗 10kΩ、B 值 3950 的 NTC和一颗 10kΩ 的精密电阻串联NTC 接地精密电阻接 VDD5V分压点接 MCU 的 ADC 输入。这个接法是负温度系数温度升高NTC 阻值下降分压点的电压下降ADC 读数变小。25℃ 时NTC 阻值 10kΩ分压点电压是 5 × 10 / (10 10) 2.5VADC 读数是一半量程。到 100℃ 时NTC 阻值大约降到 970Ω分压点电压是 5 × 0.97 / (10 0.97) ≈ 0.44VADC 读数掉到满量程的 9% 左右。这个变化范围对 10 位 ADC 来说从 512 掉到 90 左右足足 400 多个码值分辨率完全够。反过来如果换成 NTC 在上、电阻在下的接法温度升高时电压升高同样可以用只是软件里查表要对应过来。我习惯用 NTC 接地的方式因为这样 NTC 引线万一短路到地读数会变成 0软件可以立刻判定为传感器故障并停止加热安全性更好。滤波和抗干扰。ADC 输入脚前面必须加 RC 低通。我的配置是 1kΩ 串联加 100nF 到地截止频率大约 1.6kHz既能滤掉开关噪声又不会让温度响应变迟钝。如果走线比较长比如 NTC 装在水壶底部线要绕半个机器还要在 ADC 脚旁边再并一颗 10nF 电容靠近芯片放置。水位检测怎么做。低成本方案用导电探针加比较器。两根不锈钢探针插在水箱里水作为导体把两探针之间的电阻拉低。这个信号接到LM393这类双电压比较器的一个输入端另一端用一个电阻分压网络设定参考电压。有水和无水时探针之间的电阻从兆欧级变到几十千欧级比较器输出翻转MCU 读这个数字信号就能判断水位。用比较器而不是直接用 ADC 读探针电压好处是响应快、不占 ADC 通道而且可以加迟滞防止水面波动时输出抖动。迟滞的实现方法是在比较器输出和同相输入之间接一颗大电阻比如 1MΩ做正反馈这样翻转阈值会分成上下两个水面轻微晃动不会导致输出反复跳变。这个技巧特别实用我第一版没加迟滞结果水位在临界点时机器一直咔咔响后来加了 1MΩ 反馈电阻才彻底解决。如果需要更高精度的温度控制或者在加热回路里想监测实际功率可以在模拟前端加一级运放做信号调理。运算放大器的应用电路在这里主要是两种一种是把 NTC 分压信号做缓冲跟随降低输出阻抗让 ADC 采样更稳另一种是把采样电阻上的小电压放大用来算电流。运放选型上小家电场合不需要高带宽选低失调、低功耗的通用型号就行重点是共模输入范围要覆盖到地电位否则低温区信号会失真。2.4 显示、按键与蜂鸣器的接口设计显示部分如果用的是 LED 数码管通常采用动态扫描。段选线接 MCU 的一组 IO位选线通过三极管或者 ULN2003 的剩余通道驱动。扫描频率我一般定在 200Hz 到 400Hz 之间低于 100Hz 会肉眼可见闪烁高于 1kHz 则 MCU 的 CPU 占用率上升明显。每一段的限流电阻按 5V 供电、LED 压降 1.8V、目标电流 5mA 算大约是 (5 − 1.8) / 5mA ≈ 640Ω取 680Ω 标准值。按键部分机械按键的硬件防抖靠一颗 0.1μF 电容并在按键两端软件防抖则是 10ms 到 20ms 的延时确认。触摸按键的话走线要尽量短、尽量远离继电器和电源走线否则灵敏度会受严重影响。触摸按键的参考地要单独一块铺铜不能和功率地混在一起。蜂鸣器接口前面提过这里补充一点如果用的是无源蜂鸣器PWM 频率一般选 2kHz 到 4kHz这个频段人耳最敏感、听起来最响亮。驱动占空比 50% 时声音最大实际调试时可以上下微调找到最舒服的音色。接口保护是这一节的隐藏重点。按键和触摸面板是最容易引入静电的地方用户手指上的静电电压动辄几千伏。每一路按键输入最好串一颗 100Ω 到 1kΩ 的电阻再并一颗 ESD 保护器件到地。ESD 保护器件的选型要注意结电容普通的按键线结电容大一点无所谓但如果是触摸通道或者高速信号线就必须选低电容型号否则会影响信号完整性。这类 ESD 应用电路的思路和 USB 接口保护是同一套逻辑串联限流、并联泄放、就近接地。2.5 稳压二极管、电平转换这些配角的位置一块控制板上真正的主角只有几个但决定可靠性的往往是这些配角。稳压二极管在这类板子上有三个典型用法。第一是过压钳位比如在 12V 电源输入端并一颗 15V 的稳压管防止电源模块异常输出高压打坏后级电路。第二是给 MCU 的 ADC 参考提供简单稳压如果芯片没有内部参考可以用一颗 3.3V 或者 4.3V 的稳压管加限流电阻做一个粗略参考但要注意稳压管的工作电流要足够一般 5mA 以上才能进入稳压区而且温度漂移比较大不适合精度要求高的场合。第三是栅极保护如果板上有 MOS 管栅极和源极之间并一颗 18V 稳压管可以防止栅极过压击穿。这三种用法选用时都要注意功耗稳压管在钳位状态下要能扛住预期电流。电平转换在纯 5V 系统里用不上但如果你的显示模块是 3.3V 通信或者想接一个 3.3V 的传感器就需要做电平匹配。TXS0108EPWR这类双向电平转换芯片适合 I2C、SPI 这种双向总线它能自动识别方向不需要额外的方向控制脚。选型时要注意它的最高速率和通道数茶吧机上一般用不到高速重点看它是否支持开漏总线I2C 必须支持。线性光耦这种器件比如HCNR201一般用在需要模拟信号隔离的场合。茶吧机上如果要对市电侧的电压或者电流做隔离采样理论上可以用它加运放搭一个隔离放大电路。但实际上小家电的加热控制基本靠继电器通断不需要精确的功率闭环所以这块电路我一般不会放除非客户明确要求做功率计量。真要做计量用INA226这类带 I2C 接口的电流/功率监测芯片更省事它内部集成了 ADC 和乘法器直接读出电压、电流、功率三个值配合一颗低阻值的分流电阻就能工作。3. 实操从原理图到样板调试3.1 关键参数的计算过程复盘把几个核心参数的计算过程完整走一遍方便直接抄作业。继电器驱动电流核算。假设选的是 12V 线圈、线圈电阻 400Ω 的继电器那么吸合电流是 12 / 400 30mA。ULN2003 单路额定 500mA余量充足。但要注意继电器的吸合电流通常比保持电流大选型时要按吸合电流算也就是把线圈电阻按最低温度下的值来取铜线电阻随温度下降而下降低温时电流反而更大。ULN2003 功耗核算。输出饱和压降按 1.0V 算电流 30mA那么单路功耗是 30mW。如果同时驱动四路总功耗 120mW。SOIC-16 封装的热阻大约 100℃/W温升约 12℃完全在安全范围内。但如果驱动的是大电流负载比如 200mA 的水泵单路功耗就是 200mW四路就是 800mW温升可能到 80℃这时候就要考虑增加铺铜散热或者换用分立 MOS 方案。NTC 分压电阻的取值。分压电阻取多少直接决定测温范围和灵敏度。原则是让分压电阻的阻值等于目标温度区间中点处的 NTC 阻值这样在这个温度点附近分压对温度的变化率最大分辨率最高。茶吧机的主要工作区间是 25℃ 到 100℃中点大约 60℃。查表可知 B 值 3950 的 10kΩ NTC 在 60℃ 时阻值约 2.7kΩ那么严格来说分压电阻应该取 2.7kΩ。但实际产品里考虑到常温区间的使用频率也很高而且 10kΩ 是通用值、采购方便所以我通常还是用 10kΩ接受在高温段分辨率略低的事实。这是一个典型的理论最优和工程可行之间的取舍。限流电阻和电容的搭配。所有 RC 滤波的取值都要考虑时间常数。比如 NTC 的 RC 取 1kΩ 加 100nF时间常数 100μs对温度这种慢变量来说响应足够快同时能滤掉 10kHz 以上的噪声。按键的 RC 取 10kΩ 上拉加 100nF时间常数 1ms配合软件 20ms 防抖手感干脆不黏滞。3.2 主控软件的骨架与关键逻辑硬件搭好了软件骨架怎么搭直接影响后期改需求的难易程度。我的习惯是用一个状态机把所有工作模式串起来主循环不写阻塞延时所有等待都用定时器计数实现。/* 茶吧机主控状态机骨架示意代码具体寄存器以外设手册为准 */ typedef enum { ST_IDLE 0, /* 待机 */ ST_FILL, /* 抽水 */ ST_HEAT, /* 加热 */ ST_KEEP_WARM, /* 保温 */ ST_COOL, /* 制冷 */ ST_FAULT /* 故障锁定 */ } sys_state_t; static sys_state_t g_state ST_IDLE; static uint16_t g_tick_1ms 0; /* 1ms 定时器中断系统心跳 */ void timer_isr(void) { g_tick_1ms; key_scan_1ms(); /* 按键扫描与防抖计数 */ display_scan_1ms(); /* 数码管动态扫描 */ } /* 读 NTC 温度返回摄氏度 × 10便于整数运算 */ int16_t read_temp_x10(void) { uint16_t adc adc_read_avg(NTC_CH, 8); /* 8 次平均抑制随机噪声 */ if (adc 20) return TEMP_ERR_OPEN; /* 断线或短路判定 */ if (adc 1000) return TEMP_ERR_SHORT; return ntc_lookup(adc); /* 查表 线性插值 */ } /* 主循环只做状态判断不做长延时 */ void main_loop(void) { int16_t temp read_temp_x10(); /* 安全优先任何状态下超温或水位异常都跳故障 */ if (temp TEMP_LIMIT_X10 || water_level_ok() 0) { g_state ST_FAULT; } switch (g_state) { case ST_IDLE: relay_all_off(); if (key_pressed(KEY_FILL)) g_state ST_FILL; if (key_pressed(KEY_HEAT)) g_state ST_HEAT; break; case ST_FILL: relay_pump_on(); if (water_level_ok()) { /* 水满 */ relay_pump_off(); g_state ST_IDLE; } if (timeout_check(FILL_TIMEOUT_MS)) { /* 超时保护 */ relay_pump_off(); g_state ST_FAULT; } break; case ST_HEAT: relay_heat_on(); if (temp target_temp_x10()) g_state ST_KEEP_WARM; if (timeout_check(HEAT_TIMEOUT_MS)) g_state ST_FAULT; break; case ST_KEEP_WARM: /* 回差控制防止继电器频繁吸合 */ if (temp target_temp_x10() - HYST_X10) relay_heat_on(); else relay_heat_off(); break; case ST_FAULT: relay_all_off(); buzzer_alarm(); /* 只有断电重启或长按取消才能退出 */ if (key_long_pressed(KEY_POWER, 3000)) g_state ST_IDLE; break; } }这段骨架里有几个设计决定值得说一下。为什么所有等待都用计数而不是延时。如果主循环里写delay_ms(3000)那么这三秒内按键没响应、显示不刷新、温度不采样用户会觉得机器卡死。用状态机加定时器计数主循环每 1ms 跑一圈所有任务并行推进响应永远是及时的。为什么加热要设回差。如果目标温度是 85℃到了 85℃ 就关降到 84.9℃ 就开继电器会以极高的频率来回吸合几天就报废。设一个 3℃ 到 5℃ 的回差比如 85℃ 关、80℃ 开继电器动作次数能降低两个数量级。为什么故障态要锁定。干烧或者超温一旦发生说明系统已经异常如果自动恢复可能陷入保护—恢复—再保护的循环用户在不知情的情况下反复加热风险很大。锁定后必须人工干预才能复位这是安全设计的基本原则。3.3 打板、焊接与老化测试的实操记录原理图转 PCB 之后有几个地方必须盯着。继电器的高低压隔离。继电器本体的引脚间距决定了强弱电的爬电距离选型时就要看清楚。PCB 上继电器触点侧的走线宽度至少 2mm和弱电侧的间距至少 3mm实在挤不下就在中间开一条 1mm 宽的槽。第一次打样的时候我没开槽间距勉强够 2.5mm结果在做浪涌测试时偶尔出现 MCU 复位后来改版加了槽就再没出现过。铺铜的取舍。功率地要铺铜因为要过大电流模拟地我一般只走线不铺铜或者铺了之后用单点连接到主地避免数字噪声通过铜皮耦合进 ADC。ULN2003 的 GND 脚周围要留足铜皮散热但不要和 MCU 的地直接连成一片。焊接顺序。手工样板阶段先焊矮的贴片器件再焊高的插件器件。ULN2003 是 SOIC-16引脚密集焊的时候先固定对角两个脚再逐边拖焊最后用吸锡带清理连锡。继电器和接线端子最后焊因为它们挡住其他器件的焊接空间。NTC 的引线要单独处理通常是一根两芯线焊在板子上焊点要打胶固定防止拉扯断裂。老化测试怎么做。样板出来后别急着装机器先单独给控制板通电做压力测试。我的做法是让机器连续做 50 个加热循环每个循环从常温加热到 95℃ 再自然冷却记录每次的温度曲线和继电器动作次数。这轮测试能暴露大部分热设计和软件逻辑的问题。第二轮是模拟异常拔掉 NTC 看是否报故障堵住出水口看是否超时保护把水箱抽干看是否干烧保护。这三项都过了才装整机做用户体验测试。4. 常见问题与排查技巧实录4.1 继电器不吸合或者频繁误动作这个问题我遇到过三种原因排查顺序建议从简单到复杂。第一种是驱动信号没到位。拿万用表量 MCU 输出脚按下出水键时电压是否从 0V 跳到 5V。如果没有跳变问题在软件或者 IO 配置比如误配成了模拟输入。如果有跳变但继电器不吸量 ULN2003 输入脚和输出脚输入脚应该有 5V输出脚应该从 12V 掉到接近 0V。输出脚没掉说明 ULN2003 坏了或者虚焊。第二种是继电器本体的问题。量线圈两端电压如果只有 5V 而继电器是 12V 的那肯定是 COM 脚接错了或者电源不够。如果线圈电压正常但继电器不吸可能是继电器本身损坏换一颗试试。第三种是干扰导致的误动作。表现为继电器在没有任何操作的情况下偶尔咔一下或者水泵启动的瞬间继电器跟着动。这种情况多半是 ULN2003 的输入线太长被耦合了干扰。解决方法是把输入线缩短、加 10kΩ 下拉电阻或者在软件里做连续两次采样确认。我遇到过最离谱的一次是 ULN2003 的 GND 走线太细回流不畅导致输出脚的参考电位漂移重新加粗地线就好了。注意调试继电器电路时如果负载侧接的是市电示波器和万用表的探头绝对不能直接碰触点侧只能用隔离的方式测量驱动侧。安全第一。4.2 温度读数跳变、按键漂移怎么查NTC 读数跳变先分清楚是采样噪声还是真干扰。把 NTC 从水里拿出来放在空气中读几十个值看波动范围如果波动在 ±0.5℃ 以内说明电路本身没问题跳变是使用环境造成的如果空气中就跳 ±5℃那是电路问题。电路问题的排查第一看 ADC 参考电压稳不稳如果 VDD 本身在抖比如继电器动作时掉压ADC 读数必然跟着抖。用示波器看 VDD如果发现继电器吸合瞬间有 0.5V 的跌落说明电源的储能电容不够加大到 220μF 试试。第二看 RC 滤波有没有装漏装或者参数不对都会让噪声直接进 ADC。第三看 NTC 的走线如果和继电器的驱动线并排走了一段那就是典型的耦合干扰必须分开走或者加屏蔽。按键漂移机械按键一般是接触不良换一颗就好触摸按键则复杂得多。触摸漂移的常见原因是基线没有自适应。手指长期不按环境温湿度变化会让触摸电容缓慢漂移如果基线固定不变最终会误触发。解决办法是让软件定期比如每 10 秒在无触摸时重新校准基线同时设置一个漂移上限单次校准不能超过这个上限防止真正的触摸被误当成漂移校准掉。4.3 复位、死机与整机电磁兼容MCU 无故复位是这类板子最头疼的问题。排查思路是先看电源再看复位脚最后看程序。电源方面看复位发生的时间点是否有规律。如果每次都是继电器吸合或者水泵启动的瞬间复位那基本可以确定是电源跌落或者尖峰耦合。用示波器抓 VDD 波形如果看到低于复位阈值的凹陷就要加大电源电容、缩短电源走线、在电源入口加 TVS 和磁珠。复位脚方面量复位脚的波形如果有毛刺说明是干扰耦合进来了加 100nF 电容到地必要时串 1kΩ 电阻。程序方面如果复位没有规律可能是看门狗误触发。检查喂狗周期是否足够短以及主循环里有没有耗时过长的函数比如一大段查表运算。还有一种可能是堆栈溢出这类 8 位 MCU 的 RAM 很小递归调用或者大数组局部变量很容易把堆栈冲掉。整机 EMC 的改善最有效的三招是继电器线圈两端并 RC 吸收比如 100Ω 串 0.1μF电源入口加共模电感以及强弱电之间加足够的隔离距离。这三招做完大部分辐射和传导问题都能压下去。4.4 故障排查速查表现象可能原因排查方法处理措施继电器不吸合IO 无输出 / ULN2003 损坏 / 线圈电压不足逐级量电压修软件、换芯片、检查 COM 接线继电器随机误动输入线耦合干扰 / 地线太细示波器看输入脚波形加下拉电阻、加粗地线、软件二次确认NTC 读数跳变电源不稳 / 缺 RC 滤波 / 走线耦合空气中对读数、看 VDD 波形加储能电容、补 RC、分开走线按键无响应电容失效 / 上拉电阻开路 / 触摸基线漂移量按键两端电压换电容、补焊、开启基线自适应MCU 频繁复位电源跌落 / 复位脚干扰 / 看门狗误触发抓 VDD 与复位脚波形加电容、加 TVS、调整喂狗周期水温显示偏高或偏低分压电阻误差 / NTC 一致性差 / 查表参数错用精密电阻模拟 NTC 阻值校准分压电阻、筛选 NTC、修正查表抽水不停水位检测失效 / 超时保护未生效短接探针看是否停修比较器电路、检查超时逻辑蜂鸣器声音小PWM 频率偏离共振点 / 驱动电流不足扫频试听调 PWM 频率到 2.7kHz 附近、确认驱动级5. 可扩展模块与后期演进思路5.1 想加精确计量和隔离采样怎么做如果客户要求显示实时功率或者做能耗统计最省事的方案是加一颗 INA226。它的工作方式是在电源回路上串一颗毫欧级的采样电阻INA226 通过差分输入测电阻两端的压降算出电流同时测总线电压内部直接算成功率通过 I2C 把三个值读给 MCU。整个方案只需要一颗芯片加一颗采样电阻比用运放加分立 ADC 搭电路简洁得多。选采样电阻的时候要在功耗和信噪比之间权衡。比如最大电流 10A采样电阻取 10mΩ满量程压降 100mV功耗 1W这个功耗偏大取 2mΩ压降 20mV功耗 0.2W但信号也更小对 INA226 的失调电压要求更高。一般取 5mΩ 左右比较平衡。如果需要对市电侧做完全隔离的采样那就要用线性光耦加运放搭隔离放大电路。HCNR201这类器件的原理是输入侧的光耦 LED 发出光被两个匹配的光电二极管接收一个用于反馈稳定 LED 的电流另一个输出信号从而实现高线性度的模拟隔离。这个电路调试起来比较讲究需要双电源运放、精密电阻成本也高一般在工业设备上才用小家电里很少见。至于ADS1292这类多通道高精度采集芯片虽然性能强但它是针对微弱生物电信号设计的用在茶吧机上属于严重过剩成本和开发复杂度都不划算。选芯片的原则永远是够用就好而不是性能越强越好。5.2 加上时钟和预约功能要动哪些地方茶吧机加上定时预约功能用户体验会明显提升。最简单的做法是主控内部用定时器做软件 RTC但 8 位 MCU 的内部 RC 振荡器精度有限一天累积误差可能到几分钟体验不好。比较稳妥的方案是外挂一颗BM8563这类 I2C 实时时钟芯片。它自带 32.768kHz 晶振和电池备份引脚主电源断开后靠纽扣电池继续走时精度可以做到月误差几秒。接口只用两根线SCL、SDA占两个 IO软件上读几个寄存器就能拿到年月日时分秒。加上 RTC 之后软件架构要做的改动是在主循环里增加一个预约判断分支每秒比较一次当前时间和设定的预约时间到点触发加热或者抽水。同时要处理预约状态和手动状态的优先级——如果用户正在手动操作预约触发应该延后或者取消避免两个动作打架。5.3 降本和替代方向的几点思考量产阶段成本永远是绕不开的话题。这套方案有几个可降本的点。主控的替代。XBL1509B 5.0 的封装和引脚定义如果和同系列的低配型号兼容可以在低端机型上换用 Flash 更小、IO 更少的版本直接改 BOM 不动 PCB。驱动级的替代。如果机器上只需要驱动两路负载用七路的 ULN2003 就是浪费。可以换成两路的达林顿阵列或者干脆用两颗 SOT-23 封装的数字三极管成本能省几分钱。但要注意分立方案的续流二极管要外接PCB 面积会增加。显示方案的取舍。LED 数码管的成本低但显示信息少段码 LCD 显示内容丰富但驱动复杂、需要专门的驱动芯片或者 MCU 内置 LCD 驱动。选哪种取决于产品定位。低端机型用两三位数码管显示温度就够了高端机型才值得上 LCD。电源方案的优化。如果整机功率不大可以把继电器线圈和水泵供电从 12V 降到 5V这样只需要一路 5V 电源省掉一级变换。但要注意5V 继电器在同样功率下电流更大ULN2003 的功耗会上升要重新核算。最后分享一个我在实际使用中发现的小细节ULN2003 的输出脚在不接负载时如果输入端悬空输出端会因为内部漏电流而浮在一个中间电位用万用表量会看到几伏的电压这是正常现象不是芯片坏了。真正判断芯片好坏的方法是给输入脚一个确定的高电平然后量输出脚是否拉低到接近地电位。这个习惯帮我省下过好几颗被误判为损坏的芯片。
返回列表