采用DMA+ADC的方式进行采样。
遇到的问题:备份的工程采样正常,用最新的工程采样不正常,用对比文件检查两个工程的ADC配置和DMA配置都是一摸一样的,但是测试AD转换结果就是不一样。
排查过程:想到ADC采样是由PWM触发的,那么估计问题是出现在PWM配置上,遂对比两份工程的PWM配置,果然发现了问题,唯一不同的是占空比和中断,备份工程未开中断,占空比为50%,而最新有问题的工程是满占空比并且使能了PWM中断。将最新工程的PWM中断关闭且占空比改为50%,采样果然正常了。问题总结如下:
问题总结:
采用PWM触发ADC的:
1、占空比不能为100%,否则AD码将一直是0;
2、不能使能PWM中断,否则AD码将一直是0。
处理建议:
1、采用DMA+ADC的方式进行采样的,如果取单个采样值的,要注意取采样值时刚好是DMA正在搬运工作的时候,取得的AD码不完整导致数据错误的。
建议解决方法:采样频率要求高的话,可以使用软件触发ADC,使能一个中断周期比采样窗口时间高的中断,在中断处理函数中:先取ADC的值,再启动软件触发AD转换,等下一中断来临时DMA就有时间完全把AD码搬运过来。这时再取AD码,这样就可以避免在DMA搬运时取AD码导致数据错误的问题。
2、采样频率不高的时候可以将缓存AD的buf加大一点,每次取这个buf的平均值,这样既可以减小DMA工作过程中取AD码导致的误差,又可以进行采样滤波。