CAN总线与Zigbee无线网络网关的设计与实现
2022-02-17郭琪
郭琪
摘要:该文深入分析了CAN总线技术和ZigBee网络技术的技术特点,采用C8051F043和CC2430的双MCU结构设计了CAN/ZigBee网关,使得 CAN总线和ZigBee网络实现了并行交互数据的功能。CAN/ZigBee网关具有两个接口模块。CAN总线数据通讯使用C语言进行编程,完成通讯数据的发送和接收功能。ZigBee网络接口模块的软件开发以ZigBee协议栈为基础。根据ZigBee的技术特点,软件编写时设计了地址映射表,以解决ZigBee节点地址动态分配给通信带来的问题并设计了缓冲区以保证在两个不同传输速率的网络之间进行数据传输。ZigBee网络接口模块的应用程序完成了ZigBee网络内数据收发、SPI接口通信以及地址映射表的建立和管理。通过验证,该文设计的网关实现了CAN总线与ZigBee无线网络之间的双向数据传输,并且数据传输不受ZigBee节点地址动态分配的影响。
关键词:CAN总线;ZigBee;网关;数据传输;节点地址
中图分类号:TP393 文献标识码:A
文章编号:1009-3044(2022)35-0078-03
1 概述
CAN总线具有非常广泛的应用范围,具有效率高、可靠性强的特点。CAN总线通信采用数字信号代替了模拟信号,不仅节约了连线电缆的成本,而且可以传递更多的设备信息,如设备状态、运行参数、故障信息等。本文设计的CAN/ZigBee网关能够完成CAN总线和ZigBee网络收发通信, CAN总线实现无线通讯的设计目标。在CAN总线应用最为广泛的汽车电子领域,ZigBee技术的接入可以实现对转动机械或发动机内部的数据监测,如汽车的轮胎压力检测等[1]。针对工业控制领域,CAN总线也有CANopen和DeviceNet两个应用层协议并有广泛的实际应用,ZigBee技术的引入同样会为其在特殊情况下的应用带来方便。一个高效可靠的CAN/ZigBee网关能够弥补CAN总线的通讯限制,增加ZigBee无线网络通讯的有效性,为我们的生产、生活带来更多的便利[2]。
2 CAN/ZigBee网关硬件设计方案
本文设计的CAN与ZigBee网关采用的是CC2430和C8051F043的双MCU结构,分别作为CAN协议和ZigBee协议的控制芯片,将两个网络的数据收发以及数据处理等操作分开进行[3]。CAN与ZigBee网关的数据通讯采用双向并行模式,应用两个单片机完成数据交互总体结构,网关由CAN总线和ZigBee接口模块组成。CAN与ZigBee网关结构如图1所示。
CAN总线网络接口模块主要完成CAN总线数据的收发,并与ZigBee网络接口模块实现双向通信。该模块选用的片上系统单片机C8051F043内部集成了Bosch CAN2.0B控制器,构成一个CAN总线节点,实现对总线数据的收发,单片机C8051F043负责接收和发送数据,由芯片TJA1050作为接口,同时该单片机还有晶振电路、电源电路、人机接口电路、USB接口扩展电路和JTAG接口电路。USB接口的扩展选用USB转RS-232桥接芯片CP2102实现,该接口可用于与上位机进行通信,方便后期开发过程中对网关软件进行调试。JTAG接口的扩展是为了后期的软件调试[4]。
ZigBee网络接口模块的主要功能包括ZigBee网络内数据的收发以及与CAN网络接口模块之间的双向通信。ZigBee网络接口模块由单片机执行数据处理,单片机选型为CC2430。该型号是国外公司研制用来解决ZigBee芯片通信的問题。本文选择的单片机型号具有射频收发器和8051控制器,硬件方面具有CSMA/CA扩展功能。要实现无线收发功能,外围晶振器通过射频功能实现数据的接收和发送,并使用非平衡变压器提高接收数据的有效性。CC2430的外围电路包括晶振时钟电路、人机接口电路、复位电路、EEPROM存储器扩展电路以及调试接口电路等。CC2430单片机内部集成的接口可用于后期的软件开发与调试。
3 CAN/ZigBee网关软件设计方案
3.1 地址映射表的设计与实现
依据ZigBee无线通信协议栈的规定,ZigBee网络的数据传输通过PAN网内的短地址实现,该短地址在节点加入网络的时候由协调器节点进行分配[5-6]。ZigBee可以采用两种地址分配技术,分别是:
(1)Distributed Address Assignment Mechanism分布式地址分配技术
(2)Stochastic Address Assignment Mechanism随机地址分配技术
无论采用哪一种地址分配技术,ZigBee子节点每次加入网络分配到的短地址都不同。因此,在ZigBee网络中除了协调器的短地址固定为0x0000,其他节点的地址都不固定。这就导致出现类似下面的问题:
(1)ZigBee网络中,节点A的短地址为0x1699,节点B的短地址为0x1697,两个节点分别利用短地址在网络中进行通信。
(2)ZigBee网络重建,节点A和节点B再次加入网络并被分配短地址,节点A的短地址为0x1697,节点B的短地址为0x1699。
这样,节点A和节点B在网络中的通信就会因前后两次地址的不同而出现问题。
为了使ZigBee网络中向指定节点的信息发送正确,在网关软件设计中利用节点的长地址、短地址和节点代码建立一种映射关系,以实现ZigBee节点短地址变化后网络通信的正确进行。在协议转换中所建立的地址映射关系如表1所示。
作为现场总线网络中接收数据的报文,网关之后对接收到的报文进行解包、有效数据提取等操作,并将其重新打包发送至ZigBee网络。
3.2 CAN总线接口模块软件设计
CAN总线接口模块的程序设计利用C51语言编程实现,编程使用Silicon Laboratories IDE集成开发环境。该软件具有良好的人机界面,可以生成高效的目标代码。
3.2.1 CAN总线接口模块初始化程序
初始化通过调用单片机配置子程序config()、CAN初始化子程序canini()和SPI配置子程序spi_cfg(uchar spicfg,uchar spickr,uchar spicn)完成。单片机配置子程序中完成对C8051F043内部看门狗定时器的设置、I/O口交叉配置及系统工作时钟设置。SPI配置子程序完成SPI通信的时钟相位和极性的选择、串行时钟的设置以及串行通信中使用到的INT0和SPI中断的设置。
所有CAN消息对象初始化完成后,对寄存器CAN Control Register和Bit TimingRegister(波特率控制寄存器)赋值,寄存器CAN Control Register用来设置CAN的工作模式,Bit TimingRegister设置CAN的工作时钟频率。
3.2.2 CAN总线接口模块数据收发程序
CAN接口模块的数据收发分两部分完成:CAN总线数据的接收与转发和SPI数据的接收与转发。现场总线通过中断数据的方式进行数据的接收。网关识别到CAN报文后,将其存入接收缓冲区,再从缓冲区中读出数据进行SPI转发。
SPI数据的接收与转发通过外部中断INT0的中断服务程序完成。由于C8051F043作为SPI主机工作,SPI接口必须由主机启动进行数据收发。CC2430向C8051F043发送数据时,通过I/O口给C8051F043一个中断信号,再由C8051F043启动数据传输过程。
3.3 ZigBee网络接口模块软件设计
ZigBee网络接口模块软件设计采用协议栈的技术,通过参考标准的OSI/ISO网络模型,设计协议栈的网络结构。OSI/ISO网络模型分为七层网络构架。通过优化OSI/ISO网络模型,修改并重新命名了网络模型,协议栈的每一层网络完成不同的任务,任意两层之间通过网络接口为上一层提供服务。
3.3.1 ZigBee网络接口模块初始化程序
ZigBee接口模块的初始化程序主要完成对芯片寄存器、芯片硬件接口、液晶屏和协议栈的初始化操作。
初始化程序段执行后,网关即完成对CC2430内外部资源及的配置,然后使用aplFormNetwork()函数搭建网络。网络搭建完成后,执行程序进入循环模式,来完成ZigBee网络通信功能。
3.3.2 ZigBee网络接口模块数据收发程序
ZigBee接口模块的数据收发程序可分为SPI数据收发和ZigBee数据收发两部分。SPI接口的数据接收以中断方式进行。中断服务程序每次将收到的数据存入缓冲区,收到完整的SPI数据包后W_Point指向缓冲区下一数据块。SPI接口的数据发送通过I/O口来控制C8051F043单片机实现。
ZigBee数据的收发通过协议栈中特定函数完成。协议栈运行过程中,程序的循环执行部分会首先选取状态机中的通讯数据,检查能否接收ZigBee数据,收到相关数据后调用ZigBee接收子程序。
4 网关通信的试验验证
4.1 试验方案设计
本文设计的CAN/ZigBee网关所要实现的是在CAN网络与ZigBee网络之间的双向通信,以验证本文设计的网关方案在实现协议转换方面的可行性。根据网关的设计原理,试验中ZigBee采用星形网络拓扑,同时在星形网络内有3个RFD节点作为网关的子节点。CAN总线网络设计采用2+1的模式,即两个节点和一个物理总线,网关作为总线上的一个节点,另一个设计为具有收发能力的CAN节点。验证过程采用的试验网络如图2所示。其中构成CAN节点的主要芯片为C8051F043单片机和CAN收发器TJA1050,ZigBee节点采用的芯片为无线单片机CC2430。
4.2 试验结果分析
进行网关通讯性能测试之前,要利用软件SmartRF®04 Flash Programmer对ZigBee节点写入不同的物理地址,之后按前面所述的实验步骤 1进行ZigBee星形网络的组网过程。ZigBee网络组建后,利用CAN节点和ZigBee终端节点通过网关进行相互的数据发送。CAN节点的数据检验是经过查看Silicon Laboratories IDE的 CAN相关寄存器实现,CAN节点接收到数据0xAA445566778899F1,与ZigBee节点发送的数据一致。通过查看调试软件中的数据,ZigBee节点接收到数据0xA10xA20x150x160x170x18,与CAN节点发送的数据相同。
试验结果表明,CAN/ZigBee网关具有接收和发送节点数据的功能,同时,网关的协议转换完全正确,不存在数据转换错误,下一步将验证ZigBee网络重组后,节点短地址的重新分配是否对网关的工作造成影响。通过网关通信试验可以看出,CAN/ZigBee网关能够完成数据传输过程中的协议转换,成功解决不同网络间数据转换问题,处理因不同网络节点地址分配的问题,可实现数据的100%准确转换,消除潜在影响。
5 结论
本文设计的CAN/ZigBee网关具有高效的数据传输能力,能同时发送和接收相关数据,解决了协议之间数据转换的问题。由于研究时间限制,本文采用简化方案对CAN/ZigBee网关进行设计。在后期的工作中,应对网关软件程序进一步优化,提高网关数据传输的性能和通信可靠性,使其完全满足实际应用的需要。
参考文献:
[1] 罗回彬,吴方.基于ZigBee的无线传感网络网关的研究与设计[J].电子设计工程,2017,25(12):182-185.
[2] 姜有光,杜亚江,齐金平,等.嵌入式无线传感网络网关设计与远程维护[J].测控技术,2017,36(3):94-97,106.
[3] 陈可伟,张金成,王钰,等.基于Modbus协议的无线传感器网络网关设计[J].测控技术,2016,35(2):99-103.
[4] 邵芹文.无线传感器网络与无线局域网络网关设计与应用[D].杭州:浙江工业大学,2015.
[5] 梁宗保,李鹏.基于ZigBee技术的无线传感器网络网关设计与实现[J].计算机与现代化,2013(6):133-137.
[6] 李佳.基于ZigBee和GPRS無线传感器网络网关的设计与实现[D].南京:南京邮电大学,2013.
【通联编辑:代影】