基于单片机的自行车里程计系统设计Word文件下载.docx
《基于单片机的自行车里程计系统设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的自行车里程计系统设计Word文件下载.docx(23页珍藏版)》请在冰豆网上搜索。
6.每组单独一个题目,每组上限5人。
时间安排
课程设计计划时间4周。
课程设计题目于15周下发。
课程设计完成后于18周四下午下班前送交电子信息办公室(实验楼三楼),届时指导教师安排短暂答辩。
辅导时间和地点
答疑请直接与指导教师联系。
目录
一、设计任务和要求……………………………2
二、设计目的…………………………………………2
三、设计的具体实现……………………………3
1.系统概述…………………………………3
2.STC单片机的原理及应用…………………4
3.霍尔传感器电路设计……………………7
4.USB供电电路设计…………………………9
5.按键电路设计……………………………10
6.显示电路设计……………………………10
7.复位电路设计……………………………11
8.晶振电路设计……………………………12
9.总电路原理图……………………………13
10.软件程序设计……………………………14
四、系统调试与仿真……………………………23
五、心得体会和建议……………………………24
六、附录…………………………………………26
七、参考文献……………………………………27
基于单片机的自行车里程计系统设计报告
一、设计要求
1.设计背景
我国是自行车大国,随着人们生活水平的逐渐提高,人们对于生活质量的要求也日益增加,尤其是对健身的要求。
自行车在中国普遍作为代步工具。
而在国外,自行车却是一项十分受欢迎的健身运动。
因为它无污染,价位低廉,老少皆宜。
而且在运动过程中可以充分享受到大自然,对于忙碌的现代人来说,无疑是一种较好的放松方法。
在中国这种情况也在慢慢发生变化。
因此爱好自行车运动的人十分需要一款装置,以知道自己的运动情况。
并根据外界条件,如温度等进行适当的调节,已达到最佳运动的效果。
2.设计具体要求
设计一个自行车车轮半径已知,用霍尔传感器测定出自行车的里程,并通过数码管显示出来的自行车里程表系统。
二、设计目的
1.通过《单片机原理及接口技术》专业课程设计,完成一个课题的理论设计和实验调试任务,既加深专业知识的理解,又能培养专业实践技能,提高分析解决问题和解决问题的能力。
2.培养从文献和调查研究中获取知识的能力,提高学生从别人经验,从其他学科找到解决问题的新途径的悟性。
3.培养综合运用本专业基本理论、基本知识和基本技能的能力,使自己获得从事本专业工程技术工作的基本训练。
4.培养勇于探索,严谨推理,实事求是,用实践来检验理论、全方位地考虑问题等科学技术人员应具有的素质。
5.提高对工作认真负责、一丝不苟,对同学友爱团结、协作攻关,对新事物能潜心考察,勇于开拓,勇于实践的基本素质。
6.进一步熟悉掌握计算机和EDA工具软件的能力。
三、设计的具体实现
1.系统概述
自行车的速度里程表的硬件电路设计是基础部分,它包括信号的捕获、放大、整形,单片机的计算处理,数码管的实时显示和单片机外围基本电路的设计,两大主要器件就是传感器和单片机。
传感器是获取自然或生产领域中信息的关键器件,是现代信息系统和各种设备不可缺少的信息采集工具。
磁传感器是一种将磁学量信号转变为电信号的器件或装置。
随着信息产业、工业自动化、医疗仪器等的飞速发展和计算机应用的普及,需要大量的传感器将被测或被控的非电信号转换成可与计算机兼容的电信号。
作为输入信号,这就给磁传感器的快速发展提供了机遇,形成了磁传感器的产业。
其中最具代表的磁传感器就是霍尔传感器,在自动检测系统中,利用霍尔传感器测转数是一种最基本的测量工作。
单片机是本次设计的核心部件,它是信号从采集到输出的桥梁,而且包括计算、定时、信息处理等功能。
本设计中,我们以STC公司STC89C52单片机为控制核心,采用霍尔传感器检测自行车轮胎的运转情况,通过一定的抗干扰处理和计算后,由LED显示自行车的里程。
本设计中,计数的正确性决定了本装置的精度,如何在复杂的环境中得到正确的计数脉冲,是本设计的难点,初步的解决办法是在硬件上进行合理的滤波,软件上进行一定的算法处理。
其原理很简单,因为车轮的直径已知,车轮的圆周长便是恒定不变的。
由此可以计算出霍尔传感器每发出一次计数脉冲自行车所走过的里程数。
系统原理框图如图3.1。
图3.1自行车里程计系统原理框图
2.STC单片机的原理及应用
单片机是指集成在一个芯片上的微型计算机,也就是把组成微型计算机的各种功能部件,包括CPU(CentralProcessingUnit)、随机存储器RAM(RandomAccessMemory)、只读存储器ROM(Read-onlyMemory)、基本输入/输出(Input/Output)接口电路。
定时器/计数器等部件都制作在一块集成芯片上,构成一个完整的微型计算机从而实现微型计算机的基本功能。
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,2个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。
另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
STC89C51管脚图如图3.2所示。
图3.2STC89C52引脚图
STC89C52的主要管脚功能如下:
P0.0~P0.7:
P0口是一组8位漏极开路型双向I/O口,也是地址/数据总线复用口。
P1.0~P1.7:
P1是一个带内部上拉电阻的8位双向I/O口。
P2.0~P2.7:
P2是一个带内部上拉电阻的8位双向I/O口。
P3.0~P3.7:
P3是一个带内部上拉电阻的8位双向I/O口。
ALE:
地址锁存控制信号。
在系统扩展时,ALE用于控制把P0口输出的低8位地址锁存起来,以实现低位地址和数据的分时传送。
此外,由于ALE是以晶振1/6的固定频率输出的正脉冲,因此,可作为外部时钟或外部定时脉冲使用。
:
外部程序存储器读选通信号。
在读外部ROM时,
有效(低电平),以实现外部ROM单元的读操作。
访问程序存储控制信号。
当
信号为低电平时,对ROM的读操作限定在外部程序存储器;
信号为高电平时,对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。
RST:
复位信号。
当输入的复位信号延续两个机器周期以上的高电平时即为有效,用以完成单片机的复位初始化操作。
XTALl和XTAL2:
外接晶体引线端。
当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;
当使用外部时钟时,用于接外部时钟脉冲信号。
VSS:
地线。
VCC:
+5V电源。
3.霍尔传感器电路设计
本次设计信号的捕获采用的是霍尔传感器。
霍尔器件具有许多优点,它们的结构牢固、体积小、重量轻、寿命长、安装方便、功耗小、频率高(可达1MHz)、耐震动、不怕灰尘、油污、水汽及烟雾等的污染或腐蚀。
霍尔线性器件的精度高、线性度好;
霍尔开关器件无触点、无磨损、输出波形清晰、无抖动、无回跳、位置重复精度高。
按照霍尔器件的功能可将它们分为:
霍尔线性器件和霍尔开关器件,前者输出模拟量,后者输出数字量。
按被检测对象的性质可将它们的应用分为:
直接应用和间接应用。
A44E集成霍尔开关封装引脚图如图3.3所示。
在电源端加电压Vcc,经稳压器稳压后加在霍尔电势发生器的两端,根据霍尔效应原理,当霍尔片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍尔电势差VH输出,该VH信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC门输出。
当施加的磁场达到工作点时,触发器输出高电压(相对于地电位),使三极管导通,此时OC门输出端输出低电压,通常称这种状态为开。
当施加的磁场达到释放点时,触发器输出低电压,三极管截止,使OC门输出高电压,这种状态为关。
这样两次电压变换,使霍尔开关完成了一次开关动作。
工作点与释放点的差值一定,此差值称为磁滞,在此差值内,V0保持不变,因而使开关输出稳定可靠,这也就是集电成霍尔开关传感器优良特性之一。
测量时,在1、2两端加5V直流电压,在输出端3与1之间接一个1k的负载电阻,如图3.4所示。
图3.3A44E外形
图3.4集成霍尔开关接线图
A44E输出端OUT连到单片机外部中断0上,当磁铁靠近A44E时输出端产生一个低电平信号,使CPU产生一次中断计一次数。
假定轮圈的周长为L,在轮圈上安装m个永久磁铁,则测得的里程值最大误差为L/m。
本设计中取m=1。
当轮子每转一圈,通过霍尔元件传感器采集到一个脉冲信号,并从引脚P3.2中断0端输入,传感器每获取一个脉冲信号即对系统提供一次计数中断。
每次中断代表车轮转动一圈,中断数n轮圈的周长为L的乘积为里程值。
里程S=周长L*圈数n
4.USB供电电路设计
电源总是电路设计不可缺少的部分,本次设计采用了USB电源供电。
USB接口可以向外提供电源,且是5V的电压,非常适合于TTL信号的系统,特别是单片机系统。
可以使用这个电源为USB供电,这样便减少了电源设计,简化了USB系统结构。
在USB总线系统中,USB主机和USB集线器可以通过VBUS和GND两根电源线向外提供电源,电源一般4.75~5.25V。
USB协议中规定,每个USB端口最大数据电流为500mA。
USB端口具有高输出功率和低输出功率之分,同样,USB设备可以按照电流的消耗分为高功率消耗设备和低功率消耗设备。
高功率消耗设备一般需要100~500mA的电流,低功率消耗设备一般需0~100mA的电流。
电路图如图3.5所示。
图3.5USB供电电路
5.按键电路设计
键盘在单片机应用系统中,实现输入数据、传送命令的功能,是人工干预的主要手段。
键盘是单片机系统设计中一种主要的信息输入接口,合理的设计,不仅可以节省系统的设计成本,更可使仪器设备的操作变得更为简单、方便,很大程度上提高系统综合性能。
本次设计中通过按键S1来控制里程计的开始和停止,通过按键S2使里程计清零。
电路图如图3.6所示
图3.6按键电路
6.显示电路设计
显示模块可以采用液晶显示器或者数码管显示器,但数码管具有低功耗,容易控制,占用CPU资源少这些优点,考虑到成本原因,选择了4位的七段共阴极数码管显示已经完全足够。
本设计中使用4个单位数据管,数码管的阳极全部连接在一起,然后与U1原件74HC573锁存器的数据输出端相连,所存起的数据输入端连接单片机的P0口低四位,P0口同时加了上拉电阻,数码管中WE1,WE2,WE3,WE4是它们的位选端,每一个数码管对应一个位选端,与U2原件74HC573的数据输出端的低四位相连,U2的数据输入端也连接到单片机的P0口。
两个锁存器的锁存端分别与P2.6和P2.7相连。
单片机控制锁存器的锁存端,进而控制锁存器的数据输出,这种时分控制的方法便可方便地控制任意数码管显示任意数字。
电路图如图3.7所示。
图3.7显示电路
7.复位电路设计
复位是单片机的初始化操作,它是由外部的复位电路来实现,只需给单片机的复位引脚RST加上大于2个机器周期的高电平就可使其复位。
电路图如图3.8所示。
图3.8复位电路
8.晶振电路设计
晶振电路用于产生单片机工作时所需的时钟控制信号。
通过单片机的引脚XTAL1,XTAL2跨接石英晶体振荡器和微调电容,构成一个稳定的自激振荡器。
时钟频率直接影响单片机的速度,晶振电路的质量也直接影响单片机系统的稳定性。
晶振电路电路图如图3.9所示。
图3.9晶振电路
9.总电路原理图
10.软件程序设计
⑴主程序流程图如图3.10所示
图3.10主程序流程图
⑵显示子程序设计
先打开U1锁存器,控制段选端,输出需要显示的数字。
然后关闭U1锁存器,打开U2锁存器,控制位选端,如此依次使四个数码管显示该位的数字。
显示子程序如下:
voiddisplay(ucharqian,ucharbai,ucharshi,ucharge){
dula=1;
P0=table[qian];
//送千位段选数据
dula=0;
P0=0xff;
//送位选数据前关闭所有显示,防止打开位选锁存时
wela=1;
//原来段选数据通过位选锁存器造成混乱
P0=0xfe;
//送位选数据
wela=0;
delayms(5);
//延时
P0=table[bai];
//送百位段选数据
P0=0xfd;
P0=table[shi];
//送十位段选数据
P0=0xfb;
P0=table[ge];
//送个位段选数据
P0=0xf7;
}
⑶里程计算子程序
对单片机P3.2口输入的圈脉冲进行计数,计数器0打开但不打开中断,通过读取计数值进行控制。
里程计算子程序流程图如图3.11。
图3.11里程计算子程序流程图
里程计算子程序如下:
uintread()
{
uchartl,th1,th2;
uintval,lc;
while
(1)
{
th1=TH0;
tl=TL0;
th2=TH0;
if(th1==th2)
break;
}
val=th1*256+tl;
//读取计数器0所计数值
lc=val*2;
//计算自行车行驶的里程数
returnlc;
⑷总程序
#include<
reg52.h>
//52系列单片机头文件
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;
//申明U1锁存器的锁存端
sbitwela=P2^7;
//申明U2锁存器的锁存端
sbitkey1=P3^6;
//申明独立键盘1
sbitkey2=P3^7;
//申明独立键盘2
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voiddelayms(uint);
voiddisplay(ucharqian,ucharbai,ucharshi,ucharge)//显示子函数
voiddelayms(uintxms)
uinti,j;
for(i=xms;
i>
0;
i--)//i=xms即延时约xms毫秒
for(j=110;
j>
j--);
voidmain()
uchara,b,c,d;
uintnum;
TMOD=0x05;
//设置计数器0为工作方式1(00000101)
TH0=0;
//将计数器寄存器初值清零
TL0=0;
TR0=1;
while
(1)
if(key1==0)
{
delayms(10);
if(key1==0)
{
while(!
key1);
TR0=~TR0;
}
}
num=read();
if(key2==0)
if(key2==0)
TH0=0;
TL0=0;
key2);
if(num>
=10000)
num=0;
TH0=0;
//将计数器寄存器值清零
TL0=0;
a=num/1000;
b=num%1000/100;
c=num%1000%100/10;
d=num%10;
display(a,b,c,d);
四、系统调试与仿真
本次实验采用的是uVision3软件进行调试。
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种Keil软件图标是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。
机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。
运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。
掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
连机调试就是在样机中全速运行系统软件,观察系统运行情况,并根据运行结果修改控制参数,或对软件、硬件方案作必要的修改,重复调试过程,直到系统能满足各项性能性能指标要求。
五、心得体会和建议
该设计通过对设计出来的板子进行调试,验证了理论分析结果的正确性。
此次课程设计经过为小组同学的不懈努力,目前基本达到了预期的要求。
通过对整个系统的调试,可得到如下结论:
本系统是一个可测量自行车里程自行车里程表,能够通过数码管显示出自行车所行使的里程并能通过按键控制里程表清零,停止,启动。
理解了自行车里程根据以下公式求得:
里程=脉冲总数×
车轮周长
通过实验证明本次设计符合设计的要求,能实现对里程的显示并能人工控制里程表,功能性较强,具有一定的实