资源描述
单片机系统课程设计
摘 要
随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术, 本文主要介绍了一个基于AT89C51单片机的速度里程系统,详细描述了利用霍尔传感器开发测速系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现实现速度、里程的采集和显示,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,有利于我们日常生活和汽车生产业的发展,也可以当作测速处理模块嵌入其它系统中,作为其他主系统的辅助扩展。霍尔传感器与AT89C51结合实现最简测速系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行速度里程测量,有广泛的应用前景。
关键词:单片机AT89C51;速度检测;霍尔传感器;速度里程表
目录
1 绪论 1
1.1技术概述 1
1.2本课题的背景和意义 1
2 系统设计简介 3
2.1 速度里程表简介 3
2.2 设计目的及要求 3
2.3 设计方案论证 4
2.4 硬件设计电路 4
3 设计语言及软件介绍 6
3.1 C语言介绍 6
3.2 软件介绍 6
3.2.1Proteus软件 6
3.2.2Keil C51 7
3.2.3单片机最小系统及复位电路 7
4 系统软件设计 9
4.1 概述 9
4.2 系统程序设计模块及流程图 9
4.2.1主程序 10
4.2.2延时子程序 12
4.2.3显示程序 13
4.3 调试及仿真 13
5 设计总结和体会 15
6 参考文献 16
I
1 绪论
1.1技术概述
传统的车速表是机械式的,典型的机械式里程表连接一根软轴,软轴内有一根钢丝缆,软轴另一端连接到变速器某一个齿轮上,齿轮旋转带动钢丝缆旋转,钢丝缆带动里程表罩圈内一块磁铁旋转,罩圈与指针联接并通过游丝将指针置于零位,磁铁旋转速度的快慢引起磁力线大小的变化,平衡被打破指针因此被带动。这种车速里程表简单实用,被广泛用于大小型汽车上。不过,随着电子技术的发展,现在很多轿车仪表已经使用电子车速表,常见的一种是从变速器上的速度传感器获取信号,通过脉冲频率的变化使指针偏转或者显示数字 里程计是由若干个计数转鼓及其转动装置组成的。为了使用方便,有的车速里程表同时设有累计里程计和区间里程计,累计里程计用来记录汽车累计行驶里程,区间里程计用来记录汽车单程行驶里程。区间里程计有一个归零按钮,可以随时复位至零,重新累计。
1.2本课题的背景和意义
数字温度计采用进口芯片组装精度高、高稳定性,误差≤0.5%,内电源、微功耗、不锈钢外壳,防护坚固,美观精致。 数字温度计采用进口高精度、低温漂、超低功耗集成电路和宽温型液晶显示器,内置高能量电池连续工作≥5年无需敷设供电电缆,是一种精度高、稳定性好、适用性极强的新型现场温度显示仪。是传统现场指针双金属温度计的理想替代产品,广泛应用于各类工矿企业,大专院校,科研院所。 温度数我们日常生产和生活中实时在接触到的物理量,但是它是看不到的,仅凭感觉只能感觉到大概的温度值,传统的指针式的温度计虽然能指示温度,但是精度低,使用不够方便,显示不够直观,数字温度计的出现可以让人们直观的了解自己想知道的温度到底是多少度。 数字温度计采用温度敏感元件也就是温度传感器(如铂电阻,热电偶,半导体,热敏电阻等),将温度的变化转换成电信号的变化,如电压和电流的变化,温度变化和电信号的变化有一定的关系,如线性关系,一定的曲线关系等,这个电信号可以使用模数转换的电路即AD转换电路将模拟信号转换为数字信号,数字信号再送给处理单元,如单片机或者PC机等,处理单元经过内部的软件计算将这个数字信号和温度联系起来,成为可以显示出来的温度数值,如25.0摄氏度,然后通过显示单元,如LED、LCD或者电脑屏幕等显示出来给人观察。这样就完成了数字温度计的基本测温功能。 数字温度计根据使用的传感器的不同,AD转换电路,及处理单元的不同,它的精度,稳定性,测温范围等都有区别,这就要根据实际情况选择符合规格的数字温度计。 数字温度计有手持式,盘装式,及医用的小体积的等等。
2 系统设计简介
2.1 速度里程表简介
汽车车速里程表分为滚轮计数器和点距液晶屏式两种,由指示汽车行驶速度的车速表和记录汽车所行驶过距离的里程计组成的,二者装在共同的壳体中,并由同一根轴驱动。普通车速表一般为磁感应式。
滚轮计数器是过去常用的纯机械式仪表,通过一根软轴,一头连到变速箱输出轴,另一头连到里程表;而现在更常用的电子式仪表,它一般是在变速箱输出轴或车轮上装一个转速传感器,用读出的转速通过控制模块内嵌的计算公式来换算成车速以及历程。不管是哪种方式,归根结底,数据都是来自于传动系统输出端的转速(变速箱输出轴或车轮),知道了车轮的转速,比如每分钟转多少圈,再将车轮的周长(也就是车轮转动一圈走过的距离)算上,车速就出来了,里程也是同样的道理。
图2.1速度里程表
2.2 设计目的及要求
1、了解并掌握 Proteus软件、KEIL软件,并能熟练的使用其进行仿真;
2、培养学生综合运用前修课程所学的知识进行系统性的训练;
3、养实际动手能力培以及合作的能力;
4、利用温霍尔度传感器测量车轮的速度。
5、测量速度里程由LED数码管直读显示。
2.3 设计方案论证
根据系统的设计要求,利用矩形波触发脉冲代替霍尔传感器,从而对车轮转速进行模拟。选择单片机AT89C51为测控系统的核心来完成数据采集、处理、显示等功能。 该系统的总体设计思路如下:矩形波发生器产生矩形波脉冲发送到AT89C51单片机上,经过51单片机处理,将速度和里程在显示电路上显示,本系统显示器用6位共阴LED数码管以动态扫描法实现。
按照系统设计功能的要求,确定系统由3个模块组成:主控制器、检测电路和显示电路。
本课题以是89C51单片机为核心设计的一种数字速度里程检测系统,系统整体硬件电路包括,传感器数据采集电路,速度里程显示电路,单片机主板电路等组成。
系统框图主要由控制模块、外部信号及其检测装置、外部存储器、LED显示组成。
速度里程表总体电路结构框图如图2.1所示。
图2.1速度里程表的原理框图
2.4 硬件设计电路
速度里程表设计电路图如图2.2所示,控制器使用单片机AT89C51,矩形波触发器作为发生装置,用LED实现速度和里程的显示。
图2.2 速度里程表计设计电路图
3 设计语言及软件介绍
3.1 C语言介绍
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。
3.2 软件介绍
3.2.1Proteus软件
Proteus软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
3.2.2Keil C51
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil 的优势。
KeilC51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
3.2.3单片机最小系统及复位电路
单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。
对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路.
下面给出一个51单片机的最小系统电路图。
图3.1复位电路 图3.2 51单片机最小系统
复位电路:由电容串联电阻构成,由图并结合“电容电压不能突变”的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且这个高电平持续的时间由电路的RC值来决定。典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位.一般教科书推荐C 取10u,R取8.2K.当然也有其他取法的,原则就是要让RC组合可以在RST脚上产生不少于2个机周期的高电平。至于如何具体定量计算,可以参考电路分析相关书籍。
晶振电路:典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作)。
4 系统软件设计
4.1 概述
整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。从软件的功能不同可分为两大类:一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。每一个执行软件是一个小的功能执行模块。这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。各执行模块规划好后,就可以规划监控程序了。首先要根据系统的总体功能选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。用C语言完成对设计的软件编程,程序先对各变量进行声明和定义,之后是延时子程序,在进行定时器、计数器的初始化。在主函数中,先定义变量,程序的主体是由计数器产生的脉冲分别转换为速度和里程,并将各个位的数字送到对应的数码管的位,驱动显示。
4.2 系统程序设计模块及流程图
系统程序主要采用顺序结构,包括主程序,延时子程序,速度、里程计算子程序和显示程序等。
单片机CPU接收到传感器感测到的脉冲(即锯齿波触发器产生的脉冲),并通过计数器对脉冲个数进行计数。单片机执行运算程序对所记的脉冲个数运算后,得到速度和里程,经CPU处理后在显示程序的驱动下在显示器中显示。延时程序的作用是是输出数据在显示器上做短暂的停留,易于观察。程序的执行分两种情况:在里程数小于2Km时,速度和里程都增加;当里程数大于2Km时,速度则保持不变,里程继续增加。
开始
变量声明
初始化
Yes
判断
no
计算程序
处理程序
显示程序
延时程序
结束
图4.1系统流程图
4.2.1主程序
主程序的主要功能是定义变量并初始化计数器,对计数脉冲进行处理、计算。
/********************************************************************
函数名称:主函数
说明:因为用三位数码管表示速度,在里程小于2Km时速度增加,当里程大于2Km时,速度不变,保持在20Km/h。当第9709个脉冲来临时要将计数器清零,并且速度也要清零 。
*********************************************************************
void main(void)
{
unsigned char i,j; //定义循环控制变量
unsigned char cnt=0;
unsigned int temp=0;
unsigned int tab=0,wap=0,a; //定义无符号整形变量
double way = 0,sudu = 0; //定义浮点型数据,way表示路程,sudu表示速度
unsigned char led[6]; //用来存放要显示数字的各位数字
init_timer1(); //计数器初始化
while(1)
{
if((TH1==0x25)&&(TL1>=0xed)) //第9709个脉冲来临时将计数器清零
{
TH1=0x00;
TL1=0x00;
sudu=0; //速度清零
}
temp=TH1;
temp=temp<<8; //将TH1中数字左移8位再赋给temp
temp=temp|TL1; //将TH1和TL1中数据合到一个整形变量temp中
way=temp*PI*DIA/1000.0; //车子行驶的路程存入浮点型变量way中
while(p3_2==1); //等待变低
TR0=1;
while(p3_2==0); //等待变高
while(p3_2==1); //等待变低
TR0=0;
a=TH0;
a=a<<8;
a=a||TL1;
a=a*0.001;
sudu=2*PI/a;
wap=sudu*10;
}
wap=sudu*10; //将速度数据转化为整形,最低位表示十分位,其次为个位,十位
tab=way*10; //将路程数据转化为整形,最低位表示百米,其次表示千米,万米
4.2.2延时子程序
延时子程序的功能是产生有一个延时,是得到的速度里程在数码管上显示。
*********************************************************************
函数名称:延时子程序
*********************************************************************
void delay(unsigned int dat) //延时大小由形参的大小决定
{ unsigned int k,j;
for(k=0;k<dat;k++)
{
for(j=0;j<2000;j++); //空循环,耗时语句
}
}
4.2.3显示程序
显示程序的功能是将单片机计算得到的结果在延时程序的作用在显示在数码管上。
led[0]=wap%10; //速度十分位位上的数字存led[0]
led[1]=wap%100/10; //得出速度个位上的数字存led[1]
led[2]=wap/100; //得出速度十位上的数字存led[2]
led[3]=tab%10; //得出里程百米上的数字存led[3]
led[4]=tab%100/10; //得出里程千米上的数字存led[4]
led[5]=tab/100; //得出里程十千米上的数字存led[5]
for(j=0;j<10;j++) //在显示上消耗时间,使三个数码管显示不中断
{
for(i=0; i < 6; i++)
{
P2=led_bit[i]; //把led[i]表示的位置的位选通
if((i==1)||(i==4))
{
P0=led_num[led[i]]&0x7f; //把相应位置的数显式出来,带小数点//
}
else
{
P0=led_num[led[i]]; //把相应位置的数显式出来,不带小数点
}
delay(1); //延时一个微小时间
}
4.3 调试及仿真
经软件调试-仿真器proteus调试通过,并烧录芯片,得到所要求的设计结果。如图4.2试验成功。
图4.2 速度里程表度计仿真图
说明:此时速度不变为20Km/h(后三位),里程为8.3Km(前三位)。
5 设计总结和体会
首先,我要在这里感谢王玲老师在本学期给与我们的指导。王玲老师追求真理的作风,治学严谨的态度及平易近人的品德使我受益匪浅,终身难忘,并且也是对我永远的鞭策和激励。
其次,通过此次课程设计,使我更加扎实的掌握了单片机相关方面的知识。同时也对Proteus和Keil及Office等软件的功能更加熟悉,但这些似乎都不是最主要的。在完成课设的过程中,我想不仅仅是我,几乎每个同学都或多或少遇到了这样那样的问题和困难,为了解决这些困难我想了很多办法,问题得到解决的同时,我也意识到:我们的生活中也经常出现让我们感到困惑的事,所以我们现在就要培养独立解决问题的能力。对不同问题要找到多种解决方法,做到举一反三,触类旁通。
最后,这次课设也让我了解到了自己的不足之处,使我明白任实践都必须要有夯实的理论基础,在以后的学习时间里,我会把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为实践服务,从而提高自己的实际动手能力和独立思考的能力。
6 参考文献
[1]李群芳,肖看.单片机原理接口技术与应用(第2版).北京:清华大学出版社,2010.
[2]李姿,宋洋.基于单片机的智能车速里程表的设计[J].黑龙江科技信息,2011,(29),12
[3]万福君,潘松峰,刘芳,吴贺荣,王秀梅.MCS-51 单片机原理.清华大学出版社,2008.
[4]余锡存, 微机原理及接口技术 ,西安电子科技大学出版社.
[5]刘同法,陈忠平,单片机基础与最小系统实践,北京航空航天大学出版社.
[6]何宏,单片机原理与接口技术,国防工业出版社.
[7]楼然苗,51系列单片机设计实例,北京航空航天大学出版社.
16
展开阅读全文