CAN总线技术学习(二)

发布者:快乐旅人最新更新时间:2016-09-22 来源: eefocus关键字:CAN  总线技术 手机看文章 扫描二维码
随时随地手机看文章
CAN总线信息以帧的形式传输,每个帧包括多个段:起始位SOF、仲裁段、控制段、数据段、CRC校验、确认位、结束位等,各个段依次串行被传输到总线上。起始位、CRC校验、确认位和结束位由控制器硬件自动生成,软件可以配置仲裁段、控制段和数据段的内容。每个CAN帧最多发送数据段长度为8个字节即64位。
CAN总线协议有两种:CAN2.0A和CAN2.0B协议,CAN2.0A支持帧ID为11位的标准帧,CAN2.0B协议支持帧ID为11位的标准帧和帧ID为29位的扩展帧,如图1和图2所示。
 
图1 CAN标准帧
 
图2 CAN扩展帧
下面解释几个CAN总线问题:
位填充:上述图中都提到位填充的问题,即当发送的一帧CAN信息中出现连续5个相同位时,控制器会自动填充一个相反的位进去,控制器接收一帧CAN信息时发现5个相同的位,也会自动把其后的一个翻转位去掉。那么可能我们会问为什么要做这种看似无用的操作呢?因为CAN总线通讯属于异步通讯,虽然通讯双方约定设定相同的波特率通讯,但是每一位(bit)的宽度也不可能绝对相同,多个相同的位累积起来可能出现较大的误差,造成接收信息出错,那么如何解决这个问题呢?CAN协议中规定在位跳转时要做同步补偿,那么这样可以消除多个位累积造成的错误,但是如果CAN帧信息连续出现多个0或1,接收方没办法监测到翻转位,不能做出正确的补偿,可能导致发送方发了10位0,接收方监测出11个0出来的情况出现,所以当发送方连续发送5个0时,要位填充一个1进去,然后再发送下面的位,而接收方接收到5个0后接收到下面的1可以做出相应的同步补偿,同时要丢弃这个填充位。按照CAN协议规定如果在CAN信息中接收到连续6个以上的相同位被认为是错误信息,CAN控制器错误计数加1。
CAN协议:如上图所示,标准帧标识符(帧ID)有11位,扩展帧标识符(帧ID)有29位,CAN2.0B协议也兼容CAN2.0A协议,可以同时识别标准帧和扩展帧。标准帧和扩展帧的区别在于IDE位,IDE为0时表示标准帧,IDE为1时表示扩展帧。
CAN信号:CAN总线使用一对差分信号通讯,即CAN_H和CAN_L,通过识别它们的压差获取0或1的信息,上电后两个信号对地都会有一定的电压,即V_CANH和V_CANL,通过判断V_CANH-V_CANL识别信息,总线信号分为显性(压差为1V以上,也即数字0)和隐性(压差小于0.5V,也即数字1)。一般在没有数据通讯时V_CANH和V_CANL都为2.5V,所以CAN总线默认为没有压差(隐性,数字1),当有起始位SOF(数字0,显性)时每个网络上的节点都能监测到,准备接收信息,如图3所示。
 
图3 CAN总线电压示意图
逐位仲裁机制:CAN节点发送的信息都会被自己接收并判断。当CAN总线上两个节点同时发送CAN信息时,CAN节点也会比较自己发送的数据和接收的数据是否一致,由于CAN信号有显性(数字0,压差大于1V)和隐性(数据1,压差小于0.5V)两种,当一个节点发送0而另一个节点发送1时,总线表现为显性0,那么发送1的节点监测到后知道发送总线冲突,自动退出发送,所以可以看出,CAN总线信息小的优先级高。通过这种方式可以实现非破坏性逐位仲裁,优先级高的节点正常发送,不受任何影响。
关键字:CAN  总线技术 引用地址:CAN总线技术学习(二)

上一篇:市面上最等流行的九大现场总线
下一篇:CAN总线技术学习(一)

推荐阅读最新更新时间:2024-05-03 00:40

