自行车测速警报系统设计说明.docx
《自行车测速警报系统设计说明.docx》由会员分享,可在线阅读,更多相关《自行车测速警报系统设计说明.docx(12页珍藏版)》请在冰点文库上搜索。
自行车测速警报系统设计说明
嵌入式系统设计
题目:
自行车测速报警系统设计
自行车测速报警系统设计
本设计以AT89C2051为核心,通过霍尔传感器来检测自行车的运转情况进而实现电动自行车的速度,最后用2位的LED能直观的将速度与里程显示给用户,并且在速度高于一定的值时可自动向用户报警,从而达到智能化。
主要研究内容:
1.传感器电路模块设计
光敏电阻对光特别敏感,当白天行驶时,外界光敏电阻对光特别敏感,当黑天行驶时,
外界光源导致光敏电阻发出错误信号;光敏电阻对环境的要求相当高,如果光敏电阻或发光二极管被泥沙或灰尘所覆盖,光敏电阻就不能再进行测量;在雾天和雨天光敏电阻的测量的效果也不好。
而编码器必须安装在车轴上,这样安装就会给用户带来很多不便。
霍尔传感器是对磁敏感的传感元件,是一个3端器件,外形与三极管相似,只要接上电源、地,即可工作,输出通常是集电极开路(OC)门输出,工作电压范围宽,由霍尔元件加整形电路构成的霍尔开关系统,具有输出响应快,数字脉冲性能好,安装方便,性能可靠,不受光线、泥水等因素影响。
所以本设计采用霍尔传感器。
2.电源电路设计
本系统采用的是MC34063制作的降压变换电源。
由于电动车电瓶的电源电压大多是24V,36V,48V等,所以把电瓶电源24V转换为单片机所需要的电压5V。
MC34063是一单片双极型线性集成电路,专用于直流-直流变换器控制部分.片内包含有温度补偿带隙基准源、一个占空比周期控制振荡器、驱动器和大电流输出开关,能输出1.5A的开关电流.
它能使用最少的外接元件构成开关式升压变换器、降压式变换器和电源反向器。
特点:
能在
3.0-40V的输入电压下工作;短路电流限制;低静态电流;输出开关电流可达1.5A(无外接三极管);输出电压可调工作振荡频率从100HZ到100KHZ。
MC34063是一种开关型高效DC/DC变换集成电路。
它的内部含有具有温度补偿的基准电压源、比较器、具有限电流电路的占空比可控的振荡器、驱动器和大电流输出开关管。
3.存储器电路模块设计
在本设计中用芯片AT24C02.AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。
在AT89C2051试验开发板上它们都接地,第8脚和第4脚分别为正、负电源。
第5脚SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送,在AT89C2051试验开发板上和单片机的P3.5连接。
第6脚SCL为串行时钟输入线,在AT89C2051试验开发板上和单片机的P3.6连接。
SDA和SCL都需要和正电源间各接一个5.1K的电阻上拉。
第7脚需要接地单片机从AT24C02内部的地址向单片机的读出单元
字节读出数据,供显示所用。
4.报警电路设计
语音报警电路的核心是WTV040语音芯片。
当电动车的行使速度达到或超过测速器预设速度时,测速器单片机往外发出一个低电平,直接拉低I/O口P01的电平,使WTV040语音芯片被触发,点亮报警指示进行提示并触发语音进行报警。
5.显示电路设计
显示模块用74HC164驱动数码管显示,数码管,驱动电路等组成显示电路,使用共阳数码管。
P3.3-P3.4为数码管的动态扫描位驱动。
P1.6,P1.7作数码段码输出。
6、程序设计
#ifndef_Max7219_H_
#define_Max7219_H_
#include
#include
#defineucharunsignedchar#defineuintunsignedint
#define
DECODE_MODE
0x09
#define
INTENSITY
0x0A
#define
SCAN_LIMIT
0x0B
#define
SHUT_DOWN
0x0C
#define
DISPLAY_TEST
0x0D
//译码方式
#definedelay1us
#definedelay2us
#definedelay4us
#definedelay5us
#definedelay12us
_nop_();
{delay1us;delay1us;}
{delay2us;delay2us;}
{delay4us;delay1us;}
{delay4us;delay4us;delay4us;}
sbitdin=P2^0;
sbitload=P2^1;
sbitclk=P2^2;
voidMax7219_Wr_byte(ucharwrdat);
voidMax7219_Wr_data(ucharaddr,uchardat);voidInit_Max7219(void);
voidDisp_speed(uintspeed);
voidDisp_set_speed(uintset_speed);
//初始化MAX7219voidMax7219_Init(void)
{
Max7219_Wr_data(SHUT_DOWN,0x01);Max7219_Wr_data(DISPLAY_TEST,0x00);
Max7219_Wr_data(DECODE_MODE,0xff);
Max7219_Wr_data(SCAN_LIMIT,0x07);
Max7219_Wr_data(INTENSITY,0x0a);
}
voidMax7219_Wr_byte(ucharwrdat)
{
bitdat;uchari;
for(i=0;i<8;i++)
{
clk=0;dat=(bit)(wrdat&0x80);
if(dat)
din=1;
else
din=0;wrdat<<=1;
clk=1;
}
}
voidMax7219_Wr_data(ucharaddr,uchardat)
{
load=0;
Max7219_Wr_byte(addr);
Max7219_Wr_byte(dat);
load=1;
}
voidDisp_speed(uintspeed)
{
ucharspeed_buf[4];
uchari;
speed_buf[0]=speed%10;speed_buf[1]=speed/10%10|0x80;
speed_buf[2]=speed/100%10;
speed_buf[3]=speed/1000;
if(0==speed_buf[3])
{
speed_buf[3]=0x0f;
if(0==speed_buf[2])
speed_buf[2]=0x0f;
}
for(i=1;i<=4;i++)
{
Max7219_Wr_data(i,speed_buf[i-1]);
voidDisp_set_speed(uintset_speed)
{
ucharspeed_buf[4];
uchari;
speed_buf[0]=set_speed%10;
speed_buf[1]=set_speed/10%10|0x80;
speed_buf[2]=set_speed/100%10;
speed_buf[3]=set_speed/1000;
if(0==speed_buf[3])
{
speed_buf[3]=0x0f;
if(0==speed_buf[2])
speed_buf[2]=0x0f;
}
for(i=1;i<=4;i++)
{
Max7219_Wr_data(i+4,speed_buf[i-1]);
}
}
#endif
#include
sbitKEY0=P2^3;
sbitKEY1=P2^4;
sbitKEY2=P2^5;
sbitKEY3=P2^6;
sbitSPK=P2^7;
sbitLED_GREEN=P1^6;
sbitLED=P1^7;
uintset_speed;
uintspeed;ucharsec_cnt;
voidInit_8051(void);
voidDelay(uchartime);uintGet_key(void);
voidWarn_ring(void);
voidmain(void)
{Init_8051();
Max7219_Init();while
(1)
{
set_speed=Get_key();Disp_speed(speed);
Disp_set_speed(set_speed);Warn_ring();
}
}
voidDelay(uchartime)
{
uchart1,t2;
for(t1=time;t1>0;t1--)for(t2=248;t2>0;t2--);
}
//初始化
voidInit_8051(void)
{
EA=0;
TCON=0x00;
TMOD=0x51;
TL0=0xe0;//定时20ms
TH0=0xb1;//T1计数13个脉冲
TL1=0xf3;
TH1=0xff;
TR0=1;
TR1=1;
IE=0x8a;
SPK=0;
LED=0;
LED_GREEN=1;
}
//定时器0函数,定时50*20ms=1s
voidTimer0_speed(void)interrupt1
{
ET0=0;
TR0=0;
TL0=0xe0;
TH0=0xb1;
TR0=1;
sec_cnt++;
ET0=1;
}
//计数中断计数10次半径d=20cm//speed=0.2*60*10/sec_cnt*36km/h
voidCounter_speed(void)interrupt3
{floata=6250;
ET1=0;
TR1=0;
TL1=0xf3;
TH1=0xff;
TR1=1;
speed=4.52*a/sec_cnt;
sec_cnt=0;
ET1=1;
}
//键盘处理函数
uintGet_key(void)
{
staticuintkey_value;
if(!
KEY0)
{
Delay(40);
if(!
KEY0)
{
while(KEY3)
{
if(!
KEY1)
{
Delay(40);if(0==KEY1)
{
while(0==KEY1)
{
Disp_set_speed(key_value);
}
key_value+=10;
if(key_value==9999)
key_value=0;
}
}
if(!
KEY2)
{
Delay(40);
if(0==KEY2)
{
while(0==KEY2)
{
Disp_set_speed(key_value);
}
key_value-=10;
if(key_value==0)key_value=9999;
}
}
}
}
}
return(key_value);
//报警函数
voidWarn_ring(void)
{
if(speed>set_speed)
{
LED=1;
SPK=0;
Delay
(1);
SPK=1;
}
else
LED=0;
}
7、结论
本设计以AT89C2051为核心,利用单片机的运算和控制功能,并采用系统化LED显示模块实时显示所测速度的设计方案,以及串口数据存储电路和系统软件。
实现了电动车速度即时显示,并可通过控制两个按键显示速度或里程。
当速度超过限定时就会产生语音报
参考文献
[1]谢维成,杨加国.单片机原理与应用及C51程序设计[M].北京:
清华大学出版社
[2]王田苗.嵌入式系统设计与实例开发[M].北京:
清华大学出版社
[3]夏靖波,王航,陈雅蓉.嵌入式系统原理与开发[M].西安:
西安电子科技大学出版社
[4]杨恒.ARM嵌入式系统设计与实践[M].西安:
西安电子科技大学出版社
[5]王萍.C++面向对象程序设计[M].北京:
清华大学出版社
[6]赵家贵主编.新编传感器电路设计手册.中国计量出版社.2002.9
[7]丁杰元主编.单片机微机原理及应用.机械工业出版社.1998.8
[8]沙占友等主编.单片机外围电路设计.电子工业出版社.2003.1
[9]张新颖.单片机原理与接口技术.哈尔滨:
黑龙江科学技术出版社,2002.
[10]杨志忠.数字电子技术基础.北京:
高等教育出版社,2004.
[11]余发山主编.单片机原理及应用技术.中国矿业大学出版社.2003.12.21-32
[12]董爱华主编.检测与转换技术.中国电力出版社.2007.12
[13]康华光主编.电子技术基础数字部分(第五版).2006.137-153430-460
[14]Yang.Y.,Yi.J.,Woo,Y.Y.,andKim.B.:
‘Optimumdesignforlinearityand
efficiencyofmicrowaveDohertyamplifierusinganewloadmatchingtechnique',
Microw.J.,2001,44,(12),pp.20–36
[15]R.Dye,“VisualObject-OrientatedProgramming,”Dr.DobbsMacintoshJournal,Sept.1st(1991).
[16]Vizimuller,P.:
‘RFdesignguide-systems,circuits,andequations'(ArtechHouse,Boston,MA,1995)