一、提出问题:
假设有一个需求,那就是需要对输入频率为100HZ的PWM信号进行采样,该PWM信号控制某一个器件进行电流输出。求平均电流。
二、分析问题。
1、频率为100hz,那周期就是10ms。
2、假设在单周期内需要采集100个点,每两个点间的采样间隔是t1=0.1ms.就是采样率做到10k。
3、假设同时有八个通道需要进行采样。
4、stm32的采样周期假设选择239.5T,转换时间固定为12.5T。也就是说ADC采集单通道的一个点的时间是t2=255T.其中T为ADC的运行周期。
那么8通道的采集时间为t3=255*8=2040T.
5、stm32的系统时钟是72M 。那么,我们假设ADC时钟是系统时钟的2分频。那么t3=2040T=2040/36000000=56.7us=0.056ms.
6、因为ADC采集所有通道的时间小于其采集两个点之间的时间,所以这种设计是合理的。可以满足设计要求。
三、计算均值。
1、因为单周期内采集的点数固定为100点,那么每两个点之间的时间间隔就是t1=0.1ms。
2、采用积分方式。I=0.1*(i1+i2+……In)/10
四、可以采用定时器定时触发ADC采集,并用DMA搬运的方式。编程思路是,DMA进入中断后,置标志位,并且关闭定时器。在主函数里进行数据处理,数据处理完毕后,打开定时器。注意,DMA功能不能关闭,实测发现,关闭DMA后,数据运行一段时间会出现错乱。
五、代码。