使用 STM32L4 ADC 优化功耗

Optimize power consumption with STM32L4 ADC

我正在 STM32L4 上进行固件开发。我需要以 200Hz 左右的频率对模拟信号进行采样。所以基本上每 5 毫秒进行一次模数转换。

到目前为止,我是在连续转换模式下启动 ADC,由定时器触发。然而,这可以防止在转换之间将 STM32 置于停止模式,这在功耗方面非常有效,因为 99% 以上的时间产品无事可做。

所以我的想法是使用单次转换模式:使用低功耗定时器每5ms将产品从停止模式唤醒,在LPTIM中断处理程序中启动单次转换(在轮询中等待ADC转换结束) ,然后返回停止模式。

您认为这样做有道理吗?或者您认为这样做有问题吗?我不确定在处理程序内轮询单个 ADC 转换,您怎么看?我认为一个通道上的单次转换应该非常快(我 运行 在 80MHz,数据表提到最大采样时间为 8us)

每次单次转换之间是否必须 disable/enable ADC(位 ADEN)?

此外,我必须知道一次转换持续多长时间才能评估解决方案是否有趣。我对采样时间(位 SMP)感到困惑。参考手册指出:"This sampling time must be enough for the input voltage source to charge the embedded capacitor to the input voltage level."找到正确 SMP 值的方法是什么?

大体思路没有问题,LPTIM1即使在Stop2模式下也可以通过EXTI控制器产生唤醒事件

I'm not sure about polling for a single ADC conversion inside a handler, what do you think ?

您可能希望在定时器中断中将 MCU 置于睡眠模式,并让 ADC 在转换完成时触发中断。所以在定时器中断中禁用SLEEPDEEP,在ADC中断中启用

What is the way to find the right SMP value ?

经验法:从最长的采样时间开始,逐渐减少。当转换结果发生显着变化时,向后退一两步。