使用 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 ?
经验法:从最长的采样时间开始,逐渐减少。当转换结果发生显着变化时,向后退一两步。
我正在 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 ?
经验法:从最长的采样时间开始,逐渐减少。当转换结果发生显着变化时,向后退一两步。