打印

有段AD中断采样平均值程序,有些看不懂。请师傅帮忙看下

[复制链接]
3606|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
keyu886|  楼主 | 2013-6-19 15:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是一段在AD段里采样平均值的程序
思想应该是这个值起码也累加8次的采样值后再去除以8对吧,
可是这段程序我感觉是只有AD中断进入都会除以8.这有问题吗?
还是我理解错误,C基础不太好,希望高手指点
flybackCurrent2Sum ,和rectifiedInverterOutputCurrentSum都一样吧

第一averageFlybackCurrent1 = flybackCurrent1Sum >> 3;等同于除以flybackCurrent1Sum8吧。
void __attribute__((interrupt, no_auto_psv)) _ADCP3Interrupt()
{
// Moving Average of Flyback Currents for load sharing
flybackCurrent1Sum = flybackCurrent1Sum + flybackCurrent1 - flybackCurrent1Array[currentArrayCnt];
averageFlybackCurrent1 = flybackCurrent1Sum >> 3;
flybackCurrent2Sum = flybackCurrent2Sum + flybackCurrent2 - flybackCurrent2Array[currentArrayCnt];
averageFlybackCurrent2 = flybackCurrent2Sum >> 3;
flybackCurrent1Array[currentArrayCnt] = flybackCurrent1;
flybackCurrent2Array[currentArrayCnt] = flybackCurrent2;
// Moving Average of AC Current for AC Current Fault
rectifiedInverterOutputCurrentSum = rectifiedInverterOutputCurrentSum + rectifiedInverterOutputCurrent -
rectifiedInverterOutputCurrentArray[currentArrayCnt];
averageRectifiedCurrent = rectifiedInverterOutputCurrentSum >> 3;
rectifiedInverterOutputCurrentArray[currentArrayCnt++] = rectifiedInverterOutputCurrent;
if(currentArrayCnt >= 8)
{
  currentArrayCnt = 0;
}
}

沙发
llqjmy| | 2013-6-20 22:46 | 只看该作者
任何单片机的消抖程序,基本上都是和检测对象挂钩的。你这里的检测对象是什么信号?是交流信号吗?光从程序看,只能说这样做的AD变化将会比较平缓,不大会突变。

使用特权

评论回复
板凳
keyu886|  楼主 | 2013-6-21 16:20 | 只看该作者
交流信号

使用特权

评论回复
地板
llqjmy| | 2013-6-21 23:00 | 只看该作者
keyu886 发表于 2013-6-21 16:20
交流信号

什么样的交流信号?市电?

使用特权

评论回复
5
liy1979| | 2013-6-22 15:16 | 只看该作者
变量的名字好长啊,看得头都大了……。

使用特权

评论回复
6
keyu886|  楼主 | 2013-6-25 11:32 | 只看该作者
llqjmy 发表于 2013-6-21 23:00
什么样的交流信号?市电?

大哥问题不是在这里,不过谢谢你的热心。呵呵其实问题我已说了

使用特权

评论回复
7
lzloong| | 2013-7-13 12:57 | 只看该作者
哈哈,哥们是研究微逆变器的?

使用特权

评论回复
8
stephaniemm| | 2013-8-1 11:01 | 只看该作者
flybackCurrent1Sum = flybackCurrent1Sum + flybackCurrent1 - flybackCurrent1Array[currentArrayCnt];
这句为   这个变量的求和。
averageFlybackCurrent1 = flybackCurrent1Sum >> 3;
这句为  变量的和右移3位,即相当于和除以8;
if(currentArrayCnt >= 8)
{
  currentArrayCnt = 0;
}
计数大于8时,相关位清零,出新开始计数。

使用特权

评论回复
9
rambler| | 2013-8-2 22:39 | 只看该作者
学习一下,相当于就是一个滑动平均吧

使用特权

评论回复
10
opal11| | 2013-8-16 21:31 | 只看该作者

变量的名字好长啊,看得头都大了……。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

57

帖子

1

粉丝