智能速度里程表设计
摘要:给出了以AT89C2051为核心,利用单片机的运算和控制功能,并采用串口液晶显示模块实时显示所测速度和里程的速度里程表设计方案。该方案由于使用了串口液晶显示模块和E2PROM,以及高效快速算法,因而可在节约系统资源和简化程序设计的基础上保证测量精度和系统实时性。
关键词:速度里程测量;单片机;串行液晶显示;串行数据存储;实时数据处理
1 系统概述
1.1 系统组成
本速度里程表由信号预处理电路、AT89C2051单片机、串口液晶显示电路、串口数据存储电路和系统软件组成。其中信号预处理电路包含信号放大、波形变换和波形整形。系统硬件框图如图1所示。信号预处理电路中的放大器用于对待测信号进行放大,以降低对待测信号的幅度要求;波形变换和波形整形电路则用来将放大的信号转换成可与单片机接口的TTL信号;通过单片机的设置可使INT0引脚能够对内部定时器T0的工作进行控制,这样能精确地测出加到INT0引脚的正脉冲宽度(即测出脉冲信号的周期);速度显示部分采用串口液晶显示模块,所得的数据采用I2C总线并通过E2PROM来存储,因而节省了所需单片机的口线和外围器件,同时也简化了显示部分的软件编程。javascript:window.open(this.src);" style="cursor:pointer;"/>
系统软件包括单片机和液晶模块的初始化模块、液晶模块的写数据/命令子模块、周期测量模块、速度里程计算模块、数据存储模块、速度和里程显示数据转BCD码模块、显示数据消多余零模块、数据显示模块以及实时中断服务模块等。
1.2 系统工作原理
该设计能实时地将所测的速度显示出来,同时也能够累计显示总里程数。该速度里程表能将传感器输入到单片机的脉冲信号的宽度(传感器将车速转变成相应宽度的脉冲信号)实时地测量出来,然后通过单片机计算出速度和里程,再将所得的数据存储到串口数据存储器,并由串口液晶显示模块实时显示出所测速度。本设计用两个按键来控制显示速度或里程。考虑到信号的衰减、干扰等影响,在信号送入单片机前应对其进行放大整形,然后再输入到单片机进行测速。单片机利用定时器T0的控制功能测出输入信号的周期后,再利用单片机的算术运算功能将周期转换成速度,同时每秒钟进行一次里程累计,从而计算出总里程。最后将得出的速度、里程值存储在E2PROM中,并根据两个按键的选择情况来显示速度或里程。为了方便计算要显示数据值的段码,可再将其转换成压缩的BCD码,然后通过查表将要显示的数据值中每一位的压缩BCD码转换成8段码送到显示缓冲区,最后经串口送至液晶显示模块以显示所测的速度或里程。
设计时,应综合考虑测速精度和系统反应时间。本设计用测量脉冲频率来计算速度,因而具有较高的测速精度。为了保证系统的实时性,系统的速度转换模块和显示数据转BCD码模块都采用快速算法。另外,还应尽量保证其它子模块在编程时的通用性和高效性。本设计的速度和里程值采用8位显示,并包含两个小数位。
2 系统硬件设计
2.1 信号预处理电路
系统的信号预处理电路如图2所示。javascript:window.open(this.src);" style="cursor:pointer;"/>它由二级电路构成,第一级是由开关三极管组成的零偏置放大器,采用开关三极管可以保证放大器具有良好的高频响应。当输入信号为零或负电压时,三极管截止,电路输出高电平;而当输入信号为正电压时,三极管导通,此时输出电压随着输入电压的上升而下降,这使得速度里程表既可以测量任意方波信号的频率,也可以测量正弦波信号的频率。由于放大器的放大功能降低了对待测信号的幅度要求,因此,系统能对任意大于0.5V的正弦波和脉冲信号进行测量。预处理电路的第二级采用带施密特触发器的反相器CT74LS14来把放大器生成的单相脉冲转换成与COMS电平相兼容的方波信号同时将输出信号加到单片机的P3.2口上。
2.2 单片机的选择
速度里程测量电路选用AT89C2051作为频率计的信号处理核心。AT89C2051包含2kB闪存、128B的RAM、15根I/O口线、2个16位定时计数器、5个向量二级中断结构和1个全双工的串行口,同时还具有加密阵列的二级程序存储器加锁功能。设计中用到了AT89C2051的T0、T1 定时器和INT0引脚,以及P1端口的6个口线。由于该单片机与89C51相兼容,因此在硬件电路设计和软件编程方面更加方便。考虑到AT89C2051本身固有的特点,设计时需注意以下几点:首先,它的程序存储器空间为2kB,因此所有的跳转和分支转移指令都要限制在这个范围内。其次,它没有MOVX指令,也就是说,它不支持外部存储器操作,这一点设计时一定要考虑到。此外,AT89C2051自身还有一些其它特点,譬如可以使用命令使其工作在低功耗模式等。单片机利用T0定时器和INT0引脚来测量输入方波信号的周期,而使用外部中断0来控制定时器T0是否开始定时。当定时器T0的运行控制位复位时,不管P3.2引脚是何值,定时器都不工作。只有当定时器T0的运行控制位置位后,才能根据P3.2引脚状态来决定定时器是否工作。当P3.2引脚出现高电平时,定