[STM32] STM32的AD采样周期5ms 采集5次得到平均值,这个程序怎么写

[复制链接]
9520|7
 楼主| llcg1314 发表于 2014-9-18 16:41 | 显示全部楼层 |阅读模式
[img]file:///C:\Users\Y400\AppData\Roaming\Tencent\Users\1034560110\QQ\WinTemp\RichOle\RI3OT2%}S4PG[Z64U5@9AKY.jpg[/img]

上图c语言应该怎么编程,AD采样周期为5ms,采集5次求平均值       谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
tudou21 发表于 2014-9-18 16:53 | 显示全部楼层
设一个5个元素的buf数组来保存5次的数据,用一个cnt来计数,每来一个数据buf[cnt++] = AD当前值。判断cnt >= 5时, cnt = 0,求五次的平均值。
ayb_ice 发表于 2014-9-18 17:09 | 显示全部楼层
typedef struct{
        int total;
        int out;
        char counter;
        bool ok;

}t_ADC;

t_ADC adc;


void adc_ave(void)
{
        if(flag_5ms){
                flag_5ms = 0;
                total += adc_once();
                if(++counter >= 5){
                        counter = 0;
                        if(adc.ok == false){
                                adc.out = total / 5;
                                adc.ok = true;
                        }
                        total = 0;
                }
        }
}

void main(void)
{
        init();

        while(1)
        {
                adc_ave();

                if(adc.ok == true){
                        ...
                        adc.ok = false;
                }
        }
}

评分

参与人数 1威望 +4 收起 理由
y651503148 + 4 赞一个!

查看全部评分

qq4988 发表于 2014-9-18 17:12 | 显示全部楼层
楼上正解啊,循环采样,计数采样次数,当次数等于5时,进行数据处理
 楼主| llcg1314 发表于 2014-9-18 20:33 | 显示全部楼层
ayb_ice 发表于 2014-9-18 17:09
typedef struct{
        int total;
        int out;

这里的flag_5ms、adc_once() 都是什么函数
huayuliang 发表于 2014-9-18 21:15 | 显示全部楼层
adc_ave 应该是 adc_avg

flag, adc_once, 楼上的英语不好么?
cool_coder 发表于 2014-9-19 13:04 | 显示全部楼层
本帖最后由 cool_coder 于 2014-9-19 13:05 编辑

完全不需要那么复杂的软件流程,STM32支持全硬件方式的ADC定时触发和数据传输,你只要让它开始操作,然后等它忙完后通知你就行了。在这段时间里,CPU可以去做其它事,或者休息:
把T1周期设置到5ms,OC1设为PWM方式,用T1.CC1触发ADC1采样,用DMA1.CH1将采样值传送到缓冲区,设置传送长度为5,传送结束时,响应DMA的TC中断。这时,五次采样已经就绪,可以开始求均值。
小猪zZ 发表于 2014-11-9 18:42 | 显示全部楼层
学习了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

37

帖子

0

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