4.1 振动传感实验
一、实验目的 |
掌握LPC2378芯片的编程方法
掌握震动传感器的使用方法
掌握震动传感器在实际中的应用。
二、实验材料 |
具有串口通讯的电脑一台
ADS1.2 开发环境
J-Link-ARM仿真器一个
LPC2378节点板一个
三、实验原理 |
振动传感器实验环境由PC机(安装有Windows XP操作系统、ADS1.2集成开发环境和J-Link-ARM-V410i仿真器)、J-Link-ARM仿真器、NXP LPC2378实验节点板、振动传感器采用振动开关SW-460、实验模块和LCD显示实验模块组成,如图4.1.1所示。
图4.1.1 传感器实验环境
1.电路原理图
如图4.1.2所示,为本次试验所用振动传感器(振动开关)SW-460的芯片控制引脚图;图4.1.3为简化的振动传感器(振动开关)SW-460示意图;图4.1.4给出振动传感器(振动开关)SW-460的实物模型图,方便同学们理解振动开关(振动开关)SW-460的内部组成以及各个部分的功能;表4.1.1为振动传感器(振动开关)SW-460的组成原件的规格信息。
图 4.1.3振动传感器简化电路图
表4.1.1振动传感器原件规格
项目名 | 品名 | 规格、材质 | 外表处理 |
---|---|---|---|
A | 珠子 | 青铜或不锈钢 | 底层镀镍表面镀金或银 |
B | 铜管 | 青铜 | 底层镀镍表面镀金或银或镍 |
C | 基座 | ABS或者PC | 透明或者白色 |
D | 套管 | 热缩套管 | 黑色或其他 |
E | 导针 | 硬青铜导针 | 底层镀镍表层镀金 |
F | 导针 | 硬青铜导针 | 底层镀镍表层镀锡 |
如表4.1.1所示所示,为振动开关SW-460构造部件的规格。Sw-460的性能详细参数如下所述:
(1) 本开关使用金属材质制造电气特性与水银开关近似,但没有水银开关的危险性及环保问题,而有晃动时单向导通之相同特性。装配使用更为方便安全。
(2) 工作特性:金色–端为(ON)导通触发端,银色一端为(OFF)开路端,当受到外力摇晃而达到适当晃动力时或金色一端设置角度低于水平适当角度时,导通电气特性要恢复开路状熊(OFF)时,开关设置环境必须为静止,且金色一端设置角度需低于水平10度。
(3) 当开关以水平设置,晃动时可轻易触发;而当银色一端设置向下时,晃动则极不易触发。
(4) 本开关适用于触发小电流电路不适用于当电源开关。
(5) 开关外观以热缩套管封闭可防尘–防潮。
(6) SW-460型开关比SW-200型有较长的导通时间驻较大电流。
(7) SW-460D 加长型双珠开关有更好的导通效果。
2.物理原理
振动传感器的基本工作原理是:当检测到机械振动信号后,它在电路的配合下,将机械振动信号转换为电信号的输出。根据检测振动的方法不同,出现了不同转换方式的振动传感器。常用的振动传感器有下列几种形式:
(1) 压电片谐振式振动传感器,压电片谐振式振动传感器使用压电片直接将振动信号转换为电信号输出。
(2) 机械式振动传感器,机械式振动传感器采用最基础的振动检测方式,其结构是在一个金属的圆筒内放置一个由弹簧连接的振动金属球(两者不接触),分别从两个部分引线作为信号输出的两个电极。当弹簧金属球受到振动以后,与外界的振动信号发生谐振,金属球与圆筒内壁相碰撞,在连接点上便可输出一个电信号。
(3) 全方位微型振动传感器,微型振动传感器结构仍然采用了机械式振动传感器的结构形式,不同的是将金属圆筒改用耐氧化的金属材料并作成单端封闭的管状结构,两个单端封闭的管状体由中间的管状绝缘体连接成一体,其空间密封一根质量很轻的碳棒,两个半封闭的金属圆筒上引出两个电极。传感器受到振动后,碳棒振动忽而接通两个电极,忽而断开两个电极。在电路的配合下,振动信号转换为电信号输出。
(4) 电磁感应式振动传感器,电磁感应式振动传感器是利用电磁感应的原理设计的一种振动传感器,其结构由永久磁铁和一个线圈组成,根据磁铁固定和位移又分为静磁结构和动磁结构两种形式。动磁结构的线圈同定不动.当振动出现后.永久磁铁振动位移,从而引起线圈中的磁通量发生变化,在线圈中产生感生电动势;静磁结构的线圈固定在一块永久磁铁上,受到振动位移后,与磁铁组成的磁路磁阻发生变化,从而引起线圈中磁通量的变化,线圈中产生感生电动势。图7所示的电磁感应式振动传感器是一种动磁结构的传感器,感应线圈使用了铁氧体磁芯的一个大电感线圈。
(5) 灵敏度可调整的振动传感模块,振动传感模块实质上就是振动传感器与一个单片机的组合,本文的传感模块使用了两个全方位微型振动传感器,在线路板上垂直分布,两个振动传感信号分别送到一片PHILIPS单片机的两个输入端口上,由另两个端口输出经过处理的数字信号。振动信号出现后,振动信号的强度不同,振动传感器输出的振动信号的脉冲宽度和振动持续时间不同,单片机将检测到的信号脉宽和振动信号的持续时间,通过一定的算法并与灵敏度等级比较,输出振动信号。振动灵敏度通过PCB板上的按键开关设置,设置后的灵敏度级别数据储存到单片机内部的EEPROM中。灵敏度设置数据具有记忆功能,直到再次设置来修改。
四、实验内容 |
1.试验器材连线
本实验所使用的振动传感器模块实物图如图4.1.6所示。
图4.1.6振动传感器模块
将震动传感模块安装到开发板上,然后用AK100或者JLINK仿真器的一端用USB接口与电脑相连,一端的20Pin的JTAG引脚与NXP LPC2378节点板的J2相连,并给NXP LPC2378节点板上电,如下图所示:
图4.1.7震动传感器模块电路接口
2.振动传感器运行测试
务必要注意LPC2378的GPIO管脚的配置,管脚功能选择寄存器PINSEL要设置为00,选择第一功能,即作为GPIO口使用,管脚模式选择寄存器PINMODE要选择00,即管脚具有一个使能的上拉电阻,通过GPIO端口管脚值寄存器IOPIN读取采集来的信号,进而通过LPC2378进行判断处理,最后将结果显示在LCD上面。
(1) 打开工程DCMotor.mcp,编辑主程序文件Main.c。
//传感板IO控制引脚设置
if((IO1PIN&(1<<16))==(1<<16))
{
// FIO3DIR|=1<<3 ;
//ARM控制,针对视频模块的引脚设置 P3.3输出,低电平视频头加电,高电平视频头无电(S1开关未接通)
FIO3DIR &=~(1<<1);
//振动传感器,IO2引脚输入
}
else
{//如果ZIGBEE控制,ARM引脚设置为输入
FIO3DIR =0;
}
//传感板类型识别CODE0~CODE3,作为输入端
FIO2DIR &=~(1<<5);
FIO2DIR &=~(1<<6);
FIO2DIR &=~(1<<7);
FIO2DIR &=~(1<<8);
//设置LCD屏幕引脚
PINSEL3=PINSEL3 & 0x00000000;
IO1DIR=IO1DIR|0x05700000;
//屏幕初始化
RESET0; //复位
delay(50);
RESET1;
delay(100);
lcd_init();
delay(20);
LCD_Frame();
DispAscStr(0,12," shake",6,&xpos,&ypos);
DispChnStr(xpos,ypos,"模块测试自定义",4,&xpos,&ypos);
//振传感器检测
count=FIO3PIN&(1<<1);
if(count==(1<<1))
{
ClearRect(2);
DispAscStr(0,40,"Haha,Shake Switch is On !",20,&xpos,&ypos); //振动
}
return 0;
(2) 显示震动传感器的工作
ClearRect(3);
DispAscStr(0,100,"Module Code:",12,&xpos,&ypos);
if((FIO2PIN&(1<<5))>>5)
{
DispAscStr(xpos,ypos,"1",1,&xpos,&ypos);
}
else
{
DispAscStr(xpos,ypos,"0",1,&xpos,&ypos);
}
if((FIO2PIN&(1<<6))>>6)
{
DispAscStr(xpos,ypos,"1",1,&xpos,&ypos);
}
else
{
DispAscStr(xpos,ypos,"0",1,&xpos,&ypos);
}
if((FIO2PIN&(1<<7))>>7)
{
DispAscStr(xpos,ypos,"1",1,&xpos,&ypos);
}
else
{
DispAscStr(xpos,ypos,"0",1,&xpos,&ypos);
}
if((FIO2PIN&(1<<8))>>8)
{
DispAscStr(xpos,ypos,"1",1,&xpos,&ypos);
}
else
{
DispAscStr(xpos,ypos,"0",1,&xpos,&ypos);
}
(3) 循环检测振动传感器的状态
count=FIO3PIN&(1<<1);
idx=0;
while(1)
{
count=FIO3PIN&(1<<1);
//如果count=1,振动开关状态为“开”
if((count==(1<<1)) && (idx==0))
{
ClearRect(2);
DispAscStr(0,40,"Shake Switch is On !",20,&xpos,&ypos); //振动
idx=1;
}
//如果count=0,振动开关状态为“关”
else if((count==0) && (idx==1))
{
ClearRect(2);
DispAscStr(0,40,"Shake Switch is Off !",21,&xpos,&ypos); //振动
idx=0;
}
}