[STM32] ADC采样

[复制链接]
1187|17
 楼主| 鸡蛋鸭蛋荷包蛋 发表于 2023-2-16 16:05 | 显示全部楼层 |阅读模式
大佬们,我想问一下,STM32F103动用15路ADC,采样正弦模拟量信号,有没有什么好的编程思路.
我目前是ADC单次采样,通过定时器200us触发ADC采样,ADC采样程序有滤波函数(连续采样十次,冒泡排序去掉最高和最低),然后采样到一定次数后通过浮点运算等来换算出实际的电压电流等参数,目前的问题是程序这样运行太慢了(单次多频率采样,采样1000次换算一下),有没有什么地方可以优化的.
LcwSwust 发表于 2023-2-16 16:22 | 显示全部楼层
排序没必要,比如采了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   发表于 2023-2-16 16:55
目前是单次采样,连续10次,然后排序去掉最大最小,加到指定变量,次数达到500或某一次数后,会进行浮点运算计算实际模拟量,大概是这样的流程,有哪些需要修改的吗  发表于 2023-2-16 16:43
LcwSwust 发表于 2023-2-16 16:55 | 显示全部楼层
  1. //--------------------------------------------------
  2. //n个数里求平均值(n>=3)
  3. //--------------------------------------------------
  4. S16 average_S16(S16 a[],U8 n)
  5. {
  6.         S16 max,min,ave=0;
  7.         S32 sum=0;
  8.         U8 i;
  9.         if(n<1)return 0;
  10.         if(n<2)return a[0];       
  11.         if(n<3)return (((U32)a[0]+a[1])/2);
  12.         max=a[0];
  13.     min=a[0];
  14.     for(i=0;i<n;i++)
  15.         {
  16.                 if(max<a[i])max=a[i];
  17.                 if(min>a[i])min=a[i];
  18.                 sum+=a[i];
  19.         }
  20.         //ave=sum/n;//直接平均
  21.         ave=(sum-min-max)/(n-2);//去极值后求平均
  22.         return ave;
  23. }

评论

谢谢兄弟 这样看起来比排序快一点  发表于 2023-2-17 09:01
一叶倾城wwq 发表于 2023-2-17 14:57 | 显示全部楼层
用DMA,连续采样,快一些

评论

@**蛋鸭蛋荷包蛋 :可以调采样频率的。  发表于 2023-2-20 08:42
ADC连续采样的话 这样控制不了时间 怎么计算多长时间采样一次 因为是正弦波 所以需要控制时间和滤波  发表于 2023-2-20 08:40
xch 发表于 2023-2-17 15:56 | 显示全部楼层
你选错MCU。F103 没有浮点指令,比相同主频的M4慢十倍。换成G4系列直接采样滤波一气呵成。

评论

谢谢大佬  发表于 2023-2-20 08:40
xch 发表于 2023-2-17 16:00 | 显示全部楼层
用NXP LPC55S69 变态地快。
coody 发表于 2023-2-17 16:33 | 显示全部楼层
测量有效值吗?是的话,用正弦波频率100倍或以上的采样速度采样,计算均方值就是有效值。

评论

@**蛋鸭蛋荷包蛋 :计算量不大啊  发表于 2023-2-23 11:28
目前的问题是计算速度有点慢,需要优化,而不是值不准确  发表于 2023-2-20 08:41
呐咯密密 发表于 2023-2-22 20:14 | 显示全部楼层
顶个贴,等高手回答
yangjiaxu 发表于 2023-2-27 22:52 | 显示全部楼层
运行慢是指的什么?传输数据比较慢么?如果是这样可以开启DMA的,如果采样慢,额可以外置ADC的

评论

好的,感谢大佬的建议  发表于 2023-2-28 10:07
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

85

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部