Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用STM32L4 ADC优化功耗_Stm32_Firmware_Adc - Fatal编程技术网

使用STM32L4 ADC优化功耗

使用STM32L4 ADC优化功耗,stm32,firmware,adc,Stm32,Firmware,Adc,我正在STM32L4上进行固件开发。我需要在200Hz左右采样一个模拟信号。基本上每5ms进行一次模数转换 到目前为止,我是在一个定时器触发的连续转换模式下启动ADC的。然而,这防止了在转换之间将STM32置于停止模式,这将在功耗方面非常有效,因为99%以上的时间产品无事可做 因此,我的想法是使用单转换模式:使用低功耗计时器每5毫秒从停止模式唤醒产品,在LPTIM中断处理程序中启动单转换(等待轮询中ADC转换结束),然后返回停止模式 你认为这样做有意义吗?或者你认为这样下去会有问题吗?我不确定是

我正在STM32L4上进行固件开发。我需要在200Hz左右采样一个模拟信号。基本上每5ms进行一次模数转换

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

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

你认为这样做有意义吗?或者你认为这样下去会有问题吗?我不确定是否在处理程序中轮询单个ADC转换,您认为如何?我认为一个通道上的单次转换应该非常快(我在80MHz下运行,数据表中提到最大采样时间为8us)

是否必须在每次转换之间禁用/启用ADC(位ADEN)


此外,我必须知道一次转换持续多长时间,以评估解决方案是否有趣。我对采样时间(位SMP)感到困惑。参考手册指出:“此采样时间必须足以使输入电压源将嵌入式电容器充电至输入电压水平。”找到正确SMP值的方法是什么?

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

我不确定是否在处理程序中轮询单个ADC转换,您认为如何

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

找到正确SMP值的方法是什么


经验方法:从最长的采样时间开始,然后开始减少它。当转换结果发生显著变化时,请后退一两步。

使用LPTIM唤醒应该完全正常。如果在µC上运行许多其他任务,则操作系统应该有助于找到停止模式的插槽。关于第一个问题,我的意思是:在计时器处理程序中启动转换,并在轮询模式下等待转换结束。如果转换时间足够快,不会在处理器模式下阻塞MCU太长时间,则应该可以。