1. 项目概述从2015到现在的BLE温度计迭代时间回到2015年当时我们团队捣鼓出了第一代基于蓝牙低功耗BLE技术的温度计配套的安卓和iOS应用也一并上线。那算是一个从零到一的验证证明了用BLE做小型、低功耗的传感设备是完全可行的。将近十年过去技术栈和元器件都发生了翻天覆地的变化当年觉得不错的方案现在看体积偏大、功耗还有优化空间、生产组装也略显繁琐。所以是时候启动一个新项目了打造一款全新的、更迷你的BLE温度计。这次的核心目标很明确——在保持甚至提升性能的前提下实现极致的微型化和超长的续航。我们计划采用赛普拉斯Cypress现属英飞凌的BLE芯片方案并使用最常见的CR2032纽扣电池供电。这不仅仅是一次简单的硬件更新更是对嵌入式产品设计、低功耗优化和用户体验的一次深入实践。这个新项目适合谁呢如果你是嵌入式开发工程师正在寻找一个完整的、贴近产品的BLE低功耗设计案例如果你是硬件爱好者想了解如何从零开始设计一款微型电子设备或者你是一名产品经理希望理解硬件迭代背后的技术驱动因素那么接下来的内容应该会对你有所启发。我会尽量拆解每个环节背后的“为什么”而不仅仅是罗列“怎么做”。2. 核心设计思路与方案选型2.1 为什么是“更小”与“CR2032”2015年的初代产品其设计思路更偏向于“功能实现”。主板尺寸较大使用了定制电池仓和AA或AAA电池。这么做的优点是开发简单、电量充足但缺点也很明显设备体积难以缩小外形设计受限用户更换电池也不算最方便。这次“更小”的目标直接决定了整个技术栈的选型。体积缩小意味着PCB面积必须压缩需要更高集成度的芯片和更紧凑的布局。功耗必须极致优化更小的体积通常意味着更小的电池容量如CR2032的典型容量在200mAh左右远低于AA电池因此对功耗的要求呈指数级上升。天线设计挑战增大在狭小空间内保证良好的射频性能需要更精心的设计和仿真。选择CR2032纽扣电池是一个战略性的决定。它是市面上最通用、最容易获取的纽扣电池没有之一。这极大地降低了用户的使用门槛和后续维护成本。但挑战在于它的容量有限且放电曲线相对平缓电压平台通常在3V左右随着放电会逐渐下降。这就要求我们的整个系统从主控芯片到传感器都必须能在宽电压范围例如2.0V至3.3V内稳定工作并且对功耗极其敏感。2.2 主控芯片为什么选择赛普拉斯CypressPSoC系列当年可选的BLE SoC片上系统远没有现在丰富。如今赛普拉斯现英飞凌的PSoC 4 BLE或PSoC 6 BLE系列进入了我们的视野。最终选择它是基于以下几个维度的综合考量高集成度与灵活性PSoC的核心特点是“可编程系统级芯片”。它除了包含ARM Cortex-M内核和BLE射频前端还集成了可编程的数字和模拟外设模块如Op-Amp, ADC, CapSense。对于温度计来说我们可以直接用芯片内部的运算放大器来调理温度传感器如热敏电阻的信号用高精度ADC进行采样无需额外复杂的模拟电路。这种“All-in-One”的特性对缩小PCB面积至关重要。无可匹敌的低功耗性能这是决胜的关键。以PSoC 6为例其专为物联网设计拥有超低功耗的协处理器和多种精心设计的功耗模式。在深度睡眠Deep Sleep模式下保持RAM数据不掉电同时实时时钟RTC运行电流消耗可以低至几个微安µA级别。这意味着在两次测温广播的间隙芯片几乎不耗电。强大的开发生态与工具ModusToolbox IDE提供了从硬件配置、代码编写、功耗分析到射频测试的一整套工具。其图形化的外设配置工具可以直观地配置GPIO、模拟前端、BLE协议栈参数大幅降低了开发门槛让我们能更专注于应用逻辑和功耗优化。稳定的射频性能与认证芯片的BLE射频部分已经通过了相关认证提供了经过优化的天线参考设计。这能帮助我们减少在射频匹配和调试上的时间加快产品上市速度。注意芯片选型时不能只看数据手册的“典型值”。一定要仔细研究在不同工作模式激活、睡眠、深度睡眠、不同电压如3.0V和2.2V下的电流消耗曲线。同时评估其内部LDO低压差线性稳压器的效率或者是否支持使用更高效的Buck降压电路这对电池续航有直接影响。2.3 传感器选型精度、功耗与接口的平衡温度传感器是设备的核心。常见的选择有数字式传感器如DS18B20, Si705x通过单总线或I2C接口输出数字温度值。优点是抗干扰能力强电路简单但通常功耗较高微安级甚至毫安级且需要额外的通信线路。模拟式传感器如NTC热敏电阻电阻值随温度变化。需要配合精密电阻和ADC进行测量。优点是成本极低在静态下几乎不耗电仅测量时由ADC消耗且PSoC内部模拟资源可以直接支持。缺点是需要校准精度受ADC和参考电压影响。为了极致功耗我们选择了高精度NTC热敏电阻方案。理由如下零静态功耗不测量时它就是一个无源元件不消耗任何电流。与PSoC完美契合利用PSoC内部的可编程模拟前端可以构建一个恒流源或分压电路来驱动热敏电阻并用内部高精度ADC如SAR ADC进行采样。所有的信号调理都在芯片内部完成外部电路只需要一颗热敏电阻和一颗精密参考电阻极其简洁。成本优势在达到同等精度如±0.1°C的前提下NTC方案的成本通常低于数字传感器。当然这带来了校准的复杂性。我们需要在固件中实现查表法或公式计算法如Steinhart-Hart方程将ADC读数转换为温度值。但这属于“一次开发终身受益”的投入并且PSoC强大的处理能力足以轻松应对这些运算。3. 硬件设计核心细节解析3.1 超紧凑PCB布局与天线设计PCB设计是微型化项目的灵魂。我们采用了两层板设计以控制成本但布局需要像设计四层板一样考究。堆叠规划核心原则是“功能分区”。将板子划分为几个区域RF射频区天线及匹配电路、数字电源区主控、晶振、模拟传感区热敏电阻、参考电阻、滤波电容和电池接口区。区域之间用地缝或磁珠进行隔离防止数字噪声干扰敏感的模拟和射频信号。电源树与去耦CR2032电池的输出端我们立即并联一个大的储能电容如10µF来应对瞬时电流需求。靠近PSoC芯片的每一个电源引脚VDDD, VDDA都必须放置一个100nF和一个1µF的陶瓷电容且布线要尽可能短而粗形成低阻抗的回路。这是系统稳定工作的基石。天线设计的挑战与妥协在极小的空间内集成天线是一大难点。我们选择了陶瓷天线Chip Antenna而非PCB走线天线。陶瓷天线尺寸小如2.4GHz的2016封装性能稳定但需要严格按照数据手册设计其接地净空区和匹配电路。我们使用网络分析仪对天线端的S11参数进行调试确保其在2.4GHz频段的回波损耗小于-10dB即VSWR2:1以保证足够的辐射效率。妥协在于陶瓷天线的带宽和效率通常略低于更长的PCB天线但对于传输距离要求不高10米内的温度计应用这完全可接受。3.2 低功耗电源电路设计如何从一颗电压逐渐下降的CR2032电池中榨取每一分电量是电源设计的核心。直接供电 vs. 稳压供电PSoC 6的工作电压范围很宽如1.71V至3.6V。理论上CR20322.0V-3.0V可以直接连接到芯片的VDD引脚。但为了确保射频性能和ADC参考电压的稳定性我们增加了一个超低静态电流的LDO如TI的TPS7A02静态电流仅25nA。它的作用不是降压而是在电池电压较高时如新电池3.2V将其稳定在2.5V在电池电压较低时如2.2V则进入低压差模式。这牺牲了一点效率但换来了整个系统特别是射频和ADC精度在全电池寿命内的稳定性。电源开关管理对于传感器电路如给热敏电阻供电的分压电路我们不希望它一直通电。我们使用PSoC的一个GPIO口控制一个PMOS管作为电源开关。仅在需要进行温度测量前的几毫秒才打开这个开关为传感器电路供电。测量结束后立即关闭杜绝任何微小的漏电流。电压监测利用PSoC内部集成的ADC定期测量电池电压。当电压低于2.1V可设定时在BLE广播数据包中加入“低电量”标志位提醒用户更换电池。这是提升用户体验的关键细节。4. 固件开发与低功耗策略实现4.1 系统状态机与功耗模式调度固件的核心是设计一个高效的状态机管理设备在不同功耗模式间的切换。我们的设备主要有以下几个状态深度睡眠Deep Sleep99%的时间设备处于此状态。CPU、大部分外设、高频时钟关闭仅RTC和少量唤醒逻辑运行电流2µA。RTC定时器是我们系统的“心脏起搏器”。测量状态Active-SensingRTC定时唤醒系统例如每10秒一次。CPU启动打开传感器电源配置ADC进行温度采样和计算。耗时约50ms电流约3mA。广播状态Active-Advertising测量完成后启动BLE射频将温度数据封装进广播包Advertisement Data中发送出去。BLE广播通常持续1-3个广播间隔约100ms峰值电流约6mA。连接状态Connected当手机App主动连接设备时进入此状态。可以进行参数配置如广播间隔、温度单位切换、固件升级OTA等。此时功耗较高应尽快完成操作并断开连接。关键策略在于尽可能缩短高功耗状态的持续时间并尽可能延长深度睡眠的时间。我们的时序设计如下[RTC唤醒] - [上电传感器(2ms)] - [ADC采样计算(20ms)] - [关闭传感器] - [启动BLE广播(100ms)] - [广播完成立即进入深度睡眠] - [睡眠10秒] - ...整个活动周期控制在130ms以内然后睡眠10秒。通过计算平均电流来评估续航I_avg (I_active * T_active I_sleep * T_sleep) / (T_active T_sleep)。代入估算值(5mA * 0.13s 2µA * 9.87s) / 10s ≈ 65µA。一颗220mAh的CR2032电池理论续航可达220mAh / 0.065mA ≈ 3384小时约141天。这已经达到了数月的级别。4.2 BLE广播数据格式设计为了最大化续航我们选择使用无连接的BLE广播方式上报数据而不是建立稳定的连接。手机App只需要扫描广播包即可读取温度。这省去了连接、配对、维持连接等复杂过程和功耗。我们精心设计广播包中的数据Advertising Data。按照BLE规范我们将温度数据放在厂商自定义数据Manufacturer Specific Data字段中。 广播包结构示例Flags (0x02, 0x01, 0x06) // 表示通用可发现、不支持经典蓝牙 Complete Local Name (0x0D, “MyTherm-ABCD”) // 设备名称可包含唯一ID Manufacturer Specific Data: - Company Identifier (0x02, 0x6B, 0x02) // 假设我们的公司ID是0x026B - Temperature Data (2 bytes): 例如 0x0B, 0xB8 表示 温度 0x0BB8 / 100 30.00°C - Battery Level (1 byte): 例如 0x40 表示 64% - Flags (1 byte): 比特位表示低电量、是否需要校准等状态这样一个广播包就包含了温度、电量、状态等所有关键信息App解析起来非常高效。4.3 温度测量与软件校准使用NTC热敏电阻固件中的温度计算流程如下ADC采样配置PSoC内部的SAR ADC以差分或单端模式测量热敏电阻与参考电阻分压点的电压。计算电阻值根据分压公式R_ntc R_ref * (ADC_Code / (2^n - ADC_Code))计算出当前热敏电阻的阻值。其中n是ADC的位数如12位。电阻转温度这是精度关键。我们采用查表法。在工厂生产时会在高精度恒温槽中对一批设备进行多点校准例如0°C, 25°C, 50°C生成每个设备独有的“电阻-温度”对应表烧录到芯片的Flash中。运行时通过查表和线性插值获得温度值。这种方法比实时计算Steinhart-Hart方程更快、更省电。滤波处理为了读数稳定通常会加入简单的软件滤波比如一阶滞后滤波T_new α * T_sample (1-α) * T_oldα取一个较小的值如0.2以平滑偶然的波动。5. 开发、测试与量产考量5.1 开发调试技巧在如此低功耗的设备上调试传统的大电流调试器JTAG/SWD可能会干扰功耗测量。我们采用以下方法分离调试电源使用调试器单独给MCU的调试接口供电而设备主板仍由电池供电。这样可以准确测量设备运行时的真实电流。利用PSoC的电流测量工具ModusToolbox中的功耗分析器Power Analyzer可以配合特殊硬件探头图形化地展示设备在不同状态下的电流波形直观地发现异常的电流毛刺。GPIO状态指示在关键的代码段如进入睡眠、唤醒、广播开始/结束用GPIO口输出高低电平然后用逻辑分析仪抓取可以清晰地看到状态机的时间线确保时序符合设计。5.2 射频认证与预合规测试在产品量产前必须通过无线电型号核准如中国的SRRC美国的FCC欧洲的CE-RED。为了节省成本和避免失败我们在设计阶段就进行了“预合规”测试使用近场探头在暗室或相对安静的环境下用近场探头扫描PCB定位可能产生谐波或杂散辐射的源头如时钟线、开关电源回路并在设计上优化加屏蔽、调整走线、增加滤波。传导发射测试通过测试夹具直接测量天线端口的输出功率和频谱模板确保其符合BLE规范。使用预认证模块我们选择的陶瓷天线本身是经过认证的这大大降低了整体射频认证的风险和复杂度。5.3 量产时的注意事项从工程样机到成千上万的量产有几个坑必须提前避开元器件供应链确保核心芯片PSoC、传感器NTC有至少两个可替代的供应商或型号以防缺货。CR2032电池座要选择接触可靠、寿命长的型号。PCB可制造性设计与PCB工厂充分沟通确保最小的线宽/线距、过孔尺寸符合他们的工艺能力。对于0402甚至0201封装的元件钢网开孔和回流焊曲线需要仔细设计。校准流程自动化生产线上必须有一套自动化的校准系统。设备上电后自动进入校准模式依次置于几个已知温度点系统自动读取ADC值并计算校准参数写入Flash。这个过程需要在几秒内完成以保证生产效率。功耗一致性测试在生产线末端增加一个简单的功耗测试工位。通过测试夹具给设备供电并测量其在特定工作周期内的平均电流剔除那些因焊接问题或元器件不良导致功耗超标的设备。6. 常见问题与故障排查实录在实际开发和测试中我们遇到了不少典型问题这里记录下排查思路6.1 问题设备续航远低于理论计算值排查步骤静态电流测量在设备确认进入深度睡眠后用高精度万用表µA档串联测量电池端电流。如果远大于2µA例如10µA说明有漏电。“割线”大法如果电流过大可以尝试用手术刀依次断开可能耗电的支路如传感器供电、外部指示灯、未使用的IO口上拉电阻观察电流变化定位漏电路径。检查软件配置确认所有未使用的外设模块ADC, Op-Amp, UART等在初始化后被正确禁用或置于最低功耗状态。检查所有GPIO口的配置设置为输出低或输入带上拉/下拉避免浮空。检查硬件检查PCB是否有焊接短路、电容漏电。特别是LDO和电源开关电路。我们的教训曾发现一个用于调试的LED其限流电阻直接接到了VDD即使IO口输出高LED不亮但VDD到IO口之间仍有微小压差和漏电流。后来改为用IO口直接驱动LED阴极阳极接VDD并在睡眠时将IO口设置为高阻态问题解决。6.2 问题BLE广播距离短或不稳定排查步骤天线匹配网络调试这是最常见的原因。使用网络分析仪测量天线端口的S11参数。调整匹配电路通常是π型网络中的电感和电容值使谐振点落在2.44GHz附近且S11最小值尽可能低如-15dB。检查PCB布局确保天线区域下方所有层都是净空无铜箔。检查天线附近是否有金属物体如电池、螺丝或高速信号线它们会干扰辐射场型。测量输出功率使用频谱分析仪或功率计测量天线端口的实际输出功率。对比芯片数据手册看是否正常。如果偏低检查芯片的射频输出配置和供电是否稳定。软件配置检查确认BLE协议栈中设置的发射功率TX Power是合适的值如0dBm或4dBm而不是被意外设为最低。我们的教训最初为了美观将陶瓷天线放在了PCB边缘但靠近电池的位置。实测发现信号有方向性且电池对天线性能有衰减。后来调整了布局将天线放在PCB顶角并远离电池同时下方所有层净空性能得到显著改善。6.3 问题温度读数跳动大或存在偏差排查步骤区分是噪声还是偏差如果读数在小范围内快速跳动如±0.2°C可能是噪声如果读数稳定但整体偏离真实值如恒定偏高1°C则是偏差。噪声排查检查ADC的参考电压是否稳定测量VDDA引脚纹波。在传感器电源和分压点增加滤波电容如100nF。在软件中增加滤波算法。确保测量时数字电路特别是射频部分处于静止状态。偏差排查进行系统校准。用高精度温度计作为参考在多个温度点对比读数。如果偏差是线性的可能是参考电阻精度不够或ADC增益误差可以在软件中做线性补偿。如果偏差非线性则需要检查NTC热敏电阻的B值是否准确或采用更多点的查表校准。自发热影响设备本身工作特别是射频发射会产生热量。确保温度测量在射频活动之前完成并留出足够的时间让传感器恢复至环境温度。我们的策略是先测量再广播。我们的心得给ADC参考电压VDDA单独增加一颗高质量的LDO如TLV703并与数字电源VDDD隔离对提升测量稳定性有奇效。虽然增加了一点成本和功耗但换来了更高的精度和一致性。从2015年的初代产品到这个全新的迷你版本整个过程是一次对“极致”的追求。技术选型上的每一个决定PCB布局上的每一毫米斟酌固件代码里的每一个功耗状态切换最终都汇聚成了用户手中那个小巧、耐用、可靠的工具。做硬件产品尤其是消费电子就是在性能、成本、功耗、体积和开发周期之间走钢丝。这个新BLE温度计项目让我们对这根“钢丝”的平衡有了更深的体会。它现在可能只是一个温度计但这套以PSoC为核心、以CR2032为能源、以超低功耗为目标的开发框架完全可以复用到其他各类传感器节点上这才是项目带来的最大价值。