CAN总线
文章平均质量分 73
分享关于CAN总线的知识
Wallace Zhang
目标:
有朝一日,自己能独立完成一个机器人。
博客初衷:
将学习到的知识分享给大家,一起学习,同时自己又能再一次提高对知识的理解(费曼定理)
爱好:
喜欢手冲黑咖啡。
展开
-
嵌入式CANopen协议从入门到落地产品(更新2023.10.18)
一、前言我写CANopen系列博文的初衷是分享如何使用STM32单片机开发一款CANopen产品,所谓实战为主,理论为辅。光看CANopen协议的理论是很枯燥的,而且无论看多少遍都无法掌握CANopen协议。我认为掌握CANopen协议的唯一方法是自己设计一个CANopen从站。以前我在电气研发的时候,看了很多遍讲CANopen协议的pdf与书籍,最后也没看懂CANopen是什么东西。害的我在工作上一碰到CANopen协议就害怕,觉得是一个非常复杂的东西,一般人根本学不会。命运的转折点又来了,上一年(2原创 2021-07-28 21:16:36 · 13712 阅读 · 15 评论 -
CANopen | 对象字典OD 07 - 创建对象字典变量,变量变化时发送TPDO1,滤波时间200ms
CANopen从站有一个变量tx_Value,映射到TPDO1上。接着,当变量tx_Value发生变化时,通过TPDO1发送出去,滤波时间为200ms。原创 2023-04-16 21:26:51 · 1438 阅读 · 0 评论 -
CANopen | 对象字典OD 06 - 创建对象字典变量,通过TPDO定时发送
CANopen从站有一个变量tx_Value,映射到TPDO1上。接着,CANopen从站每1S发送一次TPDO1,将tx_Value发送出去。原创 2023-04-16 21:18:57 · 1512 阅读 · 4 评论 -
CANopen | 对象字典OD 05 - 创建对象字典变量,映射到RPDO
以上摘自《CANopen_easy_begin》的第7章。原创 2023-04-16 20:27:46 · 1898 阅读 · 3 评论 -
CANopen | 对象字典OD 03 - 启动CANopen节点的服务数据对象SDO
文章目录一、前言二、实验的目的三、对象字典OD3.1、Slave1.od3.2、Slave1.c四、CAN盒子(收发器)4.1、通过SDO方式修改CANopen从站的心跳时间一、前言当设计一个CANopen节点(从站)时,必须必须打开SDO服务器功能。只有CANopen从站打开SDO服务器功能后,CANopen主站才能读写CANopen从站的对象字典。为什么CANopen主站要修改CANopen从站的对象字典?以前我调试过一个CANopen伺服驱动器,品牌是德国ELMO。伺服驱动器上电后只发出一个原创 2021-09-08 10:10:45 · 2973 阅读 · 7 评论 -
CANopen | 对象字典OD 04 - 创建对象字典的变量(映射变量)
文章目录一、前言二、实验目的三、对象字典3.1、找到工程里的对象字典文件3.2、创建映射变量四、STM32代码4.1、Slave1.c4.2、main.c五、CAN盒子(收发器)5.1、通过SDO方式获取obj_Var_Buttom的值一、前言对象字典的映射变量是用户程序与CANopen程序(Canfestival)之间的通讯桥梁,目的是能让用户程序与CANopen程序(Canfestival)通讯。例如CANopen从站0x05的用户程序每隔1S时间读取一次按钮是否被按下,当按钮被按下时,修改映射变原创 2021-09-08 09:46:14 · 4256 阅读 · 13 评论 -
CANopen | 对象字典OD 02 - 修改CANopen节点的心跳报文发送间隔
文章目录一、前言一、前言通过修改CANopen节点的对象字典,改变它发送心跳报文的频率。测试硬件如下:原创 2021-08-27 16:53:58 · 3453 阅读 · 1 评论 -
CANopen | 拓展知识 - CANopen,CAN总线与OSI模型的关系
一、前言CAN总线定义OSI模型的物理层与数据链路层。CANopen协议使用了OSI模型的应用层与传输层。二、CANopen and the OSI reference model国外原文的地址:https://www.canopensolutions.com/english/about_canopen/CANopen-and-the-OSI-reference-model.shtmlISO的开放系统互连OSI参考模型指定了七层。CANopen协议与CIA301中规定的通讯配置文件(或者E原创 2021-08-27 11:19:59 · 2191 阅读 · 0 评论 -
CANopen | 对象字典OD 01 - canfestival对象字典编辑软件安装与使用
对象字典编辑软件环境的搭建很简单。直接参考《硬石YS-H7Multi开发板开发手册》的第46.3章节-对象字典编辑器的环境搭建与第46.4章节-对象字典编辑器的使用,手册的下载地址我分享:《硬石YS-H7Multi开发板开发手册》:同学们也需要参考链接:https://pan.baidu.com/s/1qtFBjw7pzaZZVj67BjVTmg提取码:5aidCanfestival的对象字典的样子如下,后续的实验都会用到以下7个段,一定要熟练掌握。1、0x1000 ~ 0x1029 Com原创 2021-08-26 14:41:35 · 2971 阅读 · 0 评论 -
CANopen | 网络管理NMT02 - 节点状态切换命令
文章目录一、前言二、命令2.1、启动命令0x012.2、停止命令0x022.3、进入预状态0x802.4、复位节点应用层0x812.5、复位节点通讯0x82一、前言上一节演示了一些能控制CANopen节点的CAN报文,这些都是节点状态切换命令。值得注意的是,这些节点状态切换命令不一定非要CANopen主站发送,CANopen从站也可以发送这些NMT报文。我们可以在STM32的程序里面编写一段代码,在某些条件下,调用FDCAN底层直接发送CAN报文,控制CANopen网络上的各个CANopen节点(包括原创 2021-08-26 14:25:38 · 11310 阅读 · 10 评论 -
CAN总线技术 | 数据链路层04 - CAN节点状态与错误处理机制
文章目录一、前言二、错误检测区域三、错误帧四、CAN节点状态4.1、FDCAN错误计数器寄存器(FDCAN_ECR)4.2、FDCAN协议状态寄存器(FDCAN_PSR)一、前言CAN的错误类型有如下图所说的5种,其中:应答错误与位发送错误会出现在CAN发送的节点(CAN发送端)CRC错误与位填充错误会出现在CAN接收的节点(CAN接收端)二、错误检测区域如下是每一个错误发生在CAN报文中的区域,5种错误类型可以同时发生。位检测的区域最长,可以看到采样点的匹配是多么的重要(一般不建议相原创 2021-08-25 16:38:09 · 4900 阅读 · 1 评论 -
CAN总线技术 | 数据链路层03 - CAN总线竞争与仲裁机制
文章目录一、前言二、CAN总线非破坏性仲裁机制三、非破坏性仲裁机制的前提四、仲裁的实现一、前言CAN总线厉害的其中一个原因是CAN总线灵活且强大的竞争与仲裁机制。二、CAN总线非破坏性仲裁机制当CAN节点发送竞争失败时,计划发送的CAN报文并不会被破坏。然后CAN节点等待下一次的同步。三、非破坏性仲裁机制的前提CAN控制器有电平检测的功能,再加上“线与”的原理就能实现非破坏性仲裁机制。说白了,就是抢占总线之前先看看总线有没有被其他CAN节点占用,如果占用了就进入只听模式,等待下一次的同步原创 2021-08-25 15:46:01 · 6366 阅读 · 4 评论 -
CAN总线技术 | 数据链路层02 - 帧结构
文章目录一、前言二、帧开始三、仲裁段四、控制段五、数据段六、CRC段(校验)七、ACK段(应答段)八、帧结束九、帧间隔ITM十、一个数据段长度为8的标准帧,总共多少个位呢?是108位吗?一、前言一个标准的数据帧由以下组成:帧开始仲裁段控制段数据段CRC段(校验)ACK段帧结束以上的元素,缺一不可,否则没法通过CAN控制器的校验,应用程序无法获取CAN报文。二、帧开始帧起始由1个显性位(逻辑0)组成,用于CAN总线上各个CAN节点的同步。在CAN总线空闲时,总线是隐性(1)。由原创 2021-08-25 15:20:39 · 4203 阅读 · 0 评论 -
CAN总线技术 | 数据链路层01 - CAN报文的组成
文章目录一、前言一、前言CAN报文帧有5种类型,其中数据帧最常用。远程帧很少使用的原因是它基于客户端-服务器的通讯模型(说白了就是一问一答)。错误帧,过载帧,帧间隔不需要应用程序控制。例如,在STM32H743开发CAN程序,根本不需要使用应用程序发送错误帧,过载帧,帧间隔,这些帧都由STM32H743内部的CAN控制器决定是否需要发送。...原创 2021-08-25 14:45:52 · 2332 阅读 · 0 评论 -
CAN总线技术 | 物理层04 - 终端电阻与双绞线(特性阻抗120欧)
文章目录一、前言二、信号反射与信号振铃一、前言新手最容易犯错的就是忘记在CAN总线上添加终端电阻,还有必须使用双绞线(特性阻抗约120欧)。CAN总线上的终端电阻一般使用120欧,CAN线缆一定要购买特性阻抗约120欧的电缆。信号反射:二、信号反射与信号振铃当信号反射很严重时,就可能引起信号振铃。用示波器检测到以上的这些信号反射与信号振铃后,通过以下方式解决:...原创 2021-08-19 23:05:48 · 4770 阅读 · 0 评论 -
CAN总线技术 | 物理层03 - 采样点
文章目录一、前言二、STM32CubeMX上采样点的设置一、前言采样点是CAN节点判断信号逻辑(1或0)的位置,CAN通讯属于异步通讯。需要通过不断的重新同步才能保证节点的采样准确。若采样点太靠前,有可能因为线缆原因,DUT外发报文尚未稳定,容易发生采样错误,若采样点太靠后,则因为SJW原因,也会引起接收节点同步跳转宽度的调整,调整不好就容易出现错误。普通CAN的1个位 = 同步段 + 传播段(PTS) + 相位缓冲段1(PBS1) + 相位缓冲段2(PBS2)FDCAN的1个位 = 同步段 +原创 2021-08-19 23:00:31 · 5605 阅读 · 0 评论 -
CAN总线技术 | 物理层02 - CAN总线的异步串行通讯
文章目录一、前言二、如何解决波特率误差带来的通信错误?三、填充位一、前言CAN总线使用异步串行通讯,相比同步串行通讯,CAN总线省去了一根用于同步的时钟线(CLK)。有优点,多半会带来一些缺点,缺点就是同步问题。根据波特率做采样,波特率的误差会产生通信错误。为什么?CAN总线上的各个CAN节点的波特率来源于各个节点上的晶振(例如,STM32上的CAN控制器上的时钟频率就是从PCB上的晶振进行倍频后再分频得到)。晶振会有误差,外加上其他误差。说白了,各个节点的波特率都设置500K。但是,由于误差问题肯原创 2021-08-19 21:48:32 · 2122 阅读 · 0 评论 -
CAN总线技术 | 物理层01 - CAN信号电平
文章目录一、前言二、CAN信号的电平三、为什么要采用两根线(双绞线)的差分电平信号?四、线与原理一、前言CAN总线定义了OSI模型里的物理层与数据链路层。RS485通讯跟CAN通讯在物理层在某些内容很相似(比如120欧终端电阻,特性阻抗120欧的双绞线缆等)。但是,RS485只定义了OSI模型里的物理层而已。二、CAN信号的电平一般所说的CAN总线,其实就是指ISO11898标准的高速CAN,最高的波特率是1Mbps,电位差分别是2.00V(显性0)与0V(隐性1)。ISO11519-2标原创 2021-08-19 21:10:37 · 11246 阅读 · 0 评论 -
CAN总线技术 | CAN脱颖而出的“秘密”
CAN总线在汽车网络中脱颖而出的“秘密”:节点间采用多主通讯方式。采用短帧结构,标准数据帧8个字节,500K波特率,用200多us就能发完。报文ID值越小,优先级越高。非破坏性总线仲裁处理机制。可靠的CRC校验方式,传输数据出错率极低,满足汽车数据传输。报文仲裁失败或者传输期间被破坏,有自动重发(机制)。节点在严重的错误情况下,具有自动脱离总线的功能,不影响总线的正常工作。基于以上的优势,CAN总线被广泛应用于工业自动化,机器人通讯,新能源汽车等领域。我从事了7年工业自动化,3年工业AG原创 2021-08-19 20:40:45 · 2207 阅读 · 0 评论 -
CANopen | 网络管理NMT01 - 节点上线报文与心跳报文
文章目录一、前言二、NMT节点上线报文三、NMT心跳报文一、前言CANopen协议的NMT管理报文既是最简单又是最重要的知识点,调试与排查CANopen网络的问题时,需用到NMT管理报文。请研读《CANopen_easy_begin》的第6章-网络管理NMT(Network management)与CANopen主站,请看下面图片。其中,6.4章节简单略过即可,因为NMT节点守护已经被CANopen协议淘汰,基本不使用了。二、NMT节点上线报文基于上一次已经完成CANopen的移植的开发板,原创 2021-07-28 21:39:11 · 9003 阅读 · 6 评论 -
CANopen | 移植01 - STM32H743 + Canfestival的移植并让FDCAN1运行CANopen协议
文章目录一、前言二、移植前的准备三、移植3.0、移植的目的3.1、工程的实际硬盘上也需要添加3.2、往bsp文件夹放入bsp代码3.3、往canfestival里放入源代码3.4、往obj_dir里放入代码3.5、在工程上添加文件canfestival,obj_dir,bsp三个文件夹3.6、在工程里添加各个文件的代码3.7、添加include的路径四、定时器4.1、TIM17五、代码5.1、bsp_canopen_timer.h5.2、main.c5.3、bsp_fdcan.c5.4、回到main.c5.原创 2021-07-28 21:32:10 · 6386 阅读 · 17 评论