cpt121 发表于 2019-11-14 14:26:08

stm32L496 ADC 过采样

官方L496 过采样的例程中计算电压的公式    uwInputVoltage = uwConvertedValue * 3300;uwInputVoltage = uwInputVoltage / 0xFFF0; 计算电压的时候为什么不是除以4096而是除以0xFFF0.这个FFF0有什么特殊含义吗?

00-405686 发表于 2019-11-15 09:34:37

你把原文截图出来看看

ldptest 发表于 2019-11-15 13:05:35

原程序连续采样多少次?是否是0xFFF0次?

haocheng996 发表于 2019-11-15 17:08:48

过采样的原理就是连续多次采样然后把值进行累加,从而达到超过本来12位ADC的分辨率,这时候再求平均值的时候就不是除以4096了

cpt121 发表于 2019-11-19 13:47:38

00-405686 发表于 2019-11-15 09:34
你把原文截图出来看看

您好,下边是官方例程中的代码。
    if (HAL_ADC_PollForConversion(&AdcHandle, 10) != HAL_OK)
    {
      Error_Handler();
    }
   
    /* Read the converted value */
    uwConvertedValue = HAL_ADC_GetValue(&AdcHandle);

    /* Convert the result from 16 bit value to the voltage dimension (mV unit) */
    /* Vref = 3.3 V */
    uwInputVoltage = uwConvertedValue * 3300;
    uwInputVoltage = uwInputVoltage / 0xFFF0;

cpt121 发表于 2019-11-19 13:47:56

ldptest 发表于 2019-11-15 13:05
原程序连续采样多少次?是否是0xFFF0次?

没有,只采样1次

cpt121 发表于 2019-11-19 13:49:43

haocheng996 发表于 2019-11-15 17:08
过采样的原理就是连续多次采样然后把值进行累加,从而达到超过本来12位ADC的分辨率,这时候再求平均值的时 ...

您好,请问如何计算出的0xFFF0这个数值呢?

00-405686 发表于 2019-11-19 15:37:37

/* Convert the result from 16 bit value to the voltage dimension (mV unit) */
    /* Vref = 3.3 V */
    uwInputVoltage = uwConvertedValue * 3300;
    uwInputVoltage = uwInputVoltage / 0xFFF0;

代码注释中有提到,过采样相当于结果已经是16bit了,所以不是除以4095

haocheng996 发表于 2019-11-20 09:21:38

软件上采样了一次,但硬件上已经采样多次了,为什么是0xFFF0这个数值,可以看看参考手册中对ADC硬件过采样的说明

butterflyspring 发表于 2019-11-22 15:29:20

手册中说到了累加之后的值需要除以16,相当于右移4位。也就是除以4095*16得到16位精度的结果:)
页: [1]
查看完整版本: stm32L496 ADC 过采样