今天IoT物联网时代, 越来越多的设计被引入到, 使用电池能量的便携电子设备设计. 此时, 低功耗特性往往成为系统设计最重要的核心之一, 完成系统基础功能后, 几乎全部设计都将围绕低功耗的目的进行优化.
提前对系统的低功耗特性的架构做准备, 以便在项目实施中, 按照用户要求与系统设计之最初的计划实现, 就成为我们本文讨论的主要目标.
而系统的低功耗效果的实现, 往往是硬件+软件的共同作用与调整的结果, 我们在以下建议中, 并不对硬件修改或者软件优化, 或者两者之间合作式的共同调整作类型区分, 仅仅进行近似随手的方法枚举, 毕竟这是博文而不是论文.
<strong>1. 简化硬件接口电路</strong>
在市电设备或其他用电环境, 特别是车载设备的设计中, 由于工作环境的不同, 设备的电路模块与MCU之间, 往往具有简单到复杂的不同类型的接口电路. 有的可能仅仅使用三极管隔离, 有的设计则甚至会引入专用的隔离 module; 所隔离与保护的分立电路部分, 可以是易受干扰的模组, 也甚至可能是可装卸的外部有线外置传感模块.
而在电池能源供应的便携系统中, 小型化往往是设计的重要指标, PCB板走线的长度有限, 外部外置连接模块的线长有限. 这自然排除了外部电源波动(而且一般的电池往往表现为低内阻的特性), 以及外部电磁环境的爆发式剧烈冲击(举例: 某区域电网的突然停电与恢复来电时, 在大范围地理区域内对各型用电设备造成的强烈电磁干扰).
因此, 简化各类型的接口电路则可带来相应的功耗的减小(这并不意味着设计放弃所有的电路保护设计).
<strong>2. MCU工作在Sleep Mode</strong>
自从 2000 年代以来, 大量的专业的转型的中国大陆电子工程师, 迄今设计工作经验超过十载, 二十载者不在少数. 多数电子设备的设计, 已经开始从初学者形态, 向炉火纯青的设备设计构型进行演化. 由于工作经验与接触的项目增加, 即便对应较简单的电子电路设计, 有经验的工程师, 也往往会在设计中加入不止一颗 uController, 它们往往分担系统的主要功能, 附属功能, 接口功能, 监控功能等.
因此, 无论使用低阶的4bit MCU , 还是引入了 cortex A 系列的应用处理器, 系统设计均应使其在 system idle 状态下进入 Sleep Mode. 不能进入 Sleep Mode 的 MCU 几乎是不存在的.
即便是低位的 uController, 无法使用普通的 wake up mode, 也甚至可以通过简单的内置 watchdog 的 reset event, 重新 wakeup. 而这种状态下的 reset, 仍应视作 uController 从 Sleep Mode 下 wakeup, 而并非类似 system 的掉电复位(POR).
让我们仔细思考并预先猜测, 这将带来何等重要的系统功耗的降低. 即便是使用 4MHz system 振荡频率工作的低位MCU, 也许在 2.5V 的工作电压下, 都将消耗 250uA 左右的工作电流(数据均为举例). 而将其拉入 Sleep Mode(停振系统振荡, 仅保留 RTC 振荡或 watchdog 电路RC振荡) , 或者可将低位 uController 的工作电流从上述 250ua 降低至数个 ua 级别.
<strong>3. 尽量避免使用上拉下拉而直接驱动</strong>
保持接口通讯的高电平, 使用上拉电阻似乎是可靠稳定的设计方式. 但是在使用电池的设备中, 即使是 10k 电阻上拉到 3.3V, 也都意味着 0.3ma 的多余工作电流消耗. 而这对某些 idle 状态都需要保持上拉的信号channel 来说, 简直是糟透了.
使用 MCU 直接进行高电平上拉是一个代替的方法. 但某些电路模块或IC 的接口, 往往表现为开漏的特性, 典型接口方式推荐为外部上拉. 此时, MCU 应考虑尽量缩短通讯时刻的指令执行窗口, 在 idle 状态下将通讯channel 定义为 input status, 以最大限度节省通讯时带来的高功耗.
这种无需上拉的设计, 出于市电或其他外部电源供应下的习惯, 被随手定义的信号上拉电路, 看来不是在电池便携系统设计中的好习惯.
<strong>4. 来自保护器件ESD管的消耗</strong>
信号保护的ESD管, 以及电源保护Channel 上的 TVS 管, 往往在 datasheet 给出 1ua 甚至更多的 Ir 的数据. 因此, ESD, TVS管的选型, 都需要我们阅读 datasheet. 而那些粗率写就的 datasheet, 往往标注一个 max 的 ua 值, 这总能给低功耗系统设计工程师的内心, 带来天雷滚滚的感觉. 这也许就需要额外实践的应用与测试的结果.
<strong>5. 机械开关的锈蚀损耗</strong>
机械开关会锈, 它会锈. 真可惜, 原来金属会锈. 寻找防潮防锈的电子机械开关元器件是如此困难, 这给我们的提示是, 中国大陆的普通便携电子产品的设计与其应用环境很多都似是不讲究工作时限, 或厂家抱着数年或更短时间, 用户将淘汰更换他们手中的电子产品的心态考虑的.
一般来说, 普通的开关的金属部件上都应用镀银工艺, 我们似有必要向供应商提出该工艺与仓库成型产品后保存环境的质疑. 而对那些动辄去市场随意购买几分钱的开关的设计项目时, 我们是否考虑到简单的开关隐藏的市场工艺价格等共同作用的现实, 它可能使你拿到廉价但可能锈蚀的开关. 而开关中的码片构件是这样精细微小--也许带来再加工的工艺困难. 但在某些可靠性重要的应用中, 工程师仍然可以向可靠供应商要求其他连接部件镀以厚银的工艺. 如果这些你都做不到, 那么去沃尔玛购买 WD-40 进行出厂前保护, 并提示客户长期使用后的WD-40维护, 或许这应是作为工程师的责任.
<strong>6. uController 未使用的 PINs 定义为output 并输出高电平或低电平</strong>
有经验的工程师, 应该将该动作选择为 step0.
因为, 定义为 input (或者未做任何定义, mcu reset 将未使用的 pin 脚一般都定义为 input) 的 PIN 脚, 理论上等效一根天线 -- 它用来接收宇宙中的各种射线或的电磁场信号. --这根本不是开玩笑.
因为电子设备开机获得 ramdom 信号如此之难(而有的电子设计对随机数的要求是强制的, 比如必须要求开机获得某随机数以获得某种分布式系统中的避免冲突之应用). 获得 ramdom 数的手段有很多, 举个例子, 我们可以从 unused pin 中, 在 pcb 板上走出一根长走线, 它扮演天线的角色, 读取该引脚的 adc 电平数据, 拿到随机数就成为实现 ramdom 的现实手段之一.
而 uController 内部的 Pins 的 input 电路设计, 我们完全可以猜测这种随机的反转次数之多, 影响系统功耗范围之广泛. 因此, 简单的效果表现为, 浮空的 unused pins 将表现为不定的电流消耗. 而未使用且在PCB上进行走线的 unused pin, 尤其能表现这种无序的功耗损耗. 作为有经验的工程师, 在设计之初, 将该类 unused pins 定义为 output 并明确输出 高/低 电平, 将消除这类不定的电流消耗, 且让工程师在其后的功率优化调试中, 能够获得稳定的数据改变. 而不会今天与明天开机的电流消耗值表现为似乎天色般易变的不同.
视项目与实施的不同, 这种定义 unused pins 的步骤, 也许给我们带来 0.1~0.2ma 的改变, 也许在不同时间不定的易变值中, 带来更大的功耗节省, 并能使工程师消除系统的工作电流, 在不同时间段开机时发生无序变化的疑惑.
<strong>7. LDO 的选型</strong>
不同的厂家的datasheet的阅读, 会带来相当不同的体验. 特别是它们对各自的 Iq 的宣称与定义之时. 有的 LDO 厂商谨慎给出 Iq 数据但不作任何解释; 有的LDO 厂商管它明确的称呼"Low Power 消耗"; 有的LDO厂商称呼 Iground; 有的 LDO 厂商的 datasheet 甚至没有 Iq 参数, 仅仅列出在 without load 的情况下, Vin 与 Vout 存在一定差值的工作电流结果. 如果TI最有权威性的话, 那么 Iq 与 Iground with output 0mA 之间, 可以建立 "=" 关系.
姑且不考虑 Iq 的定义, 我们围绕这个数据的本身讨论, 它一般从 0.8ua ~ 数十ua. 因此, 选型正确的 LDO, 在低功耗设计中是件重要的事情.
<strong>8. 其他电子器件</strong>
并非仅仅 LDO, 当我们将目光投向系统中的全部应用 IC, 并一一检查其 datasheet. 有趣的数据还能得到很多, 一个简单的例子, 也许一颗电压监控IC, 实现低压阈值突变输出的, 不同的厂家能给出 35ua -> 150nA 的巨大改变. 这提示我们谨慎并且耐心检查 sytem 中每型器件的 datasheet.
以上就是设计电池能量供应的低功耗电子设计中, 我们想到的几个需要注意的事项. 希望工程师朋友们在设计伊始, 就能避免上述事项中提及的明显增加工作电流的误区.
来源:面包板博客——allen_zhan博主