CAN 转UART/USB 模块

1. 产品简介

这是一款兼容3.3V与5V的CAN转UART及USB1.0通讯模块,它兼容CAN2.0协议,它内置了SLCAN指令,你无需关注复杂的CAN协议,发送AT指令即可进行CAN数据的收发以及功能配置。

该模块不仅引出了UART接口,还集成了USB接口,当你在调试数据的时候,不需要进行USB与UART之间的转换。使用USB与电脑连接,通过串口助手可方便的进行数据的调试。这个功能在你将模块部署在现场的时候调试非常方便。

该模块可设置的CAN波特率范围为25K-1Mbps,最高支持速率2毫秒/次,每秒500包数据不丢包。稳定可靠的通讯能大幅度的降低你的项目出错率以及项目调试时间。

同时,该模块也板载了数据通信指示灯与120Ω跳帽。这些设计细节能有利于提高你的项目开发和验证效率。

2. 产品特性

3. 应用场景

4. 术语描述

CAN

这是一种ISO国际标准化的串行通信协议。

CAN网络由CAN节点和CAN总线构成,具有通信实时性强、可靠性高、多主方式工作、错误检测、故障封闭等特点,其总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线。

CAN总线是一种分布式的控制总线,采用差分电压传输数据,由CAN_H和CAN_L两条信号线组成。其中总线具有隐性电平(逻辑1)和显性电平(逻辑0)这两种逻辑电平。当CAN_H和CAN_L之间的电压差小于0.5V时,表示逻辑值1,为隐性电平,当CAN_H和CAN_L之间的电压差大于0.9V时,表示逻辑值0,为显性电平。这种差分传输方式能增强信号的抗干扰能力,抑制共模信号的干扰。

以ISO11898标准的高速、短距离闭环网络为例,CAN总线的通信距离最大可为40m,通信速度最高为1Mbps,并且在CAN总线的起止端需要有一个120Ω的终端电阻,用来做阻抗匹配,以减少回波反射。

数据帧

CAN总线以“帧”形式进行通信。数据帧顾名思义是用来传输数据的帧,它的作用是承载发送节点要传递给接收节点的数据。

数据帧的帧结构包含七个段:帧起始、仲裁段、控制段、数据段、CRC段、ACK段、帧结束。根据仲裁段ID码长度的不同,分为标准帧和扩展帧。

其中标准帧的ID是11位二进制数,换算成十六进制是3位,也就是帧ID的范围为000-7FF;扩展帧的ID是29位,换算成十六进制是8位,帧ID的范围是00000000-1FFFFFFF,帧ID决定着数据帧发送的优先级,ID值越小,优先级越高。

控制段由r1、r0保留位和DLC段组成,最主要的DLC段是数据长度码,由4个数据位组成,用于表示报文中的数据段含有多少个字节,能表示的数字为0-8。

数据段由数据帧中的发送数据组成,由数据长度码DLC决定其字节数,每个字节包含8位。

CRC段包括循环校验序列CRC和界定符DEL,前者用于校验传输是否正确,后者表示循环校验序列的结束。

ACK段包括确定位ACK和界定符DEL,表示确认是否正常接收。

5. 功能指示图

功能名称 引脚名称 功能/引脚说明
UART接口 UART接口(接口电平3.3V、5V)
T RX,数据接收端口
R TX,数据发送端口
- 电源负极
+ 电源正极(3.3V~5V)
CAN接口 CANBUS接口
H CAN_H,只能为高电平或悬浮状态
L CAN_L,只能为低电平或悬浮状态
120Ω电阻切换跳帽 断开或者连接120Ω终端电阻
OFF 断开120Ω电阻
ON 当CAN设备作为终端设备时需连接120Ω电阻
USB调试接口 USB设备接口,用于与电脑通信进行测试或者设置参数
CAN通信指示灯 在进行CAN通信时指示灯闪烁

6. 规格参数

7. 产品尺寸图

8. 首次使用:AT指令测试

CAN转TTL模块上设计了USB接口,所以,你可以直接通过USB连接到电脑进行指令的测试。无需额外连接一个USB转UART设备进行转换。它是一个USB设备,并不是UART串口,所以,在使用的时候你无需关心串口波特率,任意选择一个波特率均可以正常通信(例如9600或者115200等)。

使用TYPE-C数据线连接CAN转TTL模块到电脑的USB口。连上电脑后,打开串口助手,串口列表出现了一个USB串行设备,点击选择该设备,并点击OpenCom打开串口,如图所示:

此时,我们尝试输入指令h\r 调出帮助信息,方法如下图。

第一步:在指令区输入“h\r”或者“h”(未勾选“AddCrLf”,需要输入“h\r”)

第二步:如果只输入“h”,那么需要勾选“AddCrLf ”。

第三步:点击SEND,发送指令“h”。

第四步:发送后,数据窗口会得到回复的帮助信息,包括所有的指令和当前的CAN波特率信息。

9. AT指令详解

本模块采用了slcan协议,将slcan协议集成到了MCU中。可使用串口指令来发送数据或者做对应的设置。同时,也可以使用支持slcan协议的上位机通信。

使用slcan协议,你可无需关心复杂的CAN底层协议了。发送串口指令既可完成CAN通信。下面将详细讲述slcan协议中各个指令的用途和用法。

