基于STM32的CAN总线通信协议转换设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于STM32的CAN总线通信协议转换设计
阎金
【期刊名称】《《电子世界》》
【年(卷),期】2019(000)023
【总页数】2页(P130-131)
【作者】阎金
【作者单位】山西大众电子信息产业集团有限公司
【正文语种】中文
在通信技术中传统RS485接口和CAN总线的技术得到广泛的使用,但是由于其不同的接口电路以及通信协议,两种通信方式不能直接进行数据报文的传输。
因此本文提出一种基于STM32F103系列单片机的CAN总线通信协议与RS485通信协议转换的电路设计,详细介绍了该设计中的硬件结构以及软件设计中的缓存数据结构,通过实验证明本方案可以用于在不同设备之间的协议转换和数据报文传输。
1.引言
CAN总线通信技术最早由德国Bosch提出,应用在汽车工业领域中的一种分布式控制的串行通信网络(孙韬,刘宗行,吴斌,基于CAN总线构成的分布式通信网络的应用[J].重庆大学学报,2003,26(1):69-72)。
由于CAN总线通信有着传输距离远,组网灵活方便,同时能够有效纠正传输中的信息错误,搭建成本较低等特点,目前成为各种通信领域中不可缺少的通信协议技术(邓婕,CAN总线通信原理分析[J].电子设计工程,2012,20(7):104-107)。
本文介绍一种CAN总线
与传统RS485接口进行通信协议转换的设计,从而满足不同总线设备之间通信协议的相互转换和数据传输。
2.硬件电路设计方案
基于STM32F103的协议转换的硬件设计方案示意图如图1所示,整个系统可以分为4个:CAN总线接口模块,单片机模块,RS485电路接口模块,电源模块。
该系统各模块通过MCU的通用异步串行收发(USART)接口相互连接,最高通信波特率可达4.5Mbits/s,能够满足数据通信的及时性(张莉,基于CAN总线的通信系统设计研究[J].自动化与仪器仪表,2018(4):91-94)。
图1 协议转换硬件设计方案框图
为了降低信息输入和输出噪声及干扰以及保护电路,设计中需要在CAN总线的收发控制器端和RS485接口端采用数字隔离元器件进行电气隔离处理。
2.1 微控制器的选择
本文选用由意法半导体公司研发的STM32F103系列单片机,作为整个系统的中心处理单元。
该系列单片机属于Cortex-M3内核,32位嵌入式ARM微控制器,具有低成本、低功耗、工作稳定,高度集成等特点(勾慧兰,刘光超,基于STM32的最小系统及串口通信的实现[J].工业控制计算机,2012,25(9):30-32)。
STM32F103单片机的工作频率最高可达72MHz,片内Flash最大为512K,能够满足系统处理的实时性。
该芯片不仅提供了丰富的IO外设接口,同时在芯片内部集成了CAN2.0控制器,大大降低了硬件设计电路的复杂度,并以最低的CPU负载实时高效处理相关数据报文。
2.2 电源模块设计
在本系统中采用如图2的外部供电方案。
系统STM32微处理器采用的3.3V工作电压,因此电源设计只需将5V采用线性降压方式,变压芯片选用LT1117-3.3作为电源电压转换芯片。
为了降低对CAN总线收发报文数据的稳定性,系统对于供
给CAN总线电源则需要将输入电源进行隔离后再为CAN总线收发器进行供电,输出5V隔离电源模块采用DJB05S0RE。
为了保证降低输入电压的噪声和纹波,在DC/DC的输入和输出端外加LC滤波电路和旁路去耦电容,从而降低纹波值,确保提供给微处理器的输入电压稳定可靠。
图2 电源模块设计框图
2.3 RS485模块设计
RS485的数据信号采用差分传输方式传输,其传输线上电压+2V~+6V表示逻辑“0”,-2V~-6V表示逻辑“0”(江洋,杨俊峰,宋克柱,基于RS-485长距离数据传输系统设计[J].核电子学与探测技术,2013,33(4):404-406)。
这种传输方式与单片机数据传输的TTL电平并不兼容,因此需要在外围电路加RS485接收器才能与MCU正常进行通信。
本方案中采用Maxim的RS485收发芯片MAX485ESA,该芯片具有低功耗,能够进行摆率限制的数据传输,因此可以降低线路的损耗以及系统的信号反射(李飞,一种RS-485总线发送器的设计[J].微电子学,2014,44(6):803-807)。
硬件电路设计如图3所示。
图3 RS485模块电路设计原理图
在上图左端使用双通道数字隔离芯片ADUM1201实现对输入端的电气隔离。
在数据收发端,在默认没有数据的情况下,三极管处于导通状态,RE为低电平,此时接受器工作。
当发送端有数据时,此时三极管截止,MAX485ESA的DE端为发送使能。
TX发送数据“1”时,AB两端电平为正压差,此时发送端传输数据“1”;同理发送数据“0”时,AB两端电平为负压差,此时传输数据“0”。
此电路设计中,通过三极管的导通和截止实现数据能够自动切换,避免了使能端口与单片机之间相连,降低了设计复杂度。
2.4 CAN总线模块
微控制器STM32F103内部集成了CAN2.0控制器,其接口支持标准CAN2.0A和
CAN2.0B协议。
外部CAN总线驱动器采用TAJ1050,将CAN控制器传输的逻
辑电平信号转换为CAN总线的差分电平信号。
由于STM32系列芯片内部集成了CAN控制器,使得其硬件电路设计变得简单,
只需将数据发送端TX与CAN收发器TAJ1050的发送端相接,接受端RX与
CAN收发器TAJ1050的接受端相接即可。
同RS485通信接口一样,CAN总线需要在输入端进行电气隔离。
硬件电路图如图4所示。
图4 CAN总线模块电路设计原理图
为了避免总线信号的反射,应在终端电路加入120Ω终端电阻。
在实际的工作环
境中,通信设备很容易遭受静电以及雷电等因数影响,严重时甚至可以烧毁接口芯片。
为了提高CAN总线抗干扰能力,在CAN总线终端加入瞬态抑制二极管。
同
时在CAN_H和CAN_L每个传输线上增加自恢复保险丝,防止雷击或静电放电产生瞬时过高的浪涌和脉冲对电缆线造成破坏(王勇,栾风翔,通信信息系统的防浪涌应用探讨[J].科技信息:科学教研,2007(26):71-72)。
同时为了消除总线上的
共模噪声信号干扰,信号输出线采用双绞线传输介质。
3.系统数据结构
本方案系统CPU中的串口通信端没有数据缓存寄存器,为了避免在通信过程中的信息数据积累而得不到有效处理,因此本方案中的CAN总线数据结构采用循环队列形式存储(甘露,嵌入式CAN应用层协议控制器研究与实现[D].西南交通大学,2007)。
当数据缓存存储区内有数据时,读/写指针值不同。
而当数据缓存存储区内为空即没有相关报文数据时,此时读/写指针的值相同。
对于数据缓存区内的数
据结构体定义如下:
typedef struct{
INT32_t uWriteIndex; //写指针
INT32_t uReadIndex; //读指针
INT16_t uLength; //记录缓存深度
CANFRAME *pCanFramBuf //指向数据缓存区首地址
}CANCIBUF;
CAN中断服务程序将接收到的帧数据存入循环队列中,通过取队列中的数据帧将
其放在帧缓存区。
此时CPU根据帧缓存区内的数据区域长度,读取数据报文并传
给微控制器串口USART,完成报文发送。
数据结构图如图5所示。
图5 循环队列数据结构示意图
4.软件程序
本方案的运行程序在KEIL公司的集成开发软件uVision4版本下进行开发。
子程
序包含:数据FIFO缓存初始化,USART串口接收和发送中断子程序,CAN总线接收和发送中断服务程序等。
程序的主要流程如图6所示。
图6 主程序流程图
程序中,开始进行参数的初始化设置如:CAN通信波特率,RS485通信波特率等。
主函数通过while循环,首先判断CAN总线数据缓存区是否存在数据信息,如果检测到缓存区没有数据,则等待串口数据是否发完。
如果检测到缓存区有数据则进入中断服务程序,并将数据区内数据打包成USART格式数据发送到缓存区,再经单片机GPIO端发送到RS485驱动器上。
由于RS485的通信协议仅在物理层定义了相关标准,因此数据帧格式由用户自行定义(朱志伟,周志光,鲍祖尚,RS-485总线通信系统的可靠性措施[J].单片机与嵌入式系统应用,2006(3):68-70)。
最终RS485通信将包含有帧地址信息的数据传输到总线上,与相关设备进行数据
通信。
5.结束语
本文设计了一种基于STM32微控制器的CAN总线通信协议转换,通过STM32
丰富的外围接口设备,大大简化了相关电路的设计,提高了软硬件设计的可靠性。
随着现场总线的不断发展,不同接口设备直接互相通信的需求愈发凸显,采用本文设计的通信协议转换设计,能够实现CAN总线与RS485接口之间的数据传输,满足不同设备之间的信息交换以及数据采集任务,方便升级以及改造现有通信控制网络。