【问题标题】:STM32 ADC Averaging ValuesSTM32 ADC 平均值
【发布时间】:2021-11-20 13:05:51
【问题描述】:

我想从 STM32 adc 样本中获取峰值。我已经编写了下面的代码,并且我设法获得了峰值,但是大多数时候这个值包括最大的噪音。为了消除噪音影响,我决定应用平均法。我想获得 5 次测量的平均值。然后我想比较这些平均值并使用最大的(最大的平均值)。谁能推荐一个代码?

问候,

乌姆特

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
    {
    ADC_raw = HAL_ADC_GetValue(hadc);
    Vdd = 3.3 * (ADC_raw)/4095;
    if (Vdd > Vmax)
      {
        Vmax = Vdd;
        }

【问题讨论】:

    标签: stm32 noise adc stm32cubeide


    【解决方案1】:

    首先,我会从回调函数中删除尽可能多的代码,因为它仍在中断上下文中,应该尽可能短。这在此处的很多回答中都提到了,因此我不会详细说明如何处理。

    要平均测量值,您可以采用多种方法。

    自动平均

    使用 ADC 过采样功能。控制器会多次采样信号(使用OVFS寄存器配置)并在触发中断前计算平均值。

    手动平均

    使用HAL_ADC_ConvCpltCallback 函数将所需值的数量存储到一个数组中,然后在主循环中计算平均值。

    使用 DMA 手动平均

    使用函数HAL_ADC_Start_DMA 让 DMA 将您要使用的样本数存储在一个数组中。收集完所有样本后,您将收到通知。这将减少处理器负载,因为您不必自己将数据转移到数组中。


    您还可以结合使用过采样(大多数情况下是个好主意)和其他方法之一,具体取决于您的用例。

    【讨论】:

    • 感谢您的回答。我将寻找如何减少回调函数的代码。在平均方法方面,我的微控制器的 adc 没有自动平均模式。(STM32F101C8T6)我可以使用手动平均模式并取五个样本平均值,但是我想比较平均值。正确的做法是什么?
    猜你喜欢
    • 2020-11-12
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 2020-07-07
    • 2020-07-08
    • 2016-05-10
    相关资源
    最近更新 更多