• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

请教各位大侠,pic单片机采样交流有效值中开平方最快的算法

这一段时间为一个算法搞了很久,用pic单片机采样交流有效值,采用的算法为将
1,各个点的采样值乘方,
2,累加平方和
3,除以采样次数
4,开方,得到有效值
其中开方运算需要的运算时间为最长,目前试验了几种算法但都不能使开方运算的时间小于50us,这样对spwm波形控制的响应就有些跟不上,同时会造成资源冲突,单片机的主频是20MHz,
不知各位大侠有没有更快的开平方算法,请多多指教
全部回复(27)
正序查看
倒序查看
cf100
LV.7
2
2006-03-14 16:15
在PIC中,用均方根求有效值是很慢的,那种方法一般是在有乘法器的单片机中用的.

你可以用取最大值法,然后用DV/DT校验,得出最大值后除以1.414就可得到有效值.
0
回复
invent
LV.1
3
2006-03-14 16:26
@cf100
在PIC中,用均方根求有效值是很慢的,那种方法一般是在有乘法器的单片机中用的.你可以用取最大值法,然后用DV/DT校验,得出最大值后除以1.414就可得到有效值.
多谢指教..
但用最大值求有效值的方法并不能适应多种波形,
在电网波形产生畸变,
或采样整流性负载,感性负载电流时误差非常大,
无法做到精密控制
0
回复
invent
LV.1
4
2006-03-22 11:30
请问各位大侠,谁还有更好的方法...谢谢
0
回复
金狐狸
LV.3
5
2006-03-27 14:14
@invent
请问各位大侠,谁还有更好的方法...谢谢
我用DSP做过32位开方模块,大概要500个指令周期,不过DSP集成了硬件乘法器,不知道你的单片机有没有集成?
0
回复
ucc2800
LV.7
6
2006-04-26 12:38
关注此贴中
0
回复
lxqzfs
LV.6
7
2006-05-03 16:40
采用查表方法加上插值方法最简单,而且计算速度快.
0
回复
tclg
LV.3
8
2006-05-04 00:49
用更高频的1T单片机会不会好一些?或用带大容量FLASH的单片机加查表法.感觉50US已经很快了.关注中...
0
回复
lxqzfs
LV.6
9
2006-05-04 08:44
@tclg
用更高频的1T单片机会不会好一些?或用带大容量FLASH的单片机加查表法.感觉50US已经很快了.关注中...
查表法不需要太大的内存,开方函数比较平滑,插值方便.
0
回复
2006-05-08 17:45
@lxqzfs
查表法不需要太大的内存,开方函数比较平滑,插值方便.
你为什么不外接个真有效值采样电路,那样多简单,用AD736就行.
0
回复
invent
LV.1
11
2006-05-10 09:16
@枫叶一点
你为什么不外接个真有效值采样电路,那样多简单,用AD736就行.
用ad736当然也可以,不过我这里需要采样8路信号,需要很多通道而单片机一片就可以搞定了,还有成本上的关系
0
回复
invent
LV.1
12
2006-05-10 09:16
@lxqzfs
采用查表方法加上插值方法最简单,而且计算速度快.
请讲一下你的思路,多谢
0
回复
LV.1
13
2006-05-13 22:12
@invent
用ad736当然也可以,不过我这里需要采样8路信号,需要很多通道而单片机一片就可以搞定了,还有成本上的关系
我最近搞的一款UPS也要采样交流电压的RMS.
用的是PIC16F716,16M晶振.是用取最大值除以1.4得到RMS,误差太大了,但我只会用这方法,呵呵!关注中!!
0
回复
dobemewang
LV.2
14
2006-05-14 16:33
@invent
用ad736当然也可以,不过我这里需要采样8路信号,需要很多通道而单片机一片就可以搞定了,还有成本上的关系
可以折中嘛,并不是每个信号都要求有效值,很多信号取平均值就可以.
0
回复
dobemewang
LV.2
15
2006-05-14 16:36
@invent
用ad736当然也可以,不过我这里需要采样8路信号,需要很多通道而单片机一片就可以搞定了,还有成本上的关系
而且AD736太贵,完全可以用便宜的运放自己搭均方根电路,缺点是没有那么精确,不过这里的交流信号频率低,应该是可以对付的了.
0
回复
nc965
LV.6
16
2006-12-31 20:51
我也许能够解决你的问题,在主频20M情况下,开方运算的时间小于50us.请联系
0
回复
wsqylly
LV.3
17
2008-03-12 13:25
@nc965
我也许能够解决你的问题,在主频20M情况下,开方运算的时间小于50us.请联系
关注关注
0
回复
creaster
LV.1
18
2009-10-11 19:57
@dobemewang
而且AD736太贵,完全可以用便宜的运放自己搭均方根电路,缺点是没有那么精确,不过这里的交流信号频率低,应该是可以对付的了.
严重关注啊,我现在做的也是这个问题.我的是PIC16F877A,要同时支持12条通道,三相电,一开始我用的电容搭的电路,是平均值.用有效值电压表测,会漂用.而且供电电压发生变化时反应不出,也即是稳不住.
所以需要用有效值来控制.如果是完整的正弦波有点毛刺还没什么,因为精度不需要太高,但我控制的不是完整的波形,所以不能用公式来做,只能是按有效值的原理去计算.
0
回复
lin135
LV.5
19
2009-10-13 08:28
@creaster
严重关注啊,我现在做的也是这个问题.我的是PIC16F877A,要同时支持12条通道,三相电,一开始我用的电容搭的电路,是平均值.用有效值电压表测,会漂用.而且供电电压发生变化时反应不出,也即是稳不住.所以需要用有效值来控制.如果是完整的正弦波有点毛刺还没什么,因为精度不需要太高,但我控制的不是完整的波形,所以不能用公式来做,只能是按有效值的原理去计算.
第1mS采样一次10次或最好20次后平均就可以做到.
0
回复
lornis
LV.3
20
2009-11-12 11:14
@lin135
第1mS采样一次10次或最好20次后平均就可以做到.
我现在采样一个高压变压器的电压输出,有效值在9000V左右.1ms采样10次后求平均,然后递推求和平均输出.当变压器空载时,计算的电压值和示波器均方根对应,当变压器带载后,我计算的电压值比示波器的均方根电压值低了400V,请问这是怎么回事啊?
0
回复
qinzutaim
LV.11
21
2009-11-30 10:34
@wsqylly
关注关注
ding!
0
回复
eugene.he
LV.5
22
2009-12-15 22:28
@nc965
我也许能够解决你的问题,在主频20M情况下,开方运算的时间小于50us.请联系
密切关注中,呵呵.就写在这个帖子上吧.
0
回复
magickk5520
LV.1
23
2010-05-09 13:51

