求:Trio的数字滤波程序 点击:677 | 回复:10



Roben

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:26帖 | 38回
  • 年度积分:0
  • 历史总积分:80
  • 注册:2007年9月01日
发表于:2008-03-25 17:48:00
楼主
    有个项目,需要在Trio中加入数字滤波,小弟没学过滤波相关内容,求哪位达人能够分享一个数字滤波程序。
    小弟拜谢。



刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:16帖 | 8239回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2008-03-25 17:51:00
1楼
你要滤什么东西?

Roben

  • 精华:0帖
  • 求助:0帖
  • 帖子:26帖 | 38回
  • 年度积分:0
  • 历史总积分:80
  • 注册:2007年9月01日
发表于:2008-03-25 20:23:00
2楼
就是说信号反馈时,有干扰,采集的数据很不稳定。

xzy568

  • 精华:1帖
  • 求助:0帖
  • 帖子:22帖 | 480回
  • 年度积分:0
  • 历史总积分:991
  • 注册:2002年9月08日
发表于:2008-03-26 08:11:00
3楼
TRIO的I/O没有滤波函数确实很不方便。

Trio技术支持

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 150回
  • 年度积分:0
  • 历史总积分:201
  • 注册:2004年7月28日
发表于:2008-03-26 10:24:00
4楼
首先需要明确你需要对什么信号进行滤波?
一般对于运动控制器来说,输入信号大致可以分为三种:
1.编码器反馈信号。2.开关量输入。3.模拟量输入

1,编码器反馈信号滤波:这个问题不是客户应用层考虑的问题。当编码器反馈信号有干扰时,这里应该首要考虑的问题是如何消除干扰,按照规范接线及可靠接地是避免编码器干扰的最主要措施。

2,开关量输入滤波:开关量输入滤波的目的在于消除开关量变化时所产生的抖动或正常状态下的干扰突变。开关量抖动消除的算法从本质上讲就是以延时多次判断来实现,根本就没有什么必要为此而添加一个所谓的“滤波函数”。此外,Trio没有对开关量信号进行滤波处理的主要原因是为了实现高速脉冲的捕捉功能,如果对其做滤波处理,那么也就没有什么“高速脉冲”了,对于运动控制要求的精准、快速是有影响的。对于输入通道进行的滤波算法可以用如下代码实现(以输入0通道为例):
if in(0)=1 then
   wa(100)
  if in(0)=1 then
     'Add your application program at here
  endif
endif

3.模拟量输入信号滤波:模拟量输入的信号滤波实际上就是定时采集数据然后取平均值算法,同样我们认为这个用Basic程序很好实现,而且可以根据客户需要更加灵活,也没有什么必要去专门开发一个“滤波函数”,简单的例子可以用如下代码实现:
times=10      'set loop times
interval=100  'set interval time between two input
tbase=100     'set table area base index
ticks=100     'set first time timer
while times>0
   if ticks<=0 then
       ticks=100
       table(tbase+i,ain(0))
       i=i+1
       times=times-1
   endif
wend
all_value=0
for j=0 to i-1
    all_value=all_value+table(tbase+j)
next j

finial_value=all_value/j


Roben

  • 精华:0帖
  • 求助:0帖
  • 帖子:26帖 | 38回
  • 年度积分:0
  • 历史总积分:80
  • 注册:2007年9月01日
发表于:2008-03-26 18:37:00
5楼
谢谢

zfengfei

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 3回
  • 年度积分:0
  • 历史总积分:5
  • 注册:2002年2月17日
发表于:2010-06-17 09:19:12
6楼

请问上面例子in(0)是表示数字量输入第一输入点,还是第一通道即第1输入点至第16个输入点。谢谢

能量控制

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 537回
  • 年度积分:0
  • 历史总积分:1576
  • 注册:2003年9月17日
发表于:2010-06-17 11:53:30
7楼
IN(0)就是TRIO控制器通用的第一个输入通道,对于EURO205X而言,IN(0)-IN(15)为16个输入通道。希望这样解释,您能理解。

CHENNET

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 105回
  • 年度积分:0
  • 历史总积分:269
  • 注册:2004年4月20日
发表于:2010-06-17 21:38:46
8楼

不懂TRIO,也说几句。

1,编码器信号有时也需要滤波,例如速度环反馈编码器精度不高。

2,高速捕捉有时也需要滤波(叫窗口检测更好)。高速捕捉并不代表要快速响应,只要锁存的值正确就可以了。

3,搞个平均值也太麻烦了吧。 开销太大。

filtered value = old * (n-1)/n + new / n

一阶惯性滤波,n越大,滤波越强,这是个低通滤波器。

如果要高阶的高通/低通/带通/带阻滤波器,可以自己用Matlab设计,然后用矩阵运算实现。

能量控制

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 537回
  • 年度积分:0
  • 历史总积分:1576
  • 注册:2003年9月17日
发表于:2010-06-18 09:24:20
9楼

顶一下楼上的兄弟。很棒而且实用的算法。

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:16帖 | 8239回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2010-07-03 08:50:52
10楼

2,高速捕捉有时也需要滤波(叫窗口检测更好)。高速捕捉并不代表要快速响应,只要锁存的值正确就可以了。

响应速度不快,值必然不正确.


热门招聘
相关主题

官方公众号

智造工程师