1、AD采样不准确,当信号输入30mV时,AD采样值为0;
解决: 1) 使用AD校准函数 HAL_ADCEx_Calibration_Start(&AdcHandle); 在DMA启动之前校准
2)降低ADC时钟频率;(现在是72Mhz/4,没有修改)
3)提高ADC采样时间(681.5cycle)
参考
- 使用STM32CubeMX4.22版本开发F051K4T6采集三路AD,60MV以下采集不到http://www.stmcu.org.cn/module/forum/thread-612721-1-1.html(出处: 意法半导体STM32/STM8技术社区)
- 如何在STM32中得到最佳的ADC精度 http://www.**/emb/danpianji/20171129588835_2.html 里面提到 选择较长的采样时间或较慢的ADC时钟,能保障更好的转换效果。或者通过降低ADC时钟频率、选择较长采样时间或选择较低的分辨率,可以容许更大的外部信号源阻抗
效果:增加校准函数,AD采样值不为0,但与30mV输入有差距;继续提高采样时间,设置181.5cycle 达到30mV测量值,有波动;设置最大的681.5cycle,结果一样。
第一路准确,其他几路还有偏差,需要继续研究
2、AD采样通道上存在毛刺
解决: 不采用DMA模式,采用轮询模式,则没有毛刺,仔细对比两种模式,对采样数值没有影响。
参考:关于STM32 ADC引脚出现很多毛刺的问题 https://bbs.21ic.com/icview-370415-1-1.html
3、STM32F303 ADC时钟最大为72Mhz,没有f1系列14Mhz的限制;
4、转换时间
有如下公式: TCONV = 采样时间+ 12.5 个周期
其中12.5个周期是采集12位AD时间是固定的,另外一个采样时间每个通道可以单独配置。
1.5周期、2.5、4.5、7.5、19.5、61.5、181.5、601.5