微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 汽车电子 > 基于扭矩信息的运动系统故障检测装置

基于扭矩信息的运动系统故障检测装置

时间:09-28 来源:中电网 点击:

1 引言

运动控制系统在国民经济和国防等领域中所起的作用以及应用的范围越来越大,运动控制技术正在不断的深入到各个领域并迅速发展,其应用范围已经涵盖了几乎所有的工业领域。例如在生产过程中对机器人手的位置控制;造纸厂中纸张滚卷的恒张力控制;导弹制导系统控制导弹准确击中目标等。

为了保证及时发现运动控制系统中可能发生的各种故障,应在系统中加入故障检测子系统。电机驱动运动控制系统中的大部分机械故障和电气故障都会引起电机电流的异常变化,非线性能量算法能够从电流信号中提取出系统故障信息,从而及时检测出系统中可能产生的各种故障。

本文首先以三星公司的S3C44B0X微处理器为核心芯片,设计电流信号采集电路,然后介绍了非线性能量故障诊断算法。最后以X-Y运动平台为实验对象,验证该算法的有效性。

2 信号采集电路设计

S3C44B0X具有8通道的10位模数转换器(ADC),它是一个逐次逼近型的ADC,内部结构中包括模拟输入多路复用器,自动调零比较器,时钟产生器,10位逐次逼近寄存器和输出寄存器。该ADC还提供可编程选择的睡眠模式,以节省功耗。使用S3C44B0X的ADC时应当注意,在ADC退出休眠模式后,为使ADC参考电压稳定,在第一次A/D转换之前需等待10ms。通道切换时,应该保证至少15μs的时间间隔。

S3C44B0X的ADC输入电压范围为:0~2.5V,而被测电机电流信号的变化范围是:-5V~+5V。因此首先应将双极性的输入信号转化到0~2.5V范围内。如果采样频率高于100Hz,还应在信号输入通道加上采样保持器。


图 1: 模拟信号调理电路

图1中利用μA741通用型运算放大器构成升压电路,选用LF398作为采样保持器。可知图中各节点电位的关系可用(1)式表达,从而将-5V~+5V变化范围的被测信号转化到0~2.5V。

3 故障检测算法

为了及时检测出系统中产生的故障,需要对电机电流信号进行实时处理,从中提取出故障信息。文献[3,4]给出了一种非线性能量算法NEO (Nonlinear Energy Operation),可以用来检测出信号的异常变化。对于给定的信号序列x(n),非线性能量算法定义如下:

文献[5]在NEO中引入时域窗口的概念,在此基础上提出了光滑非线性能量算法SNEO(SmoothedNonlinear Energy Operation)。该算法可用下式描述:

其中 ⊗为卷积运算符,ω为时间窗口(time window)。式中的ω(k)可以按照下式选取:

为了达到理想的检测效果,也可以采用多步SNEO:

其中:

通过选择适当的时间延迟m,可以有效减少采样噪声的影响。

4 信号采集和分析

为了快速准确的检测出系统发生的故障,需要设置适当的滤波器参数(比如多步SNEO算法中的b和m),这就要首先对被检测信号进行分析处理。ARM芯片虽然能够实时处理大量的数据,但是缺乏上位机(如工控机)专用软件具有的强大数据分析处理功能。这里选用科学研究中经常用到的MATLAB软件对ARM系统采集到的数据进行离线分析处理,得到所需的滤波器参数。

为了方便将ARM采集到的数据导入到MATLAB中,首先编写了MATLAB和ARM系统的串行通信程序。要确定MATLAB环境已安装了仪器控制工具箱(Instrument Control Toolbox)。在MATLAB中,可以通过创建串口对象,来实现MATLAB与串口设备的通信。

创建串口对象可使用如下的语句:

bj = serial('port', 'PropertyName', Property Value ,...)

其中obj为创建的串口对象;port为串口对象所对应的串行口,如COM1;PropertyName和PropertyValue分别为串口属性名称和相应的取值,两者需成对出现。创建串口对象之后,在进行串口的读写操作之前,还需调fopen函数来建立串口对象同串口设备的实际连接。

可以使用fprintf和fwrite函数向串口设备发送数据,其中fprintf用于向串口设备发送文本信息,fwrite用于向设备发送二进制数据。MATLAB提供了很多函数,利用这些函数可以方便灵活的读取串口设备发送的信息;其中最常用的两个读串口函数为fread和fscanf,fread用于从串口设备读取二进制信息,fscanf用于读取设备发送的文本信息。

如果不再使用串口,应将串口对象同设备断开,然后将其从内存和MATLAB工作空间中删除。可以使用fclose,delete,chear来完成这一系列操作。

下面给出的MATLAB脚本文件用于接收ARM系统采集到的5000个双字节数据,并将这些数据存储到100×50的矩阵data中。这样就可以方便的利用MATLAB强大的数据分析处理功能,从得到的数据中总结出有用的信息。
s = serial('COM1','BaudRate',115200,'Terminator', {'',''});
data = zeros(100,50);
fopen(s);
for i = 1:50
fwrite(s,0x1,'char');
tmp = fread(s,100,'int16');
data(:,i) = tmp;
for j = 1:1000
j=j;
end
end
fclose(s);delete(s);clear s;

ARM系统的串口发送程序如下。在ARM的串口接收中断服务程序中将URXD0Flag赋值为1,这样每当ARM接受到MATLAB发送过来的SOH (Start of Header)字符,即0x1,便会向MATLAB发送100个双字节数据。sl和sh分别存放数据的底八位和高八位。

while(1) {
if(URXD0Flag) {
for(j = 1; j <= 100;j++) {
sl = signal[i] & 0xff;
sh = (signal[i++] & 0xff00)>>8;
Uart_SendByte(sl);
Uart_SendByte(sh);
}
URXD0Flag = 0;
}
if(i >= 5000)
break;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top