自行车测速系统论文.docx
- 文档编号:23570809
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:13
- 大小:459.17KB
自行车测速系统论文.docx
《自行车测速系统论文.docx》由会员分享,可在线阅读,更多相关《自行车测速系统论文.docx(13页珍藏版)》请在冰豆网上搜索。
自行车测速系统论文
一、测速系统方案:
二、信号采集模块:
自行车测速采集信号部分,采用开关型霍尔传感器——CS3144,如图所示
1引脚为VCC
2引脚为GND
3引脚为OUTPUT
其工作原理为:
在其供电情况下,默认OUTPUT输出端为高电平,当有磁钢从其附近经过时,则会使得霍尔传感器产生一个负脉冲。
在具体电路中我们可以将磁钢固定在自行车车条上,将霍尔元件固定在前叉上,调整霍尔元件和磁钢的位置,使得霍尔在工作状态时,磁钢经过霍尔时能使得霍尔产生负脉冲。
若在测速系统中用一个磁钢,霍尔采集到负脉冲个数即为自行车车轮转过的圈数。
在这里我们用一个电机来模拟自行车行驶,将磁钢固定在电机的风扇上面,将霍尔传感器固定在电机附近的适当位置,如图所示:
三、单片机信号处理部分:
霍尔传感器附近有磁钢经过时输出一个负向脉冲,将单片机定时器1(P3.5引脚)设置为计数器功能可以将脉冲个数给记录下来,因为单片机计数器由是下降沿触发,当单片机技术器检测到一个负向脉冲时计数器被触发一次,产生一次计数,这样我们用单片机的计数器便可以采集到自行车车轮滚动过的圈数。
将定时器0设置为定时器功能,每10ms产生以此中断,在此中断中更新脉冲计数(自行车转过圈数)、更新当前所用的时间、更新当前速度、更新总路程和平均速度。
四、显示部分:
显示部分采用LCD1602液晶显示:
显示格式如下图
对照如下实物图:
五、总体实物图如下:
由3节1.5V电池串联组成4.5V电源供电,主控芯片——单片机盖在液晶1602下面!
测速系统启动后界面介绍
起始时液晶显示功能和设计者界面:
motorspeedtest
weDesign
启动定时器后1s内液晶显示友好界面
T:
00-00-00speed
Hi,welcomusing!
启动1s后显示当前各个参数
以2分44秒时的参数为例
T:
00-02-44V:
059
D:
009189AV:
056
说明:
T代表时间,V代表当前速度,D代表路程,AV代表平均速度
因此,此图表示:
所用时间为2分44秒,当前速度为:
59米每秒,当前路程为:
1189米,平均速度为:
56米每秒。
六、主要固件部分:
#include
#include
#defineucharunsignedchar//宏定义,定义无符号字符型为uchar8位
#defineuintunsignedint//宏定义,定义无符号整型为uint16位
ucharfirst_show1[]={"motorspeedtest"};
ucharfirst_show2[]={"HeYingDesign"};
ucharCurrent_speed_time[16]={"T:
"};//显示所用时间和当前速度
uchardisdance_AverageSpeed[16]={"D:
"};//显示平均速度和路程
uintnum_16=0,flag_10ms=0,flag_1s=0,flag_cv=0,flag_da;
uintcount;//脉冲计数
uintahead=0;//5s更新一次速度,ahead为5s前的脉冲个数
ucharsecond=0x00,minute=0x00,hour=0x00;
//*****************脉冲计数************************
//*****实时监测脉冲,用于计算路程和平均速度*******
voidupdate_Count()
{
count=(TH1<<8)|TL1;//一个单位16位计数器脉冲计数个数获取
if(count==65536)//16位计数满,计数处理
{num_16++;}
count=count+num_16*100000;//计算总脉冲个数
}
//******************时间更新******************
voidupdate_time()
{
if(flag_1s==100)//1S(100个10ms)时间到
{
second++;
flag_1s=0;
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
}
}
}
Current_speed_time[2]=hour/10+'0';//时,转换数成ASCII码以在液晶上显示
Current_speed_time[3]=hour%10+'0';
Current_speed_time[4]='-';
Current_speed_time[5]=minute/10+'0';//分
Current_speed_time[6]=minute%10+'0';
Current_speed_time[7]='-';
Current_speed_time[8]=second/10+'0';//秒
Current_speed_time[9]=second%10+'0';
}
//**********显示速度位置初始显示“speed”***************
voidorignal_speed()
{
Current_speed_time[10]='';
Current_speed_time[11]='s';
Current_speed_time[12]='p';
Current_speed_time[13]='e';
Current_speed_time[14]='e';
Current_speed_time[15]='d';
}
//*****************当前速度更新*********************
voidupdate_CurrentSpeed()
{
ucharcurrent_speed,tmp;
uintcount_5s;
update_Count();
if(flag_cv==100)//1s时间到
{
flag_cv=0;//标志变量清零
count_5s=count-ahead;//1s获取脉冲个数
ahead=count;//存储当前脉冲个数
current_speed=(count_5s/1)*(2*3.14)*0.35;//当前速度计算,一般自行车半径为0.35cm
Current_speed_time[10]='';
Current_speed_time[11]='V';
Current_speed_time[12]=':
';
tmp=current_speed/100;
current_speed=current_speed%100;
Current_speed_time[13]=tmp+'0';//百位
tmp=current_speed/10;
current_speed=current_speed%10;//十位
Current_speed_time[14]=tmp+'0';
Current_speed_time[15]=current_speed+'0';//个位
}
}
//显示路程和平均速度位置初始显示:
Hi,welcomusing!
voidorignal_disdance_AverageSpeed()
{
disdance_AverageSpeed[0]='H';
disdance_AverageSpeed[1]='i';
disdance_AverageSpeed[2]=',';
disdance_AverageSpeed[3]='w';
disdance_AverageSpeed[4]='e';
disdance_AverageSpeed[5]='l';
disdance_AverageSpeed[6]='c';
disdance_AverageSpeed[7]='o';
disdance_AverageSpeed[8]='m';
disdance_AverageSpeed[9]='';
disdance_AverageSpeed[10]='u';
disdance_AverageSpeed[11]='s';
disdance_AverageSpeed[12]='i';
disdance_AverageSpeed[13]='n';
disdance_AverageSpeed[14]='g';
}
//****************路程和平均速度更新*********************
voidupdate_disdance_AverageSpeed()
{
uintAvrerageSpeed,tmp,Disdance;
update_Count();
if(flag_da==100)//1s(100个10ms)时间到
{
flag_da=0;
Disdance=count*(2*3.14*0.35);//一般自行车半径为0.35cm
AvrerageSpeed=Disdance/(flag_10ms*0.01);
/*************路程显示**************/
disdance_AverageSpeed[0]='D';
disdance_AverageSpeed[1]=':
';
tmp=Disdance/100000;
Disdance=Disdance%100000;
disdance_AverageSpeed[2]=tmp+'0';
tmp=Disdance/10000;
Disdance=Disdance%10000;
disdance_AverageSpeed[3]=tmp+'0';//万
tmp=Disdance/1000;
Disdance=Disdance%1000;
disdance_AverageSpeed[4]=tmp+'0';//千
tmp=Disdance/100;
Disdance=Disdance%100;
disdance_AverageSpeed[5]=tmp+'0';//百
tmp=Disdance/10;
Disdance=Disdance%10;
disdance_AverageSpeed[6]=tmp+'0';//十
disdance_AverageSpeed[7]=Disdance+'0';//个
/*************路程显示结束*************/
/*************平均速度显示*************/
disdance_AverageSpeed[8]='';
disdance_AverageSpeed[9]='A';
disdance_AverageSpeed[10]='V';
disdance_AverageSpeed[11]=':
';
tmp=AvrerageSpeed/100;
AvrerageSpeed=AvrerageSpeed%100;
disdance_AverageSpeed[12]=tmp+'0';//百
tmp=AvrerageSpeed/10;
AvrerageSpeed=AvrerageSpeed%10;
disdance_AverageSpeed[13]=tmp+'0';//十
disdance_AverageSpeed[14]=AvrerageSpeed+'0';//个
/***********平均速度显示结束************/
}
}
//主函数入口
voidmain(void)
{
TMOD=0x51;//定时器0工作模式1,16位定时方式;
//定时器1工作模式1,16位计数方式
TH1=0;
TL1=0;
TH0=0xDC;//定时10ms
TL0=0x00;
IE=0x82;//使能timer0中断
DelayMs(200);//启动等待,等LCD讲入工作状态
LCDInit();//LCM初始化
DisplayStr(0,0,first_show1);//初始界面第一行显示:
motorspeedtest(电机速度测试)
DisplayStr(0,1,first_show2);//初始界面第二行显示:
HeYingDesign(贺颖设计)
DelayMs(250);
DelayMs(250);
DelayMs(250);
DelayMs(250);
DelayMs(250);
TR0=1;//启动定时器0
TR1=1;//启动定时器1
orignal_speed();//速度位置初始显示:
speed字样
orignal_disdance_AverageSpeed();//显示路程和平均速度位置初始显示:
Hi,welcomusing!
while
(1)
{
DisplayStr(0,0,Current_speed_time);
DisplayStr(0,1,disdance_AverageSpeed);
}
}
//定时器0中断服务程序,用于脉冲计数的更新
voidtimer0()interrupt1
{
TH0=0xDC;
TL0=0x00;
flag_10ms++;//10ms的标志变量
flag_1s++;//处理1s的标志变量
flag_cv++;//当前速度更新的标志变量
flag_da++;//总路程和平均速度更新的标志变量
update_Count();//脉冲计数更新
update_time();//显示所用时间更新
update_CurrentSpeed();//当前速度更新
update_disdance_AverageSpeed();//总路程和平均速度更新
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自行车 测速 系统 论文