探秘DLP® NIRscan™ Nano评估模块
作为工程师和开发人员,我们的工作就是找到一个将所有元件组合在一起的最佳方法。不管是对于摩天大楼、还是集成电路,内部工程结构都是决定是否能够运转良好的关键之一。但说回来,又有谁不曾幻想做个 破坏王 ,把东西都拆开来一探究竟呢?我们最初的与工程设计有关的记忆大部分都来自小时候把看起来复杂 甚至是昂贵 的东西拆得七零八落。 既然如此,我们就打算看一看DLP NIRscan Nano评估模块(EVM)的内部构造,我们将用老办法 拆开它。 需要注意的是,任何对光引擎的拆解都会使NIRscan Nano EVM的保修失效。另外,去掉光引擎上的罩子会使灰尘和污垢聚集在光学器件上,从而影响到系统性能。此外,去掉上面的罩子会移动光学器件、狭
[模拟电子]
探秘DLP® NIRs<font color='red'>can</font>™ Nano评估模块
CAN总线学习系列之四——CAN总线硬件设计
CAN总线学习系列之四——CAN总线硬件设计 在选定了CAN控制器SJA1000和CAN驱动器82C250后,我们肯定很想知道它的硬件电路怎么设计。其实这个比较简单,一般我们会遵循下面的步骤: (1)       在网络上搜索相关的资料,学习一下别人的设计,分析一下各自的优缺点。 (2)       仔细研读SJA1000和82C250的芯片资料,最终确定自己的硬件设计。 (3)       使用EDA软件实施自己的设计,制作PCB电路板,这个过程中需要细心,耐心。 (4)       焊接元器件。焊接过程中中时常检测焊接是否牢固,是否短路。 (5)       接下来就是和软件配合调试了。硬件设计部分就到此为止了。   在CAN总
[嵌入式]
如何准确测量CAN节点的输入电压阈值
  CAN总线设计规范对于CAN节点的输入电压阈值有着严格的规定,如果节点的输入电压阈值不符合规范,则在现场组网后容易出现不正常的工作状态,各节点间出现通信故障。具体要求如表1所示,为测试标准“ISO 11898-2输出电压标准”。      表 1 ISO 11898-2输入电压阈值标准   所以每个厂家在产品投入使用前,都要进行CAN节点DUT(被测设备)的输入电压阈值测试。一般是使用ISO 11989-2输入电压阈值标准的CAN测试方法,如下描述:   如表1所示负载和共模条件下,选择被测DUT的适应条件,如图1所示,Rtest为网络负载电阻,为60Ω。   调节U,使V分别为-2V和6.5V时,再调节I,
[测试测量]
如何准确测量<font color='red'>CAN</font>节点的输入电压阈值
CAN FD的全面升级
众所周知,CAN FD是基于CAN 2.0的升级版协议,为了满足汽车电子日益增长的高带宽和高传输速率的要求,CAN FD主要升级了以下几个方面: 一、更高的传输波特率 图 1 可变数据段波特率结构 CANFD速率包含两个段的速率,一个是仲裁段和ACK段,沿用CAN2.0的规范,最高速率为1Mbit/s,中间的数据段是可以加速的,标称可以达到5Mbit/s,甚至更高。 二、更高效的数据段 对于汽车电子来说,对车辆动力系统、地盘以及主被动系统来说,加长的数据段避免了数据非必要的拆分,大大提升了CAN帧的传输效率。 图 2 CAN FD高效的数据段 三、更可靠的CRC校验和额外的控制位 在传统
[汽车电子]
<font color='red'>CAN</font> FD的全面升级
基于CAN总线的阀门远程控制系统
0 引言     普通电动阀门是一种通用的执行单元,它作为一种重要的执行器件广泛地用于工业流程控制领域,具有不可替代的作用。阀门电动装置是以电机为动力,带动机械减速装置将动力传给阀门,实现阀门开启和关闭的最终部件,它是电动阀门中的核心部分。近年来,国内生产电动阀门的厂商通过对国际先进技术的引进和吸收,以及与Limitorque、Rotork等国际著名企业的合作,已经逐步掌握了机械传动、制造等一些核心技术,加之价格方面的优势,取得了国内市场的主导地位。随着工业自动化水平的提高,尤其是现场总线技术的出现,仅有现场操作以及简单的点对点控制功能的电动阀门越来越难以满足市场需要,国外各大公司纷纷推出现场总线电动阀门产品,但价格高昂。因
[嵌入式]
STM32 CAN应用-过滤器设置
在使用STM32的CAN控制器进行数据收发,当用到位屏蔽模式的时候,就要设置过滤器了,这个关系到是否能够接收到想要的数据。下面针对几种不同情况对CAN过滤器(Filter)进行设置。 CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; //标示符屏蔽模式 CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit; 1、对扩展数据帧进行过滤:(只接收扩展数据帧) CAN_FilterInitStructure.CAN_FilterIdHigh =(EXT_ID 13)
[单片机]
找到CAN总线(故障)节点的三种办法
CAN总线的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持,在带来便利的同时,也为工程师们故障排查增加了难度,所以本文主要给大家介绍了找到CAN总线(故障)节点的三种办法。 1、 将所有节点都拔掉,依次往上接。 当CAN总线出现故障后将所有节点都拔掉,之后一个一个节点往上接,接到系统出错时,即找到最后一个插入节点为故障节点。如下这种情况,图1为新能源车控制总线,车辆启动后仪表显示滞后,显示错误。导致司机判断延迟与错误,影响交通安全。将所有节点拔掉之后,采用此方法挨个节点往上接,直到电机控制器接到总线上出现了通信故障,初步判断为电动机运行产生的强干扰,串扰到CAN总线上,导致帧错误增加,重发频繁,正
[嵌入式]
找到<font color='red'>CAN</font>总线(故障)节点的三种办法
KEIL_MDK5仿真文件和参数名,printf 和 scanf 函数重定位
DARMSTM.DLL pSTM32F103RB printf重定位 #include stdio.h 初始化串口 重写fputc 和 fgetc 函数 /**************************************************************************** * 名 称:int fputc(int ch, FILE *f) * 功 能:printf函数的输出驱动函数 * 入口参数:无 * 出口参数:无 * 说 明: * 调用方法:无 ******************************************************************
[单片机]
KEIL_MDK5仿真文件和参数名,printf 和 s<font color='red'>can</font>f 函数重定位
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved