设为首页
收藏本站
PLC技术网
开启辅助访问
切换到宽版
登录
注册哦
只需一步,快速开始
微信扫码登录
门户
Portal
论坛
BBS
导读
Guide
排行榜
Ranklist
搜索
搜索
本版
文章
帖子
用户
PLC论坛-全力打造可编程控制器专业技术论坛
»
论坛
›
控制专题
›
『数控/电机控制/运动控制/工业总线』
›
CANOpen系列教程02_理解CAN总线协议
返回列表
发新帖
CANOpen系列教程02_理解CAN总线协议
[复制链接]
43338
|
0
|
2024-3-15 09:38:54
|
显示全部楼层
|
阅读模式
置顶公众号,不错过每一条消息!
本教程由作者strongerHuang于2018年09月原创发布。
标签:CAN、 CANOpen、 CanFestival
版权所有:禁止商用
申明:该文档仅供个人学习使用,转载请公众号联系作者授权。
1写在前面
上一篇文章讲述了CAN和CANOpen,相信大家CAN和CANOpen有一定理解了。本文说的CAN即是一种总线,也是一种协议。因此,我们常听见CAN总线,也常听见CAN协议。
CAN协议和CANOpen协议是两套不同的协议。从软硬件层次来划分,CAN协议属于硬件协议,而CANOpen属于软件协议。
本篇文章先概述一下CAN网络,让大家对CAN总线协议有一个全局的概念,再到底层的CAN总线协议知识。
2
CAN网络
CAN网络可以理解为多台CAN设备连接在同一条CAN总线上组合成的网络,其中的CAN设备我们称之为节点。CAN网络拓扑结构如下图:
如上图,一个CAN节点主要包含三类:MCU应用程序、CAN控制器、CAN收发器。
2.1 MCU应用程序
MCU应用程序我将其分为三块:业务逻辑代码、协议层代码、底层驱动代码。
A.业务逻辑代码:是根据项目需求而定,也很好理解。比如我读取一个传感器数据,并对其做出相应逻辑处理。
B.协议层代码:比如后续要讲述的CANOpen。
C.底层驱动代码:配置CAN总线相应参数、控制收发的代码。
2.2 CAN控制器
CAN控制器内部结构还是挺复杂的,一般现在CAN控制器都是与处理器集成在一起。
其实对于编程的人来说,无非也就是包含一些控制、状态、配置等寄存器。
比如我们看到有些STM32芯片带有CAN,也就是说CAN控制器已经集成在STM32芯片中了,我们只需要编程操作其中的寄存器即可。
2.3 CAN收发器
CAN收发器:将CAN收发引脚(CAN_TX和CAN_RX)的TTL信号转换成CAN总线的电平信号。
PS:你可以把CAN总线通信认为是UART通过485进行通信:CAN控制器就如UART的控制器,而CAN收发器就如485转换芯片。
3
ISO标准化的CAN协议
写这一章节的主要目的就是想让大家了解CAN总线位于OSI所在层次。
3.1 ISO/OSI基本参照模型
【注】
ISO:International Standardization Organization国际标准化组织;
OSI:Open Systems Interconnection开放式系统间互联;
3.2 CAN在OSI模型中的定义
【注】
LLC:Logical Link Control逻辑链路控制;
MAC:Medium Access Control媒介访问控制;
从上图可以知道CAN总线底层硬件的内容(CAN控制器、收发器)主要位于OSI的第1层和第2层。
4
概述CAN总线协议
CAN总线协议:就是为了保证通信(收发)数据在CAN总线上能稳定传输而制订的一套协议。
CAN总线协议的内容很多,为方便初学者理解,本文先大概描述一下CAN总线协议,后续文章详细讲述CAN总线协议的内容。
4.1 总线信号
CAN总线为「两线」「差分」信号,用隐形代表逻辑1,显性代表逻辑0。如下图:
4.2 优先级
假如某一时刻,一个设备(节点)往总线发0,一个设备往总线发1。那么总线会呈现什么现象?
答案:最后总线呈现为显性,也就是0。
4.3 位时序
位时序逻辑将监视串行总线,执行采样并调整采样点,在调整采样点时,需要在起始位边沿进行同步并后续的边沿进行再同步。
简单的说就是对一个bit位分几段进行采样,目的就是提高数据传输稳定性。在STM32中底层驱动代码就需要进行位时序编程,在STM32参考手册中也会发现如下位时序图:
4.4 帧的种类和格式
帧的种类有多种:
数据帧:用于发送单元向接收单元传送数据的帧。
遥控帧:用于接收单元向具有相同 ID 的发送单元请求数据的帧。
错误帧:用于当检测出错误时向其它单元通知错误的帧。
过载帧:用于接收单元通知其尚未做好接收准备的帧。
帧间隔:用于将数据帧及遥控帧与前面的帧分离开来的帧。
数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有11个位的标识符ID,扩展格式有29个位的ID。
4.5 位填充
位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时则添加一个位的反型数据。如下图:
4.6 错误的种类
CAN总线协议内容很多,初学者先了解这些,后面文章具体到每一个点上,相信大家就会更明白其中的含义。
5
说明
1.该文档部分文字来自网络,仅供个人学习使用,版权所有,禁止商用。
2.本文由我一个人编辑并整理,难免存在一些错误。
3.本文收录于公众号【strongerHuang】,关注微信公众号回复【CANOpen系列教程】即可查看全系列教程。
6最后
若觉得文章对你有帮助,记得给我点赞、分享。(点赞是作者更新文章的动力)
扫描下面二维码、关注,在底部菜单中查看更多精彩内容!
长按识别图中二维码关注
赞赏是对作者的认可与支持!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
注册哦
x
回复
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册哦
本版积分规则
发表回复
回帖后跳转到最后一页
阿蚊在线
回复楼主
返回列表
『数控/电机控制/运动控制/工业总线』
『机器视觉/AI/IoT/机器人论坛』
『高级语言/组态软件/触摸屏』
『操作系统xp/xin7/win10/linux』