*基金项目:西安工程大学研究生创新基金资助(chx100813)。
STM32的CAN 总线中继器设计及应用*潘铜,叶小荣,张娜,范建峰(西安工程大学电子信息学院,西安710048)摘要:CA N 中继器是系统组网的关键,通过中继器可以扩展节点的数量和实现不同波特率之间的通信。
本文充分利用ST M 32F105内部集成双bxCAN 控制器的特性,设计出一款基于ST M 32的单芯片CAN 总线中继器,并将其应用到齐玛印花机上。
实践证明该方法有效可行,不仅实现了齐玛印花机的改造,还降低了系统设备的成本。
关键词:CA N 总线;中继器;ST M 32F105;齐玛印花机中图分类号:T P336 文献标识码:ADesign an d Application of CAN Bus Repeater Based on STM32Pan Tong ,Ye Xiaorong ,Zhang Na ,Fan Jianfeng(Elect ronic Information College ,Xi 'an Polytechnic University ,Xi an 710048,China )Abstract :CAN repeater is the key to netw orking .The repeater can expand the num ber of nodes and realize communication betw een dif -ferent baud rates .M aking full use of internal integrated dual CAN controllers of S TM 32f105,the paper designs a single -chip CAN bus repeater based on STM32.The repeater can be applied to the Zimmer printing machine .The result proves that the method is effective and feasible ,not only realizing the transformation of Zimmer printing machine but also reducing the cost of system equipment .Key words :CAN bus ;repeater ;STM32F105;Zimmer printing machine引 言CAN 总线是一种多主方式的串行通信总线,具有优良的稳定性、实时性、远程通信能力以及超强的硬件CRC 纠错等特性;CAN 总线技术的应用不再仅限于汽车行业,而是扩展到了机械、纺织、控制等行业,并被公认为是最有前途的现场总线之一。
然而由于受制于CAN 收发器,CAN 总线通信距离和网络中节点数被分别限制在10km 和110个之内。
但是在稍大型的CAN 总线系统中,这往往是不够的,这时就需要用CAN 总线中继器对CAN 总线网络进行扩展。
CAN 中继器是系统组网的关键技术设备之一,使用中继器可以提高网络设计的灵活性,并且通过中继器还可以连接两个不同波特率的CAN 总线网络;在两个网络间进行数据转发,极大地扩展其使用范围。
基于此,本文设计出一款基于ST M 32的CA N 总线中继器,并将其应用到齐玛印花机上,完成圆网印花机通信系统的工程改造。
1 系统整体方案及硬件实现以往的CAN 中继器设计大多采用M CU 加CAN 控制器的双芯片或多芯片解决方案。
例如,参考文献[1]使用1片M CU 加2路CAN 控制器的结构实现中继器;参考文献[2]使用双M CU 结构设计CA N 总线中继器;参考文献[3]使用独立双CAN 控制器作为2路CAN 接口的控制器来设计CA N 中继器。
上述方案电路复杂,MCU 与CA N 控制器通过外部总线连接,数据吞吐速度慢,整体可靠性也比较差。
意法半导体的STM 32是以A RM Cortex -M 3为内核的32位微处理器,主频可高达72M H z ,内置Flash 和SRAM ,其容量可分别高达512KB 和64K B ;内部集成双bxCA N 控制器。
它支持CAN 协议V2.0A 和V2.0B ,波特率最高可达1M b /s ,具有3个发送邮箱和2个3级深度的FIFO ,能够以最小的CPU 负荷来高效处理大量收到的报文。
基于此,选用STM 32F105作为主控制器,设计出一款基于STM 32的CAN 总线中继器。
其整体方案如图1所示。
由于STM 32F105内部集成了双路CA N 控制器,CA N 中继器的节点电路变得十分简单,其硬件电路如图图1 系统整体方案2所示。
以往的节点电路,为了降低生产现场的抗干扰能力,保证中继器工作的可靠性,都采用多重的抗干扰措施。
例如,大部分的节点电路都是采用在CAN 控制器和收发器之间加入光电隔离器6N137来实现CAN 节点之间的电气隔离,采用外加DC /DC 电源模块的方法切断系统电源的干扰。
同样着眼于提高系统的抗干扰能力和可靠性的问题,本设计中一反常规的设计方法,直接采用广州致远电子有限公司生产的CA N 通用收发器CTM 8251。
图2CAN 节点电路CT M 8251是一款带隔离的通用CA N 收发器芯片,该芯片内部集成了所有必需的CAN 隔离及CAN 收发器件,这些都被集成在不到3cm 2的芯片上。
芯片的主要功能是将CA N 控制器的逻辑电平转换为CAN 总线的差分电平,并且具有DC 2500V 的隔离功能。
该芯片符合ISO 11898标准,因此,它可以和其他遵从ISO 11898标准的CAN 收发器产品互操作。
实践证明采用CTM 8251不仅使系统真正与外接隔离开,抑制了干扰的串入提高系统的可靠性,简化了CAN 节点外围电路的复杂度,还降低了成本,有较高的性价比。
图2中120Ψ为可选用的终端匹配电阻,如果网络中已经有一对匹配电阻,则不使用该电阻。
另外,电路中设计有相应的拨码开关电路用于CAN 网络的ID 标志和设置相应的波特率。
2 中继器的软件实现CAN 中继器的主要任务是在两个网络中进行数据的过滤和转发。
其软件主要包括以下模块:初始化模块、数据发送模块和接收模块等。
2.1 初始化模块CA N 初始化直接关系到CAN 控制器能否正常工作,在很多情况下,软件不能正常工作并不是CAN 的收发程序有问题,往往是初始化配置不正确造成的。
ST M 32的CA N 初始化主要包括CAN 寄存器初始化、CAN 单元初始化(包括CA N 模式和波特率的设置)、CAN 过滤器的初始化。
由于STM 32开发商提供了大量的固件库函数,所以只需在调用的时间作出相应的设置即可。
初始化子程序如下所示:①CA N 单元初始化子程序。
……CAN InitSt ructure .CAN TTCM =DISABLE ;CAN InitSt ructure .CAN ABOM =DISABLE ;CAN InitSt ructure .CAN AWUM =DISABLE ;CAN InitSt ructure .CAN NART =DISABLE ;CAN InitSt ructure .CAN RFLM =DISABLE ;CAN InitSt ructure .CAN TXFP =DISABLE ;CAN InitSt ructure .CAN Mode =CAN Mode Normal ;//CAN 工作模式的选择CAN InitSt ructure .CAN SJW =CAN SJW 1tq ;CAN InitSt ructure .CAN BS1=CAN BS1 8tq ;CAN InitSt ructure .CAN BS2=CAN BS2 7tq ;CAN InitSt ructure .CAN Prescaler =1;CAN Init (CAN1,&CAN InitS tructure );CAN Init (CAN2,&CAN InitS tructure );……在该初始化子程序中最关键的环节是怎么设置CAN 的波特率,ST M 32数据手册给出了波特率的计算公式:波特率=11×t q +t BS 1+t BS2其中t q 为CA N 时钟周期。
如上述CA N 单元初始化子程序中:SJW =t q ,BS1=8t q ,BS2=7t q ,STM 32的CAN 时钟有A PB1提供。
假设系统时钟为72M Hz ,A PB1为系统时钟的9分频,结合初始化子程序,CA N P rescaler =1,带入波特率计算公式即可求的其波特率为500kb /s 。
②CA N 过滤器的初始化子程序。
……CAN FilterInitStructure .CAN FilterNumber =0;CAN FilterInitS tructure .CAN FilterMode =CAN FilterMode IdMask ;CAN FilterInitS tructure .CAN FilterScale =CAN FilterScale 32bit ;CAN FilterInitS tructure .CAN FilterIdHigh =(0x0000 (CAN ID <<1));CAN FilterInitStructure .CAN FilterIdLow =0x0000;CAN FilterInitStructure .CAN FilterM askIdHigh =0x0FE0;CAN FilterInitStructure .CAN FilterM askIdLow =0x0000;CAN FilterInitStructure.CAN FilterFIFOAssignment=0;CAN FilterInitStructure.CAN FilterActivation=ENABLE;CAN FilterInit(&CAN FilterInitStructure);CAN过滤器设置的得当与否是CAN是否能够成功接收信息的关键,尤其在过滤器组位宽和模式设计上,如何将节点的ID号准确地映射到过滤器组位宽设置寄存器上是过滤器的核心。
为了过滤出一组标识符,设置过滤器工作在屏蔽位模式下,对标识符的任何一位采用“必须匹配”或“不用关心”的原则处理。
2.2 数据发送模块[4]中继器的任务之一就是实现报文的转发。
ST M32F105内部集成了双bxCAN控制器,它包括3个发送邮箱和2个3级深度的FIFO。