还剩142页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
汽车车辆安全行驶速度智能控制系统的设计和实现摘要汽车车辆的安全行驶关系着整个交通业的可持续发展在汽车行驶过程中,车速过快是造成事故发生的主要因素在高速公路上行驶时,存在由于对行车视距判断不准确而导致的交通事故如果能够对车辆行驶的安全速度进行智能化的检测,并且根据检测结果对车速进行实时控制,则能够极大的提高汽车车辆的安全系数,减少事故发生传统的安全限速只是基于高速公路的道路设计速度,不能根据不同天气条件对车辆安全行驶速度做出实时性的智能判断本文基于不同天气条件下车辆行驶路段的能见度,对车辆的安全行驶速度进行自动检测和计算,并通过总线技术将结果传至车辆控制中心,与汽车实时速度进行比较,然后根据判断结果提示驾驶员车辆的安全状态,如果提示没有引起注意,就自动的控制汽车的油路,达到对车辆的安全行驶进行智能控制关键字:安全行驶速度;行车视距;智能控制DesignandimplementationofintelligentcontrolsystemforautomotivevehiclesafetyspeedAbstract:Safedrivingofmotorvehiclesrelatedtothesustainabledevelopmentofthewholetransportindustry.Theexcessivespeedisthemajorfactoroftrafficaccidents.Onthehighwaythereisaresultoftrafficaccidentsduetoinaccuratejudgmentonthesightdistance.Ifwecanintellectivelydetectthesafetyspeedofthevehiclecontrolthespeedofvehiclereal-timebasedontheresultsthiscangreatlyimprovetheautomotivevehiclesafetyandreducetheaccident.Thetraditionalsafespeedlimitisonlybasedonroaddesignspeedofhighwaynotthespeedunderdifferentweatherconditionsanditresulttocannotmakereal-timeintelligentjudgment.Thispaperisbasedonvisibilityofpresenttrafficsectionsunderdifferentweatherconditionsautomaticallydetectandcalculatethevehicle’ssafespeed.Transmittheresultstothevehiclecontrolcenterviabustechnologyandcomparetothereal-timespeedofthecarandthenpromptthedriverbaseontheresultsthesecuritystatusofthevehicle.Ifthepromptdoesnotattractattentionthesystemwillautomaticallycontrolofthecarsoilsupply.Lastlythiscangetthepurposeofintelligentlycontrolthesafedrivingofthevehicle.Keyword:safedrivingspeed;sightdistance;intelligentcontrol毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意作者签名 日 期 指导教师签名 日 期 使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容作者签名 日 期 目录第一章绪论
21.1道路交通安全现状
21.2安全行驶及其影响因素
21.
2.1安全行驶速度的定义
21.
2.2影响安全行驶的主要因素
21.3本文研究的主要内容2第二章安全行驶速度智能控制系统总体设计
22.1功能概述
22.
1.1下位机系统功能
22.
1.2上位机系统功能
22.2下位机系统总体设计
22.3上位机系统总体设计
22.4本章小结2第三章硬件电路设计
23.1主要器件
23.
1.1带有SPI接口的独立CAN总线控制器MCP
251523.
1.2霍尔传感器A
314423.
1.3红外对管及ADC
083223.
1.4步进电机及驱动芯片ULN2003A
23.
1.5显示器LCD
160223.
1.6三端稳压集成电路芯片
780523.2下位机系统电路设计
23.
2.1安全行驶速度测量电路
23.
2.2实时速度测量电路
23.
2.3通信模块电路
23.
2.4数码管显示电路
23.
2.5电源电路
23.
2.6单片机电路
23.3上位机系统电路设计
23.
3.1步进电机电路
23.
3.2声光提示电路
23.
3.3LCD1602显示器
23.
3.4单片机电路
23.4本章小结2第四章软件设计
24.1MCP2515构造CAN通信最小节点
24.
1.1复位MCP
251524.
1.2设置位定时
24.
1.3设置屏蔽和滤波器
24.
1.4设置正常模式
24.
1.5设置发送与接收缓冲器
24.2下位机程序设计
24.
2.1常量、变量说明
24.
2.2安全行驶速度采集子程序
24.
2.3实时速度采集子程序
24.
2.4显示子程序
24.
2.5MCP2515发送子程序
24.
2.6下位机主程序
24.3上位机程序设计
24.
3.1常量、变量说明
24.
3.2LCD1602显示子程序
24.
3.3步进电机控制子程序
24.
3.4MCP2515接收子程序
24.
3.5上位机主程序
24.4本章小结2结论2致谢2参考文献2附录1电路图2附录2程序清单2第一章绪论
1.1道路交通安全现状随着经济社会的发展,汽车越来越成为人们生活中必不可少的工具随着汽车保有量大幅增加,由此引发的各种问题也越来越凸现道路拥挤、能源消耗、噪声污染、空气污染和交通安全等严重制约着经济社会的可持续发展同时,交通事故给人们的生命财产安全带来了极大的威胁中国是世界上交通事故死亡人数最多的国家,中国每年发生交通事故20万起,因交通事故死亡人数均超过6万人表1-1列出了我国2010年、2011年涉及人员伤亡的交通事故次数以及由此带来的直接经济损失
[1]表1-12010年、2011年交通事故统计2010年,全国共接报道路交通事故3906164起,同比上升
35.9%其中,涉及人员伤亡的道路交通事故219521起,造成65225人死亡、254075人受伤,直接财产损失
9.3亿与2009年相比,事故起数减少18839起,下降
7.9%;死亡人数减少2534人,下降
3.7%;受伤人数减少21050人,下降
7.7%;直接财产损失增加
1196.7万元,上升
1.3%发生一次死亡3人以上道路交通事故1244起,同比减少32起,发生一次死亡5人以上道路交通事故269起,同比增加8起;发生一次死亡10人以上特大道路交通事故34起,同比增加10起适用简易程序处理的道路交通事故3686652起,与去年相比,增加1050895起,上升
39.9%2011年全国的道路交通安全总体形势总体平稳全国涉及人员伤亡的道路交通事故210812起,共造成62387人死亡,事故起数、死亡人数同比分别下降4%和
4.4%,从大的数字上来看是相对平稳的但是,也有一些比较明显的特点,从肇事车辆的使用性质看,生产经营性道路交通事故总数有些下降,一般货运车辆事故还是比较突出,占整个生产经营性事故的
71.8%从事故原因看,超速行驶、酒后驾驶、疲劳驾驶仍然是导致交通事故多发的主要的原因特别是超速行驶导致的事故死亡人数占全部死亡人数的
14.2%,这个比例还是相当高的从事故发生的地点、道路情况看,高速公路的事故仍然呈上升的趋势
1.2安全行驶及其影响因素
1.
2.1安全行驶速度的定义安全行驶速度,是在驾驶员特征、车辆性能、道路特征、交通流特征、天气条件以及时段等众多复杂因素的共同影响下,通过设定各种因素对行驶速度的影响系数而进行计算,得到的一个车辆在安全行驶状态下不能超越的速度
1.
2.2影响安全行驶的主要因素
1、驾驶员因素交通事故是道路交通系统中,由于人、车、路、环境等因素配合失调而引起的突发事件驾驶员是车辆安全行驶的掌控者在汽车行驶过程中,驾驶员扮演着最重要的角色在各类交通事故的原因统计中,驾驶员的因素占据着很大的比重具体分析,可以从三个方面总结驾驶员对安全行驶速度的影响第一,驾龄的影响根据经验,驾龄越长,驾驶员对车辆的掌控能力就越强,发生紧急情况时驾驶员的反应也就越及时,因此事故发生的概率也就越小第二,车速对驾驶员视力的影响根据研究表明,车辆行驶速度升高,驾驶员的视力会随着下降并且速度越高,视力下降的程度越严重第三,车速对驾驶员视野的影响当车速提高的时候,驾驶员必须要提前看到远方的交通情况,视野自然变窄,事故发生的可能性也就增加
[2]
2、车辆因素车辆是行驶过程的客体所有驾驶员的操作都必须有效的作用于车辆才能产生控制作用不同车辆的配置参数不同,具体表现在汽车的制动性、转向性、操控性及稳定性等多种性格参数的差异第一,汽车制动系统是汽车安全行驶的核心部件之一制动距离是指驾驶员开始踩制动踏板到汽车完全停止所经过的距离制动距离会受到很多因素的影响,如汽车的行驶速度,路面附着系数等根据统计,汽车由于刹车失灵或制动不足而使制动距离延长、侧滑、跑偏而引起的事故占交通事故总数的15%第二,汽车转向系统是关系操控性的关键部件若转向系统发生偏差或者不灵敏,在汽车高速行驶的时候,如果车辆需要转向,则此时离心力很大,容易发生车辆偏离行驶轨迹,造车翻车等交通事故
3、道路因素道路是汽车行驶的载体道路条件包括很多的方面,诸如道路等级、线性特征、路面状况、交通工程及沿线交通设施等我国的公路根据使用任务、功能及适应的交通量的不同,划分为五个等级高速公路,一级公路,二级公路,三级公路,四级公路不同等级的公路最高限速也不一样,例如,高速公路限速120Km/h另一方面,在驾驶汽车行驶时,应根据实时道路条件选择车速,比如道路的平直、弯曲,路面的起伏,道路的宽度,坡度等各种因素都会影响车速
[3]
4、环境因素环境因素包括自然环境和人工环境自然环境包括天气条件,地理条件等人工环境主要是指人流量和车流量我国每年因天气条件恶劣而导致的交通事故很多,当出现雨雪天气时,能见度降低,而轮胎对地面的附着力也减小,这时就应该减速慢行,使汽车的稳定性保持在一个可控的范围地理条件也是影响车速的重要因素,由于某些路段地势险恶,在不清楚前方道路的情况下,应减慢车速,增加驾驶员对于道路情况判断的准确性另一方面,在城市交通系统中,由于城市是人流量和车流量很集中的地方,在城市道路行驶时,应该减速避让人流、车流,遇到紧急情况提前采取措施
1.3本文研究的主要内容本设计为典型测控系统,由于汽车应用的实际环境,检测部分与控制部分分离,所以本设计采取上位机与下位机分别实现控制、检测任务的方法,然后通过汽车电子技术中通用的总线技术CAN总线进行通讯,达到测控系统条理分明,功能模块化的目的通过下位机系统实现对安全行驶速度和汽车实时速度的检测,通过CAN总线通信,将下位机数据传送至上位机系统,实现上位机对下位机传输数据的显示,及根据两路速度信号判断汽车安全状态,并做出相应的控制具体的设计内容如下
1、安全行驶速度检测通过检测红外透射的衰减度,实现对能见度的确定,行车视距大小的判断并据此做出在当前能见度条件下,汽车车辆安全行驶的最高限速值
2、实时速度检测使用霍尔传感器A3144对实时车速进行检测
3、CAN总线通信系统采用带有SPI接口的独立CAN控制器MCP2515以及总线收发器TJA1050T,实现上位机与下位机之间的通信因为采用汽车通用的总线技术,便于实现功能节点的扩展
4、监测显示上位机系统采用LCD1602对速度信号进行显示,实现了比较友好的人际交互界面
5、警示及控制输出在车辆实时速度高于安全行驶速度时,汽车自动发出声光警示信号在警示没有引起重视时,通过步进电机精准的控制汽车油门的开度,实现在不安全状态下汽车自动降速的功能第二章安全行驶速度智能控制系统总体设计
2.1功能概述本设计使用AT89S52单片机、ADC
0832、MCP
2515、TJA1050T等芯片,检测当前环境条件下的安全行驶速度和实时的汽车车辆自身速度,并以此判断汽车安全状态,并根据判断结果进行相应控制整个系统由两大子系统构成,负责完成不同的功能,并且子系统所处位置不同,因此要单独设计下位机实现的功能包括两路速度信号的检测、数码管动态显示速度信号、数据上传上位机主要由单片机、LCD显示电路、步进电机控制电路组成,完成相关的控制及显示功能
2.
1.1下位机系统功能
1、速度检测下位机系统能够实现对根据当前环境条件、天气条件等共同影响下的能见度检测,并且检测的方法不能影响汽车的正常行驶及驾驶员对汽车的操作的高速公路的设计限速值为120Km/h,在能见度超过200m的时候,系统输出的安全行驶速度为设计速度在能见度低于10m的时候,系统输出停止信号,即能见度太低,车辆不能安全行驶另一方面,系统要能够快速检测出汽车车辆的实时行驶速度
2、速度信号显示下位机系统能够实时显示两种速度的值显示时,仅显示整数部分
3、数据上传能够定时上传下位机系统检测到的两路速度信号值
2.
1.2上位机系统功能
1、数据收集上位机能够实时收集从下位机传来的速度值,并判断和显示
2、速度显示上位机能够直观的显示两种速度值,并能方便的被驾驶员读取,为驾驶员的驾驶提供辅助
3、警示及控制上位机能够根据对被控对象进行安全性判断,根据判断结果进行智能性控制如果行驶的速度不在安全的范围内则以声光信号警示驾驶员,在警示没有引起重视的情况下对车辆的供油系统发出指令控制供油,以降低行驶的速度
2.2下位机系统总体设计根据下位机系统的功能,下位机可划分为速度信号采集模块、显示模块、电源模块、通信模块和单片机模块下位机系统模块图如图2-1所示图2-1下位机系统模块图速度采集模块分别实现对安全行驶速度和实时行驶速度的检测对于安全行驶速度的检测,目前比较常用的检测能见度的方法有激光透射法、散射法、视频法由于在汽车上使用,激光在夜晚会影响汽车驾驶员的视线,而且汽车在行驶过程中所处环境复杂多变,激光容易受到如可见光等诸多外界环境条件的干扰再者,激光本身的使用技术,如激光对准技术也很复杂,激光应用的成本也较高另外,采用视频法,用摄像头代替人的眼睛,采用视频图像处理技术分辨实时条件下的能见度,这种方法技术难度大,目前没有现成的模型,且经过图像处理技术处理后得到的能见度值也缺乏实时性综上所述,本设计采用红外线检测,这种不可见光不论是白天或者夜晚都不会影响驾驶员的驾驶,并且受到外界的干扰小,且成本很低用红外发射管发射红外线,并用配套波长的红外接收管接收红外线在空气中传输,经过不同能见度条件下空气中微粒对红外线的吸收、折射,使得红外线在固定距离的衰减随能见度不同而发生变化,红外接收管接收的红外线强度也就随之变化,再在红外接收管端加上适当的信号调理电路,使得能见度信号转换为电信号,并经过模数转换为单片机采集对于实时速度的检测,目前成熟的测量转速的方法很多,有光电计数,霍尔传感器等本设计考虑到测量车轮的实际转速,采用光电计数脉冲,需要相对安装发射端和接收端,使得在车轮运转时,将转速信号转化为不同频率的脉冲信号此种方法在车轮两侧在安装检测装置时会带来极大的不便,且装置会影响汽车的外部美观因此,采用霍尔传感器,在车毂上安装一块磁铁,在车轮运转时,同一个地方的磁场随之强弱变化同时,在汽车的车轮上方安装A3144检测器件,A3144能够根据磁场强弱快慢输出不同频率的脉冲信号,通过单片机计数器对固定时间内脉冲个数计数,并通过程序处理,得到实时行驶速度速度值在0~120km/h之间,且只显示整数部分,因此使用两个四位LED数码管显示器,采用动态显示方法汽车电子电路中通用的电压值是12V直流因此,为了使本设计最大的符合实际的使用环境,便于汽车集成及扩展,所以电源模块采用三端稳压集成电路芯片7805,将12V直流转换为控制系统使用的5V直流电源通信模块采用CAN总线通信考虑到CAN总线是汽车电子中使用最广泛的现场总线,其所具有的高可靠性和良好的错误检测能力在实际应用中受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强和振动大的工业环境为了更好的与实用汽车电子系统相兼容,本设计采用带有SPI接口的MCP2515CAN总线控制器及TJA1050T总线收发器,构成实用的CAN总线通信系统,定时向总线发送速度信号值单片机模块采集速度值并驱动数码管显示;通过SPI接口向总线发送数据,因此采用AT89S52单片机
[4]
2.3上位机系统总体设计根据上位机系统的功能,上位机可划分声光警示信号模块、LCD显示模块、电源模块、通信模块、步进电机控制模块和单片机模块上位机系统模块图如图2-2所示显示模块采用LCD1602显示器显示实时速度信号,1602是一种专门用来显示字图2-2上位机系统模块图母、数字、符号等的点阵型液晶模块功能实用且成本较低,显示的数据信息能方便的为驾驶员读取警示信号采用声光形式,在行驶速度超过安全速度时,利用红色LED引起驾驶员的高度重视,同时以警示声音提示驾驶员在提示没有引起驾驶员重视的情况下,采用步进电机准确控制汽车节气门,达到控制汽车油路的目的,从而达到减速步进电机可以将电脉冲信号转变为角位移或线位移,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,它的旋转是以固定的角度一步一步运行的可以通过控制脉冲个数来控制角位移量,从而准确定位,在行驶速度超过安全速度时准确地将油路控制在合适的位置;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,使电机调速的,以达到在行驶速度远超过安全速度时快速反应,降低速度通信模块采用CAN总线通信,同下位机设计电源模块设计思路同下位机单片机模块仍采用AT89S52单片机
2.4本章小结本章具体分析了系统的功能要求,并根据功能要求做出了相应的设计将下位机的功能要求具体分解为电源、速度信号采集、单片机控制、数码管显示、通信五个功能模块,设计实现采集数据并显示、传输的功能同时,将上位机的功能要求具体分解为电源、通信、单片机控制、LCD显示、声光提示、步进电机控制六个功能模块,设计实现接收数据并显示,判断车辆安全状态并根据结果发出相应控制信号的功能第三章硬件电路设计
3.1主要器件本节介绍系统中主要器件及其功能包括带有SPI接口的CAN总线控制器MCP2515及总线收发器TJA1050T、红外对管、霍尔传感器A
3144、步进电机、LCD
1602、三端稳压集成电路芯片
7805、数码管、AT89S52单片机
3.
1.1带有SPI接口的独立CAN总线控制器MCP
25151、CAN总线技术简介CAN(ControllerAreaNetwork)是控制器局域网的简称,是德国Bosch公司在1986年为解决现代汽车中众多测量控制部件之间的数据交换而开发的一种串行数据通信总线CAN总线与其他现场总线技术相比,具有以下主要特点
(1)CAN总线上任一个节点均可在任意时刻主动地向其他接节点发起通信,节点不分主次,通信方式灵活各节点信息,按照对实时性要求的紧急程度,分为不同的优先级
(2)CAN采用载波监听多路访问、逐位仲裁的非破坏性总线仲裁技术同时,CAN无需通过豹纹滤波即可实现点对点、一点对多点及全局广播等方式传输数据
(3)CAN的直接通信距离最远可达10km(速度5Kb/s以下);通信速率最高可达1Mb/s(此时通信距离最长为40m)CAN上的节点数主要决定于总线驱动电路,目前可达到110个
(4)CAN具有良好的检错效果并且设有出错检测、标定和自检措施数据出错率低
(5)传输介质选择灵活,可以为双绞线、同轴电缆或光纤
(6)CAN器件可被置于无内部活动的睡眠方式,以降低系统功耗CAN节点在错误严重的情况下具有自动关闭输出的功能,以使总线上其他节点的运行不受影响参照ISO/OSI标准模型,CAN分为数据链路层和物理层而数据链路层又包括逻辑链路控制子层LLC(LogicLinkControl)和媒体访问控制子层MAC(MediumAccessControl)CAN总线上信号的位电平如图3-1所示图中CANH和CANL分别作为总线传输介质的两条线VCANH和VCANL分别表示CANH和CANL上的电压CAN总线上的电压就是它们的差分电压图3-1CAN总线上的电平信号
2、CAN总线控制器MCP2515
(1)CAN系统模型本设计使用独立CAN控制器MCP2515,系统整体的模拟图如图3-2所示图3-2MCP2515控制器应用系统
(2)MCP2515特性MCP2515完全支持CAN总线V
2.0A和V
2.0B技术规范,提供0~8字节报文长度;允许标准和扩展数据帧,支持远程帧;具有两个接收缓冲器,优先存储报文;六个完全验滤波器,两个完全验收屏蔽滤波器,三个发送缓冲器,具有优先级设定以及发送中止功能MCP2515硬件特性包括高速SPI接口;单触发模式确保报文发送只尝试一次;带有可编程预分频器的时钟输出引脚;可用起始帧信号(Start-of-Frame,SOF),用于监控SOF信号;带有可选使能设定的中断输出引脚;另外,MCP2515还具有低功耗CMOS技术工作电压范围
2.7V至
5.5V,典型工作电流为5mA,典型待机电流为1µA(休眠模式)工业级的工作温度范围为-40°C至+85°C,扩展级为-40°C至+125°C
(3)MCP2515引脚特性、内部缓冲器及协议引擎MCP2515提供18脚封装,引脚图如图3-3所示图3-3MCP2515引脚图引脚功能如表3-1所示表3-1MCP2515引脚功能表MCP2515具有3个发送缓冲器和2个接收缓冲器,2个验收屏蔽寄存器(分别对应不同的接收缓冲器),以及6个验收过滤寄存器图3-4显示了这些缓冲器及它们与CAN协议引擎的连接方法
3、CAN报文帧
[6]MCP2515支持CAN
2.0B技术规范中所定义的标准数据帧、扩展数据帧,以及远程帧(标准和扩展)CAN标准数据帧包括帧起始、仲裁字段、控制字段、数据字段、CRC字段以及帧结束字段,共108个字节扩展帧相对于标准帧,在帧起始信号SOF位后面的是32为仲裁字段,其中前11位为基本标识符,其后还有18位的扩展标识符总共128个字节图3-4CAN缓冲器和协议引擎框图另一方面,远程帧与数据帧存在差异远程帧的PTR位为隐形状态,并且远程帧没有数据段错误帧是由检测到总线错误的任一节点产生的,错误帧包括错误标志字段及紧随其后的错误定界字段过载帧与主动错误帧具有相同的格式,只是错误帧只能在帧间间隔产生
4、报文发送与接收要了解CAN总线报文发送与接收的具体方法,首先要了解MCP2515的发送缓冲器和接收缓冲器的工作原理MCP2515采用3个发送缓冲器,每个发送缓冲器占用14字节的SRAM,并映射到存储器中第一个字节是TXBnCTRL,是与报文缓冲器有关的控制寄存器发送缓冲器n控制寄存器见表3-2表3-2TXBnCTRL-发送缓冲器n控制寄存器功能描述该控制寄存器决定报文在何种条件下被发送,并在报文发送时指示相关状态然后是5个字节的标准和扩展标识符,以及其他报文仲裁信息最后8个字节用来装载等待发送的8个可能的数据字节通过SPI接口写控制寄存器中TXBnCTRL.TXREQ发送控制位,将发送缓冲器标记为准备发送当器件检测到总线空闲时,就会启动报文发送同时,优先级最高的报文将首先发送MCP2515具体的发送流程如图3-5所示报文发送成功后,TXBnCTRL.TXREQ位将被清除,CANINTF.TXNIF位将被置位,置位后产生中断然后通过单片机的中断触发另一个单片机接收数据图3-5报文发送流程图当发送缓冲器发送报文成功后,接收缓冲器收到中断触发信号,于是进入报文接收阶段MCP2515具有两个全文接收缓冲器每个接收缓冲器配备有多个验收滤波器除上述专用缓冲器外,MCP2515还具有单独的报文集成缓冲器(MessageAssemblyBuffer,MAB),可以作为第三个接收缓冲器具体可参见图3-4在这三个接收缓冲器中,MBA总能够接收来自总线的下一条报文其余两个接收缓冲器RXB0和RXB1则从协议引擎接收满足验收滤波器条件的完整的报文具体的报文接收流程如图3-6所示图3-6报文接收流程图当报文传送至某一接收缓冲器,与该接收缓冲器对应的CANINTF.RXNIF位将置1一旦缓冲器中的报文处理完毕,MCU就必须将该位清除以接收下一条报文锁存功能将确保在MCU上位处理完上一条报文前,MCP2515不会将新的报文载入接收控制器如果CANINTF.RXNIE位被置1,则器件会在INT引脚产生一个中断,显示接收有效报文寄存器RXB0CTRL-接收缓冲器0控制寄存器功能描述见表3-3表3-3RXB0CTRL-接收缓冲器0控制寄存器功能描述接收缓冲器1的控制寄存器功能同缓冲器0类似,在此不再赘述
5、位定时CAN总线上所有节点都必须具有相同的比特率由于不同节点的振荡器频率和传输时间不同,接收器应具有某种能与数据传输边沿同步的锁相环(PhaseLockLoop,PLL)来同步时钟并保持这种同步鉴于数据采用NRZ编码,有必要进行位填充以确保至少每6位时间发生一次边沿,使数字锁相环(DigitalPhaseLockLoop,DPLL)同步MCP2515通过DPLL实现位定时DPLL被配置成同输入数据同步,并为发送数据提供标称定时DPLL将每一个位时间分割为由最小单位为时间份额(TimeQuanta,TQ)所组成的多个时间段在位时间帧中执行的总线定时功能,例如与本地振荡器同步、网络传输延迟补偿和采样点定位等,都是DPLL的可编程位定时逻辑来规定的CAN总线上的所有器件都必须使用相同的比特率然而,并非所有器件都要求具有相同的主振荡器时钟频率对于采用不同时钟频率的器件,应通过适当设置波特率预分频比以及每一时间段中的时间份额的数量来对比特率进行调整标称比特率(NominalBitRate,NBR)定义为在不需要再同步的情况下,理想发送器每秒发送的位数标称位时间视为分割开的几个互不重叠的时间段这些时间段如图3-7所示图3-7位时间分区由图可知,标称位时间=TQ*Sync_Seg+Prop_Seg+Phase_Seg1+Phseg_seg2CAN总线接口的位定时由配置寄存器(CNF1,CNF2,CNF3)控制只有当MCP2515处于配置模式时,才能对这些寄存器进行修改CNF1,CNF2,CNF3的功能描述分别见表3-4,表3-5,表3-6在CNF1寄存器中,BRP5:0控制波特率预分频器的设置在CNF2寄存器中,PRSEG2:0的位设定以TQ计的传播时间长度在CNF3寄存器中,如果CNF
2.BTLMODE位置‘1’,相应缓冲段2的时间长度将由PHSEG2:0设定,该长度以TQ计表3-4CNF1-配置寄存器1的功能描述表3-5CNF1-配置寄存器2的功能描述表3-6CNF1-配置寄存器3的功能描述
6、中断MCP2515具有8个中断源CANINTE寄存器中包含了使能各个中断源的中断使能控制位,如表3-7所示CANINTF寄存器中包含了各个中断源的中断标志位,如表3-8所示表3-7CANINTE-I中断使能寄存器的功能描述表3-8CANINTF-I中断标志寄存器的功能描述
6、工作模式MCP2515具有5种工作模式分别为配置模式、正常模式、睡眠模式、监听模式、回环模式各种模式的设置在CANCTRL-CAN控制寄存器中进行,该控制寄存器的功能描述见表3-9表3-9CANCTRL-CAN控制寄存器的功能描述MCP2515正常运行之前,必须进行初始化只有在配置模式下,才能对器件进行初始化初始上上电之后,器件自动进入配置模式,进入配置模式后,所有的错误计数器将被清零MCP2515的休眠模式时为了降低器件的功耗,在MCP2515进入休眠模式时,SPI接口仍正常工作监听模式使MCP2515可以接收包括错误报文在内的所有报文回环模式可使器件内部发送缓冲器和接收缓冲器之间进行报文自发自收,而无需通过CAN总线正常模式为标准的工作模式在该模式下,器件主动监视总线上所有报文,并产生确认位和错误帧
7、SPI接口SPI接口的全称是“SerialPeripheralInterface”,意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,地位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几MbpsSPI接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,具体工作方式如图3-8所示其接口包括以下四种信号
(1)MOSI-主器件数据输出,从器件数据输入
(2)MISO-主器件数据输入,从器件数据输出
(3)SCLK-时钟信号,由主器件产生
(4)/SS-从器件使能信号,由主器件控制图3-8SPI接口通信方式在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后如图3-9所示,在SCLK的下降沿上数据改变,同时一位数据被存入移位寄存器图3-9SPI接口信号电平图表3-10列出了SPI所有操作的指令字节表3-10SPI指令集TJA1050T总线收发器TJA1050T是控制器区域网络(CAN)协议控制器和物理总线之间的接口TJA1050T可以为总线提供不同的发送性能TJA1050T的引脚图如图3-10所示具体引脚功能见表3-11TJA1050T有一个电流限制电路,保护发送器的输出级,使由正或负电源电压意外造成的短路不会对TJA1050T造成损坏(此时的功率消耗增加)TJA1050T还有一图3-10TJA1050T引脚图个温度保护电路,当与发送器的连接点的温度超过大约165℃时,会断开与发送器的连接因为发送器消耗了大部分的功率,所以这个集成电路的功率消耗和温度会较低但是此时IC的其他功能仍继续工作当引脚TXD变高(电平),发送器由关闭状态复位当总线短路时,尤其需要这个温度保护电路表3-11TJA1050T引脚功能TJA1050T可以通过引脚S选择两种工作模式高速模式或静音模式高速模式就是普通的工作模式,将引脚S接地可以进入这种模式如果引脚S没有连接,高速模式就是默认的的工作模式在静音模式中,发送器是禁能的但IC的其他功能可以继续使用将S引脚连接到VCC可以进入这个模式静音模式可以防止在CAN控制器不受控制时对网络通讯造成堵塞当引脚TXD由于硬件或软件程序的错误而持久地为低(电平)时,“TXD控制超时”定时器电路可以防止总线进入这种持久的支配状态(阻塞所有网络通信)这个定时器是由引脚TXD的负跳变边缘触发如果引脚TXD的低电平持续时间超过内部定时器的值,发送器会被禁能,使总线进入隐性状态定时器由引脚TXD的正跳变边沿复位
3.
1.2霍尔传感器A3144霍尔传感器分为线性型霍尔传感器和开关型霍尔传感器两种线性型霍尔传感器由霍尔元件、线性放大器和射极跟随器组成,输出模拟量开关型霍尔传感器由稳压器、霍尔元件、差分放大器,斯密特触发器和输出级组成,输出数字量A3144是开关型霍尔传感器其引脚分布如图3-11所示其由电压调整电路、反相电源保护电路、霍尔元件、温度补偿电路、微信号放大器、施密特触发器和OC门输出级构成在磁性元件接近或远离A3144的时候,A3144就会根据磁场强弱在输出口输出脉冲当磁场的强度变化加快时,A3144输出脉冲的频率也随之增加图3-11A3144引脚图
3.
1.3红外对管及ADC
08321、红外对管红外对管是红外线发射管和红外光敏接收管的合称红外线发射管类型于普通LED,只是它发出的是不可见的红外光是由红外发光二级管矩阵组成发光体,用红外辐射效率高的材料(常用砷化镓)制成PN结,正向偏压向PN结注入电流激发红外光,其光谱功率分布为中心波长830~950nm红外线接收管是将红外线光信号变成电信号的半导体器件,它的核心部件是一个特殊材料的PN结,和普通二极管相比,在结构上采取了大的改变,红外线接收管为了更多更大面积的接受入射光线,PN结面积尽量做的比较大,电极面积尽量减小,而且PN结的结深很浅,一般小于1微米红外线接收二极管是在反向电压作用之下工作的没有光照时,反向电流很小(一般小于
0.1微安),称为暗电流当有红外线光照时,携带能量的红外线光子进入PN结后,把能量传给共价键上的束缚电子,使部分电子挣脱共价键,从而产生电子-空穴对(简称光生载流子)它们在反向电压作用下参加漂移运动,使反向电流明显变大,光的强度越大,反向电流也越大这种特性称为“光电导”红外线接收二极管在一般照度的光线照射下,所产生的电流叫光电流如果在外电路上接上负载,负载上就获得了电信号,而且这个电信号随着光的变化而相应变化红外对管的外形如图3-12所示图中白色LED为红外发射管,黑色LED为红外线接收管图3-12红外对管
2、双通道模数转换器ADC0832ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求其内部电输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便通过DI数据输入端,可以轻易的实现通道功能的选择其引脚图如图3-13所示CS_片选使能,低电平芯片使能CH0模拟输入通道0,或作为IN+/-使用CH1模拟输入通道1,或作为IN+/-使用GND芯片参考0电位(地)DI数据信号输入,选择通道控制DO数据信号输出,转换数据输出CLK芯片时钟输入Vcc/REF电输入及参考电压输入(复用)图3-13ADC0832引脚图
3.
1.4步进电机及驱动芯片ULN2003A
1、步进电机28BYJ48步进电机必须加驱动才可以运转,驱动信号必须为脉冲信号,没有脉冲的时候,步进电机静止,如果加入适当的脉冲信号,就会以一定的角度转动转动的速度和脉冲的频率成正比本设计采用5VDC步进电机28BYJ48模拟由单片机控制系统发出的油路控制信号,同时采用ULN2003A作为驱动芯片28BYJ48为永磁减速步进电机其主要电气性能如表3-12所示当电机绕组通电时序为AB-BC-CD-DA时为正转,通电时序为DA-CA-BC-AB时为反转相应的单相绕组通电,四拍正转端口值如表3-13所示表3-1228BYJ48主要电气性能参数表3-13步进电机正转端口值使用、控制步进电机必须由环形脉冲,功率放大等组成的控制系统,其方框图如图3-14所示图3-14步进电机控制系统框图
2、ULN2003AULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN复合晶体管组成该电路的特点有ULN2003的每一对达林顿都串联一个
2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据ULN2003工作电压高,工作电流大,灌电流可达500mA其引脚见图3-15图3-15ULN2003A引脚图ULN2003A的1~7号引脚为CPU脉冲输入端8号引脚接地引脚9是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极用于感性负载时,该脚接负载电源正极,实现续流作用如果该脚接地,实际上就是达林顿管的集电极对地接通10~16号引脚为对应脉冲信号输出端
3.
1.5显示器LCD
16021、引脚及功能LCD1602是一款常见的显示数字、字母、字符的液晶显示器可以显示16×2个字符其引脚如图3-16所示图3-16LCD1602引脚图其相应引脚对应的功能如表3-14所示表3-14LCD1602引脚功能表1602的DDRAM中,上下两行均只用到前16个字节,其地址对应关系如表3-15所示表3-15LCD1602数据RAM地址
2、指令分析LCD1602共有11条指令,具体的指令格式如表3-16所示指令1清显示光标复位到地址00H位置指令2光标复位光标返回到地址00H指令3模式设置I/D=0写入新数据后光标左移,I/D=1写入新数据后光标右移S=0写入新数据后显示屏不移动,S=1写入新数据后显示屏整体右移1个字符指令4显示开关控制D控制整体显示的开与关,高电平表示开显示,低电平表示关显示C控制光标的开与关,高电平表示有光标,低电平表示无光标B控制光标是否闪烁,高电平闪烁,低电平不闪烁指令5光标或显示移位S/C高电平时移动显示的文字,低电平时移动光标R/L,高向左,低向右指令6功能设置命令DL高电平时为4位总线,低电平时为8位总线N低电平时为单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符(有些模块是DL高电平时为8位总线,低电平时为4位总线)指令7字符发生器RAM地址设置地址=字符地址*8+字符行数指令8置显示地址第一行为00H——0FH,第二行为40H——4FH指令9读忙信号和光标地址BF为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙指令10写数据指令11读数据表3-16LCD1602指令表
3.
1.6三端稳压集成电路芯片78057805是三端稳压集成电路78××系列的一款输出值为5V直流的芯片78××系列是具有三个引脚的电源芯片,三条引脚分别为输入端、输出端、地78××包括7805780678087812等,78后面的数字是输出的电压伏值7805应用的典型电路如图3-17图3-177805典型应用电路7805电路内部有过流、过热及调整管的保护电路,使用起来可靠、方便、价格便宜
3.2下位机系统电路设计根据下位机系统的功能分析,下位机电路可分为安全行驶速度测量、实时速度测量、通信电路、数码管显示电路、电源电路和单片机电路
3.
2.1安全行驶速度测量电路安全行驶速度的测量时整个控制系统的核心本设计采用红外对管测量红外线在空间中传播的衰减
[7]具体电路如图3-18所示图3-18红外对管测量及模数转换电路红外接收管在没有导通时阻值较大,因此在红外线接收管一端串接5MΩ电阻,使得AD转换出的数据对应外界环境变化的反应较灵敏
3.
2.2实时速度测量电路本设计采用霍尔传感器A3144测量车轮的转速,具有无接触测量,安装方便,测量结果准确等优点具体电路如图3-19所示图3-19霍尔传感器实时速度测量电路
3.
2.3通信模块电路本设计的下位机与上位机之间的通信采用CAN总线通信,通信模块采用独立CAN控制器MCP2515与总线收发器TJA1050T,具体电路如图3-20,图3-21所示图3-20MCP2515系统电路图3-21TJA1050T总线收发器电路
3.
2.4数码管显示电路下位机因为不涉及人机通信,对显示的要求不高,所以采用数码管显示电路,对两路速度信号进行显示本设计采用六位数码管,前三位显示安全行驶速度,后三位显示实时行驶速度从P0口经总线驱动器74LS245输出段码,从P1口输出位码具体电路如图3-22所示(数码管显示电路仅用于仿真)图3-22数码管显示电路
3.
2.5电源电路系统将汽车电瓶作为能量来源由于汽车电瓶一般是12VDC,所以要经过调压之后才能作为控制系统的电源所以系统直接采用三段稳压集成电路芯片7805,将输入的12V直流转换为系统所需5V稳定直流具体电路如图3-23所示(电源电路仅用于仿真)图3-23电源电路
3.
2.6单片机电路单片机电路由AT89S52单片机及单片机工作的必备电路(包括复位电路与晶振电路)组成具体电路如图3-24所示P0口提供数码管显示的段口值,P1口接至数码管的位口P
2.0~P
2.3提供通信电路的SPI接口,P
2.6~P
2.8为ADC0832提供输入接口,输入经转换的安全行驶速度信号P3口外部中断1用于通信中的中断,P
3.4用作计数器输入口,输入经A3144测得的脉冲数图3-24单片机电路
3.3上位机系统电路设计根据上位机系统的功能分析,上位机系统电路可分为通信电路、LCD1602显示电路、声光提升电路、步进电机电路、电源电路及单片机电路单片机电路是整个系统的主控电路,通过通信电路接收下位机上传的速度值信号,送显示电路显示和经过单片机判断车辆安全状态控制声光提示电路或步进电机动作电源电路仍为5V直流,所以,上位机系统中通信电路和电源电路同下位机设计,不在赘述
3.
3.1步进电机电路控制系统的输出执行机构采用步进电机因为步进电机具有将电脉冲转换为角位移的特点,可以通过控制电脉冲个数来控制角位移,从而达到准确定位同时,能够控制电脉冲的频率达到控制步进电机的加速度和速度,从而达到调速用此控制油门开度,可以快速、准确的达到控制要求具体电路如图3-25所示图3-25步进电机及其驱动
3.
3.2声光提示电路声光提示是为了在实时行驶速度超过安全行驶速度时,为驾驶员提供警示信号,使得驾驶员意识到超速行驶潜在的危险所以,电路采用红色LED和蜂鸣器,在汽车车辆不安全行驶时,同时发出声光信号具体电路如图3-26示图3-26声光提示电路
3.
3.3LCD1602显示器上位机的显示需要被驾驶员实时的读取,需要比较友好的人机交互界面所以采用LCD1602显示器,显示两路实时速度,为驾驶员操作提高判断具体电路如图3-27示图3-27LCD1602显示电路
3.
3.4单片机电路单片机电路由AT89S52单片机及相关单片机工作必备电路组成
[8]具体电路如图3-28所示P0口外接10K上拉电阻,接至LCD1602的数据端口P1接ULN2003A控制步进电机P2口用于与下位机之间的CAN通信和LCD1602的控制端口P3口用于通信的外部中断1,P
3.
6、P
3.7用于声光提示信号图3-28单片机电路
3.4本章小结本章主要介绍了系统所需要的主要元器件包括下位机所需的红外检测模块
[9]、霍尔传感器A3144模块、八位数码管显示模块、CAN通信模块MCP2515
[10]和TJA1050T、5V电源模块芯片7805,上位机所需的步进电机及驱动芯片ULN2003A、LCD1602显示器在具体介绍各个器件的原理的基础上,综合设计系统功能要求,设计出下位机与上位机的各个模块的具体电路,实现了系统的硬件配置要求,为后续软件编程提供硬件支持第四章软件设计软件设计也分为两大部分下位机软件设计和上位机软件设计下位机软件设计主要实现安全行驶速度信号采集、实时行驶速度采集
[11]、显示及数据通信上位机软件设计主要实现数据通信、步进电机控制、声光提示及LCD显示
4.1MCP2515构造CAN通信最小节点
4.
1.1复位MCP2515在系统上电之后做的第一件事情就是复位MCP2515,复位的主要作用是保证MCP2515进入一个已知的状态复位MCP2515后进入配置模式,MCP2515必须在配置模式下设置定时、屏蔽和滤波器本设计用SPI接口通过指令实现
[11]复位函数如下voidSPIResetvoid{CS=LOW;//拉低片选WriteSPICAN_RESET;//WriteSPI函数实现向SI口写入一个字节CS=HIGH;//拉高片选}
4.
1.2设置位定时配置位定时时,下面几方面的工作必须考虑只有这样,MCP2515才能较好的执行所需的功能每个位定时都可以由以下4个部分组成
(1)同步段(SyncSeg);2传播段(PropSeg);
(3)相位段1(PS1);
(4)相位段2(PS2)每个段都是由TQ(TimeQuanta)的整数倍构成一个TQ等于2倍Tosc因此TQ的时间可以通过修改“波特率预分频器”进行修改位定时器的设置通过3个CNF寄存器CNF寄存器仅仅在配置模式下才能被修改,就是自动上电复位后配置本设计的代码是设置MCP2515为125Kbps的速率,8MHz的晶振和1TQ
[12]//位定时配置//设置波特率为125Kbps//setCNF1,SJW=00,长度为1TQ,BRP=3//TQ=[2*BRP+1]/Fsoc=2*4/8M=
12.5usSPIByteWriteCNF1CAN_125Kbps;//#defineCAN_125Kbps0x03//setCNF2,SAM=0,在采样点对总线进行一次采样,PHSEG1=2+1TQ=3TQ,PRSEG=0+1TQ=1TQSPIByteWriteCNF20x80|PHSEG1_3TQ|PRSEG_1TQ;//PHSEG1_3TQ=0x10,PRSEG_1TQ=0x00//setCNF3,PHSEG2=2+1TQ=3TQ,同时当CANCTRL.CLKEN=1时设定CLKOUT引脚为时间输出使能位SPIByteWriteCNF3PHSEG2_3TQ;//SPIByteWrite函数向2515指定地址addr写一个字节数据value
4.
1.3设置屏蔽和滤波器屏蔽和滤波器用于决定消息是否通过MCP2515被接收,以及在接收的条件下,哪一个接收缓冲器将容纳这些信息在设置这些寄存器时,要考虑以下问题
(1)对于标准消息类型和扩展消息类型,确定哪一个信息将被接收
(2)确定每一个消息将被装载在哪个缓存器中
(3)确定哪个滤波器用于匹配消息
[12]SPIByteWriteRXF0SIDH0xFF;//初始化接收滤波器0,待修改***SPIByteWriteRXF0SIDL0xE0;SPIByteWriteRXM0SIDH0xFF;//初始化接收屏蔽器0,待修改***SPIByteWriteRXM0SIDL0xE0;
4.
1.4设置正常模式在合适的位率和屏蔽滤波器被配置的情况下,MCP2515就可以工作在正常模式下了这个操作一般是配置CANCTRL寄存器的REQOP位在CAN总线通信中,正常模式是一个标准操作模式SPIByteWriteCANCTRLREQOP_NORMAL|CLKOUT_ENABLED;//设置正常模式
4.
1.5设置发送与接收缓冲器发送缓冲器能够在正常模式设置之前或者之后设置,并且仅仅用于设置一次,在传输中一直保持常数
[14]//setTXB0,设置发送缓冲器0的标识符和发送的数据,以及发送的数据长度SPIByteWriteTXB0SIDH0xFF;//设置发送缓冲器0的标准标识符,待修改***SPIByteWriteTXB0SIDL0xE0;//用到标准标识符SPIByteWriteTXB0DLCDLC_1;//设置发送数据的长度为8个字节//设置接收缓冲器0的标识符和初始化数据SPIByteWriteRXB0SIDH0x00;//设置接收缓冲器0的标准标识符,待修改***SPIByteWriteRXB0SIDL0x60;//用到标准标识符SPIByteWriteRXB0CTRL0x60;//仅仅接收标准标识符的有效信息,FIILHIT0=0表示RXB0,采用FILHIT0SPIByteWriteRXB0DLCDLC_8;//设置接收数据的长度为8个字节SPIByteWriteRXF0SIDH0xFF;//初始化接收滤波器0,待修改***SPIByteWriteRXF0SIDL0xE0;SPIByteWriteRXM0SIDH0xFF;//初始化接收屏蔽器0,待修改***SPIByteWriteRXM0SIDL0xE0;//设置接收缓冲器0中断SPIByteWriteCANINTF0x00;//清空中断标志位SPIByteWriteCANINTE0x01;//接收缓冲器0满中断使能位
4.2下位机程序设计下位机主要负责实时检测并显示两路速度值,并上传数据因此,程序可分为安全行驶速度采集子程序、实时速度采集子程序、显示子程序、数据上传子程序和主程序安全行驶速度采集子程序针对电路中的红外测量经ADC0832转换电路,获取ADC0832转换所得数字量的值实时速度采集子程序主要针对电路中的霍尔传感器A3144电路,将timer0作为计数器,计数A3144发出的脉冲数timer1作为定时器,500ms刷新一次数据显示子程序主要针对六位数码管显示电路,负责两路速度值的显示数据上传子程序主要针对CAN总线通信模块,实现将数据发送到CAN总线的目的
4.
2.1常量、变量说明为了后续使用方便,特在此说明有关变量的定义#includereg
52.h#includeintrins.h#include
2515.h#includeSPI.h#includeFunction.h#includeCAN.h#defineuintunsignedint#defineucharunsignedcharucharADC0832_RESULTA3144_RESULT;ucharCNT;//定义计数器刷新频率sbitSCK=P2^3;//SPI接口sbitSI=P2^2;sbitSO=P2^1;sbitCS=P2^0;sbitCS32=P2^6;//ADC0832安全行驶速度模数转换输入sbitCLK=P2^7;sbitDIO=P2^8;sbitA3144_3=P3^4;//霍尔传感器计数脉冲输入
4.
2.2安全行驶速度采集子程序以红外对管作为测量空气能见度的传感器,用ADC0832对红外对管调理电路输出的模拟信号进行模数转换ucharGet_AD_Result{ucharidat1=0dat2=0;CS32=0;CLK=0;DIO=1;_nop_;_nop_;CLK=1;_nop_;_nop_;CLK=0;DIO=1;_nop_;_nop_;CLK=1;_nop_;_nop_;CLK=0;DIO=1;_nop_;_nop_;CLK=1;DIO=1;_nop_;_nop_;CLK=0;DIO=1;_nop_;_nop_;fori=0;i8;i++{CLK=1;_nop_;_nop_;CLK=0;_nop_;_nop_;dat1=dat11|DIO;}fori=0;i8;i++{dat2=dat2ucharDIOi;CLK=1;_nop_;_nop_;CLK=0;_nop_;_nop_;}CS32=1;returndat1==dat2dat1:0;}
4.
2.3实时速度采集子程序/*timer0作为计数器计算A3144发出的脉冲数,timer1作为定时器,500ms刷新一次数据*/voidtimer_init{TMOD=0x15;//设置timer1为定时器,timer0为计数器TH1=0x3c;//设置timer1为50ms中断一次TL1=0xb0;TH0=0;TL0=0;//timer0从0开始计数IE=0x8a;//开放中断TR0=1;TR1=1;//开启定时计数器}/*定时器1发生溢出中断,50ms刷新一次ADC0832和A3144,对两种速度值进行更新*/voidtimer1interrupt3{ucharadcout;CNT++;TR0=0;TR1=0;ifCNT==10{ucharcntA;//假设汽车的最高设计速度为10000r/min,则每500ms不超过90转,因此TH0一定为0所以只需要一个字节存储cntA=TL0;A3144_RESULT=
3.6*
3.14*
0.8*cntA;//设置普通车轮直径为
0.4m,则500ms行驶的路程为pi*
0.4*cntm除以500ms的时间,就//得到以m/s为单位的速度值,再乘以36,就得到以KM/h为单位的速度adcout=Get_AD_Result;//当输入电压为3V时,ADC0832输出为0xa0,对应安全行驶速度为0//当输入电压为1此为设定值V时,ADC0832输出为0x30对应安全行驶速度为120Km/hifadcout0xa0//ADC0832_RESULT根据此算法求解{ADC0832_RESULT=0x00;adcout=0xa0;}ifadcout0x30{ADC0832_RESULT=0x78;adcout=0x30;}elseADC0832_RESULT=0xa0-adcout*
1.07;//120/112=
1.07}TH1=0x3c;//设置timer1为50ms中断一次TL1=0xb0;TH0=0;TL0=0;TR0=1;TR1=1;//开启定时计数器}
4.
2.4显示子程序//LED显示程序
[15]voidled{uchardat
[6]wei=0x80i;dat
[0]=ADC0832_RESULT/100;dat
[1]=ADC0832_RESULT/10%10;dat
[2]=ADC0832_RESULT%10;dat
[3]=A3144_RESULT/100;dat
[4]=A3144_RESULT/10%10;dat
[5]=A3144_RESULT%10;fori=0;i6;i++{wei=_crol_wei1;P1=wei;P0=DSY_CODE[dat[i]];DelayMS1;}}
4.
2.5MCP2515发送子程序//CAN发送程序voidCAN_Sendunsignedchar*CAN_TX_Buf{unsignedchartempdata;tempdata=SPIByteReadCAN_RD_STATUS;SPIByteWriteTXB0D0CAN_TX_Buf
[0];SPIByteWriteTXB0D1CAN_TX_Buf
[1];SPIByteWriteTXB0D2CAN_TX_Buf
[2];SPIByteWriteTXB0D3CAN_TX_Buf
[3];SPIByteWriteTXB0D4CAN_TX_Buf
[4];SPIByteWriteTXB0D5CAN_TX_Buf
[5];SPIByteWriteTXB0D6CAN_TX_Buf
[6];SPIByteWriteTXB0D7CAN_TX_Buf
[7];iftempdata0x04//判断TXREQ标志位{delay_ms1;SPIByteWriteTXB0CTRL0;//清除TXREQ标志位whileSPIByteReadCAN_RD_STATUS0x04;//等待TXREQ清零}CS=LOW;WriteSPICAN_RTS_TXB0;//发送缓冲器0请求发送CS=HIGH;}voidCAN_Send_onebyteunsignedchark{unsignedchartempdata;tempdata=SPIByteReadCAN_RD_STATUS;SPIByteWriteTXB0D0k;iftempdata0x04//判断TXREQ标志位{delay_ms1;SPIByteWriteTXB0CTRL0;//清除TXREQ标志位whileSPIByteReadCAN_RD_STATUS0x04;//等待TXREQ清零}CS=LOW;WriteSPICAN_RTS_TXB0;//发送缓冲器0请求发送CS=HIGH;}
4.
2.6下位机主程序
1、主程序流程主程序完成对各个子程序的调用,从而实现下位机的整体功能主程序的流程图见图4-1
[16]voidmain{ucharb
[2];Init2515;timer_init;Cpu_init;while1{b
[0]=ADC0832_RESULT;b
[1]=A3144_RESULT;//获取两路速度值数据led;//显示输出两路数据值CAN_Sendb;//向总线发送数据delay_ms100;}}图4-1下位机主程序流程
4.3上位机程序设计上位机系统通过CAN总线通信定时读取下位机采集的数据,并根据数据判断和发出相应的控制信号,并通过LCD1602进行显示因此,软件设计包括显示子程序、声光控制子程序、步进电机子程序、通信子程序和主程序显示子程序针对电路中的LCD1602显示电路,负责显示两路速度信号值声光控制子程序通过单片机判断两路速度信号所得汽车车辆安全状态而进行工作通过判断实时行驶速度与安全行驶速度是否有偏差,和偏差的大小来控制步进电机转动的角度和转动的快慢,即通过控制单片机所发脉冲个数和频率来达到控制要求通信子程序主要为MCP2515接收数据子程序,与下位机设计中的发送子程序相对应
4.
3.1常量、变量说明#includereg
52.h#includeintrins.h#includestring.h#include
2515.h#includeSPI.h#includeFunction.h#includeCAN.h#defineuintunsignedint#defineucharunsignedcharsbitLED=P3^6;//光提示信号sbitLS1=P3^7;//声音提示信号sbitRS=P2^5;//LCD1602控制信号sbitRW=P2^6;sbitEN=P2^7;sbitSCK=P2^3;//MCP2515SPI总线接口sbitSI=P2^2;sbitSO=P2^1;sbitCS=P2^0;
4.
3.2LCD1602显示子程序/*1602LCD子程序*///读LCD状态ucharRead_LCD_State{ucharstate;RS=0;RW=1;EN=1;DelayMS1;state=P0;EN=0;DelayMS1;returnstate;}//LCD忙等待voidLCD_Busy_Wait{whileRead_LCD_State0x80==0x80;DelayMS5;}//LCD写数据voidWrite_LCD_Datauchardat{LCD_Busy_Wait;RS=1;RW=0;EN=0;P0=dat;EN=1;DelayMS1;EN=0;}//LCD写指令voidWrite_LCD_Commanducharcmd{LCD_Busy_Wait;RS=0;RW=0;EN=0;P0=cmd;EN=1;DelayMS1;EN=0;}//LCD初始化voidInit_LCD{Write_LCD_Command0x38;DelayMS1;Write_LCD_Command0x01;DelayMS1;Write_LCD_Command0x06;DelayMS1;Write_LCD_Command0x0c;DelayMS1;}//LCD设置位置voidSet_LCD_POSucharp{Write_LCD_Commandp|0x80;}//LCD显示字符串voidDisplay_LCD_Stringucharpuchar*s{uchari;Set_LCD_POSp;fori=0;i16;i++{Write_LCD_Datas[i];DelayMS1;}}//送显示时格式转换voidFormatucharduchar*a{a
[0]=d/100+0;a
[1]=d/10%10+0;a
[2]=d%10+0;}//LCD显示函数voidLCDvoid{Formatsafe_speedLCD_BUFFER1+8;Formatcurrent_speedLCD_BUFFER2+8;Display_LCD_String0x00LCD_BUFFER1;Display_LCD_String0x40LCD_BUFFER2;}
4.
3.3步进电机控制子程序步进电机28BYJ48型四相八拍电机,电压为DC5V
[30]当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)当通电状态的改变完成一个循环时,转子转过一个齿距四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-),八拍(A-AB-B-BC-C-CD-D-DA-A)本设计采用八拍通电方式
[17]ucharcodeFFW[]={0x080x0c0x040x060x020x030x010x09};ucharcodeREV[]={0x090x010x030x020x060x040x0c0x08};//步进电机正转voidSETP_MOTOR_FFWucharm{ucharij;fori=0;i8;i++{forj=0;j8;j++{P1=FFW[j];DelayMSm;}}}//步进电机反转voidSETP_MOTOR_REVucharm{ucharij;fori=0;i8;i++{forj=0;j8;j++{P1=REV[j];DelayMSm;}}}//步进电机控制函数voidstepmotor{ucharD_valuepqi;D_value=current_speed-safe_speed;D_value=50-D_value;ifD_value20{p=5;q=1;}elseifD_value40{p=1;q=10;}else{p=uchar50-D_value/10;q=ucharD_value/10;}fori=0;i64*p;i++{SETP_MOTOR_FFWq;}ifcurrent_speedsafe_speedfori=0;i64*p;i++{SETP_MOTOR_REVq;}}
4.
3.4MCP2515接收子程序//CAN接收程序voidCAN_Receiveunsignedchar*CAN_RX_Buf//接收两个字节的数据{CAN_RX_Buf
[0]=SPIByteReadRXB0D0;CAN_RX_Buf
[1]=SPIByteReadRXB0D1;SPIByteWriteCANINTF0;}voidex1_intvoidinterrupt2using1//当MCP2515收到正确的报文后,会产生INT1中断{gRXFlag=1;}
4.
3.5上位机主程序主程序完成对各个功能函数的调用,实现上位机接收下位机数据,并根据接收数据判断显示和发出相应控制作用的功能具体流程见图4-2voidmain{uchara
[2];Init_LCD;Init2515;Cpu_init;while1{ifgRXFlag{CAN_Receivea;gRXFlag=0;DelayMS1;safe_speed=a
[0];current_speed=a
[1];}LCD;ifcurrent_speedsafe_speed{warning;}ifcurrent_speedsafe_speed{stepmotor;}LCD;}}图4-2上位机主程序流程
4.4本章小结本章针对系统的硬件设计,对应相应功能要求,完成了具体的软件设计包括下位机和上位机两大模块的整体软件设计下位机软件包括数据采集传输及显示程序,上位机软件包括数据接收及判断控制程序在软、硬件结合的基础上,完成系统的调试,实现了系统预定的功能要求通过下位机采集速度信号,传输至上位机进行智能判断,并根据判断结果对汽车车辆的状态进行自动控制结论当今世界,科技发展日新月异汽车的发展也逐渐超越传统的汽车制造技术汽车的智能化势必成为将来汽车的主流本设计针对汽车高速行驶时,综合具体环境下各种复杂的条件共同影响的汽车行驶的安全速度,对此进行检测并根据检测结果进行控制应用了传感器技术、信号调理技术、CAN总线技术、电机控制技术等,综合运用大学四年所学专业基础知识、技术基础知识及自学能力等,为汽车的安全行驶和道路安全管理的发展创新添一份力量经过几个月的努力,终于按照毕业设计的要求进度完成了汽车车辆安全行驶智能控制系统的软硬件功能要求在此过程之中,遇到很多困难,最终经过自己的努力和老师同学的帮助,圆满的完成了设计所要求的功能整个设计主要完成了以下的工作
1、分析系统的功能要求,在此基础上,提出具体的功能模块思想并结合汽车实际使用环境,提出用下位机检测数据,然后传于上位机判断控制,在数据传输过程中,用到了实际汽车环境应用的CAN总线通信技术
2、下位机主要完成能见度检测和基于能见度的安全行驶速度检测,基于霍尔传感器A3144的实时速度检测,以及基于MCP2515模块的CAN总线通信和六位数码管的显示电路
3、上位机主要完成CAN总线数据的接收,对数据的处理和基于处理结果对执行器发出控制指令执行器采用步进电机,准确、快速的控制达到系统所需的效果同时,用LCD1602作为显示器,提供友好的人机交互界面在完成设计的整个过程中,始终以严格的标准要求自己,力争设计能够满足系统所需功能,并最大限度的做到实用但是,设计还有一些工作做的不足
1、对于安全行驶速度的检测安全行驶速度时一个复杂的概念,要真正做到实时环境下的安全速度检测,要考虑驾驶员因素、车辆因数、道路因素、天气条件等各种复杂的环境因素,所需传感检测系统不是此设计所能完成的在此只能做出设想,在各种条件共同影响下,通过一个比较合理的算法,综合各种条件的影响参数,最终得出一个合理、准确的安全行驶速度本设计采用对能见度的检测只完成了其中一个方面,并且在使用红外检测时,技术上没有先前可以参照的例子;在实际应用中,空气中各种微粒对红外的吸收率各不相同因此,对于红外检测的可行性还要做进一步的探究
2、设计可靠性有待提高本设计在软硬件方面对可靠性考虑有不周之处,硬件方面对于信号隔离处理的不完善,软件方面则需要考虑更多兼容性另一方面,对于控制的算法,本设计只完成了最初级的编程,在应用于汽车实践时,还需要做更多的改进致谢在完成毕业设计的整个过程中,我得到了周燕老师和秦老师的悉心指导在我刚开始对毕业设计无从下手的时候,为我提供思路;在我设计遇到难点时,为我指点迷津,拨云见日;在我设计将近尾声时,告诫我对待学术要严谨认真在此过程中,从老师身上学到很多专业的知识和做人做事的学问,谨以最大诚意表示感谢通过这次毕业设计,让我大学将近尾声的时候再一次重温大学所学的所有知识,并将这些知识用于实践,用于解决实际问题既增加了对知识的熟悉程度,也丰富了自己对于未来人生的自信在具体完成设计工作时,翻阅了大量了关于传感检测、现场总线、电机控制以及单片机方面的书籍通过这些工作,让我对传感器原理和具体场合传感器的选择及应用有了很多新的认识以前对现场总线技术基本不了解,通过这几个月的学习,对于常用现场总线技术特别是CAN总线技术的认识有了很大程度的提高在对控制系统执行器件的选择上,对于步进电机有了很深的了解,相信以后再实际应用时,能够熟练的应用步进电机最后,对单片机的认识也提升了一个层次,由以前课本上的单片机变成电路板上的单片机,在实际中遇到了很多问题并一一解决,因此收获很大最后除了再次感谢老师、同学对我的帮助之外,还要感谢我的父母在整个成长过程之中,不管我遇到什么事情,你们总是给予我最大的鼓励和支持,万分感谢参考文献
[1]公安部通报全国道路交通事故情况[J].公安部通报,
2012.
1.
[2]甘家华.道路运输企业社会责任研究[D].
2011.
[3]杨荫凯.智能交通系统(ITS)概述及我国的发展对策选择[J].地理科学进展
1999.
9.
[4]唐海波.车辆行驶速度智能控制系统系统研究[D].
2008.
[5]李虹燕.高速公路行车视距仿真研究及安全评价[D].
2006.
[6]钟敏.基于视频图像处理的高速公路车辆测速算法的实现[D].
2010.
[7]姜志海,黄玉清,刘连鑫.单片机原理及应用[M]北京电子工业出版社,201019-
39.
[8]阳宪惠.现场总线技术及其应用[M]北京清华大学出版社,2008:61-
103.
[9]陈水全.基于控制器局域网总线的水雷引信系统研究[D].
2006.
[10]钱成明.数字时电镀电源并联均流系统设计[D].
2009.
[11]贝卓运.基于Atmel9261平台的嵌入式LINUX的板级支持包BSP研究与开发[D].
2008.
[12]彭耿炎.基于ARM和LINUX的嵌入式工业网络控制器研究与实现[D].
2008.
[13]何效洲.基于CAN总线的大型电机磁场监测系统设计与实现[D].
2008.
[14]姬翔.基于CAN总线的动态称重系统的研制[D].
2007.
[15]郭益安.基于CANBUS的汽车故障诊断系统[D].
2007.
[16]韩耀振.基于CAN总线的气体报警系统的研究与实现[D].
2008.
[17]王黎明,夏立.CAN现场总线系统的设计与应用[M]北京电子工业出版社,2008:178-
230.
[18]张齐,朱宁西.单片机应用系统设计技术[M]北京电子工业出版社,2009:161-
164262.
[19]李强.51系列单片机应用软件编程技术[M]北京北京航空航天大学出版社,2009:300-
326.
[20]孙传友,翁惠辉.现代检测技术及仪表[M]北京高等教育出版社,2010:45-
73.
[21]杜尚丰,曹晓钟,徐津.CAN总线测控技术及其应用[M]北京电子工业出版社,2007:95-
109.
[22]PeterChapman,GeoffreyUnderwood,KatharineRoberts.Visualsearehpatternsintrainedanduntrainednovieedrivers.TransPortationResearehPartFS,2002,157一
167.
[23]GeorgeYANNISJohnGOLLASGeorgeKANELLAIDIS.AComparativeAnalysisofthePotentialofInternationalRoadAccidentDataFiles[J].IATSSResearch.20001242:111-120
[24]HAGLUNDM.ABERGL.Speedchoiceinrelationtospeedlimitandinfluencefromotherdrivers[J].TransportationResearchPartF200034:39-
51.
[25]崔洪军.道路线形与交通安全的研究[D]天津河北工业大学,2001:42-
44.
[26]吴金戎.8051单片机实践与应用[M]北京清华大学出版社,2002:131-
142.
[27]高光天.传感器与信号调整器件应用技术[M]北京科学出版社,2002:78-
90.
[28]杨超.金属磁弹、磁记忆检测信号采集处理系统的研究[D].
2009.
[29]LCD1602 Datasheet[Z]. www.21IC.com.
[30]Y.Hassan,S.M.Easa.ModelingofrequiredprexiewSightDistanee.JournalofTransPortationEngineering[D],2000
[31]ShawPinMiaou,HarryLum.Modelingvehieleaeeidentsandhighwaygeometricdesignrelationships.Aecid.Anal.andPrev.Vol.256,
199.附录1电路图
1、上位机整体电路图
2、下位机整体电路附录2程序清单
1、下位机程序/*下位机程序以AT89S52单片机,红外对管电路,A3144霍尔传感器,CAN总线通信模块以及数码管显示电路为硬件平台主要完成两种速度信号的采集,显示及传输*//*包含头文件*/#includereg
52.h#includeintrins.h#include
2515.h#includeSPI.h#includeFunction.h#includeCAN.h#defineuintunsignedint#defineucharunsignedcharucharADC0832_RESULTA3144_RESULT;ucharCNT;//定义计数器刷新频率sbitCS32=P2^5;//ADC0832安全行驶速度模数转换输入sbitCLK=P2^6;sbitDIO=P2^7;sbitA3144_3=P3^4;//霍尔传感器计数脉冲输入ucharcodeDSY_CODE[]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f};/*以红外对管作为测量空气能见度的传感器,用ADC0832对红外对管调理电路输出的模拟信号进行模数转换*/ucharGet_AD_Result{ucharidat1=0dat2=0;CS32=0;CLK=0;DIO=1;_nop_;_nop_;CLK=1;_nop_;_nop_;CLK=0;DIO=1;_nop_;_nop_;CLK=1;_nop_;_nop_;CLK=0;DIO=1;_nop_;_nop_;CLK=1;DIO=1;_nop_;_nop_;CLK=0;DIO=1;_nop_;_nop_;fori=0;i8;i++{CLK=1;_nop_;_nop_;CLK=0;_nop_;_nop_;dat1=dat11|DIO;}fori=0;i8;i++{dat2=dat2ucharDIOi;CLK=1;_nop_;_nop_;CLK=0;_nop_;_nop_;}CS32=1;returndat1==dat2dat1:0;}/*timer0作为计数器计算A3144发出的脉冲数,timer1作为定时器,500ms刷新一次数据*/voidtimer_init{TMOD=0x15;//设置timer1为定时器,timer0为计数器TH1=0x3c;//设置timer1为50ms中断一次TL1=0xb0;TH0=0;TL0=0;//timer0从0开始计数IE=0x8a;//开放中断TR0=1;TR1=1;//开启定时计数器}/*定时器1发生溢出中断,50ms刷新一次ADC0832和A3144,对两种速度值进行更新*/voidtimer1interrupt3{ucharadcout;CNT++;TR0=0;TR1=0;ifCNT==10{ucharcntA;//假设汽车的最高设计速度为10000r/min,则每500ms不超过90转,//因此TH0一定为0所以只需要一个字节存储cntA=TL0;A3144_RESULT=
3.6*
3.14*
0.8*cntA;//设置普通车轮直径为
0.4m,则500ms行驶的路程为pi*
0.4*cntm除以500ms的时间,就//得到以m/s为单位的速度值,再乘以36,就得到以KM/h为单位的速度adcout=Get_AD_Result;//当输入电压为3V时,ADC0832输出为0xa0,对应安全行驶速度为0//当输入电压为1此为设定值V时,ADC0832输出为0x30对应安全行驶速度为120Km/hifadcout0xa0//ADC0832_RESULT根据此算法求解{ADC0832_RESULT=0x00;adcout=0xa0;}ifadcout0x30{ADC0832_RESULT=0x78;adcout=0x30;}elseADC0832_RESULT=0xa0-adcout*
1.07;//120/112=
1.07}TH1=0x3c;//设置timer1为50ms中断一次TL1=0xb0;TH0=0;TL0=0;TR0=1;TR1=1;//开启定时计数器}/*LED显示程序*/voidled{uchardat
[6]wei=0x80i;dat
[0]=ADC0832_RESULT/100;dat
[1]=ADC0832_RESULT/10%10;dat
[2]=ADC0832_RESULT%10;dat
[3]=A3144_RESULT/100;dat
[4]=A3144_RESULT/10%10;dat
[5]=A3144_RESULT%10;fori=0;i6;i++{wei=_crol_wei1;P1=wei;P0=DSY_CODE[dat[i]];DelayMS1;}}/*单片机初始化,开放中断*/voidCpu_initvoid{EX1=1;IT1=0;ET1=1;EA=1;}/*主程序*/voidmain{ucharb
[2];Init2515;timer_init;Cpu_init;while1{b
[0]=ADC0832_RESULT;b
[1]=A3144_RESULT;//获取两路速度值数据led;//显示输出两路数据值CAN_Sendb;//向总线发送数据delay_ms100;}}
2515.h自定义头文件#ifndef__2515_h__#define__2515_h__#defineCANSTAT0x0E#defineCANCTRL0x0F#defineBFPCTRL0x0C#defineTEC0x1C#defineREC0x1D#defineCNF30x28#defineCNF20x29#defineCNF10x2A#defineCANINTE0x2B#defineCANINTF0x2C#defineEFLG0x2D#defineTXRTSCTRL0x0D/*RecieveFilters*/#defineRXF0SIDH0x00#defineRXF0SIDL0x01#defineRXF0EID80x02#defineRXF0EID00x03#defineRXF1SIDH0x04#defineRXF1SIDL0x05#defineRXF1EID80x06#defineRXF1EID00x07#defineRXF2SIDH0x08#defineRXF2SIDL0x09#defineRXF2EID80x0A#defineRXF2EID00x0B#defineRXF3SIDH0x10#defineRXF3SIDL0x11#defineRXF3EID80x12#defineRXF3EID00x13#defineRXF4SIDH0x14#defineRXF4SIDL0x15#defineRXF4EID80x16#defineRXF4EID00x17#defineRXF5SIDH0x18#defineRXF5SIDL0x19#defineRXF5EID80x1A#defineRXF5EID00x1B/*ReceiveMasks*/#defineRXM0SIDH0x20#defineRXM0SIDL0x21#defineRXM0EID80x22#defineRXM0EID00x23#defineRXM1SIDH0x24#defineRXM1SIDL0x25#defineRXM1EID80x26#defineRXM1EID00x27/*TxBuffer0*/#defineTXB0CTRL0x30#defineTXB0SIDH0x31#defineTXB0SIDL0x32#defineTXB0EID80x33#defineTXB0EID00x34#defineTXB0DLC0x35#defineTXB0D00x36#defineTXB0D10x37#defineTXB0D20x38#defineTXB0D30x39#defineTXB0D40x3A#defineTXB0D50x3B#defineTXB0D60x3C#defineTXB0D70x3D/*TxBuffer1*/#defineTXB1CTRL0x40#defineTXB1SIDH0x41#defineTXB1SIDL0x42#defineTXB1EID80x43#defineTXB1EID00x44#defineTXB1DLC0x45#defineTXB1D00x46#defineTXB1D10x47#defineTXB1D20x48#defineTXB1D30x49#defineTXB1D40x4A#defineTXB1D50x4B#defineTXB1D60x4C#defineTXB1D70x4D/*TxBuffer2*/#defineTXB2CTRL0x50#defineTXB2SIDH0x51#defineTXB2SIDL0x52#defineTXB2EID80x53#defineTXB2EID00x54#defineTXB2DLC0x55#defineTXB2D00x56#defineTXB2D10x57#defineTXB2D20x58#defineTXB2D30x59#defineTXB2D40x5A#defineTXB2D50x5B#defineTXB2D60x5C#defineTXB2D70x5D/*RxBuffer0*/#defineRXB0CTRL0x60#defineRXB0SIDH0x61#defineRXB0SIDL0x62#defineRXB0EID80x63#defineRXB0EID00x64#defineRXB0DLC0x65#defineRXB0D00x66#defineRXB0D10x67#defineRXB0D20x68#defineRXB0D30x69#defineRXB0D40x6A#defineRXB0D50x6B#defineRXB0D60x6C#defineRXB0D70x6D/*RxBuffer1*/#defineRXB1CTRL0x70#defineRXB1SIDH0x71#defineRXB1SIDL0x72#defineRXB1EID80x73#defineRXB1EID00x74#defineRXB1DLC0x75#defineRXB1D00x76#defineRXB1D10x77#defineRXB1D20x78#defineRXB1D30x79#defineRXB1D40x7A#defineRXB1D50x7B#defineRXB1D60x7C#defineRXB1D70x7D/********************************************************************Bitregistermasks********************************************************************//*TXBnCTRL*/#defineTXREQ0x08#defineTXP0x03/*RXBnCTRL*/#defineRXM0x60#defineBUKT0x04/*CANCTRL*/#defineREQOP0xE0#defineABAT0x10#defineOSM0x08#defineCLKEN0x04#defineCLKPRE0x03/*CANSTAT*/#defineREQOP0xE0#defineICOD0x0E/*CANINTE*/#defineRX0IE0x01#defineRX1IE0x02#defineTX0IE0x04#defineTX1IE0x80#defineTX2IE0x10#defineERRIE0x20#defineWAKIE0x40#defineMERRE0x80/*CANINTF*/#defineRX0IF0x01#defineRX1IF0x02#defineTX0IF0x04#defineTX1IF0x80#defineTX2IF0x10#defineERRIF0x20#defineWAKIF0x40#defineMERRF0x80/*BFPCTRL*/#defineB1BFS0x20#defineB0BFS0x10#defineB1BFE0x08#defineB0BFE0x04#defineB1BFM0x02#defineB0BFM0x01/*CNF1Masks*/#defineSJW0xC0#defineBRP0x3F/*CNF2Masks*/#defineBTLMODE0x80#defineSAM0x40#definePHSEG10x38#definePRSEG0x07/*CNF3Masks*/#defineWAKFIL0x40#definePHSEG20x07/*TXRTSCTRLMasks*/#defineTXB2RTS0x04#defineTXB1RTS0x02#defineTXB0RTS0x01/********************************************************************BitTimingConfiguration********************************************************************//*CNF1*/#defineSJW_1TQ0x40#defineSJW_2TQ0x80#defineSJW_3TQ0x90#defineSJW_4TQ0xC0/*CNF2*/#defineBTLMODE_CNF30x80#defineBTLMODE_PH1_IPT0x00#defineSMPL_3X0x40#defineSMPL_1X0x00#definePHSEG1_8TQ0x38#definePHSEG1_7TQ0x30#definePHSEG1_6TQ0x28#definePHSEG1_5TQ0x20#definePHSEG1_4TQ0x18#definePHSEG1_3TQ0x10#definePHSEG1_2TQ0x08#definePHSEG1_1TQ0x00#definePRSEG_8TQ0x07#definePRSEG_7TQ0x06#definePRSEG_6TQ0x05#definePRSEG_5TQ0x04#definePRSEG_4TQ0x03#definePRSEG_3TQ0x02#definePRSEG_2TQ0x01#definePRSEG_1TQ0x00/*CNF3*/#definePHSEG2_8TQ0x07#definePHSEG2_7TQ0x06#definePHSEG2_6TQ0x05#definePHSEG2_5TQ0x04#definePHSEG2_4TQ0x03#definePHSEG2_3TQ0x02#definePHSEG2_2TQ0x01#definePHSEG2_1TQ0x00#defineSOF_ENABLED0x80#defineWAKFIL_ENABLED0x40#defineWAKFIL_DISABLED0x00/********************************************************************Control/ConfigurationRegisters********************************************************************//*CANINTE*/#defineRX0IE_ENABLED0x01#defineRX0IE_DISABLED0x00#defineRX1IE_ENABLED0x02#defineRX1IE_DISABLED0x00#defineG_RXIE_ENABLED0x03#defineG_RXIE_DISABLED0x00#defineTX0IE_ENABLED0x04#defineTX0IE_DISABLED0x00#defineTX1IE_ENABLED0x08#defineTX2IE_DISABLED0x00#defineTX2IE_ENABLED0x10#defineTX2IE_DISABLED0x00#defineG_TXIE_ENABLED0x1C#defineG_TXIE_DISABLED0x00#defineERRIE_ENABLED0x20#defineERRIE_DISABLED0x00#defineWAKIE_ENABLED0x40#defineWAKIE_DISABLED0x00#defineIVRE_ENABLED0x80#defineIVRE_DISABLED0x00/*CANINTF*/#defineRX0IF_SET0x01#defineRX0IF_RESET0x00#defineRX1IF_SET0x02#defineRX1IF_RESET0x00#defineTX0IF_SET0x04#defineTX0IF_RESET0x00#defineTX1IF_SET0x08#defineTX2IF_RESET0x00#defineTX2IF_SET0x10#defineTX2IF_RESET0x00#defineERRIF_SET0x20#defineERRIF_RESET0x00#defineWAKIF_SET0x40#defineWAKIF_RESET0x00#defineIVRF_SET0x80#defineIVRF_RESET0x00/*CANCTRL*/#defineREQOP_CONFIG0x80#defineREQOP_LISTEN0x60#defineREQOP_LOOPBACK0x40#defineREQOP_SLEEP0x20#defineREQOP_NORMAL0x00#defineABORT0x10#defineOSM_ENABLED0x08#defineCLKOUT_ENABLED0x04#defineCLKOUT_DISABLED0x00#defineCLKOUT_PRE_80x03#defineCLKOUT_PRE_40x02#defineCLKOUT_PRE_20x01#defineCLKOUT_PRE_10x00/*CANSTAT*/#defineOPMODE_CONFIG0x80#defineOPMODE_LISTEN0x60#defineOPMODE_LOOPBACK0x40#defineOPMODE_SLEEP0x20#defineOPMODE_NORMAL0x00/*RXBnCTRL*/#defineRXM_RCV_ALL0x60#defineRXM_VALID_EXT0x40#defineRXM_VALID_STD0x20#defineRXM_VALID_ALL0x00#defineRXRTR_REMOTE0x08#defineRXRTR_NO_REMOTE0x00#defineBUKT_ROLLOVER0x04#defineBUKT_NO_ROLLOVER0x00#defineFILHIT0_FLTR_10x01#defineFILHIT0_FLTR_00x00#defineFILHIT1_FLTR_50x05#defineFILHIT1_FLTR_40x04#defineFILHIT1_FLTR_30x03#defineFILHIT1_FLTR_20x02#defineFILHIT1_FLTR_10x01#defineFILHIT1_FLTR_00x00/*TXBnCTRL*/#defineTXREQ_SET0x08#defineTXREQ_CLEAR0x00#defineTXP_HIGHEST0x03#defineTXP_INTER_HIGH0x02#defineTXP_INTER_LOW0x01#defineTXP_LOWEST0x00/********************************************************************RegisterBitMasks********************************************************************/#defineDLC_00x00#defineDLC_10x01#defineDLC_20x02#defineDLC_30x03#defineDLC_40x04#defineDLC_50x05#defineDLC_60x06#defineDLC_70x07#defineDLC_80x08/********************************************************************CANSPIcommands********************************************************************/#defineCAN_RESET0xC0#defineCAN_READ0x03#defineCAN_WRITE0x02#defineCAN_RTS0x80#defineCAN_RTS_TXB00x81#defineCAN_RTS_TXB10x82#defineCAN_RTS_TXB20x84#defineCAN_RD_STATUS0xA0#defineCAN_BIT_MODIFY0x05#defineCAN_RX_STATUS0xB0#defineCAN_RD_RX_BUFF0x90#defineCAN_LOAD_TX0X40/********************************************************************Miscellaneous********************************************************************/#defineDUMMY_BYTE0x00#defineTXB00x31#defineTXB10x41#defineTXB20x51#defineRXB00x61#defineRXB10x71#defineEXIDE_SET0x08#defineEXIDE_RESET0x00//#defineCSPORTAbits.RA2#endif#ifndef__CAN_H__#define__CAN_H__#includereg
52.h#include
2515.h#includeSPI.h#includeFunction.h#defineCAN_10Kbps0x31#defineCAN_25Kbps0x13#defineCAN_50Kbps0x09#defineCAN_100Kbps0x04#defineCAN_125Kbps0x03#defineCAN_250Kbps0x01#defineCAN_500Kbps0x00unsignedchardummy;voidInit2515void{SPIReset;delay_ms1;//设置波特率为10Kbps//setCNF1SJW=00长度为1TQBRP=3TQ=[2*BRP+1]/Fsoc=2*4/8M=1us,TBIT=8TQSPIByteWriteCNF1CAN_125Kbps;//setCNF2SAM=0在采样点对总线进行一次采样,PHSEG1=2+1TQ=3TQPRSEG=0+1TQ=1TQSPIByteWriteCNF20x80|PHSEG1_3TQ|PRSEG_1TQ;//setCNF3PHSEG2=2+1TQ=3TQ同时当CANCTRL.CLKEN=1时设定CLKOUT引脚为时间输出使能位SPIByteWriteCNF3PHSEG2_3TQ;//setTXB0,设置发送缓冲器0的标识符和发送的数据,以及发送的数据长度SPIByteWriteTXB0SIDH0xFF;//设置发送缓冲器0的标准标识符,待修改***SPIByteWriteTXB0SIDL0xE0;//用到标准标识符SPIByteWriteTXB0DLCDLC_2;//设置发送数据的长度为8个字节//设置接收缓冲器0的标识符和初始化数据SPIByteWriteRXB0SIDH0x00;//设置接收缓冲器0的标准标识符,待修改***SPIByteWriteRXB0SIDL0x60;//用到标准标识符SPIByteWriteRXB0CTRL0x60;//仅仅接收标准标识符的有效信息,FIILHIT0=0表示RXB0,采用FILHIT0SPIByteWriteRXB0DLCDLC_2;//设置接收数据的长度为8个字节SPIByteWriteRXF0SIDH0xFF;//初始化接收滤波器0,待修改***SPIByteWriteRXF0SIDL0xE0;SPIByteWriteRXM0SIDH0xFF;//初始化接收屏蔽器0,待修改***SPIByteWriteRXM0SIDL0xE0;//设置接收缓冲器0中断SPIByteWriteCANINTF0x00;//清空中断标志位SPIByteWriteCANINTE0x01;//接收缓冲器0满中断使能位SPIByteWriteCANCTRLREQOP_NORMAL|CLKOUT_ENABLED;//设置正常模式dummy=SPIByteReadCANSTAT;ifOPMODE_NORMAL!=dummy0xE0SPIByteWriteCANCTRLREQOP_NORMAL|CLKOUT_ENABLED;//判断进入正常工作模式}//CAN发送程序voidCAN_Sendunsignedchar*CAN_TX_Buf{unsignedchartempdata;tempdata=SPIByteReadCAN_RD_STATUS;SPIByteWriteTXB0D0CAN_TX_Buf
[0];SPIByteWriteTXB0D1CAN_TX_Buf
[1];iftempdata0x04//判断TXREQ标志位{delay_ms1;SPIByteWriteTXB0CTRL0;//清除TXREQ标志位whileSPIByteReadCAN_RD_STATUS0x04;//等待TXREQ清零}CS=LOW;WriteSPICAN_RTS_TXB0;//发送缓冲器0请求发送CS=HIGH;}//CAN接收程序voidCAN_Receiveunsignedchar*CAN_RX_Buf{CAN_RX_Buf
[0]=SPIByteReadRXB0D0;CAN_RX_Buf
[1]=SPIByteReadRXB0D1;SPIByteWriteCANINTF0;}#endif#ifndef__SPI_h__#define__SPI_h__#includeREG
52.h#includestring.h#includeintrins.h#includestdio.h#includeFunction.h//管脚配置sbitSCK=P2^3;sbitSI=P2^2;sbitSO=P2^1;sbitCS=P2^0;#defineSCKPORTA_BIT3#defineSIPORTA_BIT2#defineSOPORTA_BIT1#defineCSPORTA_BIT0#defineHIGH1#defineLOW0/*voidWriteSPIunsignedcharDataOut{unsignedcharn;SCK=0;//Makesureclockislowforn=0;n8;n++{SCK=0;//ifDataOut0x80//Clocka10xFESI=1;else//Clocka0SI=0;SCK=1;//PulseclockDataOut=1;}}unsignedcharReadSPIvoid{unsignedcharnDataIn=0;SCK=0;//Makesureclockislowforn=0;n7;n++{SCK=1;DataIn=DataIn+SO;DataIn=DataIn1;SCK=0;}SCK=1;DataIn=DataIn+SO;SCK=0;returnDataIn;}//功能说明接收一个字节unsignedcharReadSPIvoid{unsignedcharn=8;//从MISO线上读取一个数据字节unsignedchartdata;SCK=0;whilen--{_nop_;_nop_;//delay_ms1;//待修改SCK=1;//delay_ms1;//同上tdata=tdata1;//左移一位ifSO==1tdata=tdata|0x01;//若收到的位为1,则数据的最后一位置1elsetdata=tdata0xfe;//否则数据的最后一位置0SCK=0;}returntdata;}//功能函数发送一个字节voidWriteSPIunsignedcharch{unsignedcharn=8;//向SI上发送一位数据字节,共八位SCK=0;whilen--{_nop_;SCK=0;ifch0x80==0x80//若要发送的数据最高位为1,则发送1{SI=1;}else{SI=0;}_nop_;SCK=1;_nop_;//delay_ms1;ch=ch1;//数据左移1位//SCK=0;}}//向2515指定地址addr写一个字节数据valuevoidSPIByteWriteunsignedcharaddrunsignedcharvalue{CS=LOW;WriteSPICAN_WRITE;WriteSPIaddr;WriteSPIvalue;CS=HIGH;}//从2515指定地址addr读取一个字节数据valueunsignedcharSPIByteReadunsignedcharaddr{unsignedchartempdata;CS=LOW;WriteSPICAN_READ;WriteSPIaddr;tempdata=ReadSPI;CS=HIGH;returntempdata;}//SPI复位voidSPIResetvoid{CS=LOW;WriteSPICAN_RESET;CS=HIGH;}#endif#ifndef__FUNCTION_h__#define__FUNCTION_h__#includereg
52.hvoiddelay_msunsignedchart{unsignedcharij;fori=0;it;i++forj=0;j33;j++;}voidDelayMSunsignedintx{unsignedchart;whilex--fort=0;t120;t++;}#endif
2、上位机程序清单#includereg
52.h#includeintrins.h#includestring.h#include
2515.h#includeSPI.h#includeFunction.h#includeCAN.h#defineuintunsignedint#defineucharunsignedcharsbitLED=P3^6;sbitLS1=P3^7;sbitRS=P2^5;sbitRW=P2^6;sbitEN=P2^7;ucharcodeFFW[]={0x080x0c0x040x060x020x030x010x09};ucharcodeREV[]={0x090x010x030x020x060x040x0c0x08};ucharLCD_BUFFER1[]={Sspeed:Km/h};ucharLCD_BUFFER2[]={Cspeed:Km/h};uchargRXFlag=0;ucharsafe_speed=0x89current_speed=0;/*声光提示信号子程序*/voidwarning{uinti;fori=0;i500;i++{LED=!LED;LS1=!LS1;DelayMS50;LED=!LED;LS1=!LS1;DelayMS500;}}/*1602LCD子程序*///读LCD状态ucharRead_LCD_State{ucharstate;RS=0;RW=1;EN=1;DelayMS1;state=P0;EN=0;DelayMS1;returnstate;}//LCD忙等待voidLCD_Busy_Wait{whileRead_LCD_State0x80==0x80;DelayMS5;}//LCD写数据voidWrite_LCD_Datauchardat{LCD_Busy_Wait;RS=1;RW=0;EN=0;P0=dat;EN=1;DelayMS1;EN=0;}//LCD写指令voidWrite_LCD_Commanducharcmd{LCD_Busy_Wait;RS=0;RW=0;EN=0;P0=cmd;EN=1;DelayMS1;EN=0;}//LCD初始化voidInit_LCD{Write_LCD_Command0x38;DelayMS1;Write_LCD_Command0x01;DelayMS1;Write_LCD_Command0x06;DelayMS1;Write_LCD_Command0x0c;DelayMS1;}//LCD设置位置voidSet_LCD_POSucharp{Write_LCD_Commandp|0x80;}//LCD显示字符串voidDisplay_LCD_Stringucharpuchar*s{uchari;Set_LCD_POSp;fori=0;i16;i++{Write_LCD_Datas[i];DelayMS1;}}//送显示时格式转换voidFormatucharduchar*a{a
[0]=d/100+0;a
[1]=d/10%10+0;a
[2]=d%10+0;}//LCD显示函数voidLCDvoid{Formatsafe_speedLCD_BUFFER1+8;Formatcurrent_speedLCD_BUFFER2+8;Display_LCD_String0x00LCD_BUFFER1;Display_LCD_String0x40LCD_BUFFER2;}/*外部中断1函数,当MCP2515收到正确的报文后,会产生INT1中断*/voidex1_intvoidinterrupt2using1{gRXFlag=1;}/*单片机初始化,开放中断*/voidCpu_initvoid{EX1=1;//IT1=0;ET1=1;EA=1;}/*步进电机控制函数*///步进电机正转voidSETP_MOTOR_FFWucharm{ucharij;fori=0;i8;i++{forj=0;j8;j++{P1=FFW[j];DelayMSm;}}}//步进电机反转voidSETP_MOTOR_REVucharm{ucharij;fori=0;i8;i++{forj=0;j8;j++{P1=REV[j];DelayMSm;}}}//步进电机控制函数voidstepmotor{ucharD_valuepqi;D_value=current_speed-safe_speed;D_value=50-D_value;ifD_value20{p=5;q=1;}elseifD_value40{p=1;q=10;}else{p=uchar50-D_value/10;q=ucharD_value/10;}fori=0;i64*p;i++{SETP_MOTOR_FFWq;}ifcurrent_speedsafe_speedfori=0;i64*p;i++{SETP_MOTOR_REVq;}}/*外部中断1函数,当MCP2515收到正确的报文后,会产生INT1中断*/voidmain{uchara
[2];Init_LCD;Init2515;Cpu_init;while1{ifgRXFlag{CAN_Receivea;gRXFlag=0;DelayMS1;safe_speed=a
[0];current_speed=a
[1];}LCD;ifcurrent_speedsafe_speed{warning;}ifcurrent_speedsafe_speed{stepmotor;}LCD;}}注上位机所需CAN总线子程序与下位机相同,不再赘述年份次数死亡人数受伤人数财产损失
2010219521652252540759.3亿
2011210812623872496739.4亿合计
43033312761250374818.7亿名称引脚号I/O/P类型说明备选引脚功能TXCAN1O连接到CAN总线的发送输出引脚名称引脚号I/O/P类型说明备选引脚功能RXCAN2I连接到CAN总线的发送输入引脚CLKOUT3O带可编程预分频器的时钟输出引脚起始帧信号TX0RTS4I发送缓冲器TXB0请求发送引脚或通用数字输入引脚VDD上连100kΩ内部上拉电阻通用数字输入引脚VDD上连100KΩ内部上拉电阻TX1RTS5I发送缓冲器TXB1请求发送引脚或通用数字输入引脚VDD上连100kΩ内部上拉电阻通用数字输入脚VDD上连100KΩ内部上拉电阻TX2RTS6I发送缓冲器TXB2请求发送引脚或通用数字输入引脚VDD上连100kΩ内部上拉电阻通用数字输入脚VDD上连100KΩ内部上拉电阻OSC27O振荡器输出OSC18I振荡器输入外部时钟输入引脚VSS9P逻辑和I/O引脚的参考地RX1BF10O接收缓冲器RXB1中断引脚或通用数字输出引脚通用数字输出引脚RX0BF11O接收缓冲器RXB0中断引脚或通用数字输出引脚通用数字输出引脚INT12O中断输出引脚SCK13ISPI接口的时钟输入引脚SI14ISPI接口的数据输入引脚SO15OSPI接口的数据输出引脚CS16ISPI接口的片选输入引脚RESET17I低电平有效的器件复位输入引脚VDD18P逻辑和I/O引脚的正电源TXBnCTRL字节描述-7未使用ABTF6ABTF报文发送中止标示1=报文中止;0=报文发送成功MLOA5MOLA报文仲裁失败1=报文发送中仲裁失败;0=报文发送中仲裁未失败TXERR4TXERR检测到的发送错误1=报文发送中发生了总线错误;0=报文发送中未发生总线错误TXREQ31=缓冲器等待报文发送(单片机将此位置位以请求报文发送,报文发送后此位自动清零)0=缓冲器无报文发送(单片机将此位清零以请求中止报文发送)-2未使用读作‘0’TXP1:01:2TXP1:0发送缓冲器优先级11=最高的报文发送优先级;10=中偏高的报文发送优先级01=中偏低的报文发送优先级;00=最低的报文发送优先级RXB0CTRL字节描述—7未使用读作‘0’RXM1:06:5接收缓冲器工作模式11=关闭屏蔽/滤波功能;接收所有报文10=只接受符合滤波器条件的带扩展标识符的有效报文01=只接受符合滤波器条件的带标准标识符的有效报文00=接收符合滤波器条件的所有带扩展标识符或标准标识符的有效报文—4未使用读作‘0’RXRTR3是否接收到远程传送请求1=接收到远程传送请求;0=没有接收到远程传送请求BUKT2滚存使能1=如果RXB0满,RXB0接收到的报文将被滚存至RXB10=滚存禁止BUKT11只读位,BUKT位备份FILHIT0滤波器指示-指明使能报文接收的验收滤波寄存器编号1=验收滤波寄存器1(RXF1);0=验收滤波寄存器0(RXF0)CNF1字节描述SJW1:07:6同步跳转宽度11=长度=4xTQ;10=长度=3xTQ01=长度=2xTQ;00=长度=1xTQBRP5:05:0波特率分频器TQ=2*(BRP+1)/FOSCCNF2字节描述BTLMODE7相位段2位时间长度1=相位段2时间长度由CNF3中的PHSEG22PHSEG20确定0=相位段2的时间长度取相位缓冲段1和IPT(2TQ)之间的较大值SAM6采样点配置1=在采样点对总线进行3次采样0=在采样点对总线进行1次采样PHSEG12:05:3相位段1位时间长度(PHSEG+1)*TQPRSEG2:02:0传播段长度(PHSEG+1)*TQCNF3字节描述—7未用读作‘0’WAKFIL6唤醒输入引脚滤波使能位1=唤醒输入引脚滤波使能;0=唤醒输入引脚滤波禁止—5:3未用读作‘0’PHSEG22:02:0相位段2长度(PHSEG2+1)*TQ注相位段2的最小有效设定为2TQCANINTE-I字节描述MERRE7报文错误中断使能1=报文接收或发送错误中断;0=中断禁止WAKIE6唤醒中断使能1=CAN总线活动中断;0=中断禁止ERRIE5错误中断使能1=EFLG错误状态变化中断;0=中断禁止CANINTE-I字节描述TX2IE4发送缓冲器2为空,中断使能1=TXB2为空时中断;0=中断禁止TX1IE3发送缓冲器1为空,中断使能1=TXB1为空时中断;0=中断禁止TX0IE2发送缓冲器0为空,中断使能1=TXB0为空时中断;0=中断禁止RX1IE1接收缓冲器1为满,中断使能1=RXB1装入报文时中断;0=中断禁止RX0IE0接收缓冲器0为满,中断使能1=RXB0装入报文时中断;0=中断禁止CANINTF字节描述MERRF7MERRF报文错误中断标志位1=有等待处理的中断;0=无等待处理的中断WAKIF6WAKIF唤醒中断标志位1=有等待处理的中断;0=无等待处理的中断ERRIF5ERRIF错误中断标志位(EFLG寄存器中有多个中断源)1=有等待处理的中断;0=无等待处理的中断TX2IF4TX2IF发送缓冲器2空中断标志位1=有等待处理的中断;0=无等待处理的中断TX1IF3TX1IF发送缓冲器1空中断标志位1=有等待处理的中断;0=无等待处理的中断TX0IF2TX0IF发送缓冲器0空中断标志位1=有等待处理的中断;0=无等待处理的中断RX1IF1RX1IF接收缓冲器1满中断标志位1=有等待处理的中断;0=无等待处理的中断RX0IF0RX0IF接收缓冲器0满中断标志位1=有等待处理的中断;0=无等待处理的中断CANCTRL字节描述REQOP2:07:5工作模式设定000=正常工作模式;001=休眠模式010=回环模式;011=监听模式100=配置模式EQOP不设定为其他任何值,任何其他设定均为无效注上电复位后,REQOP=b‘111’,表示配置模式被请求ABAT4报文发送中止设定1=请求中止所有等待发送的发送缓冲器0=终止报文发送中止请求—3未使用读作‘0’CLKEN2CLKOUT引脚使能设定1=CLKOUT引脚使能;0=CLKOUT引脚禁止CLKPRE1:01:0CLKOUT引脚预分频器设定00=FCLKOUT=系统时钟频率/1;01=FCLKOUT=系统时钟频率/2;10=FCLKOUT=系统时钟频率/4;11=FCLKOUT=系统时钟频率/8;指令名称指令格式功能介绍复位11000000将内部寄存器复位为缺省状态,并将器件设定为配置模式读00000011从指定地址起始的寄存器读取数据读RX缓冲器10010nn0读取接收缓冲器时,在“n,m”所指示的四个地址中的一个放置地址指针可以减轻一般读命令的开销注在拉升CS引脚为高电平后,相关的RX标志位(CANINTF.RXnIF)将被清零写00000010将数据写入指定地址起始的寄存器写RX缓冲器10000nnn装载发送缓冲器时,在“a,b,c”所指示的六个地址中的一个放置地址指针可以减轻一般写命令的开销RTS10000nnn指示控制器开始发送任一发送缓冲器中的报文发送序列RX状态10110000快速查询命令,确定匹配的滤波器和接收报文的类型读状态10100000快速查询命令,可读取有关发送和接收功能的一些状态位位修改00000101允许用户将特殊寄存器中的单独位置1或清零助记符引脚描述TXD1发送数据输入GND2接地VCC3电源RXD4接收数据输入VREF5参考电压输出CANL6低电平CAN总线CANH7高电平CAN总线S8选择进入高速模式还是静音模式型号电压相数步距角减速比直流电阻重量28BYJ485V
45.6251:64200Ω40g端口值步数ABCD0x03111000x06201100x0c300110x0941001引脚号引脚名电平输入/输出作用1VSS电源地2VCC电源引脚号引脚名电平输入/输出作用3VEE对比调整电压4RS0/1输入0=输入指令1=输入数据5R/W0/1输入0=向LCD写入指令或数据1=从LCD读取信息6E11→0输入使能信号1=读取信息1→0=执行指令7DB00/1输入/输出数据总线line08DB10/1输入/输出数据总线line19DB20/1输入/输出数据总线line110DB30/1输入/输出数据总线line311DB40/1输入/输出数据总线line412DB50/1输入/输出数据总线line513DB60/1输入/输出数据总线line614DB70/1输入/输出数据总线line715A+VCCLCD背光电源正极16K接地LCD背光电源负极显示位置123456……16DDRAM地址第一行00H01H02H03H04H05H……0FH第二行40H41H42H43H44H45H……4FH指令RSEWD7D6D5D4D3D2D1D01清屏00000000012光标返回000000001*3输入模式00000001I/DS4显示控制0000001DCB5显示控制000001S/CR/L**6功能00001DLNF**7置字符发生器地址0001字符发生存储器地址8置数据存贮器地址001显示数据存储器地址9读忙标志和地址01BF计数器地址10写数据到指令
7.8所设地址10要写的数据11从指令
7.8所设地址读数据11读出的数据。