注:AT指令区分大小写。

9.1 开启或关闭CAN通信

O =开启CAN通信

C =停止CAN通信

命令说明:使用命令“O”和“C”开启或者关闭CAN通信,方法与前面一致。勾选“HEXShow”,系统回复0D ,说明命令执行成功。系统回复07,说明指令错误。

9.2 发送CAN数据

t =发送11位标准数据帧

r =发送11位标准RTR数据帧

T =发送29位扩展数据帧

R =发送29位扩展RTR数据帧

Z0 =数据帧不添加时间戳

Z1 =数据帧添加时间戳

命令说明:

SLCAN协议可以发送11位标准数据帧和29位扩展数据帧,CAN标准数据帧和扩展数据帧只是帧ID长度不同,以便可以扩展更多CAN节点。

在发送数据时,需遵循SLCAN协议中帧长度的规定,SLCAN 帧的ASCII 描述如下:

<type> <id> <dlc> <data>

type:表示要发送的数据帧的类型

id:标准数据帧的id 为3个字节的ASCII Hex,扩展数据帧为8个字节的ASCII Hex。

dlc :一个字节的数字 (0~8),用于描述发送的16进制数据的个数。

data: 要发送的数据ASCII的16进制,个数为dlc。

例:

发送11位标准数据帧:t123178 : can_id 0x123, can_dlc 1, data 0x78

发送11位标准数据帧:t4563112233 : can_id 0x456, can_dlc 3, data 0x11 0x22 0x33

发送29位扩展数据帧:T12ABCDEF2AA55 : extended can_id 0x12ABCDEF, can_dlc 2, data 0xAA 0x55

发送11位标准RTR数据帧:r1230 : can_id 0x123, can_dlc 0, 无数据, 远程传输请求。

注:受限于内存大小,扩展帧只发送、接收数据长度为6字节或以下的数据。如果您想要发送大于6个字节的数据,可以分为多帧数据发送。

9.3 CAN通信速率设置

S1 =设置CAN通信速率为25kbits/s

S2 =设置CAN通信速率为50kbits/s

S3 =设置CAN通信速率为100kbits/s

S4 =设置CAN通信速率为125kbits/s

S5 =设置CAN通信速率为250kbits/s

S6 =设置CAN通信速率为500kbits/s(默认配置)

S7 =设置CAN通信速率为800kbits/s

S8 =设置CAN通信速率为1Mbits/s

命令说明:

S1~S8命令是为CAN设置波特率,在CANBUS中,只有波特率都设置为一致才能相互通信。

使用“h”命令可以查询当前模块的波特率以及CAN通信的打开和关闭的状态。需要注意的是,这里是设置CANBUS的通信波特率,不是设置UART的波特率。UART接口的波特率默认为115200 。

9.4 信息获取

V = 获取当前版本

h = 获取帮助信息

命令说明:

发送“V”获取固件版本信息,发送成功后,回复版本号。发送“h”获取帮助信息,将回复所有的指令说明以及当前的CAN波特率和开启状态。

10. CAN通信测试

10.1 两模块间的通信

本例程将演示两个CAN转TTL模块间的通信功能。其中一个CAN转TTL模块发送数据“t123122”,另一个CAN转TTL模块接收数据并在串口监视器上显示接收的数据“t123122”。

硬件准备:

连接示意图:

打开两个串口助手,分别选择两个CAN转TTL模块对应的串口设备。如图所示:

在两个串口助手中分别发送指令“O”打开CAN通信,然后发送指令“S6”,将CAN波特率均设置为500kbits/s 。

在左侧的串口助手中发送指令“t123122”。

在右侧的串口助手窗口中收到了数据“t123122”。

10.2 基于FireBeetle 2 ESP32-E主控使用教程

本例程将演示通过ESP32-E的UART接口向CANBUS发送数据“t11123333”,在另外一个CAN转TTL模块接收数据并在串口监视器上显示ESP32-E发送的数据。

硬件准备:

连接示意图:

示例程序

void setup()
{
  Serial1.begin(115200, SERIAL_8N1, /*rx =*/D3, /*tx =*/D2); 
  delay(10); //给一个延时,确保上一条设置指令执行完成
  Serial1.println("S3\r"); //设置CAN波特率为100kbits/s
   //delay(10); //给一个延时,确保上一条设置指令执行完成
  Serial1.println("O\r"); //打开CAN通信  
}

void loop()
{
  Serial1.println("t11123333\r"); 
  delay(1000);
}

操作步骤

将模块与FireBeetle Board ESP32-E按照上图接线方式相连接

打开Arduino IDE ,将上面的代码上传到FireBeetle Board ESP32-E

另外打开一个串口助手,选择模块对应的串口设备,在串口助手中发送“S3”,将CAN波特率设置为100Kbits/s,然后发送指令“O”打开CAN通信,之后就能在串口助手中收到数据“t11123333”。

注:模块UART接口的波特率需要和串口助手上选择的波特率一致。

运行结果演示

11. 更多资料下载

TEL0150_尺寸图.pdf

TEL0150_2D_CAD文件.rar

常见问题

还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

DFshopping_car1.png DFRobot商城购买链接