基于单片机的电子式转速里程表的设计 介绍一种新型的基于单片机的电子式汽车转速里程表的实现方案。讨论了里程计数的原理和转速指示原理。针对机械式里程表缺点结构复杂,精度不高,并且价格较昂贵,设计了数字式汽车转速里程表。这里以AT89C2051单片机为核心,利用SPI串行总线开发了电子式里程表。该里程表利用磁电式传感器采样汽车行驶所得到的信号;采用LCD数码管显示汽车总行驶里程数,本次里程采EEPROM 芯片X25045,利用其通电可改写,掉电信息可保存的特点存储汽车行驶的总里程数。本设计的转速里程表具有结构简单,精度较高,误差较小,显示清楚醒目,稳定可靠等特点,另外对该系统的软件也作了相应的说明。 关键词: 汽车; 转速里程表 单片机 Single Chip Microcomputer Controll ing Displaying of Automobile Odometer Abstract : This article mainly introduces a new -type electric automobile odometer. Its core is 2051 single chip microcom2 puter ; L ED digital tube is used to display the total and present running distance. Comparing with the mechanical automo2 bile odometer , it has following features : higher accuracy and less error , and it also can be displayed more clearly and pro2 duced with simpler technology. 目 录 摘要…………………………………………………………………………………… Abstract……………………………………………………………………………… 第一章:绪论………………………………………………………………………… 1.1研究的目的与意义……………………………………………………………… 1.2 国内外研究概况及发展趋势…………………………………………………… 第二章:系统的总体设计…………………………………………………………… 2.1系统的总体结构…………………………………………………………………… 2.2.转速里程表的介绍……………………………………………………………… 2. 3转速里程表的工作原理………………………………………………………… 第三章:系统的硬件设计…………………………………………………………… 3.1.系统CPU的选择………………………………………………………………… 3.2辅助芯片的选取………………………………………………………………… 3.3LM1819在转速里程表中的应用………………………………………………… 3.3. 1电动里程表结构……………………………………………………………… 3.3.2LM1819驱动线路工作原理………………………………………………… 3..4液晶显示器LCM1010的应用…………………………………………………… 3.5传感器的选择……………………………………………………………………… 第四章系统的软件设计……………………………………………………………… 4.1主程序模块………………………………………………………………………… 4.2串行中断服务程序模块…………………………………………………………… 第五章印制板图的绘制……………………………………………………………… 结束语……………………………………………………………………………… 附录…………………………………………………………………………………… 参考文献…………………………………………………………………………… 致谢…………………………………………………………………………………… 第一章:绪论 1.1研究的目的与意义 自1886年发明汽车以来,汽车走过了100多年的发展历程。汽车的出现和发展,使汽车仪表也在不断开发和发展之中。随着光学、电子技术的迅速发展,特别是计算机技术在汽车仪表中的广泛应用,汽车仪表正向数字化和智能化方向展。汽车仪表的发展趋势,从一个侧面反映出汽车电子化水平的快速提高。 传统的汽车转速里程表的功能有两个,一是用指针指示汽车行驶的瞬时车速,二是用机械计数器记录汽车行驶的累计里程。现代汽车正向高速化方向发展,随着车速的提高,用软轴驱动的传统车速里程表受到前所未有的挑战。这是因为软轴在高速旋转时,由于受钢丝交变应力极限的限制而容易断裂,同时,软轴布置过长会出现形变过大或运动迟滞等现象,而且,对于不同的车型,转速里程表的安装位置也会受到软轴长度及弯曲度的限制。凡此种种,使得基于非接触式转速传感器的电子式转速里程表得以迅速发展。 1.2国内外研究概况及发展趋势 为了充分了解汽车仪表发展现状,准确地把握其未来发展趋势,有必要对其发展过程作一简单回顾。按汽车仪表在工作原理上取得的重大技术创新来分,可以划分为4个阶段,或称为经过4代。第1代汽车仪表是基于机械作用力而工作的机械式仪表,人们习惯称这类仪表为机械机心表;第2代汽车仪表的工作原理基于电测原理,即通过各类传感器将被测的非电量变换成电信号加以测量,通常称这类仪表为电气式仪表;第3代为模拟电路电子式;第4代为数字汽车仪表。 1 现代汽车仪表的现状 汽车仪表正在经历由第3代向第4代转型时期。第3代汽车用仪表工作原理与电气式仪表基本相同,只不过是用电子器件取代原来的电气器件。其出现的时间大致在20世纪50~60年代,随着集成电路技术突飞猛进的发展,这种仪表现在均采用各种专用集成电路(为汽车仪表专门设计的集成电路),国内汽车仪表目前的主流产品就是这种仪表,经过20多年的发展,其结构形式经历了动圈式机心(线圈连同指针一起转动)和动磁式机心(磁钢连同指针一起转动)2个基本阶段。电子器件经历了分立器件和专用集成电路2个阶段。在整个发展过程中,国内外工程技术人员一直从未停止对其进行改进。如围绕降低成本,不断改进制作工艺,机械零件起初以金属件为主,发展到今天以塑料件为主;围绕提高指示精度和指针平稳性,由动圈式发展成动磁式等。虽然,每次较大改进后整体性能价格比都有所提高,但受其工作原理的限制,其线性、精度、重复性、响应速度等性能指标难以有根本的突破。 严格地说,第4代全数字式汽车仪表从其应用的技术手段上看,还是电子技术范畴,也属于电子式仪表,但信号处理方式已从模拟变成数字。仅凭信号处理方式的改变还不足以将全数字式汽车仪表划分成一个新阶段,其最显著的特征是工作原理与第3代汽车仪表完全不同。如果一个产品在工作原理上有创新和突破,则其设计思路、组成形式、功能和性能的改变将是根本性的。鉴于此,将全数字式汽车仪表暂且列入第4代。关于全数字式汽车仪表早在20世纪80年代就已经被提出,最初为“数字显示”形式的汽车仪表。虽然该仪表的工作方式是全数字式,技术水平和仪表的性能远远超过了第3代汽车仪表,但其致命的缺点是只能显示一组孤立的数字,没有动感,在被测物理量(如车速、发动机转速)发生变化时,只有数字翻动,而没有指示上升、下降直观感,再加上读数时间比较长,容易分散驾驶员的注意力等,这种形式的汽车仪表很难被驾驶员接受,因而国内外都没有普及与推广。为了克服上述不足,后来出现了采用光点、光条或光带模拟动态显示被测物理量形式的全数字汽车仪表,显示器件主要有LED、LCD和电致发光材料等。由于受到成本的限制,目前光显示汽车仪表只能选用字段显示方式的显示屏,无法选用显示分辨率更高的点阵式显示屏。因此,其视觉效果和显示精度还不能令人满意。 随着电子技术的发展,特别是单片机性能的提高,主要表现在抗强电磁干扰、工作温度范围和对工作电源稳定性要求等方面的改善,再加上价格的大幅度降低,目前有条件在汽车仪表上使用单片机控制的全数字仪表。虽然全数字式汽车仪表曾经出现多种款式,但业内人士和专家一致看好“基于单片机的数字式汽车仪表”。它是针对目前广泛使用的模拟电子式汽车仪表机心存在多方面不足,在其工作原理上作出技术创新,即彻底放弃了“动磁式”或“动圈式”模拟电子式汽车仪表,通过线包与磁钢间产生电磁转矩驱动指针工作的形式。该汽车仪表由传感器完成各种被测物理量的采集,经过换算后直接送入单片机,再由驱动器驱动指针,在刻度盘上指示被测物理量,同时辅以被测物理量LCD数字显示。该汽车仪表在指示方式上仍然保留了第3代仪表指示直观、有动感、符合驾驶员习惯等特点,而且批量生产的成本有望低于同等功能的模拟电子式汽车仪表,更可贵的是在工作原理上的创新和突破,带来了技术性能质的提高。 2 汽车仪表的发展趋势 继全数字式汽车仪表后,未来汽车仪表应向何方向发展呢?虽然具体过程不清楚,但总的趋势还是比较明朗的,那就是充分应用光技术和机、电一体化技术,并突出现代信息技术和网络技术的应用,其功能将极大拓宽,指示形式将演变成计算机终端显示器。虽然人们对未来汽车仪表作出种种预测,并赋予它远远超出现在汽车仪表多得多的功能。个人认为仅从技术本身的角度出发,就目前技术条件而言,实现这些功能并没有什么问题,制约新技术在汽车仪表上应用的主要因素是制造成本。因为汽车仪表是一个量大、对成本极为敏感的产品,在其改进和创新的过程中,不仅要考虑技术的可行性、功能的拓宽、性能的改善、使用的可靠性等,更重要的是其制造成本。脱离制造成本谈汽车仪表,那只能是概念性的汽车仪表。在有关技术使用费用,特别是其依赖硬件成本进一步降低的前提下,汽车仪表未来可能发展趋势如下。 1 从近期来看,未来汽车仪表的功能将不局限于现在的车速、里程、发动机转速、油量、水温、方向灯指示,可能增添如下功能。 (1) 能指示安全系统运行状态,如轮胎气压、制动装置、安全气囊、安全带等。这些信号传输形式,将不再是简单的开关接通和断开直流信号,而是包含反映这些安全装置工作状态较多信息的调制信号,供单片机读取,以便单片机能准确地综合判断这些安全装置的工作状态,并给出故障显示提醒驾驶员,或指导维修人员排除故障,也就是说带基于单片机的汽车仪表将有一定水平的智能化。 (2) 将防盗系统纳入汽车仪表单片机的监管下,如车门、后行李箱等处防盗锁指纹识别开启系统,防撬振动报警装置,防盗点火起动装置等。 2 随着显示器件,如液晶显示器件的性能,特别是工作温度范围的拓宽,在价格进一步降低的前提下,汽车仪表的功能将被极大地拓宽,形式将发生根本改变,外观上就是一个高清晰度的计算机显示器。 3 电光学技术将在汽车仪表上得到广泛应用。 (1) 显示和内照明器件不再用白炽灯泡,而是选用高效冷光源发光器件,如LCD、LED、电致发光器件等。导光系统更多体现出光学领域的新技术,如仪表面板颜色可变等满足个性化要求设计等。 (2) CCD摄像后视系统,现在的后视光学反光镜有可能被取消,而改用电子摄像显示后视系统,驾驶员的视野范围将更宽。 4 自动导航和定位系统可能也是未来汽车仪表上不可缺少的部分,包括全球卫星定位系统和电子地图等。 5 具备完善的通讯系统,将来汽车上的计算机系统会与公共互连网相连,以便充分共享信息资源,处理通讯作业将是汽车仪表计算机系统工作内容的一部分。 6 汽车仪表的计算机系统具备对娱乐、空调等舒适性设备进行监管的功能, 可以自动控制这些设备或支持驾驶员远程操纵。以上在基于当今成熟技术的基础上,对未来汽车仪表的发展方向做些简单设想。也许,未来汽车仪表的发展将远远超出我们今天的想象。 在当今世界范围内,汽车仪表正处于技术更新的转型期。为此,业内人士和专家对此都给予极大关注。什么样的仪表是今后汽车仪表的主流产品,什么技术是今后汽车仪表的主导技术,对于这些问题业内人士的看法可能不尽相同,但有一点是肯定的,带有基于单片机的数字技术在汽车仪表上的广泛应用,将是汽车表发展的必然。原因主要有4点: 1 仪表的功能由软件和硬件共同实现,而且主要是通过软件实现。这对于量大且对成本极为敏感的汽车仪表有特殊意义,因为软件的开发费用分摊到每个仪表上是非常少的。 2 与仅由电子线路硬件组成的汽车仪表相比,带有基于单片机的汽车仪表,其功能的实现手段更加灵活多样。 3 产品的“柔性”更好,即在推出新款产品时,能最大限度地利用以前产品的硬、软件设计成果,仅做少量修改便可,这在产品更新换代很快的今天和未来特别重要。 4 随着汽车电子化水平的提高,必须要求汽车仪表与汽车上其它装置交换数据,即要求接入到汽车的计算机系统总线上。 第二章 系统的总体设计 2.1 系统的总体结构 本系统以单片机AT89C205为核心,由液晶显示、WATCHDOG及复位电路等部分组成。单片机采用美国ATME公司生产的AT89C2051单片机。该芯片不仅具MCS-51系列单片机的所有特性,而且片内集成2K字节的电擦除闪烁存储器(Flash EPROM)。其价格低,引脚少(20脚),是目前性能价格比较高的单片机芯片之一。它为很多嵌入式控制应用提供了一个高度灵活的有效的解决方案。AT89C2051的工作频率为12/24 MHz,本系统利用单片机的内部振荡器外加石英晶体构成时钟源,为了工作可靠,晶体振荡频率选为12MHz。显示驱动电路为简化硬件设计,减少使用系统I/O口,节约系统硬件资源的基础上,显示部分由驱动器LM1819驱动双线圈汽车转速表头显示转速,通过单片机编程液晶显示模块LCM1010显示累计里程和本次里程. 2.2 转速里程表的介绍 单片机自从推出以来,以其超小型化、结构紧凑、可靠性高、成本低等优点被人们广泛接受,从而应用于工业、电讯、数据处理、仪器仪表等多方面。汽车里程表是汽车的重要配件,在汽车仪表中占重要位置。这里讲述的是一种以2051单片机为核心,10位LCD作为显示器,再加上其掉电信息不丢失,并且数据可方便改写,利用此特性在其中存放汽车总里程数据. 2.3转速里程表的工作原理 1里程计数实现原理 1 霍尔传感器输出的脉冲信号是传感器转轮旋转时磁场使舌簧管分开闭合而产生的脉冲。每一个脉冲代表行驶了一定的距离,设汽车行驶1km时驱动轮转数为N,霍尔传感器转数为NF则NF=N×I其中I为传动比。设轮胎外径为D,则汽车行驶1km驱动轮转数为N = 1 000/ Πd,实际中由于轮胎承载变形使得轮胎外径D变化,此时NXI = 1 000/ πμD,其中μ为变形系数,一般为0.93~ 0。96磁电式传感器在汽车行驶1km时转数N F = (1 000/ πμD)I,传感器转轮匀安排m个磁片时,汽车行驶1 km ,传感器输出脉冲为mNF个。 2 序中以INT1的输入为里程计数脉冲,2051断1置为高中断优先级以保证计数准确。定时器T0置为低中断优先级,T0每10ms中断1次,中断1次送1位显示。每行驶1km向5045中写1次数据。 3 以60H~62H单元为计数脉冲暂存单元。68H、69H单元为判断数据暂存单元,6CH中为本次里程小数点位数值。当6CH单元内容达到0AH时清零。70~72H单元为读出的总里程数。 2速测量实现原理 车速指示可采用双线圈汽车转速表头,它由空气轴表芯和驱动电路组成,空气轴表芯通常由三部分组成:磁铁、与转轴相连的指针和两个互成九十度的线圈。转轴是表芯唯一的可动部件,磁铁的转角总是趋向于两个线圈的磁场强度矢量的合成方向,磁场强度正比于加在线圈上的电压,因此,通过改变电压的极性和幅度,可在理论上使转轴组件在0~360度范围内转动。 显然,只要能按一定的规律驱动两个线圈,就可以使指针偏转位置与输入量成线性关系,即满足下列公式: θ= KVin 其中θ为指针偏转角,单位为度;K为转角常数,单位为度/V ;Vin是输入电压,单位为V。 每个线圈的磁场强度矢量之和必须跟随偏转角θ。考虑到转轴组件总是指向Hsine和Hcosine这两个正交矢量之和的方向,则其方向可由下式求得: θ= arctan Hsine / Hcosine 并由此可以得出: θ= arctan sinθ/cosθ 由上述公式可见,当Hsine按θ的正弦函数变化,而Hcosine按θ的余弦数变化时,所得到的总磁场强度的方向与θ角的方向相同,由于转轴组件与磁场强度矢量和的方向相同,因此,指针将始终指向θ角的方向。 file:///C:\Users\junjie\AppData\Local\Temp\ksohtml\wps5D1B.tmp.png 图1.1 LM1819内部组成原理图 图1 所示是LM1819驱动器的内部组成原理框图,它由电荷泵、整形器、函数发生器等组成,输入的转速信号通过内部的三极管缓冲后,输入到电荷泵即可进行F/V频率电压转换,两个输出端按输入量的正弦和余弦函数变化,2脚和12脚的最小驱动能力为±20mA(±4V),线圈的公共端接到1脚可为内部函数发生器提供反馈信号,同时为5.1V齐纳二极管提供参考电压。在该电路中,K=54°/V ,输入Vin实际上是4脚和8脚的电位差,8脚既是诺顿放大器的输出,又是函数发生器的输入,一般4 脚的电压是2.1V,所以有: θ= K(V8 -Vref) = 54(V8 -2. 1) 由于V8是在2.1V~7.1V的范围内变化的,故LM1819可以驱动十字表头以使其在0°~270°范围内转动。 当然也可以通过软件来实现: 时速表的编程思想如下:里程表程序中,每计数1次,汽车行驶0.001 602 564 1 km ,T0每10ms中断1次,送显示,其中断100次时间为1s,计算这1s计数次数,乘3 600再乘0. 001 602 564 1 即可求出时速.公式为:时速= 次数×5.7692.此算法可精确到0.001位.然后将求得的时速送显示。 时速表显示以P1.1及外接按键来控制,P1.1脚为高电平,P3.0为低电平时显示汽车时速.此时速表可显示到小数点后2位,精度较传统汽车时速表提高2个数量级。(具体程序本设计就不在獒述) 第三章 系统的硬件设计 本系统以单片机AT89C2051为核心,由液晶显示、WATCHDOG及复位电路等部分组成。 1单片机 单片机采用美国ATMEL公司生产的AT89C2051单片机。该芯片不仅具有MCS51系列单片机的所有特性,而且片内集成有2 K字节的电擦除闪烁存储器(Flash EPROM)。其价格低,引脚少(20 脚),是目前性能价格比较高的单片机芯片之一。它为很多嵌入式控制应用提供了一个高度灵活的有效的解决方案。 AT89C2051的工作频率为12/24 MHz ,本系统利用单片机的内部振荡器外加石英晶体构成时钟源,为了工作可靠,晶体振荡频率选为12 MHz。 2显示驱动电路 显示驱动电路为简化硬件设计,减少使用系统I/O口,节约系统硬件资源的基础上,显示部分由驱动器LM1819驱动双线圈汽车转速表头显示转速。里程显示选用LCM1010串行控制业经显示模块,它具有以下独特特点: (1) 它只有3个输入端: CS、LOAD、CLK,接线简单, 工作可靠。 (2) 被动显示: 液晶显示器本身不发光而是靠调制外界光进行显示,也就是说,它不象发光的主动型器件那样,靠发光刺激人眼而实现显示,而是单纯依靠对光的不同反射呈现的对比度达到显示的目的。符合人的视觉习惯,不容易引起疲劳,而且外界光亮度越强,其显示内容越清晰。特别适用于室外和强光直射的场合。 (3) 低电压功耗: 极低的工作电压, 只有3~5V, 工作电流则只有几个μA/(cm)2,可以和大规模集成电路直接匹配。 (4) 液晶显示器采用平板式结构,由两片玻璃组成夹层盒,目前都将液晶显示器件制作成液晶显示模块(LCM),使用方便。 本显示器分为两组: 第一组为6位,用以显示总行驶里程数,最大显示值为: 999999 km;第二组为4位,用以显示本次行驶里程数,最大显示值为: 999.9 km 3 WATCHDOG及复位电路 本电路直接选用Xicor公司的X25045芯片。它把3种常用的功能: 看门狗定时器,电压监控和EEPROM组合在单个封装之内,这种组合降低了系统成本并减少了对电路板空间的要求。另外X25045与CPU的连接方式也是采用模拟串行外设接口(SPI),因此也节约了系统的口资源。该电路由3个信号构成: 定时脉冲提供定时器时钟信号源、清除信号复位定时器、RESET 信号产生复位系统。在工作时, 假定工作软件循环周期为T ,如果设定定时器定时长度为T1( T1<T) , 这样CPU在每个工作循环周期都对定时器进行一次清零操作,只要系统正常工作, 定时器永远都不会溢出, 也就不会使系统复位; 否则, 当系统出现故障时, 在可选超时周期之后, X25045看门狗将以RESET 信号作出响应。X25045片还有一个显著的特点是它内部的闪烁存储器2 KX8 位的EEPROM,它采用Xicor公司Direct WriteT专利技术, 提供不少于100 000次的使用年限和最小100年的数据保存期, 在本系统中,用于存储汽车行驶的总里程数。 3.1系统CPU的选择 用户在使用单片机时必须了解单片机的供应状态。单片机的供应状态决定于片内的ROM配置状态,片内ROM状态通常分三种: 1 片内ROM状态既单片机内带有的是掩腌ROM。由于用户无法自己将程序写入片内ROM,故这种单片机(如MCS-51中的8051)只是用于某种大批量产品时使用。此时,用户将调试好的应用程序有厂家固化到片内ROM中,当然,前提是片内的ROM容量必须满足用户程序的要求。 2 片内EPROM状态,用户自己可以通过高压脉冲将程序写入片内EPROM中去。当用户开发程序不大时(既不需要外扩EPROM),使用这种单片机可以简化整个系统的组成。它可以作为开发片内ROM单片机的代用芯片,开发成功以后,再改用带片内ROM的芯片(MCS-51系列的8751属于这种芯片)。此类单片机应用最为广泛。 3 片内无ROM状态,使用这种单片机时,必须外部配置程序存储器EPROM。其容量可视需要灵活配置。 而MCS89-51系列中的2051正属于第二类单片机下面是针对2051芯片的介绍。 file:///C:\Users\junjie\AppData\Local\Temp\ksohtml\wps5D3B.tmp.png 功能框图 3.2辅助芯片的选取 微机控制系统干扰、电源的波动引起的程序飞车和数据丢失, 常造成系统的各种误动作或死机, 直接影响着系统的正常运行, 设计人员为此倍感头痛。25045芯片将微机测控系统中常用的功能: 看门狗定时器、电源电压监控、上电复位、串行E2PROM 集成在一片8 引脚的芯片内. 这种组合大大减少了对电路板的空间要求, 简化了硬件设计, 降低了成本和功耗,大大提高了系统的可靠性和安全性. 1 芯片简介 在采用DMX512协议通信时,换色器的编号用于从总控制台发送的数据包中选择发给本设备的数据帧。正常工作时,编号数据不会掉电丢失,而且必要时编号还可修改。因此采用XICOR公司的串行E2PROM器件X25045对编号数据进行存储。 X25045是带有串行E2PROM的CPU监控器。图2是它的引脚图: file:///C:\Users\junjie\AppData\Local\Temp\ksohtml\wps5D3C.tmp.png 5045引脚图 CS/WDI:片选输入/看门狗复位输入; SO:串行输出; WP:写保护输入; Vss:地; Vcc:电源; RESET:复位输出; SCK:同步时钟输入; SI:串行输入。 X25045的状态寄存器描述器件的当前状态,各位意义如表1所列。
表1 其中,WD1、WD0是看门狗定时时间设置位;BL1、BL0是存储单元写保护区设置位;WEL是只读标志,1表明写使能开关打开;WIP也是只读标志,1代表芯片内部正处于写周期。电复位时,各位都被清零。 X25045芯片功能包括以下4种: (1)上电复位控制。在对X25045通电时,ERSET引脚输出有效的复位信号,并保持至少200ms,使CPU有效复位。 (2)电源电压监控。当检测到电源电压低于内部门槛电压VTRIP时,RESET输出复位信号,直至电源电压高于VTRIP并保持至少200ms,复位信号才被撤消。VTRIP的出厂值根据芯片型号不同共有5个级别的电压范围。对于需要电源电压精确监控的应用,用户可以搭建编程电路,对芯片内VTRIP电压进行微调。 (3)看门狗定时器。芯片内部状态寄存器的WD1、WD0是看门狗定时设置位,通过状态寄存器写指令WRSR修改这2个标志位,就能在3种定时间隔中进行选择或关闭定时器。对看门狗的复位由CS输入电平的下降沿完成。表2是WD1、WD0组合的含义。 表2 (4)串行E2PROM。芯片内含512字节存储单元,10万次可靠写,数据保持时间100年。XICOR设计了3种保护方式防止误写。包括:WP写保护引脚,当引脚被拉低时,内部存储单元状态寄存器都禁止写入;存储区域写保护模式,通过对状态寄存器的BL1、BL0位的设置,可以选择对不同的存储区域进行写保护;在进行任何写操作前都必须打开写使能开关,而且在上电初始化写操作完成时,写使能开关自动关闭。显然,在几方面的保护之下,产生误写的可能性极小,表3是BL1、BL0组合的含义。
表3 对X25045的操作是通过4根口线CS、SCK、SI和SO进行同步串行通信来完成的。SCK是外部输入的同步时钟信号。在对芯片定改指令或数据时,时钟前沿将SI引脚信号输入;在读邮数据时,时钟后沿将数据位输出到SO引脚上。数据的输入/输出都是高位在先。 芯片内部共有6条指令,如表4所列。
表4 (1)WREN和WRDI是写使能开关的开/关指令。它们都是单字节指令。 (2)RDSR和WRSR是状态寄存器的读/写指令。在从SI输入指令后,RDSR的执行结果,即状态寄存器内容须从SO读出;而WRSR需要紧接着输入修改数据。 (3)READ和WEITE是存储单元的读/写指令。输入指令后(指令码第三代表存储单元地址的最高位),接着输入低八位地址,最后就可以连续读出或写入数据。其中,读指针和写指针的工作方式完全不同,读指针的全部8位用来计数,0FFH溢出后变成00H;写指针只用最低两位计数,XXXXXX11B溢出后变成XXXX XX00B,所以连续写的实际结果是在4个单元中反复写入。另外,由于E2PROM的写入时间长,所以在连续两条写指令之间应读取WIP状态,只有内部写周期结束时才可输入下一条写指令。 AT89C2051内部没有SPI接口硬件,因此本系统利用了单片机的4根口线和软件模拟读写时序的方式与X25045通信。 5045与2051连接图 file:///C:\Users\junjie\AppData\Local\Temp\ksohtml\wps5D4D.tmp.png 3.3LM1819在转速里程表中的应用 目前国际上流行大转角(0~270°)动磁式指示仪表,它克服了一般动圈式指示仪表抗震性能差、过载能力弱、指针易抖动等缺点。而引进的一些驱动芯片,如KEFA-796专用集成芯片,有成本高、不易国产化等弱点。我们采用LM1819专用集成芯片(美国国家半导体公司新产品),配以适当的应用电路,就可以很好地解决以上问题。 3.3.1电动里程表结构 电动里程表接收霍尔传感器送来的方波信号,把方波信号频率转换成指针的转角。我们选用动磁式十字交叉机芯,实现瞬间里程指示功能。十字交叉机芯是一种动磁式的转速表,它代表现代转速表的发展方向,因为它与动圈式转速表相比有下列优点: (1) 转动组件质量小、抗震性能好、指示平稳; (2) 无需动平衡、装配简单; (3) 机芯体积小、机械结构较简单。 3.3LM1819专用集成电路简介 为了使指针准确地指示出瞬时车速,需要一套电子电路。将霍尔速度传感器送来的方波信号的频率转化为驱动线圈N1 和N2 的电波信号,使合成磁场H 与水平线夹角θ能根据车速变化按线性规律改变,以便指针均匀、准确地指示车速。我们选用LM1819 专用集成电路实现上述功能。LM1819 是专门为驱动动磁式仪表而设计的。LM1819 是由电荷泵、整形器、函数发生器、等组成。其集成电路功能框图如图1所示。 (5) 下面对外围电路和工作原理作较详细分析和说明。 (1)电流供给部分:该电路单元由二极管D1、电阻R3、稳压管DW1电容C3组成。二极管D1是为了防止电源反接,以保护LM1819烧毁;电阻R3和稳压管DW1是LM1819 的脚13上电源电压值限定在18V以下,起过压保护作用;电容C3是电源的吸收电容,以避免电源电压频繁波动对LM1819影响。 (2)正弦、余弦绕组公共端基准电位设定电路:由电阻R4和稳压管DW2组成,电阻R4是稳压管DW2的限流电阻。稳压管DW2选用5.1V ,使正弦和余弦绕组公共端基准电位设在5.1V。 (3)霍尔探头方波信号输入电路:该电路单元由二极管D4 ,电阻R5、R6、R7,电容C4组成。二极管D4作用是防止信号反接;电阻R5和电容C4组成低通滤波器;电阻R7是输入电路限流电阻,使加到LM1819的脚10上电流限制在2.5mA 以下;当LM1819内部NPN开关晶体管关断时,电阻R6为电容C4提供一个放电通路。 (4)方波整形电路:为了提高电路的处理精度,需要将霍尔探头送入的方波信号加以整形。整形的目的是使方波正半周幅度恒定,上升沿和下降沿尽可能陡。为了实现上述目的,LM1819内部电压基准电路产生一个非常稳定的8.5V电压由脚11输出,整形靠LM1819内部NPN开关晶体管实现,其具体过程如图4所示。 图4 方波整形示意图 V10是LM1819脚10的输入信号,它是霍尔探头输出的信号经输入电路处理而得到的方波;V9是LM1819脚9的输出信号,即上述整形电路输出信号。当V10为高电平时,LM1819内部NPN开关晶体管导通,V9输出低电平;V10为低电平时,开关晶体管截止,V9输出高电平(约等于脚11 输出电 压,因V11稳定在8.5V 左右). 同时,LM1819内部的 NPN开关晶体管导通和关闭时间都非常短,因而V9幅值非常稳定,上升沿和下降沿都非常陡,为后续方波频率与电压转换电路提供一个理想的信号源。 (5)方波频率与电压转换电路:该电路单元的功能是将霍尔探头送来的反映车速的方波信号频率转换为LM1819内部函数发生器输出的控制电压。当车速变化(即方波信号频率变化)时,控制电压V 8也将随之变化,以满足: θ = 54 ( V 8 - 2. 1) 的最终要求。该电路单元由R1、C1、R2、C2、R8及诺顿放大器组成。R1、C1是诺顿放大器正向输入端的微分输入电路,其作用是将幅度恒定的方波信号转化为加到脚6上的电流信号。诺顿放大器本质上是一个电流放大器,随着方波频率变化, R1、C1构成的微分电路充放电电流平均值也随之变化,诺顿放大器是将正向输入端的平均充放电电流变化转化成其输出电压变化的核心器件。R2、R8、C2是诺顿放大器反馈网络,R2+R8的大小决定诺顿放大器的增益,C2是抑制输出脉冲的补偿电容。 在电动车速里程表中,选用LM1819专用集成电路驱动动磁式电子转速表的十字交叉机芯。将霍尔速度传感器送来的方波信号的频率转化为驱动线圈N1和N2 的电流信号,使合成磁场H与水平线夹角θ能根据车速变化按线性规律改变,以便指针均匀、准确地指示车速。此装置具有稳定性好、可靠性高、响应速度快、指示性能好、精度优良等特点,其应用前景十分广阔。 3..4液晶显示器LCM1010的应用 液晶显示器已广泛应用于仪器仪表产品、机电一体化产品、自动化控制系统、智能小区监控系统中。下面是对LCM1010的介绍: 其引脚如图所示 (1) 它只有3 个输入端: CS、LOAD、CL K, 具有接线简单, 工作可靠。 (2) 被动显示: 液晶显示器本身不发光而是靠调制外界光进行显示, 也就是说, 它不象发光的主动型器件那样, 靠发光刺激人眼而实现显示, 而是单纯依靠对光的不同反射呈现的对比度达到显示的目的。符合人的视觉习惯, 不容易引起疲劳, 而且外界光亮度越强, 其显示内容越清晰。特别适用于室外和强光直射的场合。 (3) 低电压功耗: 极低的工作电压, 只有3~5V , 工作电流则只有几个μA/ (cm) 2 可以和大规模集成电路直接匹配。 (4) 液晶显示器采用平板式结构, 由两片玻璃组成夹层盒, 目前都将液晶显示器件制作成液晶显示模块(LCM) , 使用方便。本显示器分为两组: 第一组为6 位, 用以显示总行驶里程数, 最大显示值为: 999999 km ; 第二组为4 位, 用以显示本次行驶里程数, 最大显示值为:99919 km。 3.5传感器的选择 3.5.1霍尔传感器的选择 传感器是一种以一定的精度把被测量转换成为与之有确定对应关系的便于应用的某种物理量的测量装置。传感器的功能是感受被测信息并传送出去。 近年来传感器的应用日益扩大,地位也越来越重要。磁敏式传感器按其结构可分为体型和结型两大类。前者有霍尔传感器,其主要材料有:InSb,InAs,Ge,Si,GaAs等和磁敏电阻(InSb,InAs);后者有磁敏二极管(Ge,Si)和磁敏晶体管(Si)等。它们都是利用半导体材料中的自由电子或空穴随磁场改变其运动方向这一特性而制成的一种磁敏传感器。磁敏传感器的应用范围可分为模拟用途和数字用途两种。例如利用霍尔传感器测量磁场强度,用磁敏电阻,磁敏二极管作无接触式开关等。 霍尔传感器是利用霍尔效应实现磁电转换的一种传感器。霍尔效应自1879年被发现至今已有100多年的发展历史,但是直到本世纪50年代,由于微电子学的发展,才被人们重视和利用,开发了多种霍尔元件。我国从70年代开始研究霍尔元件,经过20余年的研究和开发,目前以能生产各种性能的霍尔元件,例如:普通型,高灵敏度型,低温度系数型,测温测磁型和开关式的霍尔元件。 由于霍尔传感器具有灵敏度高,线性度好,稳定性高,体积小和耐高温等特性,它已经广泛应用于非电测量,自动控制,计算机装置,和现代军事技术等各个领域。 霍尔传感器的工作原理主要是在线圈中放置一软磁(可旋转)这样可以改变线圈内的磁通的变化,从而在线圈中产生的频率与待测转轴转速成正比。 1基本测量电路 霍尔元件的基本测量电路如图所示: file:///C:\Users\junjie\AppData\Local\Temp\ksohtml\wps5D4E.tmp.png 控制电源I由电源E供给,电位器W调节控制电流的大小。霍尔元件的输出接负载电阻R,R可以是放大器的输入电阻或者是测量电路的内阻。由于霍尔元件必须在磁场与控制电流作用下,才会产生霍尔电势U。所以在测量中,可以把I和B的乘积,或者I,或者B作为输入信号,则霍尔元件的输出电势分别正比与IB或I或B。 2连接方式: 除了霍尔元件的基本电路形式之外,如果为了获得较大的霍尔输出电势,可以采用几片叠加的方式如图所示。 file:///C:\Users\junjie\AppData\Local\Temp\ksohtml\wps5D5F.tmp.png 下图为直流供电情况。控制电流端并联,由W1,W2调节两个元件的霍尔输出电势,A,B为输出端则它的输出电示为单块的两倍。 下图为交流供电情况。控制电流端串联,各个元件的输出端连接输出变压器B的初级绕组,变压器的次级便有霍尔输出电势信号的叠加值输出。 3霍尔电势的输出电路: 霍尔元件是一种四端器件,本身不带放大器。霍尔电势一般在毫伏量级,在实际使用的时候必须加差分放大器。输出电路如图所示的结构。 file:///C:\Users\junjie\AppData\Local\Temp\ksohtml\wps5D60.tmp.png 第四章系统的软件设计 软件设计在系统设计中占很大比重,好的软件环境能使单片机硬件资源得以充分发挥,在软件编程时应注重程序的结构化,以简化编码,方便调试. 本汽车里程表程序短小简练,结构简单,汇编完后为713字节,占用程序空间少,用2716 亦能胜任(采用25045主要为了方便功能扩充) . 1)里程计数原理:汽车磁电式传感器输出的脉冲信号是传感器转轮旋转时磁场使舌簧管分开闭合而产生的脉冲.每一个脉冲代表行驶了一定的距离.设汽车行驶1km时驱动轮转数为N,磁电式传感器转数为NF 则NF=N×I,其中I为传动比. 设轮胎外径为D,则汽车行驶1km驱动轮转数为N=1000/πD,实际中由于轮胎承载变形使得轮胎外径D变化,此时NXI=1000/πμD,其中μ为变形系数,一般为0. 93~0.96.则磁电式传感器在汽车行驶1km时转数NF=(1000/πμD)I.设传感器转轮上均匀安排m个磁片时,汽车行驶1km,传感器输出脉冲为mNF个. 2)程序中以INT1的输入为里程计数脉冲,2051中断1置为高中断优先级以保证计数准确.定时器T0置为低中断优先级,设T0每10ms中断1次,中断1次送1位显示.每行驶1km向5045中写1次数据. 3)以60H~62H单元为计数脉冲暂存单元.68H,69H单元为判断数据暂存单元,6CH中为本次里程小数点位数值.当6CH单元内容达到0AH时清零.70~72H单元为读出的总里程数. 本程序包括主程序和2个中断服务程序,程序功能如下: 主程序:初始化,清零存储单元,读出总里程存入暂存单元,开CPU中断、置中断优先级,启动定时器,等待中断. INT1中断服务程序:脉冲个数加1,判断是否小数点数值为0.1 km,判断是否行驶1km.不是则返回. T0 中断服务程序:判断是否显示总里程,显示方式初始化,显示里程数,返回. 第五章 印制板图的绘制 首先根据转速里程表的结构特点,将整个硬件图版分为两部分,即打成主板和立板,主板2051,5045和驱动器LM1819,立板为显示版,固定LCM1010显示器,立板和主板用接口模块固定。 下面就可以用PROTEL中的TRAXED来绘制和制板图了 1首先C》CD PROTEL C:PROTEL》TRAXEDIT 进入编辑状态 2选setup-pads 定义焊接板类型 (设置)setup-toggbe layers 打开和关闭层 默认当前的线宽,字符尺寸和捕获栅格的大小。 3选place放置元件component 可以直接输入元件名,也可以用回车查找元件表后确定要安置的元件。 型号 封装 2051 DIP40 5045 DIP28 LM1819 DIP 4元件进行布线(选用手动布线) 用place-track 用鼠标左键定义起点,左键确认,用小键盘的 星 改变层。在本次绘制印制图板中还用到了以下命令。 (块)Block-copy Block-Define Block-Hide Block-Move Block-Insade Delete (放置)Place-Arc -Pad (库管理)Library-Aold -Browse -List -New Library (屏幕控制)Zoom-Expand 印制板图如图 结束语 基于单片机的电子式转速里程表的设计经过了3个多月的时间的设计,现在已经结束。在这次设计中我查阅了大量的关于单片机及测试技术等多方面的书籍,在老师的帮助下学到了许多没有学过的知识,并且把四年来所学的MCS-51系列的单片机原理,单片机接口等课程重新温习了一遍。同时,将其中的部分知识运用到本次设计之中,作到了理论与实际相结合,并使所学的理论知识融会贯通,提高了学习的质量。也培养了对设计的分析能力。 致谢 本次设计即是对多门课程的一次综合性的运用,也是将理论知识运用到实际当中的一次尝试。在设计中由于老师和同学的热心帮助,解决了很多问题和难点。再次,我向他们表示忠心的感谢。另外由于缺乏经验,缺点和不足再所难免。恳切的希望老师和同学们批评指正。 附录 //****************************************************************/ //文件:zslcb.c //** //** //** #include<reg51.h> #include <absacc.h> //----------------------------------------------------- //*定义25045端口--------- sbit CS = P1^1; //*片选 sbit SO = P1^0; //*串行输出 sbit SI = P1^3; //*串行输入 sbit SCK = P1^2; //*串行时钟输入 char command; //*指令字 //------------------------------------- sbit K1 = P3^0; //计程开关 int pulsdate; //*计数脉冲变量 int lengthsdate1; //*保存本次里程数的整数 int lengthsdate2; //*保存本次里程数的小数 int totallength; //*总里程数 //------------------------------------------- int timer0date1; //*定时器0记数变量变1 int timer0date2; //*定时器0记数变量变2 //*初始化2051工作寄存器--------- void init(void) { TMOD = 0x11; //0001 0001B T0:16位定时中断;T1:6位定时中断,方式1 TL0 = 0xfe; //时钟 0.00108506944444444444ms TH0 = 0xdb; //10ms=0x2400,0xffff-0x2400=0xdbff PT0 = 0; //定时器0中断优先级 PT1 = 0; PX0 = 0; PX1 = 1; //外部中断1中断优先级 ET0 = 1; //扫描开始时开T0中断 IE1 = 1; //开外部中断1 IT1 = 1; //边沿触发 TR0 = 1; //开T0 中断 EA = 1; //开总中断 command= 0x00; pulsdate=0x00; lengthsdate1=0x00; lengthsdate2=0x00; timer0date1=0x00; timer0date2=0x00; } //*把状态值State写入25045状态寄存器函数 void Write25045State(char State) { int i; SCK=0; CS=0; for(i=0;i<8;i++) { State<<1; SCK=1; SCK=0; SI=CY; } CS=1; } //*读25045状态寄存器函数,返回值为状态寄存器的值 char Read25045State(void) { int i; char State0; CS = 0; Write25045State(0x06); Write25045State(0x05); SCK=0; for(i=0;i<8;i++) { SCK=1; SCK=0; CY =SO; State0>>1; } CS=1; return State0; } //*从25045的data1存储器中读取数据 char Read25045MEM(char data1) { int i; char out1; CS = 1; CS = 0; command = 0x03; for(i=0;i<8;i++) { command<<1; SCK=0; SI=CY; SCK=1; } command= data1; for(i=0;i<8;i++) { command<<1; SCK=0; SI=CY; SCK=1; } SCK=0; for(i=0;i<8;i++) { SCK=1; SCK=0; CY =SO; out1>>1; } CS=1; return out1; } //*把date2写出25045MEM void Write25045MEM(char data2,char Memory1) { int i; CS = 1; CS = 0; command = 0x02; for(i=0;i<8;i++) { command<<1; SCK=0; SI=CY; SCK=1; } command= Memory1; for(i=0;i<8;i++) { command<<1; SCK=0; SI=CY; SCK=1; } for(i=0;i<8;i++) { data2<<1; SCK=0; SI=CY; SCK=1; } CS=1; } //*X25045芯片复位函数 void reset25045(void) { CS=0; CS=1; } // void init25045(void) { int i; char data5; CS=0; Write25045State(0x06); Write25045State(0x01); data5=0x04; for(i=0;i<8;i++) { data5<<1; SCK=0; SI=CY; SCK=1; } CS=1; } //*写LCM1010函数 void Writelcm1010(char data3 , char data6) { ; } //*定义外部中断1函数 void Int1(void) interrupt 2 { char totall; char totalh; pulsdate++; lengthsdate2+=16; if(lengthsdate2>10000) lengthsdate2-=10000; if(pulsdate>=624) { lengthsdate2=0; lengthsdate1++; pulsdate-=624; } if(pulsdate==0) { totallength++; totall=totallength; Write25045MEM(totall,0x00); totalh=(totallength>>8); Write25045MEM(totalh,0x01); } } //*定义定时器0中断函数 void Timer0(void) interrupt 1 { char i; bit j; bit k; char a; timer0date1++; timer0date2++; if(timer0date1>=4) { timer0date1-=4; } if (k==K1) { a++; } else { k=K1; a=0; } if(i>=20) { j=k; a=20; } if(!j) { switch(timer0date1) { case 0: i=lengthsdate2/100; Writelcm1010(i,timer0date1); break; case 1: i=lengthsdate1%10; Writelcm1010(i,timer0date1); break; case 2: i=(lengthsdate1/10)%10; Writelcm1010(i,timer0date1); break; case 3: i=(lengthsdate1/100)%10; Writelcm1010(i,timer0date1); break; default: break; } } else { switch(timer0date1) { case 0: i=totallength%10; Writelcm1010(i,timer0date1); break; case 1: i=(totallength/10)%10; Writelcm1010(i,timer0date1); break; case 2: i=(totallength/100)%10; Writelcm1010(i,timer0date1); break; case 3: i=(totallength/1000)%10; Writelcm1010(i,timer0date1); break; default: break; } } } //*主函数 void main(void) { char totall; char totalh; init(); init25045(); totall=Read25045MEM(0x00); totalh=Read25045MEM(0x01); totallength=totalh; totallength<<8; totallength=totall; while(1) { if(timer0date2>=30) { timer0date2=0; init25045(); } }
|