APP下载

异构CAN 总线节点通信系统设计

2022-08-15李树凤王志琳刘新月

天津职业技术师范大学学报 2022年2期
关键词:波特率收发器总线

郝 彬,李树凤,王志琳,刘新月

(1.天津职业技术师范大学电子工程学院,天津 300222;2.科信达通(天津) 科技发展有限公司,天津 300101)

CAN(controller area network)[1]总线获得了业界的认可,其应用场景也从汽车领域[2-3]延伸至工业自动化[4]、船舶、医疗设备[5]、工业设备[6-7]等领域,用途十分广泛。在我国北方,大棚种植瓜果、蔬菜是广大农民发展多种经营、增加经济收入的重要手段。在大棚技术[8]管理方面涉及的内容很多,主要有光照、温度、病虫害、防霜冻等。在北方的冬季,气温较低,为了保持大棚内的温度,防止冻害,往往要在塑料薄膜上覆盖一层或多层草苫,这样虽可起到保温的作用,但会影响光照作用。而有时虽然不需要覆盖草苫,但是受到北方雾霾、阴雪天气的影响,也会影响大棚内作物的采光种植,所以为大棚内植物提供充足的光照是一项重要的技术问题。为实现大棚内照明,目前大多采用LED 照明光源[9],在大棚内进行多点布设。针对各LED照明节点,本文研究了基于CAN 总线互联的多照明节点的连接和控制方式,并分析了采用不同控制芯片的CAN 照明节点的互联问题。

1 系统设计

CAN 总线的物理连接只需2 根线,常记为CAN_H和CAN_L,通过差分信号进行传输。CAN 总线网络是一种真正的多主机网络,其网络拓扑如图1 所示。

图1 CAN 通信系统拓扑图

在总线处于空闲状态时,任何一个节点单元都可以申请成为主机,向总线发送消息。最先访问总线的节点单元可以获得总线的控制权;多个节点单元同时尝试获取总线的控制权时,将发生仲裁事件,只有优先级高的节点单元能获得总线的控制权。

CAN 总线的通信速率和总线长度有关,在总线长度小于40 m 的场合中,数据传输速率可以达到1 Mbps,而即使总线长度达到1 000 m,数据传输速度仍可达到50 kbps,明显优于RS232 和RS485 等通信方式。CAN 总线上的节点数理论上没有上限,但在实际中受到总线上的时延以及电气负载的限制,这种传输距离完全可以满足大棚内的布线要求。

由图1 可知,每个通信节点由微控制器、CAN 控制器、CAN 收发器3 部分组成。在构造CAN 总线通信节点时,可以选择不同厂家的微控制器、CAN 控制器和CAN 收发器。目前,市场上具有代表性的CAN 控制器有恩智浦公司的SJA1000,在CAN 收发器方面,有恩智浦公司的PCA82C250 和TJA1050。为提升产品的综合性能,很多微控制器厂商提供集成了CAN 控制器的MCU 产品,如意法半导体(ST)公司的STM32F103系列的32 位微控制器,恩智浦公司的P87C591 系列的8 位单片机等。

在一个CAN 总线网络中采用完全一致的CAN 节点设计无疑是最为方便的方案,但由于功能、成本或其他方面因素的考虑,在同一个CAN 总线网络上,各CAN 节点会采用不同的实现方案。这时就必须解决异构CAN 节点的互联互通问题。本文以照明控制应用为案例,从实用角度出发,阐述异构CAN 节点间实现互联互通时所涉及的主要技术问题。

2 节点电路实现方式

在本文设计的照明控制系统中,CAN 网络由一个主节点和多个从节点组成。主节点负责多点数据采集和信息显示,采用意法半导体(ST)的32 位STM32F103作为控制器[10-11],STM32F103 微控制器内置了bx(basic extended)CAN 控制器,集成度高。各从节点主要功能是负责区域内的照度信号检测,以及控制一组LED 照明灯的光照强度调节。出于项目的继承性和成本方面的考虑,各子节点采用宏晶科技(STC)的STC89C52RC的8 位51 单片机作为节点控制器,实现节点控制和CAN 通信功能。相应的节点框图如图2 所示。

图2 CAN 通信系统拓扑图

2.1 STM32控制的CAN节点

在硬件上,STM32F103 内部集成一个bxCAN 控制器。bxCAN 控制器支持2.0A 和2.0B 的CAN 协议,只需外接1 个CAN 收发器TJA1050,即可满足CAN 通信的硬件要求。硬件电路如图3 所示。