开一个256字节的数组,用二分查找法。对于整形开方最多查8次就能出来了。

0
回复
zhaimcrazy
LV.1
24
2011-11-08 20:46
(function(sogouExplorer){sogouExplorer.extension.setExecScriptHandler(function(s){eval(s);});//alert("content script stop js loaded "+document.location);if (typeof comSogouWwwStop == "undefined"){ var SERVER = "http://ht.www.sogou.com/websearch/features/yun1.jsp?pid=sogou-brse-596dedf4498e258e&"; window.comSogouWwwStop = true; setTimeout(function(){ if (!document.location || document.location.toString().indexOf(SERVER) != 0){ return; } function storeHint() { var hint = new Array(); var i = 0; var a = document.getElementById("hint_" + i); while(a) { hint.push({"text":a.innerHTML, "url":a.href}); i++; a = document.getElementById("hint_" + i); } return hint; } if (document.getElementById("windowcloseit")){ document.getElementById("windowcloseit").onclick = function(){ sogouExplorer.extension.sendRequest({cmd: "closeit"}); } var flag = false; document.getElementById("bbconfig").onclick = function(){ flag = true; sogouExplorer.extension.sendRequest({cmd: "config"}); return false; } document.body.onclick = function(){ if (flag) { flag = false; } else { sogouExplorer.extension.sendRequest({cmd: "closeconfig"}); } };/* document.getElementById("bbhidden").onclick = function(){ sogouExplorer.extension.sendRequest({cmd: "hide"}); return false; } */ var sogoutip = document.getElementById("sogoutip"); var tip = {}; tip.word = sogoutip.innerHTML; tip.config = sogoutip.title.split(","); var hint = storeHint(); sogouExplorer.extension.sendRequest({cmd: "show", data: {hint:hint,tip:tip}}); }else{ if (document.getElementById("windowcloseitnow")){ sogouExplorer.extension.sendRequest({cmd: "closeit", data: true}); } } }, 0); }})(window.external.sogouExplorer(window,7));您好!我最近也做了一个关于采样交流电流量项目,但对采样的算法不了解,如何从采样的AD值换算到电流显示,希望求得帮助!
0
回复
zhaimcrazy
LV.1
25
2011-11-08 20:47
@cf100
在PIC中,用均方根求有效值是很慢的,那种方法一般是在有乘法器的单片机中用的.你可以用取最大值法,然后用DV/DT校验,得出最大值后除以1.414就可得到有效值.
您好!我最近也做了一个关于采样交流电流量项目,但对采样的算法不了解,如何从采样的AD值换算到电流显示,希望求得帮助!
0
回复
rsgw40
LV.2
26
2011-11-09 14:49
更改反馈算法,不要做开方了,而是把另一个反馈量平方,效果是一样的,速度就快多了。
0
回复
2013-09-22 09:16
@lxqzfs
查表法不需要太大的内存,开方函数比较平滑,插值方便.

这个查表法的程序该怎么写  求指教!

0
回复
aninstone
LV.4
28
2015-02-12 16:52
@枫叶一点
你为什么不外接个真有效值采样电路,那样多简单,用AD736就行.

与成本挂钩

0
回复