工学简易自行车数字里程表设计.docx
- 文档编号:5621249
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:37
- 大小:209.81KB
工学简易自行车数字里程表设计.docx
《工学简易自行车数字里程表设计.docx》由会员分享,可在线阅读,更多相关《工学简易自行车数字里程表设计.docx(37页珍藏版)》请在冰点文库上搜索。
工学简易自行车数字里程表设计
本科毕业论文
题目:
简易自行车数字里程表设计
摘要
本文对自行车里程表的结构、设计原理进行了介绍,并应用芯片LM339和AT89S51设计、制作了自行车里程表。
文章介绍了所用芯片的存储结构、各管脚的功能,对各个模块的工作原理进行了分析。
并对自行车里程表进行了展望。
本文先对里程表设计当中所需设备作了详细介绍,对设计中存在的问题进行了说明;而后对硬件和软件部分的设计和实现作了认真的分析;然后给出了系统的建模过程及相应的系统模型,在此基础上进行了控制仿真,并对仿真效果进行了比较。
本里程表的设计具有结构简单,成本低廉,显示清晰,稳定可靠等优点。
并且可进行扩充,加入时速表的功能,更加方便的了解你现在所处的情况。
【关键词】光电对管;单片机AT89S51;LM339;键盘;
Abstract
Inthispaper,thestructureandprincipleoftraditionalbicycleodometerareintroduced,andapplyingLM339andATS89S51hasdesignedandmadeabicycleodometer.Thearticlehasintroducedwhatbememorystructureofusedchip,everyfunctionofpin,andhascarriedoutanalysisonoperatingprincipleofeachmodules,andhasbeeninprogresstodesignofbicycleodometertolookintothedistance.
ThisarticlefirstrightOdometerdesignsrequiredequipment,detailsofthedesignissuesof;Lateronhardwareandsoftwaredesignandimplementationcarefullyanalyzed;Thenthesystemmodelingprocessandthecorrespondingmodel,basedonthecontrolsimulation,Simulationresultsalsowerecompared.
Odometerthedesignofthestructureissimple,lowcost,showingclear,stableandreliableresults.Andcanbeexpandedtospeedthefunctiontableandmoreconvenientunderstandyouarenowstand.
Keywords:
photoelectriccell;AT89S51;LM339;keys;
摘要I
AbstractII
1绪论1
1.1.课题的背景与意义1
1.2课题所要解决的主要问题1
2系统设计2
2.1.系统功能分析2
2.2.系统功能模块设计2
2.2.1硬件电路设计2
2.2.2软件设计8
3程序代码10
3.1.数据采集程序10
3.2键盘扫描程序10
3.3.中断程序11
4系统调试与结果分析13
4.1.电路调试13
4.1.1硬件调试13
4.1.2软件调试13
4.2.结果分析13
5总结与展望15
致谢16
参考文献17
附录1程序原代码18
附录2系统电路图25
附录3系统实拍图27
1绪论
1.1.课题的背景与意义
中国的轻型电动车产业在2000年进入产业化发展阶段,目前正处于产业生命周期快速增长阶段的初期。
尽管处于处处封杀的重压下,消费者对这一新兴交通工具的青睐,推动轻型电动车产业近年来保持了80%以上的增长速度。
2005年,在整体经济需求增长放慢、工业增速回落的背景下,轻型电动车行业却出现令人瞩目的“井喷”行情,成为耐用消费品市场不多的“亮点”之一。
2006产销量达到1500万辆。
据此估算,2010年,中国轻型电动车的产销量将可能达到3000万辆,出口量将可能达到500~600万辆。
实现工业产值700亿元,包括上下游带动产值的产业总体规模将达到1300亿。
我国是自行车大国,随着人们生活水平的不断提高,自行车已经不仅仅是运输、代步的工具,其辅助功能也变得越来越重要。
因此,人们希望自行车的娱乐、休闲、锻炼的功能越来越多,能带来大家更多的健康与快乐。
在这个背景下,自行车里程表作为自行车的一大辅助工具迅速发展起来.科学、美观、合理设计自行车里程表有一定的实用价值.它能合理计算出速度及公里数,使运动者运动适量,达到健康运动与代步的最佳效果。
随着自行车里程表的发展,其功能也逐渐从单一的里程显示发展到速度、时间显示,甚至有的还具有测量骑车人的心跳、显示骑车人热量消耗等功能,让人能清楚地知道当前的速度、时间、里程等物理量。
1.2课题所要解决的主要问题
(1).设计一个轻便、省电、全天候野外使用的自行车里程表;
(2).可显示里程、速度、加速度,行驶时间等信息;
(3).适用于各种车型(不同尺寸),车型信息可通过键盘设置
2系统设计
2.1.系统功能分析
本系统可以实现自行车或电动车在行驶过程中速度,里程数的显示功能。
系统元件简单,实用性强。
通过光电对管进行信号的采集,每来一次信号,计数器加一,每五秒钟计算一次平均速度。
本系统的核心在于单片机,把采集到的数据送入单片机后进行处理,再通过单片机把处理好的数据通过液晶显示出来,从而实现速度和里程的显示。
本系统是由数据采集,单片机控制系统,键盘显示,液晶显示4部分构成。
其中数据的采集是由光电对管来完成的,它的输出是矩形脉冲,其中关键的处理由单片机系统来完成,单片机将对P3.0脚的信号进行计数,输出的信号由液晶进行显示,显示当前的行驶里程情况。
键盘的作用是输入自行车的车型等信息,以上所诉就是整个系统的总体设计思想。
[6]
该设计能实时地将所测的累计里程数显示出来,主要是将传感器输入到单片机的脉冲信号的频率(传感器将不同车速转变成不同频率的脉冲信号)实时地测量出来,通过单片机计算出里程,并由液晶显示模块显示所测里程。
本设计的里程数的算法是一种大概的算法(假设在一定时间内自行车是匀速行进,平均速度与时间的乘积即为里程数)。
设计时,应综合考虑测速精度和系统反应时间。
本设计用测量脉冲频率来计算速度,因而具有较高的测速精度。
在计算里程时取了自行车的理想状态。
实际中,误差控制在几米之内,相对于整个里程来说不是很大。
另外,还应尽量保证其他子模块在编程时的通用性和高效性。
2.2.系统功能模块设计
2.2.1硬件电路设计
1.系统数据采集电路
信号采集单元采用一对光电管[15],光电管信号采集是通过光强弱的变化从而得到电信号的。
如图2-1所示随着铝盘的转动,发射管光线也随之通过或不通过过孔。
接收管感应到光线的强弱发生变化以电信号的形式输出,这样就实现了信号的采集。
为了避免外界光线的干扰和保证定位探测的精度,首先要将光电管在一定距离内对准固定住,同时在光电管上套上紫铜管[9]。
图2-1数据采集电路图
2.信号预处理单元硬件设计
信号预处理单元要对信号进行放大,本系统设计通过LM339比较器使得信号预处理电路变得简单。
LM339在使用时要接上拉电阻,通过正负端输入电压的大小比较(正端输入电压>负端输入电压,输出+5V电压;正端输入电压<负端输入电压,输出0V电压)。
如图4-3所示10k的滑动变阻器是调节LM339负输入端的电压值。
当接收管收到发射管的光线时,接收管的负端会导通,电阻变得很小,输入正端的电压趋近于0,输出端电压值就会变成0V。
P3.0为输出信号端口,加电容是为消除干扰信号[11]。
用于频率测量的方法有很多,频率测量的准确度主要取决于所测的频率范围以及被测对象的特点.而测量所能达到的精度,不仅仅取决于作为标准器使用的频率源的精度,也取决于所使用的测量设备和测量方法。
待测信号经预处理电路后加至单片机的P3.0引脚可为单片机测量信号频率提供有效的输入信号。
单片机通过检测P3.0引脚电平来决定是否使计数器加一。
当该引脚电平不变时,系统处于等待状态,要一直到该引脚出现电平跳转时才开始计数[9]。
该设计能实时地将所测的速度与里程数显示出来,主要是将传感器输入到单片机的脉冲信号的频率(传感器将不同车速转变成不同频率的脉冲信号)实时地测量出来,然后通过单片机计算出速度和里程,并由液晶显示模块交替显示所测速度与里程。
本设计的里程数的算法是一种大概的算法(假设在一定时间内自行车是匀速行进,平均速度与时间的乘积即为里程数)。
设计时,应综合考虑测速精度和系统反应时间。
本设计用测量脉冲频率来计算速度,因而具有较高的测速精度。
在计算里程时取了自行车的理想状态。
实际中,误差控制在几米之内,相对于整个里程来说不是很大。
另外,还应尽量保证其他子模块在编程时的通用性和高效性。
本设计的速度和里程值采用液晶显示。
图2-2信号预处理硬件电路
3.单片机系统
AT89S51[11]是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
下面简单介绍下AT89S51单片机:
美国MEL公司的AT89S系列51单片机支持ISP功能,给单片机应用开发带来了极大方便。
现介绍一款简易型开发板的使用方法。
将该板插入DIP40封装的8051单片机插座处,通过廉价的ISP即可编程AT89S51,支持在线擦写,速度更快,非常方便。
AT89S51芯片内有两个独立的16位定时/计数器,两个外中断接口,一个串行通讯口,4k字节快闪擦写存储器(FLASHMEMORY),低功耗的闲置和掉电模式,内带有看门狗电路,在不附加任何外围电路的情况下,能实现大部分比较复杂的逻辑控制功能,对存储容量要求不高的实际应用,AT89S51确实是一种不可多得的高效能单片机。
(1)主要特性:
与MCS-51兼容
4K字节可编程闪烁存储器
寿命:
1000写/擦循环
数据保留时间:
10年
全静态工作:
0Hz-24Hz
三级程序存储器锁定
128*8位内部RAM
32可编程I/O线
两个16位定时器/计数器
5个中断源
可编程串行通道
低功耗的闲置和掉电模式
片内振荡器和时钟电路
(2)AT89S51增加的新功能包括:
ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离,是一个强大易用的功能。
工作频率为33MHz,大家都知道AT89C51的极限工作频率只有24MHz,就是说S51具有更高工作频率,从而具有了更快的计算速度。
具有双工UART串行通道。
内部集成看门狗计时器,不再需要像AT89C51那样外接看门狗计时器单元电路。
双数据指示器。
电源关闭标识。
全新的加密算法,这使得对于AT89S51的解密变为不可能,程序的保密性大大加强,这样就可以有效的保护知识产权不被侵犯。
兼容性方面:
向下完全兼容51全部字系列产品。
比如8051、AT89C51等等早期MCS-51兼容产品。
也就是说所有教科书、网络教程上的程序(不论教科书上采用的单片机是8051还是AT89C51还是MCS-51等等),在AT89S51上一样可以照常运行,这就是所谓的向下兼容。
[3]
本系统的核心部分就在于单片机,通过单片机从LM339读数据,然后处理,再通过单片机送到液晶显示。
LM339是个比较器,每次输出非0即1,所以单片机读到的信号要么是0要么是1。
其中单片机的P3.0口接LM339的输出端,P3.0每跳变一次,单片机里的计数器加一。
单片机的P0口接8个上拉电阻,再接键盘,通过读P0口实现键盘扫描.系统一开始会出现”Width:
”字样,要求用户输入自行车的轮胎宽度,在本系统中可以通过测量前面模仿轮胎的纸片的半径值来设置宽度。
通过键盘把轮胎宽度传给单片机。
之后单片机根据采集到的数据来计算自行车行驶的速度,和里程数,速度精确到0.1m,里程数精确到0.1km。
最后把速度和里程数的值通过液晶显示模块显示出来。
图2-3单片机系统电路图
4.显示系统
本系统采用的是1602的液晶显示,其中RS接P2.0,RW接P2.1,E接P2.2,D0-D7接单片机的P1口,通过程序即可实现显示速度和里程数。
1602介绍:
管脚功能:
1602采用标准的16脚接口,其中:
第1脚:
VSS为电源地;第2脚:
VDD接5V电源正极第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4脚:
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:
RW为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
第6脚:
E(或EN)端为使能(enable)端。
第7~14脚:
D0~D7为8位双向数据端。
第15~16脚:
空脚或背灯电源。
15脚背光正极,16脚背光负极。
操作控制:
表2-11602操作控制表
操作
读状态
写指令
读数据
写数据
输入
RS=0,RW=1,E=1
RS=0,RW=0,
D0~7=指令码,E=H脉冲
RS=1,RW=1,E=1
RS=1,RW=0,
D0~7=数据,E=H脉冲
1602内部的字符发生存储器一共存储了160多个不同的点阵字符图形,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地41H中的点阵字符图形显示出来,我们就能看到字母“A”。
因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。
读的时候,先读左边那列,再读上面那行,如:
感叹号!
的ASCII为0x21,字母B的ASCII为0x42(前面加0x表示十六进制)。
指令集:
1602通过D0~D7的8位数据端传输数据和指令。
显示模式设置:
(初始化)00110000[0x38]设置16×2显示,5×7点阵,8位数据接口;显示开关及光标设置:
(初始化),00001DCBD显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效)000001NSN=1(读或写一个字符后地址指针加1&光标加1),N=0(读或写一个字符后地址指针减1&光标减1),S=1且N=1(当写一个字符后,整屏显示左移)S=0当写一个字符后,整屏显示不移动数据指针设置:
数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H)其他设置:
01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。
5.键盘系统
本系统采用4*4键盘,其中使用到的只有其中10个,另外六个保留,键盘的作用就是设置轮胎的宽度,和另外的一些参数值,也可以通过键盘来控制程序的运行(本系统未使用)。
4*4的键盘引出的8个引脚接单片机的P0口。
键盘扫描原理是按键部分由16个轻触按键按照4行4列排列,连接到P0端口。
将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。
这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。
行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。
本系统采用的扫描法,具体如下:
判断键盘中有无键按下:
将全部行线置低电平,然后检测列线的状态。
只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。
若所有列线均为高电平,则键盘中无键按下。
判断闭合键所在的位置:
在确认有键按下后,即可进入确定具体闭合键的过程。
方法是:
依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。
确定某根行线位置为低电平后,再逐行检测各列线的电平状态。
若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
[3]
图2-4键盘扫描电路图
2.2.2软件设计
(1)系统介绍
本系统主要通过C语言进行单片机编程,从而实现信号的读取与显示,通过51单片机的内部中断来实现实时的显示速度和里程数。
键盘扫描,液晶显示等部分都是通过软件来控制。
(2)系统流程图
程序设本系统的核心部分,系统的各个方面都是通过程序来控制和协调。
程序的核心部分就是中断时间到了之后进中断的各个数据的计算。
程序开始的时候先初始化1602的液晶,然后液晶模块上会提示用户输入自行车的轮胎宽度:
width(0-99cm),当用户输入完后,这个数值将被作为自行车的轮胎半径参加计算。
之后程序就初始化中断模式,之后就进入一个while循环,在循环中接收信号和显示数据,如果中断时间到了,那么进入中断,从新计算速度跟里程数。
退出中断后又继续显示新的速度跟里程数。
流程图如下:
33
3程序代码
3.1.数据采集程序
voidrecv()
{if(q!
=p)
{q=p;
count++;}
}
上面程序是数据的采集,其中sbitp=P3^0;sbitq;因为p是接收脉冲的,时刻都在改变,所以用q来保存p的值,每次当P3.0口发生跳变的时候,计数器加一,此处为什么不用高电平或低电平的时候计数器加一呢?
因为光电对管传过来的电平在高电平或低电平的时间可能不一样,如果高电平时间过长,那么P3.0检测到的将一直是高电平或低电平,这样计数器就可能一直加一,这样就导致采集的数据不准确。
3.2键盘扫描程序
unsignedcharScan_Key(void)
{
chara1,i;
unsignedcharptr=0,m,m_ptr;
bitFLAG0;
FLAG0=0;
while(!
FLAG0)
{
//FLAG0=0;
a1=0xf7;
for(i=0;i<4;i++)
{
P0=a1;
delay(10);
m=P0;
switch(m&0xf0)
{
case0x70:
ptr=i*4;
FLAG0=1;
break;
case0xb0:
ptr=i*4+1;
FLAG0=1;
break;
case0xd0:
ptr=i*4+2;
FLAG0=1;
break;
case0xe0:
ptr=i*4+3;
FLAG0=1;
break;
default:
break;
}
if(FLAG0==1)
{
break;}
a1=a1>>1|0x80;}
if(ptr<10)
m_ptr=ptr;
if(ptr>10)return'a';
}
returnm_ptr;
}
这里的FLAG是标记键盘有没有按下的,ptr是记录按下键盘的键值所对应的数值。
在程序的最后为什么添加个m_ptr呢?
这是为了满足,width能够在0-100内取值,因为如果width<10的话,那么只要按一次键即可实现,如果width>10的话,就必须输两次。
在这里,程序中每次都要求用户输入两个数据,如果第一次输入是在0-9内的,第二次输入也在0-9的,那么width就是一个两位数;如果第一次输入在0-9内的,第二次输入大于10的,那么程序就认为width是0-10的数,数值就等于第一次输入的值,在程序中也就是if(ptr>10)return'a';在下面的程序中就会对键盘扫描得到的值进行分析,判断是不是’a’.这样就实现了键盘输入的width可以控制在0-99了。
[3]
3.3.中断程序
voidTimer()interrupt1
{TR0=0;
TH0=0x0fe;//重新设定定时时间
TL0=0x0c;
if(m_usetime==5000)//每五秒算一次速度
{
speed=(6.28*wheel_width*count)/5.0;//计算速度
m_usetime=0;
count=0;
distance_n+=5*speed;
if(distance_n>=100)
{
distance=(distance+distance_n/1000.0);distance_n=0;
}
}
elsem_usetime++;
TR0=1;
}
在中断里的任务主要是实时的计算自行车在行驶中的速度和里程数,在本程序中,采用每五秒计算一次速度,因为自行车的速度比较慢,可能在1秒内光电对管收不到信号,所以这里显示的速度就是每5秒自行车速度的平均值,精确到0.1m;而里程数是精确到0.1km,程序中以distance_n来提示里程增值是否到达100,如果到达一百那么里程数就加0.1;但是由于晶振可能有问题,所以这里的定时器总是不是很准确。
源程序详见附录1。
4系统调试与结果分析
4.1.电路调试
4.1.1硬件调试
本电路的硬件部分比较简单,在调试过程中,主要是信号采集电路与1602液晶模块的调试。
信号采集电路采用的光电对管在电路焊接中,两个对管一定要对得很准否则就可能影响信号的采集,本人在调试光电对管的时候就发生这样的情况,由于两个对管都是直接焊接在开发板上的,但是在对齐上面有偏差,就导致了信号不能采集。
最后用了光电对管的最小模块系统,成功的采集到信号。
而1602液晶显示则必须注意调节它的背光,否则不能正常显示。
如果电路连接正常,上电后,看到液晶有正常的亮度,但是不能显示实验的数据时,首先应该考虑到液晶的背光没有调节好,之后才考虑到硬件或软件的问题。
4.1.2软件调试
本系统的核心部分是软件,因此在前期的工作中主要的工作就是调试软件,在proteus仿真中正常执行。
下面讲下本人在软件调试中遇到的各个问题
首先是变量的定义问题,大家都知道,在C语言中我们习惯的使用int型的数据,但是在单片机软件的设计中,如果变量很多,就应该避免使用int型的,尽量使用unsignedchar型的,因为单片机的内部存储器有限,用unsignedchar可以节省空间。
本人开始由于都使用int型,导致最后生成的hex文件过大。
但是,当我们使用的数据的值大过256时,我们就不能使用unsignedchar类型,否则就会导致数据溢出,这时我们就要使用unsignedint型或short型,本人在调试的时候,当速度小的时候都能够正常显示,当速度很大的时候,1602显示的数据就不对,经过对程序的检查才知道是数据类型的定义问题。
之后就是程序的流程必须先画好,程序各个模块的代码先写好,之后再根据程序的流程图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工学 简易 自行车 数字 里程表 设计