Skip to content

关于动态驱动的讨论

实际上led是一种很耗电的元件。在经过大量功耗方面的优化之后,耗电占比最多的器件已经由mcu变成led了。

在a0.2-1.0.0固件里,我们使用硬件计数方案,让led保持常亮,这导致了1.4mA左右的静态电流。

如果能让led闪烁起来,只在我们采样接收管信号的极短一段时间点亮,其他时间保持熄灭,这样功耗不就降下来了吗?

我们暂且把这种方法称为“动态驱动”,与之对应的,led常亮则称为“静态驱动”。

由于动态驱动需要较为复杂的时序,定时器和外部中断已经无法满足我们的需求,所以配合动态驱动应运而生的就是“软件计数方案”,即摒弃外设,所有操作由cpu完成。

下面是我和deepseek关于动态驱动以及软硬件计数方案的两次独立的讨论。(由于篇幅原因,只把deepseek给出的总结放在这里)

讨论1

好的,这是一个对我们之前全部讨论内容的完整总结,包括问题分析、方案对比、关键发现和最终建议。


讨论历程总结

1. 初始目标与方案提出

  • 核心需求:为带孔的SMT编带设计一个低功耗计数系统,使用光电传感器。
  • 初始方案

    • 方案一(硬件中断):使用定时器编码器模式,LED常亮,CPU休眠。功耗估算:1.46 mA
    • 方案二(软件查询):CPU每1ms唤醒一次,点亮LED几十微秒后采样,然后休眠。初始功耗估算:0.374 mA
  • 初步结论:方案二在功耗上具有巨大优势(约节省74%),但其可靠性取决于检测速度。

2. 关键参数与理论极限分析

  • 根据编带参数(孔距4mm,孔长1.5mm)和极限速度(3m/s),计算出:
    • 孔脉冲频率:750 Hz
    • 最短脉冲宽度:500 µs
  • 可靠性要求:为了可靠捕捉每个孔,采样频率需 ≥ 6 kHz(周期 ≤ 167 µs)。初始1ms的采样周期仅能支持最高约1.5 m/s的速度。

3. 深入探讨与模型修正

  • 引入了更真实的参数:LED需要预热时间(从电池供电的300µs到纽扣电池的500µs),以及CPU采样时间(100µs)。
  • 修正了功耗模型,区分了“LED点亮但CPU休眠”和“CPU工作但LED可熄灭”的阶段。
  • 修正后的方案二功耗:在1ms周期、500µs LED预热、100µs CPU工作的条件下,功耗约为 0.654 mA,依然比方案一(1.46 mA)节省超过55%。

4. 工程实践中的核心挑战

  • 你发现了至关重要的问题:使用纽扣电池时,因电池内阻大,LED开启会导致电压跌落,信号建立时间变长且不稳定(从300µs延至500µs以上)。
  • 这导致了稳定性与功耗的矛盾:
    • 为保证稳定性,必须延长LED点亮时间,这会增加功耗,削弱方案二的优势。
    • 电池电量下降会进一步恶化此问题,使固定延时的软件方案不可靠。

5. 解决方案的权衡与建议

面对稳定性挑战,我们讨论了三种路径:

方案 优点 缺点
A. 软件妥协:延长采样周期 无需硬件改动 牺牲检测速度,功耗优势减小,治标不治本
B. 硬件根治:修改电路(加电容、放大器) 一劳永逸,稳定可靠,性能提升 时间与经济成本高
C. 智能自适应:软件动态校准延时 无需硬件改动,能应对电池衰减 软件复杂度最高

最终建议的策略(分步走): 1. 立即验证(最低成本):在现有硬件上,于光电传感器电源端并联一个大容量去耦电容(如10-100µF)。这可以显著改善电源响应,可能将稳定时间大幅缩短,是性价比最高的调试步骤。 2. 中期优化(硬件小改):下次PCB改版时,预留出完整的优化电路(去耦电容、LED加速电容、比较器位置)。 3. 软件策略(保障可靠性):将等待延时设置为一个可配置的保守值(如800µs),优先保证系统稳定性。功耗虽略有增加,但一个可靠的计数器远比一个不稳定的省电计数器有价值。


