ARTICLE DETAIL

资讯详情

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

智能变色眼镜电控逻辑:电荷控制、恒流闭环与手势状态机

智能变色眼镜电控逻辑:电荷控制、恒流闭环与手势状态机 简介面向智能变色眼镜研发工程师与硬件开发者的电控逻辑与触控设计方案文档聚焦设备的电控策略与人机交互流程为产品预研到打样阶段提供可落地的参考依据。内容围绕四种透过率切换场景展开由某透过率Ta调至Tb时的滑动触控调节、从任意透过率直接复位到最透明状态并输出-1.8V、以及Tc与Tb之间升档和降档切换逐条说明对应的维持电压映射与触摸板操作方式并针对低透过率下切换响应偏慢的问题给出短时回零再施加目标电压的折中思路。文中还整理了选型线索正压LDO评估RT5733带触控MCU可考虑SEMTECH SX920X负压DC/DC或LDO尚未评估同时涉及电池选型、PCB宽度控制在8mm以内以及FPC触控贴合壳体的结构约束。资源包含1个docx文档压缩包约139KB已有76人学习适合用于器件选型、功耗与时延权衡及方案复盘的快速查阅。1. 智能变色眼镜电控逻辑到底难在哪从一片变色镜片说起很多人以为智能变色眼镜就是把一片电致变色镜片接上电源给个开关就算完事。真正上手才会发现镜片本质上是个「电荷积分器」着色深度由注入的电荷量决定电压只影响速度多给 100mV 就可能让氧化钨膜层产生不可逆损伤。而镜腿最窄处只有 8~11mm要在里面塞进电池、触摸电极、H 桥驱动和一颗低功耗 MCU还得保证戴着手套或出汗时单手盲操能一次命中。这篇文章按实际做产品的顺序把变色镜片的电控逻辑、触控电极与手势状态机、恒流闭环代码以及四档透过率标定和故障定位的可复现做法讲清楚适合做可穿戴配件、户外光学和 AR 眼镜的硬件与固件工程师参考。2. 电致变色镜片的电控逻辑与驱动拓扑选型电控逻辑的第一性问题不是「用几伏点亮」而是「注进去多少电荷」。把这个问题解决掉后面的 H 桥拓扑、恒流闭环、低功耗时序才有落脚点。2.1 电致变色镜片为什么必须按电荷控制而不是按电压控制常见的互补型电致变色器件由氧化钨WO₃和氧化镍NiO两层活性膜夹着电解质构成。加正电压时锂离子嵌入 WO₃ 晶格生成钨青铜结构材料在近红外和可见光波段的吸收增强镜片变暗反向加电压时锂离子脱出镜片变亮。关键在于透过率与注入电荷量近似单调对应而与电压没有稳定映射关系。镜片等效电路是电容并联扩散阻抗实部和虚部都随温度、循环次数和使用时长漂移。同一片镜片用 1.5V 恒压驱动25℃ 下可能注入 20mC0℃ 下只有 8mC透过率几乎没变45℃ 下却冲到 30mC过冲锂离子滞留膜层出现不可逆的灰色残影。我一般把镜片的电气参数按下面这张表先测一遍再决定驱动策略参数典型值说明着色电压1.3~1.8V超过 2.0V 易触发副反应析氢起泡褪色电压-1.0~-1.5V反向驱动绝对值不宜大于着色电压峰值电流20~60mA与镜片面积成正比单腿 30×40mm 约 40mA单次满着色电荷8~25mC必须实测标定不能抄 datasheet 典型值透过率范围12%~85%上下限由膜层工艺决定着色/褪色时间3~8s恒流下与电流成反比过快的离子迁移会伤膜提示先用恒压源串一个 100Ω 电阻手动点一片镜片用示波器看电流衰减曲线能最快判断这片镜片该用多大恒流。2.2 分立 H 桥加恒流源还是直接选集成电致变色驱动 IC镜片电压低1.5V 量级单节锂电 3.7V 母线完全够用不需要升压只需要一个能双向限流的 H 桥把电压降下来。剩下的选择就是分立还是集成方案优点代价适合场景集成 EC 驱动 IC内置恒流 DAC、电荷积分、反向脉冲时序BOM 少电流档位固定单价高供货集中标准化量产机型分立 H 桥 采样电阻 ADC 闭环电流任意可编程可做自定义波形成本低要自己写闭环和过流保护占 20~30mm² 板面中小批量、多档位定制H 桥 恒流二极管电路最简恒流值不可调压差大时发热明显只有一档固定深度的极简款做四档以上透过率的产品我倾向分立的方案一颗双 NP 的 H 桥串联 0.1Ω 采样电阻用 MCU 的 ADC 在 PWM 周期中点采样1ms 一次闭环。这样每一档对应一个电流值加一个电荷阈值档位和温度补偿都能在固件里改不用换料。2.3 用一次着色算清电荷、电流和时间三者关系在写驱动代码之前先把「目标透过率 → 需要多少电荷 → 恒流多久」这条链路用脚本算一遍比在板子上反复试快得多# 电致变色镜片着色电荷估算由目标透过率反推注入电荷与驱动时间 T_MIN, T_MAX 0.12, 0.85 # 镜片标定出的最低/最高透过率按实测填 Q_FULL 22e-3 # 从 T_MAX 调到 T_MIN 所需总电荷(C)需实测标定 def charge_for(target_T: float) - float: 按线性近似反推目标透过率对应的注入电荷 target_T min(max(target_T, T_MIN), T_MAX) # 先钳位防止越界驱动 ratio (T_MAX - target_T) / (T_MAX - T_MIN) # 归一化着色程度 0~1 return ratio * Q_FULL def drive_time(q: float, i_const: float) - float: 恒流驱动所需时间i_const 单位 A return q / i_const q charge_for(0.35) # 目标 35% 透过率 print(f需要电荷 {q * 1000:.2f} mC f40mA 恒流下耗时 {drive_time(q, 0.040):.2f} s) # 需要电荷 15.05 mC40mA 恒流下耗时 0.38 s这段脚本有两个用途。一是提前判断恒流值是否合理如果算出来要 5s 以上说明电流偏小在低温下会慢到用户能感知如果算出来只有 0.1s说明电流过大离子迁移过快会导致着色不均匀边缘先暗中间后暗。二是给固件里的电荷阈值一个初始值Q_FULL 先用 22mC 起步再用分光光度计标定后回填。2.4 反向脉冲与镜片寿命的取舍长期单向驱动会让锂离子在 WO₃ 膜内滞留肉眼能看到镜片褪不干净、留一层浅灰底。常见做法是每次着色动作结束后补一段 0.2~0.5s 的反向脉冲电流取正向的 30%~50%把界面处积压的离子推回去。不过反向脉冲不是越多越好每多一次反向就多一次膜层应力循环。我的做法是单次操作结束时给 0.3s、40% 电流的反向脉冲同时统计累计循环次数每 500 次触发一次完整褪色到 T_MAX 并静置 30s。这两个数字都不该写死在代码里做成 flash 里的可调参数首批 50 台跑一个月的实测数据再定。3. 触控设计镜腿电极布局与手势状态机镜腿空间决定了触控只能走电容方案而电容方案在金属框架、汗液和低温干燥皮肤之间最难保持稳定。3.1 镜腿这么窄触摸电极该怎么布镜腿宽 8~11mm可用感应区长度 25~40mm。自电容方案是在柔性 PCB 上做 2~4 个矩形焊盘贴在镜腿外侧用 MCU 内置的电容触摸外设扫描互电容方案是把驱动电极放在内侧、接收电极放在外侧交叉形成感应节点。自电容走线少灵敏度高两焊盘就能做单击和长按缺点是水滴落在镜腿上会被当成触摸。互电容抗水明显更好能做滑动定位缺点是柔性板至少四层装配公差要求也高。金属镜腿复用把整条金属腿当电极结构最省空间但人体和镜腿之间的耦合不稳定冬天干燥时阈值飘得厉害。我一般先用两焊盘自电容做原型验证手势逻辑如果目标市场是户外运动场景再换成互电容布局。手势数量超过三个单击切档、双击最强档、长按无级调光、双指同时按住进入配对时两焊盘只能靠时长区分误判率会上升这时候至少需要四个焊盘按位置区分。3.2 基线跟踪、去抖与防水参数怎么设触摸调不通九成问题出在基线更新策略而不是阈值本身。下面这组参数在镜腿场景下比较稳可以直接作为起点参数待机态唤醒态说明扫描周期60ms10ms待机拉长间隔是省电的主要手段触发阈值基线 10%基线 8%相对值避免不同批次电极差异抬起阈值基线 6%基线 5%与触发阈值留迟滞防抖动去抖帧数3 帧2 帧对应 180ms / 20ms基线更新仅未触摸时1 LSB/帧同左触摸期间必须冻结基线湿手判定全部通道同时超阈值 1s同左触发强制重校准并屏蔽 500ms注意基线更新速率设得太快手指慢慢接近的过程中基线会跟着漂最终永远触发不了设得太慢温度变化引起的漂移要几分钟才能收敛。3.3 单击、双击、长按的手势判定代码下面是跑在 10ms 周期任务里的手势判定四个手势共用一套计时器避免为每个手势单独维护状态/* 镜腿触摸手势判定单击切档、双击最强/最亮档、长按无级调光 */ #include stdbool.h #include stdint.h #define TAP_MAX_MS 350 /* 超过此值判为长按 */ #define DOUBLE_GAP_MS 300 /* 两次单击的最大间隔 */ #define DEBOUNCE_MS 40 /* 小于此值视为毛刺丢弃 */ #define LONG_TICK_MS 150 /* 长按期间每 150ms 上报一次调光步进 */ typedef enum { G_NONE, G_TAP, G_DOUBLE, G_LONG, G_LONG_END } gesture_t; static uint16_t press_ms, gap_ms; static uint8_t long_fired; static gesture_t pending; gesture_t touch_poll(bool touched) { const uint16_t tick 10; if (touched) { press_ms tick; gap_ms 0; /* 一旦按下双击窗口立刻清零 */ if (press_ms TAP_MAX_MS) { if (!long_fired) { /* 长按首次触发 */ long_fired 1; pending G_LONG; } else if (press_ms % LONG_TICK_MS tick) { pending G_LONG; /* 长按持续上报用于无级调光 */ } } } else { if (press_ms) { /* 刚抬起 */ if (press_ms TAP_MAX_MS) { pending G_LONG_END; /* 结束调光 */ } else if (press_ms DEBOUNCE_MS) { if (pending G_TAP) { /* 第二次单击 */ pending G_NONE; press_ms 0; return G_DOUBLE; } pending G_TAP; } press_ms 0; long_fired 0; } else if (pending G_TAP) { /* 等待双击窗口过期 */ gap_ms tick; if (gap_ms DOUBLE_GAP_MS) { pending G_NONE; return G_TAP; } } } return G_NONE; /* 上层只处理非 G_NONE 的返回值 */ }逻辑上有三处值得说明。gap_ms只在手指离开且没有未决单击时才累加按下瞬间清零这样双击判定不会被长按或滑动干扰。单击不能在抬手瞬间上报必须等 300ms 双击窗口过期否则单击会被误判成双击的前半段用户会觉得操作延迟。长按用press_ms % LONG_TICK_MS tick每 150ms 上报一次调光步进数实际上由上层决定固件只负责给节拍这样换调光曲线不用动触摸代码。4. 固件实现状态机、恒流闭环与低功耗联动触摸识别出来只是输入真正的电控逻辑是「手势 → 目标档位 → 电流与电荷 → 硬件动作 → 回到保持态」这条链。4.1 主状态机怎么划分、迁移条件是什么状态机不要按硬件模块划分触摸、驱动、电源各一个而要按用户可见的行为划分这样任何一个异常都能被归属到明确的状态状态进入条件主要动作退出条件S_SLEEP无操作 30sMCU 深睡触摸控制器 60ms 扫描触摸唤醒或定时器到期S_TOUCH_SCAN唤醒后10ms 扫描运行手势判定收到手势或超时返回 S_SLEEPS_EC_DRIVE手势产生新的目标档位打开 H 桥恒流闭环累计电荷电荷达标或超时 12sS_EC_HOLD驱动完成关闭 H 桥镜片双稳态保持保存档位新手势或进入 S_SLEEPS_FAULT过流、过温、电荷超限立即断驱动闪灯提示锁定 5s故障标志清除S_EC_HOLD 是这套逻辑里最省钱的一环电致变色镜片是双稳态器件断电后透过率能保持几小时到几十小时基本不变所以驱动完成后 H 桥可以完全关断不需要维持电压。4.2 恒流闭环的 PWM 与电荷累计代码下面是 1ms 定时中断里的驱动闭环采样电阻 0.1Ω用最简的比例调节就能把电流稳在 ±5% 以内/* 电致变色恒流闭环1ms 周期执行目标电流由状态机下发带符号表示极性 */ #define RSENSE 0.1f /* 采样电阻单位 Ω */ #define I_TARGET_MAX 0.060f /* 最大允许电流 60mA硬上限 */ #define KP 0.35f /* 比例系数过大在低占空比时振荡 */ static float i_target; /* 状态机下发的目标电流正为着色负为褪色 */ static float duty; static float charge_mc; /* 累计电荷单位 mC */ void ec_drive_isr(void) { float v_sense adc_read_mv(ADC_CH_SENSE) / 1000.0f; float i_now v_sense / RSENSE; float err i_target - i_now; if (i_target I_TARGET_MAX) i_target I_TARGET_MAX; /* 越界钳位保护镜片 */ if (i_target -I_TARGET_MAX) i_target -I_TARGET_MAX; duty KP * err; if (duty 0.95f) duty 0.95f; /* 留死区避免自举电容充不上电 */ if (duty 0.00f) duty 0.00f; hbridge_set_polarity(i_target 0); pwm_set_duty(duty); charge_mc i_now * 1000.0f * 0.001f; /* i(A) × 1ms → mC */ if (charge_mc charge_limit) { /* 电荷达标立即停驱动 */ pwm_set_duty(0.0f); hbridge_disable(); state_request(S_EC_HOLD); } }三个参数直接决定成败。RSENSE取 0.1Ω 而不是 1Ω是因为 40mA 下压降只有 4mV用 MCU 的 12 位 ADC 配合内部 1.2V 基准刚好能分辨同时功耗损失只有 0.16mW。KP从 0.35 起调如果观察到电流在 30mA 附近以 10ms 周期来回摆说明 KP 偏大减到 0.2。charge_limit是唯一需要标定的量它和 2.3 节算出来的电荷值对应但要留 5% 余量——离子嵌入有滞后卡得太死会导致档位偏亮。注意过流保护必须做在硬件上不能只靠软件钳位。H 桥的低边串一颗 100mA 自恢复保险丝成本几分钱能救回一片几十块的镜片。4.3 低功耗时序与触摸唤醒怎么配合待机电流的目标是整机 15µA 以内预算大致是 MCU 深睡 1.5µA、触摸控制器 60ms 间隔扫描 3µA、LDO 静态 2µA、电池保护板漏电 1µA其余留给余量。真正省电的不是把 MCU 睡下去而是把触摸扫描间隔拉长。可行的做法是分三级无操作 3s 内扫描周期 10ms响应跟手3~30s 拉到 20ms超过 30s 进入 60ms 并关闭手势判定中的长按计时只保留单击唤醒。因为人从口袋掏出眼镜到戴上需要 2~3s60ms 的唤醒延迟完全感知不到而平均电流能从 90µA 降到 6µA 左右。另一个容易忽略的点是驱动期间禁止进入睡眠。H 桥开关噪声会耦合到触摸通道如果在 S_EC_DRIVE 里允许触摸中断唤醒会出现「正在着色时误触切断驱动」的怪现象。常见做法是在驱动期间屏蔽触摸中断驱动结束后统一处理缓存的触摸事件缓存深度只需 2 个事件。5. 四档透过率标定与故障排查的实操技巧5.1 分档标定从透过率反查电荷的表格法四档透过率不要按电荷等分要按标定表填。具体做法是恒温 25℃把镜片装在积分球或照度计前用固定电流逐次注入电荷每 1mC 记录一次透过率画出曲线后取 15%、35%、55%、85% 四个点对应的电荷值写进 flash。曲线前段斜率大、后段平坦等分电荷会让第二档和第三档看起来几乎一样深。温度补偿用两个系数就够了0℃ 时把目标电荷乘以 1.2545℃ 时乘以 0.9中间线性插值。这两个数来自实测不要凭想象写。5.2 常见故障对照与定位顺序现象最可能原因先做什么镜片褪色留灰底锂离子滞留缺反向脉冲加 0.3s 反向脉冲跑 50 次循环观察着色到一半停住电荷阈值偏小或采样电阻虚焊示波器看采样电阻波形核对 charge_limit触摸偶尔失灵基线在触摸时被更新冻结触摸期间基线去抖提到 3 帧出汗时自动切档水膜耦合到感应电极抬高阈值至 15%加湿手强制重校准待机一天掉电 20%触摸扫描周期没降级抓 S_SLEEP 下的平均电流确认 60ms 扫描定位顺序建议固定为「先看电流波形再看电荷累计最后查触摸」。因为电控逻辑里 80% 的异常表现为「档位不对」而档位不对的第一嫌疑永远是驱动电流没稳不是触摸算错了。示波器夹在采样电阻两端一边触发驱动一边看波形能在两分钟内把问题范围缩一半。本文还有配套的精品资源点击获取
返回列表