ADC采样
大佬们,我想问一下,STM32F103动用15路ADC,采样正弦模拟量信号,有没有什么好的编程思路.我目前是ADC单次采样,通过定时器200us触发ADC采样,ADC采样程序有滤波函数(连续采样十次,冒泡排序去掉最高和最低),然后采样到一定次数后通过浮点运算等来换算出实际的电压电流等参数,目前的问题是程序这样运行太慢了(单次多频率采样,采样1000次换算一下),有没有什么地方可以优化的.
排序没必要,比如采了10次,就把10次数据加起来再减去最大值、最小值,再除以8即可。 //--------------------------------------------------
//n个数里求平均值(n>=3)
//--------------------------------------------------
S16 average_S16(S16 a[],U8 n)
{
S16 max,min,ave=0;
S32 sum=0;
U8 i;
if(n<1)return 0;
if(n<2)return a;
if(n<3)return (((U32)a+a)/2);
max=a;
min=a;
for(i=0;i<n;i++)
{
if(max<a)max=a;
if(min>a)min=a;
sum+=a;
}
//ave=sum/n;//直接平均
ave=(sum-min-max)/(n-2);//去极值后求平均
return ave;
}
用DMA,连续采样,快一些 你选错MCU。F103 没有浮点指令,比相同主频的M4慢十倍。换成G4系列直接采样滤波一气呵成。 用NXP LPC55S69 变态地快。 测量有效值吗?是的话,用正弦波频率100倍或以上的采样速度采样,计算均方值就是有效值。 顶个贴,等高手回答 运行慢是指的什么?传输数据比较慢么?如果是这样可以开启DMA的,如果采样慢,额可以外置ADC的
页:
[1]