基于单片机的本地互联网络LIN总线帧头发送单元设计
2020-07-21彭晓珊
彭晓珊
(贵阳学院 教师工作处,贵州 贵阳 550005)
本地互联网络LIN总线属于低速串行现场总线,作为CAN总线的下属总线,因其低成本的特点被汽车零部件制造商在车窗、空调以及车辆各类组合开关等电子控制单元的设计中广泛使用,其电子控制单元ECU一般以单片机作为其控制核心,配合外围相应驱动电路,并利用单片机中运行的软件来控制单片机引脚产生符合LIN总线协议的通信帧,以实现对车辆车窗、空调等低速受控对象的控制。同时也可以对车窗电机、空调压缩机以及组合开关的运行状态进行轮询访问。在车窗电机等部件出现故障时也能通过LIN总线即时向车辆中控单元传送故障代码。
1 本地互联网络LIN总线基本原理
本地互联网络LIN总线从硬件角度由单个主节点和多个从节点构成,用一根总线连接所有节点,主节点和从节点中相应的协议控制软件使相应的引脚产生符合总线协议的帧。其通信原理及帧结构如下图1所示,图1所示的主任务和从任务属于协议控制软件部分,主节点中包括主任务软件模块和从任务软件模块,从节点仅包括从任务软件模块。LIN总线从网络结构层次上可分为三层物理层、数据链路层和应用层,物理层定义了总线电平的高低以及驱动电流大小;数据链路层定义了帧的构成和各位的定义;应用层定义了电子控制单元在接收到帧头后所发出的响应。
本地互联网络LIN总线通信的实体为总线帧,每次通信过程包括帧头和响应。由主节点中的主任务软件模块发起,向总线发送帧头,帧头包括间隔场,同步场和标识符场。所有节点中的从任务软件模块均接受帧头,并且从节点可以由接收到的同步场同步自身的通信波特率,由标识符场确定本次通信的类型和通信的双方,既而发出相应的响应以完成整个通信过程。标识符定义通信的收发节点,可为主节点和某个从节点,也可为某个从节点和另一从节点。[1]同时标识符场定义的三类通信帧,基础帧为无条件帧用于一般控制用,如电动车窗的自动或者点动上下等等;事件触发帧用于检查各个受控对象的工作状态,一般以遍历问询方式进行,如检测车窗电机、车灯等的状态等等;偶发帧用于偶发信号的接收,例如转向灯拨动开关等等。事件触发帧和偶发帧的实现过程中,均由基础帧作为最后实现帧。
图1 LIN总线通信原理及总线帧
2 本地互联网络LIN总线帧头详细结构
LIN总线电平采用负逻辑电平,电平的基准为车载蓄电池的VBAT电平为直流12V。当总线电压为80%VBAT时,总线处于高电平(负逻辑的隐形电平);当总线电压低于10%VBAT时,总线处于低电平(负逻辑的显性电平)。总线处于空闲状态时总线电平呈现隐形电平(高电位)。LIN总线的通信速率较低,波特率一般在20Kbps 以下,其每一个位占据的时间为位定时,位定时则控制在50us以上。
LIN总线帧头由间隔场、同步场和标识符场构成。帧头的详细结构如图2所示。间隔场是由13位及以上的显性电平组成,标志着一个帧的开始。间隔场与同步场之间的间隔符至少为1位隐形电平。同步场为0x55串行数据,0x55数据的二进制码为01010101,可用来同步从节点的时钟,整个LIN总线通信的速率由0x55数据的位定时来标定。标识符场PID段由10位构成,标识了帧的类型和目的地,包括起始位、帧ID位0~5、异或校验位为P0和P1。P0位的值为ID0ID1ID2ID4异或运算的结果,P1位的值为ID1ID3ID4ID5异或运算结果并取反。[2]
图2 LIN总线帧头详细结构
3 LIN总线帧头发送单元设计
3.1 硬件设计
针对利用单片机单个通用引脚虚拟串行通信模拟出帧头的方式和利用单片机UART接口引脚输出帧头的方式,硬件设计略有不同,采用单个通用引脚模拟串行通信模拟帧头方式在硬件设计上采用51单片机的通用I/O端口P1口实现,P1口的八根引脚P1.0~P1.7均可以采用。P1口引脚接入MCP201驱动芯片的RXD中,由MCP201驱动芯片连接至LIN总线。单个引脚模拟串行通信其硬件如图3所示。单片机采用AT89C51单片机,晶振部分和电源启动复位部分采用常规设计,P1.0连接至MCP201的RXD端(异步数据接收端)。[3]
MCP201为微芯公司提供的专用LIN总线驱动芯片,1号引脚RXD接收来自单片机的帧头信号。CS/WAKE为片选信号和唤醒信号端,利用VCC电压连接R1和R2限压控制保持片选信号有效,在车载电控单元中则可考虑采用某一引脚信号对MCP201芯片进行唤醒。
由于MCP201内部输出电路采用OC门输出,其输出集电极通过一个电阻R5和IN4007二极管接入VBAT,理论分析,其显性电压应为0V,隐形电压为VBAT。实测LIN总线电压数据和VBAT数据表如下,VBAT采用了一可调电源替代,可调范围为0~30VDC,符合MCP201使用电压范围以及车载蓄电池电压范围。D1和D2采用IN4007二极管,反向击穿电压可承受1000V,可有效防止来自总线的浪涌干扰。同时在LIN总线上连接双向稳压二极管TVS(齐纳二极管),利用其在低阻区中电流增加而电压则保持恒定电压。同时利用其极快的响应时间(亚纳秒级)和相当高的浪涌吸收能力保护后面的电路元件不受瞬态高压尖峰脉冲的冲击。电容C4采用200uF电解电容来稳定供电电源电压,电容C3和C5采用104系列瓷片电容滤除电源上的毛刺。
图3 模拟串行通信方式硬件原理图
针对采用单片机UART接口引脚的方式,将P3.1引脚TXD接入MCP201的RXD中,利用UART(通用异步发送接收)接口模块产生符合LIN总线协议的帧头。LIN总线帧头发送单元硬件设计如图4所示。
图4 单片机UART接口引脚方式硬件原理图
3.2 软件设计
LIN总线帧发送单元的软件设计采用C51语言设计,针对利用单片机单个通用引脚虚拟串行通信模拟出帧头的方式,在软件设计上较为复杂,需要利用单片机的定时器模拟出串行通信数据。以P1.0引脚作为LIN总线帧头输出引脚为例,波特率设定为20Kbps,位定时为50us,单片机系统晶振设置为12MHz,则定时计数器计数周期1us,按照LIN总线帧头结构的规定,间隔场是帧头开始的标志,需要至少13TBIT,根据设定的位定时计算出需要650us的低电平。在程序的开始部分,置位P1.0高电平即为产生低电平做好准备,然后进行定时器T0的设定并启动650us定时,利用定时器T0的工作方式0,13位定时器计算定时器初始值为1D76H,其中1DH送至TH0,76H送至TL0,TMOD定时控制寄存器设定为00H。然后对定时器T0的中断溢出标志位TF0进行采样,如果采样值为0,则表示定时的时间未到,则继续保持P1.0低电平。如果采样值为1,则表示定时器溢出,定时时间到,则P1.0置位回到高电平,至此间隔场中650us低电平产生完成。可利用同样的模式产生50us的间隔场与同步场间隔部分。
同步场数据0x55用来同步整个系统的通信时钟,该数据特点是5个周期的占空比为50%的方波。针对该场信号的特点,利用定时T0的工作模式2自动重装初值的8位定时计数方式进行,TMOD设置为02H,8位定时器计算定时器初始值位为CEH,TH0和TL0均装入该定时计数初始值,当定时时间到后,TF0置1,并将TH0中的计数初值自动送入TL0,TL0从初始值重新进行加1计算。同时定时时间到后,取反P1.0口电平状态实现电平翻转。利用翻转次数计数变量自减1是否为零判断是否完成了10次电平翻转。
标识符场的实现较为简单,将定时器T0设置回工作方式0,13位定时器,定时时间为50us。然后根据LIN总线对帧头中标识符场的要求计算出10位标识符场的每一位数据,利用P1.0引脚逐个串行输出每一位数据。其程序流程图如图5所示。
图5 单个引脚模拟串行数据方式流程图
针对采用单片机UART接口引脚的方式,则充分利用了单片机的UART模块,将字符数据以串行数据的方式从单片机的P3.1引脚TXD发送出去,软件设计则重点围绕UART模块的设置展开,核心在总线通信波特率和单片机串行口通信波特率之间进行计算匹配。
总线帧头的间隔场13位定时为至少650us。UART的输出数据格式采用10为帧格式,1位起始位、8位数据位、1位停止位,8位数据位均采用低电平即数据位0x00。UART模块采用方式1工作模式,单片机的晶振采用11.0592MHz,波特率设定为9600bps,位定时则为1ms。波特率由定时器T1的溢出率设定,定时器T1则采用自动重装的8位定时方式,SMOD设定为0x00,TH1的初始值计算为FDH。采用以上的配置后,利用UART模块方式1工作方式发送数据0x00,汇同起始位低电平产生9个低电位共900us,实现了总线帧头的间隔场。
总线帧头的同步间隔场为0x55,总线通信波特率为20 Kbps,要求位定时为20us。单片机晶振仍然保持为11.0592MHz,单片机UART模块波特率也设定为20 Kbps,SMOD设置为0x01,工作方式1的波特率计算方式为T1溢出率的16分频。溢出率的计算方式为TH1计数个数12倍的导数和单片机晶振频率之乘积。计算匹配后,TH1的初始值为FDH。采用以上的配置后,利用UART模块方式1工作方式发送数据0x55,实现了总线帧头的同步场。
总线帧头的标识符场,由ID0~ID5、P0和P1构成,共8位数据。ID0~ID5帧ID标识了帧的类别和目的地,由开发人员根据LIN总线协议确定,P0和P1为帧ID的异或校验位。单片机UART模块仍采用工作方式1,单片机UART模块波特率也设定为20 Kbps,SMOD设置为0x01,计算匹配后,TH1的初始值仍为FDH。采用以上的配置后,利用UART模块方式1工作方式发送数据ID0~ID5、P0和P1,实现了总线帧头的标识符场。
图6 UART模块产生帧头的程序流程图
3.3 发送单元测试
采用上述硬软件设计后,经过原理图绘制和对应PCB板设计后,采用泰克示波器对LIN总线帧发送单元工作波形进行测试,其测试结果如图7所示,总线帧头波形符合LIN2.2标准,同步间隔场显性TSYNBRK低电平为13TBIT,同步间隔界定符隐形TSYNDEL为1 TBIT,即50us设定。
图7 测试波形
系统给定的波特率为20Kbps,每一个位占用时间为50us,通过调节泰克示波器的扫描频率,可以测得帧头的间隔场为651us,误差为0.15%;同步场0x55在波形上完整体现为10个占空比为50%的方波。满足LIN总线协议对总线帧头的要求。
4 结论
本地互联网络LIN总线帧头发送单元的设计是实现LIN总线通信的重要环节,在汽车电子行业中对于车载电子控制单元能耗有要求严格,在测试电控单元时会综合给出静态功耗和动态功耗指标,所以对于设计者而言,需根据该电控单元所需完成的功能综合考虑。利用单片机单个通用引脚模拟串行通信模拟出帧头的方式,仅利用单引脚和定时器T0,可以有效节省单片机的硬件资源,充分利用软件实现帧头的发送,适用于车载电子控制单元上连接了较多的其他硬件设备的场合。而利用单片机UART接口引脚输出帧头的方式则可充分利用单片机的硬件资源,大大节省代码空间。适用于车载电子控制单元需要运行较为复杂的其他控制协议,而连接的其他硬件设备较少的场合。研发人员可根据不同的应用场合,采用合适的方式进行LIN总线车载电子控制单元的设计,这两种设计方式为LIN总线车载电子控制单元提供了理论基础和工程技术支撑。