在工业物联网时代,CAN是一种非常普遍的通信技术。本文将给大家介绍如何使用EPCM3568A-LI边缘计算控制器与上位机实现CAN通信范例。
EPCM3568A-LI产品简介
EPCM3568A-LI 采用RK3568四核处理器,主频高达2.0GHz,内置1TOPs NPU,作为边缘计算网关,EPCM3568A-LI以其强大的计算能力,轻松高效处理数据,为用户带来更加便捷、智能的能源管理体验。
前期准备
1. 软件方面
ZCANPRO.exe,下载地址:
https://manual.zlg.cn/web/#/59/2490
下载EPCM3568A-LI开发环境,下载地址:
https://manual.zlg.cn/web/#/269/10177
安装好虚拟机的电脑;MobaXterm虚拟终端。
2. 硬件方面
EPCM3568A-LI小型边缘计算网关;
网线1根 / 交换机1个;
USBCAN-8E-U1个。
CAN概述
CAN(Controller Area Network,控制器局域网)是一种高可靠性的串行通信协议,专为汽车和工业控制等关键领域设计。它以高可靠性、实时性和出色的抗干扰能力为特点,非常适合在需要精确数据传输的控制系统中使用。
图1 EPCM3568A-LI的CAN接口
USBCAN-8E-U介绍
USBCAN-8E-U是致远电子开发的一款基于Linux操作系统的高性能CAN接口卡,其兼容USB2.0全速总线规范,集成1~4路CAN-bus接口,CAN通道集成独立的电气隔离保护电路。接口卡使PC通过USB端口连接至CAN网络,构成一个CAN-bus控制节点。
图2 USBCAN-8E-U
USBCAN-8E-U高性能CAN接口卡是CAN-bus产品开发、CAN-bus数据分析的强大工具;同时、即插即用等特点,也是便携式系统用户的最佳选择。USBCAN-8E-U接口卡上自带电气隔离模块,使接口卡避免由于地环流的损坏,增强系统在恶劣环境中使用的可靠性。
USBCAN-8E-U高性能CAN接口卡支持Win2000/XP/7/8/10等操作系统,也支持Linux的操作系统。
在ZLG产品用户手册上有USBCAN-8E-U的具体介绍和用法说明,用户可以自行查阅,手册地址: https://manual.zlg.cn/web/#/59/2481
EPCM3568A-LI与上位机的CAN通讯实验
本节,我们将利用EPCM3568A-LI的CAN接口(图1)和USBCAN-8E-U(图2),配合上位机模拟CAN通信。操作流程如下:
首先为EPCM3568A-LI接通电源,并通过网线将其与笔记本连接至同一交换机。待系统启动后,使用MobaXterm的SSH登录,IP:192.168.1.136,用户名:zlgmcu,密码:zlgmcu,如图3。
图3 SSH登录EPCM3568A-LI
1. 初始化EPCM3568A-LI的CAN接口
在使用Socket CAN之前,需要先设置CAN的波特率,波特率为1000kbps,并激活CAN网络接口。执行如下指令:
sudo ifconfig can0 down
sudo ip link set can0 type can bitrate 1000000
sudo ifconfig can0 up
完成初始化后,输入如下指令,可以看到如图4所示
sudo ifconfig can0
图4 can0设备节点
2. 安装CAN 通信测试工具 can-utils
在确保EPCM3568A-LI能够上网的情况下,执行下面指令,安装CAN 通信测试工具 canutils:
sudo apt install can-utils
安装完后输入sudo can后按TAB键发现多了几个工具,如图5所示:
图5 can-utils命令行可执行工具
canutils 工具包内含 5 个独立的程序:canconfig、candump、canecho、cansend、cansequence。这几个程序的功能简述如下:
canbusload:测量CAN总线的负载情况,帮助用户评估CAN总线的性能和稳定性。
canfdtest:测试CAN Flexible Data Rate(CAN FD)总线的工具,用于发送和接收CAN FD数据帧。
canplayer:回放CAN总线数据,模拟将保存的CAN数据文件发送到CAN总线。
cansend:往指定的 CAN 总线接口发送指定的数据。
candump:捕获CAN总线上的数据帧,并将其显示在终端上。
cangen:生成CAN总线数据帧,模拟发送特定的CAN数据。
3. EPCM3568A-LI和USBCAN-8E-U接线
接下来看EPCM3568A-LI的CAN接口,如下所示:
图6 EPCM3568A-LI的CAN接口
USBCAN-8E-U接口卡集成了1~4路CAN通道,可以连接一个CAN-bus网络或者CAN-bus接口的设备,其CAN-bus通道采用标准公头DB9座子引出。DB9的引脚定义如图7所示。
图7 DB9 插座的管脚信号定义
用户可以通过选配的DB9OPEN5转换器,将DB9插座的CAN-bus 信号转换至易于连接的5引脚OPEN5连接器,接口说明见图8。
图8 DB9OPEN5转换器信号定义
CAN-Bus通讯连接如图9所示。
图9 CAN-Bus通讯连接
所以我们将EPCM3568A-LI和USBCAN-8E-U的H、L两两对接,如图10,然后开始实验。
图10 EPCM3568A-LI和USBCAN-8E-U接线
4. 收发实验
4.1 设置上位机ZCANPRO
如图11,启动通道0,并且将波特率设置为1000kbps。
图11 设置上位机ZCANPRO
4.2 EPCM3568A-LI发送CAN数据帧
首先在EPCM3568A-LI执行下面指令查看CAN0的负载情况,如图12所示
sudo canbusload can0@1000000 -r -t -b -c
图12 使用canbusload查看can0负载
可以看到当前CAN0上没有负载。
接下来,EPCM3568A-LI发送CAN数据帧,上位机接收,在ZCANPRO上显示收到的数据。EPCM3568A-LI发送11223344,帧ID为123,输入下面指令:
cansend can0 123#11223344
上位机收到数据11223344,帧ID来自123,如图13所示:
图13 上位机收到EPCM3568A-LI发送的CAN数据帧
4.3 EPCM3568A-LI接收CAN数据帧
接下来,上位机发送CAN数据帧,EPCM3568A-LI接收并显示在终端上。EPCM3568A-LI设置成接收数据帧模式,输入下面指令:
candump -ta can0 &
在上位机使用ZCANPRO发送数据00 11 22 33 44 55 66 77,如图14所示:
图14 使用ZCANPRO给EPCM3568A-LI发送CAN数据帧
如图,EPCM3568A-LI接收到00 11 22 33 44 55 66 77,来自帧ID:100,如图15所示:
图15 EPCM3568A-LI接收到ZCANPRO发送的数据帧
4.4 使用cangen循环发送CAN数据帧
我们也可以用cangen,这将在CAN0接口上生成8字节数据长度的CAN帧,并且每1000毫秒生成一帧。此外,您也可以根据需要调整其他选项来满足您的测试需求。
cangen -g 1000 -D r can0
这是EPCM3568A-LI循环发送的数据,如图16所示:
图16 在EPCM3568A-LI使用cangen循环发送CAN数据帧
这是上位机接收到的数据,如图17所示:
图17 上位机收到EPCM3568A-LI使用cangen循环发送的CAN数据帧从图16和图17中可以看到,EPCM3568A-LI发出的CAN数据帧与上位机收到的数据帧是一样的,本实验实现了EPCM3568A-LI与上位机的CAN通信。