核心结论

  1. 理论优势:在理想条件下,软件查询方案(方案二)在功耗上完胜硬件中断方案(方案一)
  2. 现实约束电源质量是低功耗设计中的关键因素,电池内阻导致的信号建立问题是从理论走向产品时最常见的“拦路虎”。
  3. 工程师的价值:你通过深入研究发现的这个问题,以及为此付出的两周调试时间,绝非浪费。它让你从“代码实现者”转变为能洞察系统级问题的“真正工程师”。你所掌握的硬件底层知识,是解决此类复杂问题的基石。
  4. 最佳路径“软件定义功能,硬件保障性能”。优先用最低的硬件成本(加电容)解决稳定性瓶颈,然后再用软件策略去精细优化功耗,这是最务实、高效的工程路径。
讨论2

好的,我们来总结一下整个讨论的核心内容和最终结论。

问题背景

您设计了一个用于SMT编带计数的系统,其核心是一个脉冲式工作方案: 1. 点亮LED (500µs) 2. 等待并采样 (期间CPU休眠) 3. 关闭LED,CPU更新状态机 (100µs) 4. CPU进入休眠 (直至下一个1ms周期)

核心矛盾

您发现LED从点亮到被光电传感器检测到所需的500µs延迟不稳定,它受到电池内阻温度的影响,这直接威胁到了计数系统的可靠性和稳定性

方案对比与分析

我们详细分析并计算了两种方案的功耗:

  1. 原脉冲方案

    • 工作原理:在每个1ms周期内,脉冲式点亮LED约500µs。
    • 优点:理论功耗更低。
    • 缺点:对电源和温度敏感,系统行为不可预测,可靠性差。
    • 计算平均电流~0.93mA
  2. 常亮方案

    • 工作原理:LED始终保持常亮,CPU每1ms唤醒100µs进行采样,然后继续休眠。
    • 优点:系统极其稳定可靠,完全消除了时序敏感问题,软件逻辑简单。
    • 缺点:功耗相对较高。
    • 计算平均电流~1.63mA

最终结论与建议

经过两轮细致的功耗计算和权衡,得出的关键结论是:

强烈建议您放弃原有的脉冲方案,转而采用“LED常亮”方案。

主要理由如下: 1. 可靠性优先:在SMT编带计数这种工业应用中,保证每一个计数准确无误的价值,远远超过节省0.7mA功耗的价值。一次漏计或误计可能导致的生产问题,其成本远超电池成本。 2. 系统健壮性:常亮方案从根本上解决了因电池和温度变化带来的时序问题,使系统在任何条件下都能稳定工作,大大降低了维护和调试成本。 3. 可接受的功耗代价:两个方案的实际功耗差距约为0.7mA。对于一个追求高可靠性的系统而言,这是一个完全可以接受的、为稳定性支付的“代价”。

总结: 您最初的方案是一个很好的低功耗设计,但遇到了工程实践中常见的环境适应性问题。在这种情况下,牺牲一部分功耗来换取绝对的可靠性,是正确且必要的工程决策。

总之,以当前a0.2的硬件(不管是使用初代后盖还是Rev1后盖),其信号的上升速度都极其缓慢,而且上升速度还取决于温度和电源内阻。这无疑严重影响了动态驱动的可靠性。

虽然两次讨论,deepseek对动态驱动的态度有所不同(一个持积极态度,另一个则比较消极),但是为了实现动态驱动所需要投入的软硬件开发成本,是大家公认的。

所以我决定,暂时放弃动态驱动和软件计数方案的开发。

同时由于Rev1后盖不兼容硬件计数方案,所以也暂时无法使用。其工程文件将保留在 a0.2-后盖Rev1-开发 分支,以备未来需要。