传感器课程设计台风监测.docx
- 文档编号:13374163
- 上传时间:2023-06-13
- 格式:DOCX
- 页数:29
- 大小:1.33MB
传感器课程设计台风监测.docx
《传感器课程设计台风监测.docx》由会员分享,可在线阅读,更多相关《传感器课程设计台风监测.docx(29页珍藏版)》请在冰点文库上搜索。
传感器课程设计台风监测
传感器课程设计报告
台风监测
基于AT89C52的台风风速测量
——模具制作与软件程序设计
前言
近年来,在全球气候变暖背景下,全球高影响台风事件频发,灾害影响Et趋严重。
在我国,以登陆台风为代表的极端天气事件呈明显增多的趋势,登陆台风的平均强度明显增强、强台风数量明显增多,台风登陆时间更加集中、登陆季节明显缩短。
随着近年来高大建筑物的增多,对于台风等自然灾害对其影响的问题逐渐显现,抗风减灾成为一个热门的研究课题,从而需要专门针对高大建筑物的监测系统来实现安全监测任务。
风是大自然普遍存在的,而风这一定义的出现以及开始进行测量则是有很久的历史,在奴隶社会初期,我国的人们就开始进行简单的测量以及判断,只是那个时候的测量方法是通过旗帜来判断的,一旗帜飘扬的方向以及平率来进行判断风向风速,这种方法只能进行简单的判断,而在东汉的进一步发展将风向风速的测量有一定的发展,但是在进行测量的时候依旧是只能进行判断,而无法得出准确的值,但是现在使用传感器来进行测量就能够了解到某一时刻的准确的风向风速,同时还能进行计算某一段的风向风速的平均值。
目前,在工农业生产领域,工厂的自动流水生产线,全自动加工设备,都大量地采用了各种各样的传感器,它们在合理化地进行生产,减轻人们的劳动强度,避免有害的作业发挥了巨大的作用。
在军事国防领域,各种侦测设备,红外夜视探测,雷达跟踪、武器的精确制导,没有传感器是难以实现的。
在航空航天领域,空中管制、导航、飞机的飞行管理和自动驾驶,仪表着陆盲降系统,都需要传感器。
人造卫星的遥感遥测都与传感器紧密相关。
没有传感器,要实现这样的功能那是不可能的。
国内外使用的传感器及其部件大多以机械的为主,此类传感器一般是体积大,测量精度不高,响应时间长,灵敏度低,价格昂贵。
而且,它们的电路复杂,占用面积大。
为了使传感器的测量精度,稳定性和可靠性都较高,同时避免繁琐的机械传动,传感器的研究方向已经向着小型化,低功耗,集成化,智能化方向发展。
1设计思路
本文针对风杯的转速进行测量,以单片机为核心对光电开关产生的数字信号进行运算,从而测得的转速,然后用1602LCD液晶显示屏把转动频率显示出来。
即通过光电开关将转动的频率转换成0,1的数字量,只要转轴每旋转一周,产生一个或固定的多个脉冲,并将脉冲送入单片机中进行计数和计算,就可获得转速的信息,从而计算风速的大小。
风杯式风速计:
它是最常见的一种风速计。
转杯式风速计最早由英国J.T.R.鲁宾孙发明(1846),当时是四杯,后来改用三杯。
三个互成120度固定在架上的抛物形或半球形的空杯都顺一面,整个架子连同风杯装在一个可以自由转动的轴上。
在风力的作用下风杯绕轴旋转,其转速正比于风速。
转速可以用电触点、测速发电机或光电计数器等记录。
当风杯转动时,通过主轴带动多齿转盘旋转,使下面光敏三极管接收上面发光二极管照射下来的光线,处于导通或截止状态,形成与风杯转速成正比的频率信号,通过计数器计数,换算后得到实际风速值。
结构框图:
2传感器选择:
这种光电传感器工作原理是将砷化镓红外发光管和硅光敏三极管装在中间带槽的支架上,当槽内无物体是,砷化镓发光管发出的光直接照在硅光敏三极管的窗口上,从而产生大的电流输出,当有物体经过槽内则挡住光线,光敏管无输出,这样可以识别物体的有无。
本设计用的槽式光电开关传感器红线是接电源,与蓝线之间接一个上拉电阻来驱动三极管集电极,集电极输出级黄线,二极管正相接电源导通,二极管负相和三极管发射极接地就是黑线。
传感器内部电路示意图
输出波形
外部尺寸
3模具制作:
3.1材料
硬纸板(风杯的主干与风杯主材料)、电机(转轴)、木条(固定风杯与传感器)
3.2设计模板
风杯测风速是一种较常见的测风速方式,输入部分一般由3~4个半球形或抛物锥形的空心杯壳组成,杯壳固定在互成120度角的三叉星形支架上或互成90度角的十字星之家的登场旋臂上。
杯的凹面顺着同一方向排列,整个横架则固定在能旋转的垂直轴上。
由于凹面和凸面所受的风的压力不相等,风杯在受到扭力作用时开始旋转,它的转速与风速呈一定关系。
当风杯转动时,通过转盘下面的光电传感器测出转速,从而能测出风速。
本次课程设计前期我们买了一个FY-FS风速传感器,就是一个三杯式传感器,内置有光电传感器,但预验收时被要求改,所以我们用硬卡纸和电机转轴做了了一个风杯的模型。
风杯参数:
风杯的半径3.5cm,风杯到转轴的距离为7cm,底部刻度盘的半径为3.5cm,有16个齿。
上图为主干与风杯的设计,风杆加入木条固定。
码盘
4程序设计:
4.1设计思路
因选用槽型透射式光电开关式传感器进行数据的采集,所以采集到的信号为数字量,从而可直接利用单片机的定时器与计数器对数据进行收集之后再处理,再通过显示模块进行结果显示。
这里设置T1为定时器,T0为计数器。
定时器1选用工作方式2,计数器采用工作方式1。
从表中可以看出,工作方式2为自动再装入8位计数器,定时时间为T=(256-初值)*机器周期。
本设计采用12M的无源晶振,所以机器周期为1us,设初值为56,则定时器定时时间为0.2ms。
工作方式1为16位计数器最高可计到65536。
所以在程序设计时为防止风速过快导致溢出则应该先在0.1s时对于计数的数据做一个判断,这里设置分界点为6000。
若小于6000则可累积到1s保持精确度,若大于6000则为防止溢出直接对此数据进行处理及显示,不过需要转换数量级。
利用单片机的定时中断在中断程序中要完成对时间的累积、数据的判断、处理及显示。
4.2主程序(STC89C52)
4.1.1程序框图:
4.2.2主程序原代码
#include
/***************************************************
定时器为T1方式2,计数器为T0,P3^4;输入方波
***************************************************/
//为什么精度变为10HZ
//因为一开始把5000写成了500,时间变为0.1s,以致个位丢失
#defineuint8unsignedchar
#defineuint16unsignedint
uint16count,add,last;
voidtimer_init()
{
TMOD=0X25;//定时器1,计数器0
TH0=0;
TL0=0;
TH1=56;//设定为0.2ms
TL1=56;
ET1=1;
EA=1;
TR0=1;
TR1=1;
}
uint16read_sum()
{
uint8num1,num2,num3;
uint16val;
do
{
num1=TH0;
num2=TL0;
num3=TH0;
}
while(num1!
=num3);//防止进位时读漏
val=num1*256+num2;
returnval;
}
voidmain()
{
inint_lcd1602();
show_char();
timer_init();
while
(1)
{
count=read_sum();
}
}
4.3中断程序
4.3.1中断程序流程图
4.3.2中断程序源代码
voidT1_INIT()interrupt3
{
add++;
if(add>=500)//积累到0.1秒
{
if(count<=6000)
{
if(add>=5000)//积累到一秒
{
show_dat(count);
TH0=0;
TL0=0;
add=0;
}
}
if(count>6000)
{
show_dat_h(count);//*显示驱动的子函数*/
TH0=0;
TL0=0;
add=0;
}
}
}
4.4LCD1602程序
4.4.1LCD1602硬件原理
模块尺寸:
引脚定义:
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
指令:
4.4.2显示流程图
4.4.3显示驱动程序
#ifndef_LCD1602_H_
#define_LCD1602_H_
#include
#defineuint8unsignedchar
#defineuint16unsignedint
/*接口定义*/
sbitlcd1602_RS=P0^7;//命令控制端口
sbitlcd1602_RW=P0^6;//读写控制端口
sbitlcd1602_EN=P0^5;//使能端口
sbitlcd1602_BUSY=P2^7;//繁忙标志
#definelcd1602_dataP2//数据接收
/*函数申明*/
voiddelay(uint8t);
voidlcd1602_busy();
voidlcd1602_write_cmd(uint8cmd);
voidlcd1602_write_dat(uint8dat);
voidinint_lcd1602();
voidshow_char();
voidshow_dat(uint16hz);
voidshow_dat_h(uint16hz);
voidlcd_display0(unsignedcharx,unsignedchar*p);
#endif
#include
unsignedcharValue[]={""};
floatWS=0;
unsignedintWS1=0;
//***********************底层函数****************
voiddelay(uint8t)
{
uint8i;
for(i=0;i<5;i++)
while(t--);
}
voidlcd1602_busy()
{
do
{
lcd1602_RS=1;
lcd1602_RW=1;
lcd1602_EN=0;
lcd1602_EN=1;
}
while(lcd1602_BUSY);
lcd1602_EN=0;
}
voidlcd1602_write_cmd(uint8cmd)
{
lcd1602_busy();
lcd1602_RS=0;
lcd1602_RW=0;
lcd1602_EN=1;
lcd1602_data=cmd;
delay
(1);
lcd1602_EN=0;
}
voidlcd1602_write_dat(uint8dat)
{
lcd1602_busy();
lcd1602_RS=1;
lcd1602_RW=0;
lcd1602_EN=1;
lcd1602_data=dat;
delay
(1);
lcd1602_EN=0;
}
voidinint_lcd1602()
{
lcd1602_write_cmd(0x38);
lcd1602_write_cmd(0x0c);//光标开及设置
lcd1602_write_cmd(0x06);//光标移动设置
lcd1602_write_cmd(0x01);//清零
}
//********************LCD显示***************
voidlcd_display(unsignedcharx,unsignedchar*p)
{
unsignedintNUM;
lcd1602_write_cmd(x);
for(NUM=0;NUM<14;NUM++)
{
lcd1602_write_dat(p[NUM]);
}
}
voidshow_char(uint16fre)
{
unsignedintj=0;
if(fre==0)
{
WS=0;
}
else
{
WS=(float)(fre/16*0.07);
}
WS1=(int)WS;
Value[0]=WS1/100+'0';
Value[1]=WS1/10%10+'0';
Value[2]=WS1%10+'0';
Value[3]='.';
Value[4]=(int)((WS-WS1)*10)+'0';
for(j=0;j<5;j++)
{
lcd1602_write_cmd(0xc0+0x06+j);
lcd1602_write_dat(Value[j]);
}
lcd1602_write_cmd(0xc0+11);
lcd1602_write_dat('');
}
voidshow_dat(uint16hz)
{
uint8flag[8],i;
lcd1602_write_cmd(0x80);
lcd1602_write_dat('f');
lcd1602_write_cmd(0x81);
lcd1602_write_dat('=');
if(hz<1000)
{
flag[0]=hz/100;
flag[1]=hz/10%10;
flag[2]=hz%10;
for(i=0;i<=2;i++)
{
lcd1602_write_cmd(0x82+i);
lcd1602_write_dat(flag[i]+'0');
}
lcd1602_write_cmd(0x85);
lcd1602_write_dat('H');
lcd1602_write_cmd(0x86);
lcd1602_write_dat('z');
lcd1602_write_cmd(0x87);
lcd1602_write_dat('');
lcd1602_write_cmd(0x88);
lcd1602_write_dat('');
lcd1602_write_cmd(0x89);
lcd1602_write_dat('');
lcd1602_write_cmd(0x80+11);
lcd1602_write_dat('');
lcd1602_write_cmd(0x80+12);
lcd1602_write_dat('');
lcd1602_write_cmd(0x80+13);
lcd1602_write_dat('');
lcd1602_write_cmd(0x80+14);
lcd1602_write_dat('');
lcd1602_write_cmd(0x80+15);
lcd1602_write_dat('');
show_char(hz);
}
if(hz>=1000&&hz<100000)
{
flag[0]=hz/10000+2;
flag[1]=hz/1000%10+2;
flag[2]=0;
flag[3]=hz/100%10+2;
flag[4]=hz/10%10+2;
for(i=0;i<=4;i++)
{
lcd1602_write_cmd(0x82+i);
lcd1602_write_dat(flag[i]+'.');
}
lcd1602_write_cmd(0x87);
lcd1602_write_dat('K');
lcd1602_write_cmd(0x88);
lcd1602_write_dat('H');
lcd1602_write_cmd(0x89);
lcd1602_write_dat('z');
}
if(hz>=100000&&hz<=499000)
{
flag[0]=hz/100000+2;
flag[1]=hz/10000%10+2;
flag[2]=hz/1000%10+2;
flag[3]=0;
flag[4]=hz/100%10+2;
for(i=0;i<=4;i++)
{
lcd1602_write_cmd(0x82+i);
lcd1602_write_dat(flag[i]+'.');
}
lcd1602_write_cmd(0x87);
lcd1602_write_dat('K');
lcd1602_write_cmd(0x88);
lcd1602_write_dat('H');
lcd1602_write_cmd(0x89);
lcd1602_write_dat('z');
}
voidshow_dat_h(uint16hz)
{
uint8flag[8],i;
lcd1602_write_cmd(0x80);
lcd1602_write_dat('f');
lcd1602_write_cmd(0x81);
lcd1602_write_dat('=');
if(hz>=100&&hz<10000)
{
flag[0]=hz/1000+2;
flag[1]=hz/100%10+2;
flag[2]=0;
flag[3]=hz/10%10+2;
flag[4]=hz%10+2;
for(i=0;i<=4;i++)
{
lcd1602_write_cmd(0x82+i);
lcd1602_write_dat(flag[i]+'.');
}
lcd1602_write_cmd(0x87);
lcd1602_write_dat('K');
lcd1602_write_cmd(0x88);
lcd1602_write_dat('H');
lcd1602_write_cmd(0x89);
lcd1602_write_dat('z');
}
if(hz>=10000&&hz<=49900)
{
flag[0]=hz/10000+2;
flag[1]=hz/1000%10+2;
flag[2]=hz/100%10+2;
flag[3]=0;
flag[4]=hz/10%10+2;
for(i=0;i<=4;i++)
{
lcd1602_write_cmd(0x82+i);
lcd1602_write_dat(flag[i]+'.');
}
lcd1602_write_cmd(0x87);
lcd1602_write_dat('K');
lcd1602_write_cmd(0x88);
lcd1602_write_dat('H');
lcd1602_write_cmd(0x89);
lcd1602_write_dat('z');
}
}
5.设计硬件
如下图所示,X1为12MHz的晶振,9口为复位接口,通过开关控制。
用于测量转速的脉冲通过P3.4输入单片机,定时计数器T0对脉冲信号进行计数,用定时计数器T1的方式2进行定时,每10ms产生一个中断对1602LCD液晶显示屏进行刷新,产生100个中断后(即1s),进行一次转速处理,再通过单片机对T1的脉冲数进行运算转换后,用1602LCD液晶显示屏显示电机的转速。
5.1时钟电路
单片机各功能部件的运行都是以时钟控制信号为基准,有条不紊地一拍一拍地工作。
因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。
本设计中此采用内部时钟方式,如图9所示,以石英晶体振荡器和两个片电容组成外部振荡源。
片内的高增益反相放大器通过XTAL1、XTAL2外接,作为反馈元件的片外晶体振荡器与电容组成的并联谐振回路构成一个自激振荡器,向内部时钟电路提供振荡时钟。
振荡器的频率取决于晶振的振荡频率,振荡频率范围为1.2—12MHz。
工程应用时通常采用6MHz或12MHz。
图中X1为12MHz,电容C2、C3为30pF,它们一起构成此单片机的自激振荡器。
晶振两端再去接入单片机的XTAL1,XTAL2.
5.2复位电路
智能系统一般有开关复位和上电复位电路。
复位电路的实现通常有两种方式:
即专用监控电路和RC复位电路。
前者电路实现简单,成本低,但复位可靠性相对较低;后者成本较高,复位可靠性高,尤其是高可靠重复复位。
对于复位要求高的场合,大多采用这种方式。
本系统采用的是RC复位电路。
RC复位电路的实质是一阶充放电电路,现结合图3-1所示,说明这种复位电路的特点。
系统按键按下时该电路提供有效的复位信号RST(高电平),同时电容被短路放电;按键松开时,VCC对电容充电,充电电流在电阻上,RST依然为高电平,仍然复位,充电完成后,电容相当于开路,RST为低电平,正常工作。
单片机的RST引脚为复位(Reset)端。
当单片机振荡器工作时,该引脚上出现持续两个机器周期的低电平,就可以实现系统复位,使单片机回到初始状态。
本设计采用手动复位,用一个电容与一个10K电阻串联组成,电阻接VCC,电容接地,RESET脚接在它们中间,RC选择10uF,在电容两端并联,就成了按键复位电路,未上电时,RST端为高电平,只要按下这个按键,RST端转换为低电平,经过两个机器周期后,单片机就能复位。
5.3LCD1602电路
5.4整体硬件原理图:
5.5PCB原理图
6.总结
这次课程设计,从最初的确定课题,到后面的资料收集,电路设
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 传感器 课程设计 台风 监测