资源描述
- -
专业技能实训报告
题 目基于单片机的汽车速度测量系统设计
学 院 信息科学与工程学院
专 业 通信工程
班 级 通信0902
学 生 元
学 号 20091221
指导教师
二〇一二 年一月 三日
- - word.zl-
- -
- - word.zl-
- -
目 录
1前言.............................................................2
2 总体设计.........................................................3
2.1 设计方案....................................................3
2.2 主要容....................................................3
3 单片机速度测量系统...............................................4
3.1 单片机速度测量原理..........................................4
3.2单片机速度测量系统构造框图..................................4
4 系统硬件设计.....................................................5
4.1 传感器的选用................................................5
4.1.1霍尔传感器的根本工作原理..............................5
4.1.2 CS3020霍尔传感器.....................................6
4.1.3霍尔传感器的硬件连接..................................7
4.2 MCU 控制系统设计..........................................8
4.2.1 CPU的选用............................................8
4.2.2 AT89S51 主要特性和引脚说明...........................8
4.2.3 MCU 最小系统设计....................................10
4.3 LED 数码管显示器.........................................11
4.4 单片机测速系统总原理图....................................11
5 系统软件设计.....................................................12
5.1程序流程图................................................12
5.2 程序功能..................................................14
结语...............................................................15
参考文献...........................................................16
附录...............................................................16
1 前言
随着信息技术的不断开展,单片机在测量系统中得到了广泛的应用。速度是一个系统经常需要测量、控制和保持的量。速度的测量方法有许多种,但在不同的应用环境下,相应的测量方法有它自己的特点和误差。因此对单片机速度测量系统的研究有着重要的目的和意义。 本设计采用 AT89S51 单片机作为主要控制核心,应用霍尔传感感器采集信号,经过单片机定时计数并运用一个算法测量出汽车行驶速度,最终用4位位的在以上建的系统的根底上LED数码管显示其测量结果,具有较高的实用价值。
2 总体设计
2.1 设计方案
现在测量速度的方法有很多,可以采用不同的器件做出多种测速器。在这里用磁电式脉冲发生器的方案。
磁电式脉冲发生器。 将导磁材料的齿轮固定在转轴上,对着齿轮端面固定一块磁钢,霍尔元件贴 在磁钢的一个端面上,随着齿轮转动,元件的输出呈周期性变化,经整形和放大 后输出方波脉冲。霍尔传感器输出频率与转速成正比,此信号经单片机处理后, 即可得出车辆的速度。
本设计测量要求稳定性好,灵敏度高和精度高,而且对汽车速度的测量要求传感器能够适应各种各样的环境。所以这里选择该方案。其原因还有三点:其一 是霍尔传感器输出信号电压幅值不受转速的影响;其二是频率响应高,其响应频 率高达 20kHz,相当于车速为 1000km/h 时所检测的信号频率;其三是抗电磁波 干扰能力强。
根据脉冲计数来实现转速测量的方法主要有 M 法(测频法)、T 法(测周期法) 和 M/T 法(频率周期法)。测频法一般用于高速测量,在转速较低时,测量误差较 大; 而测周期法一般用于低速测量, 速度越低测量精度越高, 但在测量高转速时, 误差较大;频率周期法结合了上面两种方法的优点,但是此种方法要求单片机有 3 个定时/计数器。考虑上面三种因素,该系统选择测频法。
2.2 主要容
根据上面选择的方案,设计主要容由以下三大局部组成:
一、信号的采集。这局部主要是用霍尔转速传感器采集车轮转速的信号,并将采集的信号传给单片机。
二、单片机数据处理。这局部主要是使用51系列单片机采用适当的算法来编程快速准确地对采集的数据进展相关运算并得出结果。
三、LED 数字显示。这局部主要是对测得的结果通过 4 位 LED 数码管显示给用户
用单片机 AT89S51 作为控制核心, 通过霍尔传感器来检测汽车的运转情况进 而实现汽车速度的测量,最后用 4 位 LED 数码管直观的将速度显示给用户,保存 一位小数位。 该测量方法是数字式测量方法, 代替了传统的机械式或模拟式构造, 测量精度有了很大的提高,具有很大的实用价值。
3 单片机速度测量系统
3.1 单片机速度测量原理
根据霍尔效应原理,将一块永久磁钢固定在车轮转轴上的转盘边沿〔如果要 提高测量精度,可以在转盘边沿多固定 2 到 3 个磁钢〕,转盘随着轴旋转,磁钢 也将跟着同步旋转。在转盘附近安装一个霍尔器件,转盘随轴旋转一周时,受磁 钢所产生的磁场的影响,霍尔器件输出一个脉冲信号,转盘转了多少转霍尔器件 就输出多少个脉冲信号,将输出的脉冲信号送到单片机的计数口,利用单片机的 定时/计数器进展定时和计数,测出脉冲的周期或频率即可计算出车轮转速。通 过单片机软件设计,把转速转换成线速度。转速即是角速度,线速度=角速度* 周长。
3.2 单片机速度测量系统构造框图
根据霍尔转速测量原理,可以画出单片机速度测量系统的构造框图。构造框图如下图。
图1 单片机速度测量系统构造框图
由霍尔传感器采集车轮转速的信号,并将采集的信号传给单片机,利用单片机的定时计数器功能和编写的程序将采集的信号转换成数据, 通过数码管将数据 显示出来。
4 系统硬件设计
4.1 传感器的选用
传感器是能够感受规定的被测量并按照一定的规律转换成可用输出信号的 器件或装置。在电子技术领域,常把能感受信号的电子元件称为敏感元件,如热 敏元件、磁敏元件、光敏元件等。
通常,传感器由敏感元件和转换元件组成,如下图。其中敏感元件是 指传感器中能直接感受或响应被测量的局部; 转换元件是指传感器中能将敏感元 件感受或响应的被测量转换成适合于传输或测量的电信号局部。 由于传感器输出 信号一般都很微弱,需要有信号调理与转换电路,进展放大、运算调制等,此外 信号调理转换电路以及传感器的工作必须有辅助的电源, 因此信号调理转换电路以及所需的电源都应作为传感器组成的一局部。 随着半导体器件与集成技术在传 感器中的应用,传感器的信号调理转换电路与敏感元件一起集成在同一芯片上, 安装在传感器的壳体里。
图2 传感器组成方框图
4.1.1 霍尔传感器的根本工作原理
霍尔传感器是利用霍尔效应原理,通过磁场、电流对被测量的控制,使包含有被测量变化信息的霍尔电压发生变化,在利用后继的信号检索和信号放大电 路,就可以得到被测量的信息。正因为霍尔传感器的根本原理霍尔效应只包含了 磁场、电流、电压三个常用物理量,使得采用霍尔传感器对被测量的测量简单易 行,而磁场强度、电流、电压是磁场、电场的根本物理量,所以霍尔传感器可以 进展准确的非接触测量。
1. 霍尔效应
在一块半导体薄片上,当它被置于磁感应强度为B的磁场中,如果在它相对的两边通以控制电流 I,且磁场方向与电流方向正交,那么在半导体另外两边将产 生一个大小与控制电流I和磁感应强度 B 乘积成正比的电势 UH,即 UH=KhIB,其 中 Kh 为霍尔元件的灵敏度,Kh 值越大,灵敏度就越高,该电势称为霍尔电势。 在片子上作四个电极,其中 C1、C2 间通以工作电流 I,C1、C2 称为电流电极, C3、C4 间取出霍尔电压 UH,C3、C4 称为敏感电极。将各个电极焊上引线,并将 片子用塑料封装起来,就形成了一个完整的霍尔元件。
2.工作原理
霍尔开关集成电路由稳压器、霍尔元件、差分放大器、斯密特触发器和输出 级组成。在外磁场的作用下,当磁感应强度超过导通阈值 BOP 时,霍尔电路输出 管导通,输出低电平。之后,磁感应强度再增加,仍保持导通态。假设外加磁场的 磁感应强度值降低到 BRP 时,输出管截止,输出高电平。通常称 BOP 为工作点, BRP 为释放点,BOP-BRP=BH 称为回差。回差的存在使开关电路的抗干扰能力增 强。 集成电路中的信号放大器将霍尔元件产生的幅值随磁场强度变化的霍尔电压 UH 放大后再经过斯密特触发器进展整形、放大后输出脉冲方波信号。霍尔传感器部构造如下图。
图3 霍尔传感器部构造方框图
4.1.2 CS3020 霍尔传感器
霍尔传感器是对磁敏感的传感元件,常用于开关信号采集的有CS3020、 CS3040等,这种传感器是一个3端器件,外形与三极管相似,只要接上电源、地, 即可工作,输出通常是集电极CS3020霍尔传感器, 该系列霍尔开关电路传感器广泛用于汽车工业和军事开路门输出,工作电压围宽,使用非常方便。考虑到用于汽车速度测量这种特殊环境下,在本设计中选择了工程中。如下图是 CS3020的外形图。将有字面对准自己,三根引脚从左向右分别是V c c,地,输出。
图4 CS3020的外形图
CS3020是由电压调整器,霍尔电压发生器,差分放大器,史密特触发器和集 电极开路的输出级组成的磁敏传感电路,它是一种单磁极工作的磁敏电路,适合于矩形或者柱形磁体下工作。 当磁钢随车轮轴旋转时, 霍尔传感器受磁场的影响, 霍尔器件输出一个脉冲信号。感受到磁场的时候输出一个低电平,没感受到磁场的时候输出高电平。
工作特点如下:
a. 电源电压围宽
b. 开关速度快,无瞬间抖动
c. 工作频率宽
d. 寿命长、体积小、安装方便
e. 能直接和晶体管及 TTL、MOS 等逻辑电路接口
4.1.3 霍尔传感器的硬件连接
霍尔传感器的标志面对着自己,从左至有右分别是接 5V 电压,接地,脉冲 输出。如下图是霍尔传感器的硬件连接图。图中 R1 是限流电阻,C1、R2 起滤高频的作用。 当霍尔元件感受到磁场的时候引脚 3 输出低电平, 三极管导通, 单片机 P3 .5 口接收到高电平脉冲;当霍尔元件没有感受到磁场的时候引脚 3 输出高电平,三极管截止,单片机 P3 .5 口接收到低电平脉冲。
图5 霍尔传感器的硬件连接图
4.2 MCU 控制系统设计
4.2.1 CPU 的选用
AT89S51 是一个低功耗,高性能 CMOS8 位单片机,片含 4k Bytes 的 可反复擦写 1000 次的 Flash 只读程序存储器,器件采用 ATMEL 公司的高密 度、 非易失性存储技术制造, 兼容标准 MCS-51 指令系统及80C51引脚构造, 芯片集成了通用 8 位中央处理器和 ISP Flash 存储单元,功能强大的微型计算机的 AT89S51 可为许多嵌入式控制应用系统提供高性价比的解决方 案。
AT89S51 具有如下特点:40 个引脚,4k Bytes Flash 片程序存储器, 128 bytes 的随机存取数据存储器〔RAM〕,32 个外部双向输入/输出〔I/O〕 口,5 个中断优先级 2 层中断嵌套中断,2 个 16 位可编程定时计数器,2 个 全双工串行通信口,看门狗电路,片时钟振荡器。此外,AT89S51 设计和 配置了振荡频率可为 0Hz 并可通过软件设置省电模式。空闲模式下,CPU 暂 停工作,而 RAM 定时计数器,串行口,外中断系统可继续工作,掉电模式 冻结振荡器而保存 RAM 的数据,停顿芯片其它功能直至外中断激活或硬件 复位。
4.2.2 AT89S51 主要特性和引脚说明
AT89S51 有 PDIP、PLCC、TQFP 三种封装方式,以适应不同产品的需求。其 中最常见的就是采用 40Pin 封装的双列直接 PDIP 封装,其引脚排列见如下图。
图6 AT89S51 芯片引脚排列图
1.主要特性:
l 与 MCS-51 产品指令系统完全兼容
l 4K 字节可编程 FLASH 存储器
l 1000 次擦写周期
l 全静态工作:0Hz-24KHz
l 128*8 位部 RAM
l 32 个可编程 I/O 口线
l 两个 16 位定时/计数器
l 6个中断源
l 可编程串行通道
l 低功耗的闲置和掉电模式
l 片振荡器和时钟电路
4.2.3 MCU 最小系统设计
单片机最小系统就是能使单片机工作的最少的器件构成的系统, 是大多数控 制系统所必不可少的局部。AT89S51 部已经包含了一定数量的程序存储器,在 外部只要增加时钟电路和复位电路就可以构成单片机最小系统。
1.时钟电路
所有单片机都需要时钟电路,时钟电路的作用是控制单片机的工作节奏。利 用芯片部的振荡器然后在引脚 XTAL1 和 XTAL2 两端跨接晶体振荡器〔简称晶 振〕 ,就构成了稳定的自激振荡器,发出的脉冲直接送入部时钟电路。外接晶 振时,C1 和 C2 的值通常选择为 30pF 左右,C1、C2 对频率有微调作用,为了减 小寄生电容,更好地保证振荡器稳定、可靠的工作,振荡器和电容应尽可能安装 得与单片机引脚 XTAL1 和 XTAL2 靠近。
2.复位电路
复位是单片机的初始化操作,所有单片机在启动运行时都需要复位,以使 CPU 和系统中的其他部件处于一个确定的初始状态,并从这个状态开场工作,因 而,复位是一个很重要的操作方式。但单片机本身是不能自动进展复位的,必须 配合相应的外部复位电路才能实现。
单片机第 40 引脚正极接上 5V 电源,负极〔地〕接 20 引脚。单片机部已集成了振荡器,使用晶体振荡器时,接 18、19 脚,再接上电容。EA 引脚接到正 电源端就可以了。
4.3 LED 数码管显示器
由于LED数码管具有亮度高、使用电压低、寿命长等特点,所以在工业测控 系统中常用LED数码管作为显示输出。本系统也采用LED数码管作显示输出。
LED显示器是由发光二极管显示字段的显示器件。单片机系统常使用8 段LED数码显示器,
LED显示器有两种不同的形式:一种是8个发光二极管的阳极都连在一起的, 称为共阳极LED显示器;另一种是8个发光二极管的阴极都连在一起的,称为共阴 极LED显示器。本设计采用LED动态扫描显示,这样能分时轮流选通数码管的公共端,使得 数码管轮流导通,在选通相应LED后,即在显示字段上得到字形码。终究是哪个 数码管亮,那么取决于端,而这一端是由I/O控制的,所以就可以自行决定何时 显示哪一位了。这种方式不但能提高数码管的发光效率,而且由于各个数码管的 字段线是并联使用的,从而大大简化了硬件线路。
在动态方式中,逐个地循环地点亮各位显示器。这样虽然在任一时刻只有一 位显示器被点亮,但是由于人眼具有视觉残留效应,看起来与全部显示器持续点 亮效果完全一样。
在单片机P0的8个输出口分别连接上一个150Ω的电阻是为了保证数码管显示的时候每段亮度都一样。采用共阳极驱动,当位选口P2.0~ P2.3输出一个低电 平的时候三极管导通,这就决定了哪一位数码管被点亮。三极管前面的1KΩ电阻 起限流的作用, 防止电流过大烧坏三极管。 这样P2.0~ P2.3分别控制百位, 十位, 个位和小数位。
4.4 单片机测速系统总原理图
图7 单片机测速系统总原理图
从系统原来图中可以看到本设计构造和线路布局相比照拟简单, 也具有较强的实用性。将永久磁钢固定在转盘上,转盘随轴旋转一周,磁钢也旋转一周,霍 尔传感器感受到一次磁场。当霍尔传感器感受永久磁钢产生的磁场时,传感器的 引脚3输出低电平,此时三极管导通,单片机P3 .5口接收到高电平脉冲;当传感 器没有感受到磁场的时候引脚3输出高电平,此时三极管截止,单片机P3 .5口接 收到低电平脉冲。转盘转了多少转单片机就接收到多少个脉冲,利用单片机的定 时/计数器进展定时和计数,测出脉冲的周期或频率即可计算出车轮转速。通过 单片机软件设计, 把转速转换成线速度。 转速即是角速度, 线速度=角速度*周长。
5 系统软件设计
5.1 程序流程图
主程序流程图和中断效劳程序流程图分别见图 8和图 9。
图8 主程序流程图
系统要开场工作就要对单片机进展初始化,系统初始化局部程序如下:
#include<reg52.h>
#include<stdio.h>
#define SYSCLK 11.059200
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define R 4
#define PI 314
接下来是定时/计数器初始化,设置工作方式控制存放器TMOD。
TMOD=0x51
TL1=0x00; TH1=0x00;
TL0=0x00; TH0=0x4c;
单片机跳中断处理,处理后返回主程序,最后用数码管显示数据,1 秒钟更 新一次,完毕程序。
图9 中断效劳程序流程图
当单片机执行中断程序的时候要重新设置定时计数器的初值, 每次从传感器 传来一个脉冲的时候,单片机计数器加“1〞。如果每 50ms 中断一次,那么当 k=20 的时候〔即定时器每到 1 秒钟〕,程序跳出中断返回到主程序,执行显示 程序。
5.2 程序功能该程序的功能是利用单片机将霍尔传感器采集到的信号进展处理, 将处理后 得到的数据通过 P0 口送到 LED 数码管显示出来。
系统初始化:
TMOD=0x51; //初始化,工作方式控制存放器 TMOD 十六进制 51 转化成二进制为 01010001。T1 计数工作方式,工作在方式1;T0 定时工作方式,工作在方式1。
TL1=0x00; TH1=0x00; //T1 计数初值为0。
TL0=0x00; TH0=0x4c; //每50ms=50000us 中断一次。
由公式
(65536-x)*12/11.0592=50000
得定时初值(65536-50000*11.0592/12)/256=76 转换为 16 进制,得高位为 4C (65536-50000*11.0592/12)%256=0 得低位。
IE=0x82; //中断控制 IE,EA=1,CPU 开放中断;ET0=1,允许定时器中 断。
TR0=1; //定时开场。
中断函数程序如下:
void timer0(void) interrupt 1
{
TR1=0;TR0=0; //启动计数/定时器
TF0=0; //中断标志位
TL0=0x00;
TH0=0x4c;
k++;
if(k>=20) //每50ms 中断一次,那么当K>=20的 时 候 就 是
1s,每 1s 钟计算一 次转速 js。
{
js=TH1*256+TL1;TH1=0;TL1=0;k=0;
}
js=0;TR0=1;
}
结 语
本次专业技能实训是一次和生活息息相关的实验,在我们平时的生活中,不管走到哪里都能和汽车联系起来,但是关于汽车速度的测量却不了解。而通过该实验系统详细的学习,使得对于上述问题有了更加明确的了解,不再是困扰我们的生活的一些常识性问题。在该实验之中,由于自己专业能力的限制,做实验的时候十分困难,但是时间是充足的,所以在这段时间不断查阅资料和阅读教科书的过程中,进一步的加深了自己对专业知识的了解和认识,更加的稳固了自己以往所学习的知识,正所谓“温故而知新〞,在这段学习的过程中也让自己学到了更多新的知识。
参 考 文 献
1 念强,等 单片机原理及应用[M],:机械工业,2007.
2 振江,等 流行单片机实用子程序及应用实例[M],:电子科技大学出版,2002.
3 何立民, 单片机应用系统设计[M],:航天航空大学,1989.
4 小忠, 单片机接口技术实用子程序[M],:人民邮电,2005.
5 军等, 数字电路设计与制作[M],:科学,2007.
6 常建等, 传感器原理与工程应用[M],:电子科技大学,2007.
7 蔡萍 , 现代检测技术与系统[M],:高等教育,2005.
附录
单片机测速测量系统程序如下:
#include<reg52.h>
#include<stdio.h>
#define SYSCLK 11.059200 // 时钟脉冲,单位 MHz
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define R 5 //半径 0.5m
#define PI 314 //pi=3.14
//段选定义
sbit P0_0 = P0^0;
sbit P0_1 = P0^1;
sbit P0_2 = P0^2;
sbit P0_3 = P0^3;
sbit P0_4 = P0^4;
sbit P0_5 = P0^5;
sbit P0_6 = P0^6;
sbit P0_7 = P0^7;
//位选定义
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
SbitP2_3=P2^3;
uchar code SEG_TAB[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//采用共阳 0-9 数字dp不点亮
uchar code SEG_TAB1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
//0.-9.数字 dp 点亮
void Delay(void);
ulong js;
uchar k=0;
void main()
{
TMOD=0x51; //初始化,每50ms=50000us 中断一次 (65536-x)*12/11.0592=50000
TL1=0x00; TH1=0x00;
TL0=0x00; TH0=0x4c; //定时初值(65536-50000*11.0592/12)/256=76 转换为 16
进制,得高位为 4C (65536-50000*11.0592/12)%256=0 得低位
IE=0x82;
TR0=1; //定时开场
while(1)
{
P0 = SEG_TAB[js*2*PI*R/100000 ]; //显示百位 单位:米每秒
P2_0 = 0; //共阳 // PI*R/100 是因为 PI=314 所以要除以 100
Delay();
P0 = SEG_TAB[(js*2*PI*R%100000)/100 ]; //显示十位
P2_1 = 0;
Delay();
P0 = SEG_TAB1[ (js*2*PI*R%100000)%100/10 ]; //显示个位加小数点
P2_2 = 0;
Delay();
P0 = SEG_TAB[ (js*2*PI*R%100000)%100%10 ]; //显示小数位
P2_3 = 0;
Delay();
}
}
******************中断子程序***********************************
void timer0(void) interrupt 1
{
TR1=0;TR0=0;
TF0=0; //中断标志位
TL0=0x00;
TH0=0x4c;
k++;
if(k>=20) //每 1s 钟计算一次
{
js=TH1*256+TL1;TH1=0;TL1=0;k=0;
}
js=0;TR0=1;
}
*******************延时函数***************************************
void Delay(void)
{
uchari;
for(i=0;i<60;i++);
}
- - word.zl-
展开阅读全文