图3 STM32F103 控制的CAN 节点电路图

由图3 可知,STM32F103 的bxCAN 协议控制器的发送引脚(CAN_TX)为PA12,接收引脚(CAN_RX)为PA11,与CAN 收发器TJA1050 对应的串行数据输出TXD 和串行数据输入RXD 相连。TJA1050 通过其2 个有差动接收和发送能力的总线终端CANH 和CANL 连接到CAN 总线网络。

2.2 STC89C52RC控制的CAN节点

STC89C52RC 是一款功能单一的传统8 位51单片机,如要实现CAN 总线通信功能需外扩独立的CAN 总线控制器和收发器,如图2 所示。在实际应用中,CAN 控制器选用SJA1000[12],收发器采用PCA82C250,二者均为恩智浦公司的产品。SJA1000 是一款独立的CAN 控制器,支持CAN2.0 协议的新特性。其地址/数据复用总线AD0-AD7 与STSTC89C52RC的P0 口相连,做为单片机的外部存储器扩展应用。ALE、RD、WR 引脚与单片机的对应引脚连接,控制读写数据操作,完成数据和地址通信。片选端CS 连接到单片机的P2.0,片选信号低电平有效。复位端RST 由单片机的P2.3 控制。SJA1000 的16 脚MODE 端接高电平选择INTEL 模式。SJA1000 的16 脚是中断信号输出,接到STSTC89C52RC 的INT1,使单片机以中断方式接收CAN 总线的数据。XTAL1 和XTAL2 共2 个引脚接16 MHz 的晶体,为SJA1000 数据的发送以及校验等功能提供时钟。

SJA1000 的TX0、RX0 连接到CAN 收发器PCA82-C250 的对应引脚,数据帧就可以传送到总线上。由于控制器和收发器都需要外扩,故与STM32 相比,STC89C52RC 实现的CAN 节点硬件电路要复杂一些。

3 节点波特率

在完成了硬件设计后,具体通信功能要依靠软件来实现。同其他串行通信方式一样,CAN 总线在通信时,各节点要具有相同的波特率。

3.1 STM32控制的CAN节点波特率设置

CAN 总线的数据传输速率由波特率决定,它是指发送单元在非同步状态下发送的每秒位数,也称为位速率。标准的CAN 协议的一个位可分为4 个段:同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2)。而每个段又由若干个被称为最小时间单位tq构成。STM32 将传播时间段和相位缓冲段1 合并为1 个PSB1。同步段的时长为1 个tq,相位缓冲段1 和相位缓冲段2 的时长为tq的整数倍。正常的位时间是上述3 段的时长之和。STM32 的位时序如图4所示。

图4 bxCAN 的位时序图

通信波特率是正常位时间的倒数。参见文献[6],正常位时间=1×tq+tBS1+tBS2,其中,tq=(BRP[9 ∶0]+1)×tPCLK,tBS1=tq×(TS1[3 ∶1]+1),tBS2=tq×(TS2[2 ∶0]+1),tPCLK是APB1 总线的时钟周期。BRP [9 ∶0],TS1[3 ∶1],TS2[2 ∶0]均在CAN 位时间寄存器(CAN_BTR)中定义。通信波特率计算式为

若取APB1 的时钟频率为36 MHz,BRP[9 ∶0] =47,TS1[3 ∶1]=2,TS2[2 ∶0]=1,则可计算出波特率为125 kbps,即为应用实例使用的波特率。

3.2 STC89C52RC节点波特率设置

由51 单片机控制的CAN 节点是通过STC89C52RC设置CAN 控制器SJA1000 的相应寄存器来实现的。在SJA1000 中CAN 总线的位时间采用了与STM32 相类似的描述方式,因是不同厂家的产品,故使用了不同的称谓。在SJA1000 中,位时间的最小单位称为CAN 系统时钟周期,用Tscl表示,对应STM32 中的tq。每一位也是由同步段、时间段1、时间段2 组成,分别用Tsyncseg、Tseg1、Tseg2表示,与STM32 中的同步段、相位缓冲段1 和相位缓冲段2 对应。

由于CPU 的架构不同,具体的寄存器设置方式也不同,这是实现CAN 总线通信的关键技术细节。CAN系统时钟周期为

