- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
燕山大学
课 程 设 计 说 明 书
题目:机械振动信号分析及故障报警
学院(系): 电气工程学院
年级专业: 10级仪表3班
电气工程学院《课程设计》任务书
课程名称: “单片机原理及应用——数字信号处理”课程设计
院(系):电气工程学院 基层教学单位: 自动化仪表系
学号 1001030201 学生姓名 (专业)班级 自动化仪表3班 设计题目 机械振动信号分析及故障报警 设
计
技
术
参
数 1、了解加速度传感器工作原理。
2、掌握单片机串口通信协议。
3、连接硬件实验线路,实现所要求的功能。
4、基于Matlab信号处理工具箱实现功能
5、完成设计,提交课程设计报告。 设
计
要
求 1、利用加速度传感器采集轴承正常与故障状态下的振动信号,基于Matlab对振动信号进行时域和频域(包括FFT,功率谱,倒谱)分析,提取时域波形指标如均值、峰峰值、峭度、偏度等。设计相应的信号分析及显示界面。
2、基于振动信号分析结果,通过串口发送命令给单片机系统,根据振提取的特征指标判断轴承是否故障,若有故障驱动蜂鸣器报警。
3、扩展:也控制相应的数码管或LED发光显示相应振动信号参数(幅度、频率参数等)。 工
作
量 软件编程与硬件调试相结合,绘制设计流程图,编制相应软件界面,实现单片机控制与信号处理任务的综合应用 参
考
资
料 1)《微型计算机控制系统》 赖寿宏,机械工业出版社(教材)
2)《单片机及应用》李大友,高等教育出版社(教材)
3)《信号处理原理及应用》 谢平 等 机械工业出版社(教材)
4)《Matlab程序设计及其在信号处理中的应用》的采样,采样间隔为ωN=2π/N 。由此看出,离散傅里叶变换实质上是其频谱的离散频域采样,对频率具有选择性(ωk=2πk/N),在这些点上反映了信号的频谱。
根据采样定律,一个频带有限的信号,可以对它进行时域采样而不丢失任何信息,FFT变换则说明对于时间有限的信号(有限长序列),也可以对其进行频域采样,而不丢失任何信息。所以只要时间序列足够长,采样足够密,频域采样也就可较好地反映信号的频谱趋势,所以FFT可以用以进行连续信号的频谱分析。
MATLAB界面设计
两个画图按钮简化成了一个下拉菜单,坐标图一和二分别显示时域和频域波形,计算按钮进行计算并把数值放到下面四个文本框中。判断按钮判断是否故障并通过发送按钮把特征值传输到单片机中。
各模块设计及程序
时域和频域分析及画图
%时域波形
% figure(1);
set(gcf,CurrentAxes,handles.time);
plot(xdata);
xlabel(样本序号 n/个);
ylabel(电压 V/v);
%db10小波进行4层分解
%一维小波分解
[c,l]=wavedec(xdata,4,db10);
%第一层细节信号的包络谱
y=hilbert(d1);
ydata=abs(y);
y=y-mean(y);
nfft=200;
p=abs(fft(ydata,nfft));
% figure(3);
set(gcf,CurrentAxes,handles.frequency);
plot((0:nfft/2-1)/nfft*fs,p(1:nfft/2));
xlabel(频率 f/Hz);
ylabel(功率谱 p/w);
故障信号的时域和频域图如下
正常信号的时域和频域图如下
可见其频域有较大的差别
计算部分
这里,我们调用matlab中已有的程序来计算需要得到的指标,所编程序如下
fs=10000;
fid=fopen(bearingout.dat,r);
load Normal.mat
fid=fopen(Normal.mat);
N=1000;
xdata=fread(fid,N,int16);
xdata=fread(fid,N,int16);
fclose(fid);
xdata=(xdata-mean(xdata))/std(xdata,1);
A=mean(xdata); % 平均值
set(handles.edit1,string,num2str(A));
B=max(xdata); % 最大值
C=min(xdata); % 最小值
D=B-C; % 峰峰值
set(handles.edit2,string,num2str(D));
E=kurtosis(xdata);%峭度
set(handles.edit3,string,num2str(E));
F=skewness(xdata);%偏度;
set(handle
文档评论(0)