资料介绍
描述
我学习 CAN 已经三周了,现在我已经完成了一些申请来验证我的学习成果。在本教程中,您将学习如何使用 Arduino 实现 CANBUS 通信。如果您有什么建议,欢迎留言。
什么是 CANBUS
关于 CAN
CAN(Controller Area Network)是一种可以实现分布式实时控制的串行通信网络。它是为汽车行业开发的,用两线总线代替复杂的线束。
CAN 协议定义了 OSI 模型中的数据链路层和部分物理层。
CAN 协议采用 ISO11898 和 ISO11519 进行 ISO 标准化。ISO11898是CAN高速通信标准,通信速度为125kbps-1Mbps。ISO11519是CAN低速通信标准,通信速度小于125kbps。
这里我们重点介绍高速CAN。
- 每个连接到总线的 CAN 单元都可以称为一个节点。所有 CAN 单元都连接到每端用 120 Ω 电阻端接的总线以形成网络。总线由 CAN_H 和 CAN_L 线组成。CAN 控制器根据两根电线上的功率电平差异确定总线电平。总线级别分为显性和隐性级别,必须是其中之一。发送方通过在总线级别进行更改将消息发送给接收方。当在总线上执行逻辑线“与”时,显性电平为“0”,隐性电平为“1”。
- 在显性状态下,CAN_H的电压约为3.5V,CAN_L的电压约为1.5V。在隐性状态下,两条线的电压都在2.5V左右。
- 信号是差分的,这就是 CAN 具有强大的抗噪能力和容错能力的原因。平衡的差分信号减少了噪声耦合,并允许通过双绞线电缆实现高信号速率。每条信号线中的电流相等,但方向相反,从而产生场消除效应,这是低噪声发射的关键。平衡差分接收器和双绞线电缆的使用增强了 CAN 总线的共模抑制和高抗噪能力。
CAN收发器
CAN Transceiver 负责逻辑电平和物理信号之间的转换。将逻辑信号转换为差分电平或将物理信号转换为逻辑电平。
CAN控制器
CAN控制器是CAN的核心部件,实现了CAN协议中数据链路层的所有功能,可以自动解析CAN协议。
MCU负责功能电路和CAN控制器的控制。例如节点启动时初始化CAN控制器参数,通过CAN控制器读取并发送CAN帧等。
关于 CAN 通讯
当总线空闲时,所有节点都可以开始发送消息(多主机控制)。首先访问总线的节点获得发送权(CSMA/CA 模式)。当多个节点同时开始发送时,发送高优先级ID消息的节点获得发送权。
在 CAN 协议中,所有消息都以固定格式发送。当总线空闲时,所有连接到总线的单元都可以开始发送新消息。当两个以上的小区同时开始发送消息时,根据标识符确定优先级。ID不代表发送的目的地址,而是代表消息访问总线的优先级。当两个以上的cell同时开始发送消息时,免息ID的每一位都会被一一仲裁。仲裁获胜的单元可以继续发送消息,仲裁失败的单元立即停止发送并接收工作。
CAN 总线是一种广播型总线。这意味着所有节点都可以“听到”所有传输。所有节点总是会接收所有流量。CAN 硬件提供本地过滤,以便每个节点只对感兴趣的消息做出反应。
框架
CAN 设备通过 CAN 网络以称为帧的数据包形式发送数据。CAN 有四种帧类型:
- 数据帧:包含用于传输的节点数据的帧
- 远程帧:请求传输特定标识符的帧
- 错误帧:任何节点检测到错误时发送的帧
- 过载帧:在数据或远程帧之间注入延迟的帧
数据框
有两种类型的数据帧,标准的和扩展的。
图中位域的含义是:
- SOF – 单个显性帧开始 (SOF) 位标记消息的开始,用于在空闲后同步总线上的节点。
- 标识符- 标准 CAN 11 位标识符确定消息的优先级。二进制值越低,其优先级越高。
- RTR – 单个远程传输请求 (RTR) 位
- IDE – 显性单一标识符扩展 (IDE) 位意味着正在传输没有扩展的标准 CAN 标识符。
- R0 – 保留位(供未来标准修订可能使用)。
- DLC – 4 位数据长度代码 (DLC) 包含正在传输的数据字节数。
- 数据——最多可传输 64 位应用数据。
- CRC – 16 位(15 位加上定界符)循环冗余校验 (CRC) 包含用于错误检测的前面应用数据的校验和(传输的位数)。
- ACK –ACK 是 2 位,一个是确认位,第二个是分隔符。
- EOF——这个帧结束 (EOF),7 位字段标记 CAN 帧(消息)的结束并禁用位填充,在显性时指示填充错误。在正常操作过程中,当连续出现 5 位相同逻辑电平时,会将相反逻辑电平的位填充到数据中。
- IFS——这个 7 位帧间空间 (IFS) 包含控制器将正确接收的帧移动到消息缓冲区中的适当位置所需的时间。
仲裁
在总线空闲状态下,首先开始发送消息的单元获得发送权。当多个单元同时开始发送时,每个发送单元从仲裁段的第一位开始。连续输出显性电平数最多的单元可以继续发送。
速度和距离
CAN总线是同时连接多个单元的总线。理论上可以连接的单元总数没有限制。然而,在实践中,可以连接的单元数量受到总线上的时间延迟和电气负载的限制。降低通讯速度,增加可连接的单元数,提高通讯速度,可连接的单元数减少。
通信距离与通信速度成反比,通信距离越远,通信速度越小。更长的距离可以是1km或更长,但速度小于40kps。
硬件
Maduino Zero CAN-BUS 模块是Makerfabs 开发的CANbus 通讯工具,它基于Arduino,带有CAN 控制器和CAN 收发器,创建一个即用型CAN-bus 端口。
- MCP2515 是一款实现 CAN 规范的独立 CAN 控制器。它能够发送和接收标准和扩展数据以及远程帧。
- MAX3051 是 CAN 协议控制器和控制器局域网 (CAN) 中总线物理线之间的接口。MAX3051为总线提供差分发送能力,为CAN控制器提供差分接收能力。
联系
用电线将 DHT11 模块连接到 Maduino Zero CAN-BUS 模块,用作支持 CAN 通信的仪器。同样,将显示器连接到模块以接收数据并显示。
Maduino Zero CANBUS与DHT11的连接:
Maduino Zero CANBUS -- DHT11
3v3 ------ VCC
GND ------ GND
D10 ------ DATA
Maduino Zero CANBUS与OLED的连接:
Maduino Zero CANBUS -- OLED
3v3 ------ VCC
GND ------ GND
SCL ------ SCL
SDA ------ SDA
使用 DB9 电缆连接两个 Maduino Zero CANBUS 模块。
代码
MAX3051完成差分电平到逻辑信号的转换。MCP2515完成数据编解码等CAN功能。MCU只需要初始化控制器和发送和接收数据。
- Github:https://github.com/Makerfabs/Maduino-CANbus-RS485...
- 安装 Arduino 后,没有包支持需要安装的板子(Arduino 零)。
- 选择工具 -> Board -> Board Manager,搜索“Arduino zero”并安装“Arduino SAMD Boards”。
- 选择 Tools -> Board -> Arduino Zero (Native USB Port),选择 Tools -> Port -> com…
- 从 GitHub 获取程序后,需要确保所有文件都在项目目录下,其中包含支持 CANBUS 的库文件。
- 安装 Adafruit 的 DHT 传感器库,用于驱动 DHT11 获取温度和湿度。
- 在代码Test_DHT11.ino中使用不同的地址分别发送温度和湿度。
CAN.sendMsgBuf(0x10, 0, stmp1.length(), stmp_send1);
delay(500);
CAN.sendMsgBuf(0x11, 0, stmp2.length(), stmp_send2);
delay(500);
“0x10”表示消息ID,“0”表示标准帧,“stmp1.length()”表示消息长度,“stmp_send1”表示发送的数据。
- 在代码Test_OLED.ino中,通过查询接收 CANBUS 上的所有消息,并将所需信息显示在 OLED 上。
- 将程序Maduino-CANbus-RS485/Test_DHT11_OLED/Test_DHT11/Test_DHT11.ino上传到与传感器相连的模块,并将程序Maduino-CANbus RS485/Test_DHT11_OLED/Test_OLED/Test_OLED.ino 上传到另一个与 OLED 相连的模块。
节目
给两个模块上电,显示屏上会显示温度和湿度。
- Arduino Uno国内改版电路原理图下载 0次下载
- 使用Arduino实现按键切换LED颜色的实验免费下载 13次下载
- 使用Arduino实现电位器实验的例程免费下载 8次下载
- 使用Arduino实现光敏电阻实验的例程免费下载 18次下载
- 使用Arduino实现IDE HelloWorld实验的程序免费下载 14次下载
- LeCroy CANBUS总线测试解决方案介绍 2次下载
- 使用Arduino实现1602显示的测试源代码免费下载 7次下载
- 实现Arduino单片机和PC通信实例的资料和代码免费下载
- EST580-CANBUS智能总线数据手册免费下载 4次下载
- Arduino进行端口通信的实例程序免费下载
- 如何使用ProtoThreads实现Arduino多线程处理
- Arduino 0016软件免费下载 211次下载
- Arduino_1.6.0_软件下载 226次下载
- CANBUS应用方案 122次下载
- CANBUS选型 10次下载
- 如何使用Python和PinPong库控制Arduino 718次阅读
- 基于Arduino实现的测光表设计方案 2033次阅读
- 如何使用Arduino和LDR传感器实现LCD液晶屏亮度的自动调节 6532次阅读
- 如何使用Arduino Uno和HC-06实现智能手机对电灯的控制 4601次阅读
- 使用Arduino实现映射功能的过程 4458次阅读
- 如何从网页控制arduino? 3836次阅读
- canbus和can总线有什么区别 2.4w次阅读
- 微雪电子Arduino IO扩展板简介 3439次阅读
- 一种嵌入式现场总线通信网关设计浅析 1526次阅读
- arduino连接显示屏方法详解 4.7w次阅读
- ARDUINO IDE编写和AVR单片机程序的下载 9769次阅读
- arduino串口通信 2.1w次阅读
- arduino是什么以及arduino能干什么 4.4w次阅读
- arduino开发板有什么用 2w次阅读
- 基于Arduino开发环境的光电编码器检测仪设计方案 7257次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多