振动信号检测系统设计1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(此文档为word格式,下载后您可任意编辑修改!) 信号检测综合训练
说明书
题目:振动信号检测系统设计
学院:电气工程与信息工程学院
班级:电子(2)班
姓名: 钱鹏鹏
指导老师:缑新科
2014.12.07
摘要
机械在运动时,由于旋转体的不平衡、负载的不均匀、结构刚度的各向异性、间隙、润滑不良、支撑松动等因素,总是伴随着各种振动。
机械振动在大多情况下是有害的,振动往往会降低机器性能,破坏其正常工作,缩短使用寿命,甚至导致事故。
机械振动还伴随着同频率的噪声,恶化环境,危害健康。
另一方面,振动也被利用来完成有用工作,如运输、夯实、清洗、粉碎、脱水等。
这时必须正确选择振动参数,充分发挥振动机械的性能。
在现代企业管理制度中,除了对各种机械设备提出低振动和低噪声要求外,还需随时对机器的运行状况进行监测、分析、诊断,对工作环境进行控制。
为了提高机械结构的抗振性能,有必要进行机械机构振动分析和振动设计,这些都离不开振动测试。
本文在此基础上设计了一种专用的振动信号检测系统,具有功耗低、体积小、精度高等优点。
信号检测的内容要求:
通过MCS-51系列单片机设计振动信号检测系统。
要求如下:
1 振动信号的特点,选择合适的传感器,并设计相应的检测电路;
2 将设计完成的检测电路,通过软件防真验证;
3 主要设计指标:可测最大加速度:-5m/s~+5m/s;可测最大速度:-0.16m/s~+0.16m/s;可测最大位移:-5mm~+5mm;通频带:0.05Hz~35Hz;转换精度:8bit;采样频率:128Hz
4 利用LCD显示振动信号,有必要的键盘控制。
总体设计方案介绍:
本系统由发射电路和接收电路组成。
发射电路主要由加速度传感器构成。
接收电路由单片机最小系统和外部串口以及显示部分模块三部分组成。
硬件电路设计:
(1)使用MMA8452加速度传感器和STC89C52单片机来实现。
一.设计目的:了解加速度传感器的工作机理,以及单片机的各种性能;
二.设计器材:电源、proteus7.7软件、89C52,MMA8452加速度传感器,导线若干。
三.设计方案介:该系统目的是便于对一些物理量进行监视、控制。
本设计以加速度传感器显示出加速度信号即振动信号,再通过单片机将信号从串口接入电脑显示出来,即完成振动信号的检测功能。
(2)振动传感器的分类
1、相对式电动传感器
电动式传感器基于电磁感应原理,即当运动的导体在固定的磁场里切割磁力线时,导体两端就感生出电动势,因此利用这一原理而生产的传感器称为电动式传感器。
相对式电动传感器从机械接收原理来说,是一个位移传感器,由于在机电变换原理中应用的是电磁感应电律,其产生的电动势同被测振动速度成正比,所以它实际上是一个速度传感器。
2、电涡流式传感器
电涡流传感器是一种相对式非接触式传感器,它是通过传感器端部与被测物体之间的距离变化来测量物体的振动位移或幅值的。
电涡流传感器具有频率范围宽(0~10 kHZ),线性工作范围大、灵敏度高以及非接触式测量等优点,主要应用于静位移的测量、振动位移的测量、旋转机械中监测转轴的振动测量。
3、电感式传感器
依据传感器的相对式机械接收原理,电感式传感器能把被测的机械振动参数的变化转换成为电参量信号的变化。
因此,电感传感器有二种形式,一是可变间隙,二是可变导磁面积。
4、电容式传感器
电容式传感器一般分为两种类型。
即可变间隙式和可变公共面积式。
可变间隙式可以测量直线振动的位移。
可变面积式可以测量扭转振动的角位移。
5、惯性式电动传感器
惯性式电动传感器由固定部分、可动部分以及支承弹簧部分所组成。
为了使传感器工作在位移传感器状态,其可动部分的质量应该足够的大,而支承弹簧的刚度应该足够的小,也就是让传感器具有足够低的固有频率。
根据电磁感应定律,感应电动势为:u=Blx&r 。
式中B为磁通密度,l为线圈在磁场内的有效长度,r x&为线圈在磁场中的相对速度。
从传感器的结构上来说,惯性式电动传感器是一个位移传感器。
然而由于其输出的电信号是由电磁感应产生,根据电磁感应电律,当线圈在磁场中作相对运动时,所感生的电动势与线圈切割磁力线的速度成正比。
因此就传感器的输出信号来说,感应电动势是同被测振动速度成正比的,所以它实际上是一个速度传感器。
6、压电式传感器
压电式加速度传感器的机械接收部分是惯性式加速度机械接收原理,机电部分利用的是压电晶体的正压电效应。
其原理是某些晶体在一定方向的外力作用下或承受变形时,它的晶体面或极化面上将有电荷产生,这种从机械能(力,变形)到电能(电荷,电场)的变换称为正压电效应。
而从电能(电场,电压)到机械能(变形,力)的变换称为逆压电效应。
因此利用晶体的压电效应,可以制成测力传感器,在振动测量中,由于压电晶体所受的力是惯性质量块的牵连惯性力,所产生的电荷数与加速度大小成正比,所以压电式传感器是加速度传感器。
7、压电式力传感器
在振动试验中,除了测量振动,还经常需要测量对试件施加的动态激振力。
压电式力传感器具有频率范围宽、动态范围大、体积小和重量轻等优点,因而获得广泛应用。
压电式力传感器的工作原理是利用压电晶体的压电效应,即压电式力传感器的输出电荷信号与外力成正比。
8、阻抗头
阻抗头是一种综合性传感器。
它集压电式力传感器和压电式加速度传感器于一体,其作用是在力传递点测量激振力的同时测量该点的运动响应。
因此阻抗头由两部分组成,一部分是力传感器,另一部分是加速度传感器,它的优点是,保证测量点的响应就是激振点的响应。
使用时将小头(测力端)连向结构,大头(测量加速度)与激振器的施力杆相连。
从“力信号输出端”测量激振力的信号,从“加速度信号输出端”测量加速度的响应信号。
9、电阻应变式传感器
电阻式应变式传感器是将被测的机械振动量转换成传感元件电阻的变化量。
实现这种机电转换的传感元件有多种形式,其中最常见的是电阻应变式传感器。
电阻应变片的工作原理为:应变片粘贴在某试件上时,试件受力变形,应变片原长变化,从而应变片阻值变化,实验证明,在试件的弹性变化范围内,应变片电阻的相对变化和其长度的相对变化成正比。
10、激光传感器
激光传感器利用激光技术进行测量的传感器。
它由激光器、激光检测器和测量电路组成。
激光传感器是新型测量仪表,它的优点是能实现无接触远距离测量,速度快,精度高,量程大,抗光、电干扰能力强等,极适合于工业和实验室的非接触测量应用。
智能加速度传感器的工作原理是:敏感元件将测点的加速度信号转换为相应的电信号,进入前置放大电路,经过信号调理电路改善信号的信噪比,再进行模数转换得到数字信号,最后送入计算机,计算机再进行数据存储和显示。
当传感元件以加速度a运动时,质量块受到一个与加速度方向相反的惯性力作用,发生与加速度成正比a的形变,使悬臂梁也随之产生应力和应变。
该变形被粘贴在悬臂梁上的扩散电阻感受到。
根据硅的压阻效应,扩散电阻的阻值发生与应变成正比的变化,将这个电阻作为电桥的一个桥臂,通过测量电桥输出电压的变化可以完成对加速度的测量
采用MMA7455L的IIC模式
MMA7455L是一款低重力、串行数据输出(包括IIC和SPI模式)、低功耗、紧凑型电容式微机械加速度传感器,具有信号调理、低通滤波器、温度补偿、自测、可配置通过中断引脚(INT1或INT2)检测0g、以及脉冲检测(用于快速运动检测)等功能。
0g偏置和灵敏度是出厂配置,无需外部器件。
我们可以运用指定的0g寄存器和g-Select量程选择对0g偏置进行校准,量程可通过命令选择3个加速度范围(2g/4g/8g,1g=9.807m/s2)。
可以实现基于运动的功能,如倾斜滚动、游戏控制、按键静音和手持终端的自由落体硬盘驱动保护、门限检测和点击检测功能等。
提供IIC和SPI接口,方便与MCU通讯,因此非常适用于手机或个人设备中的运动运用。
MMA7455L还具备待机模式,使它成为电池供电的手持式电子器件的理想选择。
MMA7455L同时具有如下特性:封装小,LGA-(3mm*5mm*1mm)封装,具备Z 轴自检功能;2.4-3.6V低压操作;可用指定寄存器进行偏移;可编程的阀值中断输出;用于动作识别(撞击、振动、自由落体)的电平检测功能;用于单击和双击识别的脉冲检测功能;在8bit模式下,测量的加速度范围为2g,4g,8g 时,其分辨率分别达到64LSB/g,32LSB/g,16LSB/g。
可耐高强度冲击达5000g,低功耗特性,使其可用于手持电子设备等。
它是由一个表面微机械电容传感元件(g-cell)和一个信号调理ASIC容纳在单一封装中。
g-cell是由半导体材料(多晶硅)使用半导体加工(掩膜和蚀刻)工艺成型的机械结构,它可以建模成连接到一个可移动中心质量块的极板和两块固定极板的组合,质量块得极板可以在两块固定的极板间移动。
当系统给定一个加速度值时,中心质量块所附属的可移动极板则偏离它的静止位置。
这样可移动极板到一边固定板的距离就会增加,到另一边的固定板见间的距离就会减少,距离的班花就是对加速度值得测量。
g-cell极板组成了两个背靠背的电容,当在加速度的作用下中从而引起每个电容值的改变(如图4所示)。
同时ASIC利用开关电容技术测量g-cell的电容并且从两个电容的差别中提取加速度数据。
ASIC再进行型号调理、型号滤波最后提供一个提供一个与加速度成比例的数字输出。
MMA7455L的内部结构图如图5所示,X,Y,Z三轴互相垂直三轴上的加速度值分别由X轴变换器、Y轴变换器、Z轴变换器感知,再经过容压转化器、放大增益、AD转换和各种补偿修正后以数字方式通过SPI或IIC串行接口输出。
图4 简明g-cell物理模型
图5 MMA7455L内部结构图
综上可知,采用MMA7455L的IIC模式电路相对简单,且预计能获得比较好的效果(3). 加速度传感器,连接图如下图所示:
(4)单片机最小系统
单片机的最小系统电路图如图6所示,在此介绍复位电路和时钟电路。
单片机最小系统
复位电路:单片机STC89C52最小系统的复位电路由电阻R2,电容C3和复位开关S2组成,其复位端为第9脚。
单片机一上电,由电容电压变化的连续性,端立即变为高点平,实现单片机的上电立即复位功能。
单片机上电后,按下复位上电开关S2后,第9脚的电压由原来的低电平变为高电平,使单片机实现复位操作。
也就是当该端子上保持两个机器周期的高水平时,可对STC89C52单片机实现复位操作。
时钟电路:时钟电路采用内部时钟方式,由电容C1、C4和11.0592MHz 的晶振Y1组成,接在单片机的第18和19脚(即XTAL1和XTAL2端)。
STC89C52内部有一个用于构成振荡器的高增益反向放大器,它的输入端为芯片引脚XTAL1,输出端为XTAL2。
这两个引脚跨接石英晶体和微调电容,构成一个稳定的自激振荡器。
电路中的电容C1、C4可在5~30 pF之间选择,该电容的大小通常会影响振荡器频率的高低,振荡器的稳定性和起振的快速性。
晶体振荡的频率范围通
常是在1.2-12MHZ,晶体的频率越高,单片机的运行速度也就越快。
但反过来,
运行速度越快对存储器的速度要求就越高,对印制电路板的要求也就越高,即要求线间的寄生电容要小。
晶体和电容应尽可能安装的与单片机芯片靠近,以减少寄生电容,更好的保证振荡器稳定、可靠的工作。
为了提高温度的稳定性,应采用温度稳定性能好的电容。
(5)传感器电路
加速度传感器电路:MMA7455L的芯片引脚功能说明如表1所示。
MMA7455L的IIC模式(如图7所示)通信协议是根据菲利普半导体公司的标准,在这个模块的接口中,只有串行数据线(SDA)和串行时钟线(SCL)是需要的。
8位串行双向数据传输在标准模式下可以达到100kbit/s,在最快的模式下可以达到400kbit/s。
SDA和SCL都是双向数据线,必须通过上拉电阻连接到正电源。
电阻选择2.2千欧到4.7千欧比较适宜,在此,我选择4.7千欧。
表1 MMA7455L引脚功能说明
11 NC 空角、不接或接地输
入
12 SDO SPI串行数据输出输
出
13 SDA/SDI/S
DO
IIC串行数据输出/SPI串行数据输
入/3线串行数据接口输出
双
向/输入/
输出
14 SCL/SPC IIC/SPI时钟信号输出输
入
MMA7455L的IIC模式
IIC模式连接的好处是很多芯片可以连接到这条总线上,但是也受总线容量的限制。
简单的2线串行IIC模式将连线最小化,因此模块有较少的引脚需要连线,体积小,价格便宜。
4 软件设计
部分程序:
#include <REG51.H>
#include <math.h> //Keil library
#include <stdio.h> //Keil library
#include <INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
sbit SCL=P2^7; //IIC时钟引脚定义
sbit SDA=P2^6; //IIC数据引脚定义
#define SlaveAddress 0x38 //定义器件在IIC总线中的从地址,根据SA0地址引脚不同修改
typedef unsigned char BYTE;
typedef unsigned short WORD;
BYTE BUF[8]; //接收数据缓存区
uchar ge,shi,bai,qian,wan; //显示变量
int dis_data; //变量
int x,y,z;
void delay(unsigned int k);
void Init_MMA8452(void); //初始化MMA8452
void conversion(uint temp_data);
void Single_Write_MMA8452(uchar REG_Address,uchar REG_data); //单个写入数据
uchar Single_Read_MMA8452(uchar REG_Address); //单个读取内部寄存器数据
void Multiple_Read_MMA8452(); //连续的读取内部寄存器数据
void Delay5us();
void Delay5ms();
void MMA8452_Start();
void MMA8452_Stop();
void MMA8452_SendACK(bit ack);
bit MMA8452_RecvACK();
void MMA8452_SendByte(BYTE dat);
BYTE MMA8452_RecvByte();
void MMA8452_ReadPage();
void MMA8452_WritePage();
uchar RX_DATA;
void serial_serve(void) interrupt 4
{
RI=0;
RX_DATA=SBUF;
}
//*********************************************
//串口初始化
//9600 bps @ 11.059 MHz
void init_uart()
{
TMOD=0x21;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
PS=1; //串口中断设为高优先级别
TR0=1; //启动定时器
TR1=1;
ET0=1; //打开定时器0中断
ES=1;
EA=1;
}
//*********串口数据发送******************
void SeriPushSend(uchar send_data)
{
SBUF=send_data;
while(!TI);TI=0;
}
//********************************************************* void conversion(uint temp_data)
{
wan=temp_data/10000+0x30 ;
temp_data=temp_data%10000; //取余运算
qian=temp_data/1000+0x30 ;
temp_data=temp_data%1000; //取余运算
bai=temp_data/100+0x30 ;
temp_data=temp_data%100; //取余运算
shi=temp_data/10+0x30 ;
temp_data=temp_data%10; //取余运算
ge=temp_data+0x30;
}
/*******************************/
void delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
{
for(j=0;j<121;j++)
{;}}
}
/**************************************
不同的工作环境,需要调整此函数,注意时钟过快时需要修改
当改用1T的MCU时,请调整此延时函数
**************************************/
void Delay5us()
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
/**************************************
不同的工作环境,需要调整此函数
当改用1T的MCU时,请调整此延时函数
**************************************/ void Delay5ms()
{
WORD n = 560;
while (n--);
}
/**************************************
起始信号
**************************************/ void MMA8452_Start()
{
SDA = 1; //拉高数据线 SCL = 1; //拉高时钟线 Delay5us(); //延时
SDA = 0; //产生下降沿 Delay5us(); //延时
SCL = 0; //拉低时钟线}
/**************************************
停止信号
**************************************/ void MMA8452_Stop()
{
SDA = 0; //拉低数据线 SCL = 1; //拉高时钟线 Delay5us(); //延时
SDA = 1; //产生上升沿 Delay5us(); //延时
}
/**************************************
发送应答信号
入口参数:ack (0:ACK 1:NAK)
**************************************/ void MMA8452_SendACK(bit ack)
{
SDA = ack; //写应答信号 SCL = 1; //拉高时钟线 Delay5us(); //延时
SCL = 0; //拉低时钟线 Delay5us(); //延时
/**************************************
接收应答信号
**************************************/
bit MMA8452_RecvACK()
{
SCL = 1; //拉高时钟线
Delay5us(); //延时
CY = SDA; //读应答信号
SCL = 0; //拉低时钟线
Delay5us(); //延时
return CY;
}
/**************************************
向IIC总线发送一个字节数据
**************************************/
void MMA8452_SendByte(BYTE dat)
{
BYTE i;
for (i=0; i<8; i++) //8位计数器
{
dat <<= 1; //移出数据的最高位
SDA = CY; //送数据口
SCL = 1; //拉高时钟线
Delay5us(); //延时
SCL = 0; //拉低时钟线
Delay5us(); //延时
}
MMA8452_RecvACK();
}
/**************************************
从IIC总线接收一个字节数据
**************************************/
BYTE MMA8452_RecvByte()
{
BYTE i;
BYTE dat = 0;
SDA = 1; //使能内部上拉,准备读取数据, for (i=0; i<8; i++) //8位计数器
{
dat <<= 1;
SCL = 1; //拉高时钟线
Delay5us(); //延时
dat |= SDA; //读数据
SCL = 0; //拉低时钟线
Delay5us(); //延时
}
return dat;
}
//******单字节写入*******************************************
void Single_Write_MMA8452(uchar REG_Address,uchar REG_data)
{
MMA8452_Start(); //起始信号
MMA8452_SendByte(SlaveAddress); //发送设备地址+写信号
MMA8452_SendByte(REG_Address); //内部寄存器地址
MMA8452_SendByte(REG_data); //内部寄存器数据
MMA8452_Stop(); //发送停止信号
}
//********单字节读取*****************************************
/*
uchar Single_Read_MMA8452(uchar REG_Address)
{ uchar REG_data;
MMA8452_Start(); //起始信号
MMA8452_SendByte(SlaveAddress); //发送设备地址+写信号
MMA8452_SendByte(REG_Address); //发送存储单元地址,从0开始
MMA8452_Start(); //起始信号
MMA8452_SendByte(SlaveAddress+1); //发送设备地址+读信号
REG_data=MMA8452_RecvByte(); //读出寄存器数据MMA8452_SendACK(1);
MMA8452_Stop(); //停止信号
return REG_data;
}
*/
//*********************************************************
//
//连续读出MMA8452内部加速度数据,地址范围0x01~0x06
//
//*********************************************************
void Multiple_read_MMA8452(void)
{ uchar i;
MMA8452_Start(); //起始信号
MMA8452_SendByte(SlaveAddress); //发送设备地址+写信号
MMA8452_SendByte(0x01); //发送存储单元地址,从0x01开始
MMA8452_Start(); //起始信号
MMA8452_SendByte(SlaveAddress+1); //发送设备地址+读信号 for (i=0; i<6; i++) //连续读取6个地址数据,
存储中BUF
{
BUF[i] = MMA8452_RecvByte(); //BUF[0]存储0x32地址中的数据
if (i == 5)
{
MMA8452_SendACK(1); //最后一个数据需要回NOACK
}
else
{
MMA8452_SendACK(0); //回应ACK
}
}
MMA8452_Stop(); //停止信号
Delay5ms();
}
//***************************************************************** //初始化MMA8452,根据需要请参考pdf进行修改************************ void Init_MMA8452()
{
Single_Write_MMA8452(0x2A,0x01); //
Single_Write_MMA8452(0x2B,0x02); //
}
//******************************************************************* ****
//显示x轴
void display_x()
{ float temp;
// SeriPushSend('X');
dis_data=(BUF[0]<<8)|BUF[1]; //合成数据
dis_data>>=4;
x=dis_data;
if(dis_data<0){
dis_data=-dis_data;
SeriPushSend('-');
}
else SeriPushSend('+');
temp=(float)dis_data; //计算数据和显示
conversion(temp); //转换出显示需要的数据
// SeriPushSend(':');
SeriPushSend(qian);
SeriPushSend('.');
SeriPushSend(bai);
}
//******************************************************************* ****
//显示y轴
void display_y()
{ float temp;
SeriPushSend('Y');
dis_data=(BUF[2]<<8)|BUF[3]; //合成数据
dis_data>>=4;
y=dis_data;
if(dis_data<0){
dis_data=-dis_data;
SeriPushSend('-');
}
else SeriPushSend('+');
temp=(float)dis_data; //计算数据和显示
conversion(temp); //转换出显示需要的数据
SeriPushSend(':');
SeriPushSend(qian);
SeriPushSend('.');
SeriPushSend(bai);
SeriPushSend(shi);
}
//******************************************************************* ****
//显示z轴
void display_z()
{ float temp;
SeriPushSend('Z');
dis_data=(BUF[4]<<8)|BUF[5]; //合成数据
dis_data>>=4;
z=dis_data;
if(dis_data<0){
dis_data=-dis_data;
SeriPushSend('-');
}
else SeriPushSend('+');
temp=(float)dis_data; //计算数据和显示
conversion(temp); //转换出显示需要的数据
SeriPushSend(':');
SeriPushSend(qian);
SeriPushSend('.');
SeriPushSend(shi);
}
//*********************************************************
//******主程序********
//*********************************************************
void main()
{
// uchar devid;
delay(2); //上电延时
init_uart();
Init_MMA8452(); //初始化MMA8452
RX_DATA=0;
while(1) //循环
{
// if( RX_DATA==0x31){
Init_MMA8452(); //初始化MMA8452
Multiple_Read_MMA8452(); //连续读出数据,存储在BUF中
SeriPushSend(0x0d);
SeriPushSend(0x0a);
RX_DATA=0;
delay(50); //延时50ms
// }
}
}
心得体会:
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整三星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对C语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在和同学的互帮互助中,终于游逆而解。
参考文献:
1、《传感器与检测技术》
彭军编著
西安电子科技大出版社 2003 2、《MCS-51 单片机实用接口技术》
李华编著
北京航空航天大学出版社 1993 3、《自动监测技术与装置》
张宏建编著
化学工业出版社 2004
4、《电子技术实验与课程设计》
毕满清编著
机械工业出版社 2005
5、《电子线路设计、实验、测试》(第2版)
自美编著
高等教育出版社 2000。