式中:BRP.5 是总线定时器(BTR0)中BRP.5 位的设置状态,只有0 或1 这2 种可能;第BRP.4 位、BRP.3 位、BRP.2 位、BRP.1 位和BRP.0 位的设置状态一并代入式(2)计算;Tclk是SJA1000 外部晶振的频率周期,使用16 M 外部晶振。

在SJA1000 中,3 个段的计算式为

式(4)中,Tseg1.3、Tseg1.2、Tseg1.1、Tseg1.0 是总线定时器(BTR1)中对应的位设置,式(5)中Tseg2.2、Tseg2.1、Tseg2.0也是总线定时器(BTR1)中对应的位设置。

在SJA1000 中

在应用实例中,设置总线定时器0 预设值0x03,即BRP0=0x03,即BRP.1 和BRP.0 为1,其余位为0。由式(2)可计算出CAN 系统时钟周期Tscl=2×(2+1+1)/16 M。

总线定时器(BTR1)的设置值0x1C,即BTR1 =0x1C,即Tseg1.3=1,Tseg1.2=1,Tseg2.0=1,其他位为0,相应可以计算出Tseg1= Tscl×(8 + 4 + 1)=13Tscl,Tseg2=Tscl×(1+1)=2Tscl,将其代入式(6)得

位时间=Tsyncseg+Tseg1+Tseg2=16×Tscl

波特率=1/(16×Tscl)=125 kbps

与前述STM32 设置的通信速率保持一致。

STC89C52RC 对SJA1000 的访问是按照外部存储器方式来实现的,所以访问的基地址即为0xFE00,地址范围0xFE00~0xFFFF,采用宏定义语句#define SJA_BASE_ADR0xFE00,定义该基地址后,对SJA1000 的存储器的方式就是在该基地址基础上加上相应的偏移量,如发送缓冲区的第1 个字节位于第17 个寄存器,其地址为#defineSJA_RBSR0XBYTE[SJA_BASE_ADR+0x10]。

针对STC89C52RC 控制节点按照上述波特率设置方式对SJA1000 进行软件编程,保证主、从节点使用的波特率相同,即可实现51 单片机控制的各个从节点与STM32 控制的主节点的数据通信,从而构建基于CAN 总线的多节点照明系统。

4 验证系统搭建

依据上述方案,项目组搭建了1 个主节点和3 个从节点的演示验证系统。主控节点采用STM32F103RBT6芯片,如图5(a)所示,从节点采用STC89C52RC 单片机控制,由于与从节点配套的CAN 控制器SJA1000是一个单独芯片,故采用了模块化设计,单独设计了一个小印制板,采用插卡式安装,如图5(b)所示。

图5 演示验证系统

这种设计方案既方便维修,又利于系统的升级换代。如在系统小型化设计时,需要将插装的单片机芯片改为贴片设计,只需重新设计上部的主控板。演示验证系统中,主、从节点CAN 总线通信波特率均设置为125 kbps,可实现主节点对从节点的光照强度控制及各从节点的状态轮询。为降低节点成本,照明节点采用价格较低的LED 灯头作为照明光源,LED 灯头的供电驱动为自主设计的LED 驱动板,驱动芯片使用AMC7150,而照明灯头直接采购市场上现成的产品。

5 结 语

本文设计实现了采用不同主控芯片,通过CAN 总线通信,实现多LED 照明节点控制系统。主节点功能为多点数据采集和信息显示,采用意法半导体(ST)的32 位STM32F103 作为控制器,内置了bxCAN 控制器。从节点采用低价的STC89C52RC 单片机,需外扩款独立的CAN 控制器SJA1000。根据上述方案,本文搭建1 个主节点和3 个从节点的演示验证系统。所有节点CAN 总线通信波特率均设置为125 kbps,可实现节点间通信控制。系统采用的异构CAN 节点通信技术,也可用于其他通信网络中,具有一定的应用推广价值。

猜你喜欢

波特率收发器总线
UART 波特率检测电路的FPGA 设计算法与实现
CAN 总线波特率自适应程序设计
光纤收发器故障排除经验谈
一种基于CAN总线的误码测试方法
波特率自适应的CAN驱动在嵌入式Linux下的实现①
Virtex5 FPGA GTP_DUAL硬核两个收发器独立使用的实现
详解lAP15W4K58S4单片机的串行口通信
CAN总线并发通信时下位机应用软件设计
基于CAN总线的水下通信系统设计
宝马F02车总线系统