ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:22.72KB ,
资源ID:9457466      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9457466.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(完整版CAN总线解析doc.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

完整版CAN总线解析doc.docx

1、完整版CAN总线解析doc一、 概述CAN ( Controller Area Network )即控制器局域网,是一种能够实现分布式实时控制的串行通信网络。想到 CAN 就要想到德国的 Bosch 公司,因为 CAN 就是这个公司开发的(和有很多优秀的特点,使得它能够被广泛的应用。比如:传输速度最高到 1Mbps到 10KM ,无损位仲裁机制,多主结构。Intel ) CAN ,通信距离最远近些年来,CAN控制器价格越来越低,很多MCU也集成了CAN控制器。 现在每一辆汽车上都装有CAN总线。一个典型的CAN应用场景:二、 CAN 总线标准CAN 总线标准只规定了物理层和数据链路层,需要用户

2、来自定义应用层。不同的 CAN 标准仅物理层不同。CAN 收发器负责逻辑电平和物理信号之间的转换, 将逻辑信号转换成物理信号 (差分电平)或者将物理信号转换成逻辑电平。CAN 标准有两个, 即 IOS11898 和 IOS11519 ,两者差分电平特性不同。 (有信号时, CANH3.5V,CANL 1.5V ,即显性;没有信号时, CANH 2.5V , CANL 2.5V ,即隐性 )IOS11898 高速 CAN 电平中,高低电平的幅度低,对应的传输速度快。双绞线共模消除干扰,是因为电平同时变化,电压差不变。2.1 物理层CAN 有三种接口器件多个节点连接,只要有一个为低电平,总线就为低

3、电平,只有所有的节点都输出高电平时,才为高电平。所谓“线与”。CAN 总线有 5 个连续性相同的位后,就会插入一个相反位,产生跳变沿,用于同步。从而消除累计误差。和 485 、 232 一样, CAN 的传输速度与距离成反比。CAN 总线终端电阻的接法:特点:低速 CAN 在 CANH 和 CANL 上串入 2.2k 的电阻;高速 CAN 在 CANH 和 CANL之间并入 120 电阻。为什么是 120 ,因为电缆的特性阻抗为 120 ,为了模拟无限远的传输线。( 因为大多数双绞线电缆特性阻抗大约在 100 120 。 )120 欧姆只是为了保证阻抗完整性,消除回波反射,提升通信可靠性的,

4、因此, 其只需要在总线最远的两端接上 120 欧姆电阻即可, 而中间节点并不需要接 (接了反而有可能会引起问题) 。因此各位在使用 CAN Omega 做 CAN 总线侦听的时候,大多数情况下是不需要这个 120 欧姆电阻的,当然,即使当前网络中并没有终端匹配电阻, 只要传输线长度不长(比如 SysCan360比赛环境中,传输线只有 1-2 米) CAN 节点数量不多的情况下,不要这个 120 欧姆电阻也完全可以工作,甚至,你接任意电阻都是不会有影响的。因为此时传输线长度和波长还相差甚远,节点不多的情况下,反射波的叠加信号强度也不会很强,因此传输线效应完全可以忽略。而哪些情况需要呢,主要就是,

5、当使用 2 个 CAN Omega 对发或者当前网络中仅有 2 个CAN 设备的时候,此时两个端点最好都加上终端匹配电阻,当然,前面也说过了,传输线长度不长的时候,也可以不需要 2 端 120 欧姆电阻,但为了信号完整性考虑,加上这两个电阻才是严谨的。2 个 120 欧姆电阻的意义在于,使用 USB CAN 调试某些不带终端电阻的中间节点设备时,有时候 CAN 总线上没有 2 个 120 欧姆电阻通信可能会异常,此时可以接入 2 个 120 欧姆电阻作为 2 个终端电阻来作阻抗匹配, 这时候其他端点不应接入任何终端电阻!并且,这 2 个 120欧姆电阻不可用 1 个 60 欧姆电阻代替!125

6、kHz载波的波长大概在(c / f) = (3e8m/s) / (125e3Hz)=2.4km,其临界长度为2.4kM/ 10 = 240m 2m,也即传输线长度不超过240m,分布阻抗带来的影响可以忽略不计2.2 数据链路层CAN 总线传输的是 CAN 帧, CAN 的通信帧分成五种,分别为数据帧、远程帧、错误帧、过载帧和帧间隔。数据帧用来节点之间收发数据, 是使用最多的帧类型; 远程帧用来接收节点向发送节点接收数据;错误帧是某节点发现帧错误时用来向其他节点通知的帧; 过载帧是接收节点用来向发送节点告知自身接收能力的帧; 用于将数据帧、 远程帧与前面帧隔离的帧。 数据帧根据仲裁段长度不同分为

7、标准帧( 2.0A )和扩展帧( 2.0B )2.3 帧起始帧起始由一个显性位(低电平)组成,发送节点发送帧起始,其他节点同步于帧起始;帧结束由 7 个隐形位(高电平)组成。2.4 仲裁段CAN 总线是如何解决多点竞争的问题?由仲裁段给出答案。CAN 总线控制器在发送数据的同时监控总线电平,如果电平不同,则停止发送并做其他处理。如果该位位于仲裁段,则退出总线竞争;如果位于其他段,则产生错误事件。帧ID 越小,优先级越高。由于数据帧的RTR 位为显性电平,远程帧为隐性电平,所以帧格式和帧 ID 相同的情况下, 数据帧优先于远程帧; 由于标准帧的 IDE 位为显性电平, 扩展帧的 IDE位为隐形电

8、平,对于前 11 位 ID 相同的标准帧和扩展帧,标准帧优先级比扩展帧高。2.5 控制段共6 位,标准帧的控制段由扩展帧标志位 IDE 、保留位 r0 和数据长度代码 DLC 组成;扩展帧控制段则由 IDE 、 r1 、 r0 和 DLC 组成。2.6 数据段为 0-8 字节,短帧结构,实时性好,适合汽车和工控领域;2.7 CRC 段CRC 校验段由 15 位 CRC 值和 CRC 界定符组成。2.8 ACK 段当接收节点接收到的帧起始到 CRC 段都没错误时, 它将在 ACK 段发送一个显性电平, 发送节点发送隐性电平,线与结果为显性电平。2.9 远程帧远程帧分为 6 个段,也分为标准帧和扩

9、展帧,且 RTR 位为 1(隐性电平)CAN 是可靠性很高的总线,但是它也有五种错误。CRC 错误:发送与接收的 CRC 值不同发生该错误;格式错误:帧格式不合法发生该错误;应答错误:发送节点在 ACK 阶段没有收到应答信息发生该错误;位发送错误:发送节点在发送信息时发现总线电平与发送电平不符发生该错误;位填充错误:通信线缆上违反通信规则时发生该错误。当发生这五种错误之一时,发送节点或接受节点将发送错误帧为防止某些节点自身出错而一直发送错误帧,干扰其他节点通信, CAN 协议规定了节点的3种状态及行为。2.10 过载帧当某节点没有做好接收的 准备 时,将发送过载帧,以通知发送节点。2.11 帧

10、间隔用来隔离数据帧、远程帧与他们前面的帧,错误帧和过载帧前面不加帧间隔。2.12 构建 CAN 节点构建节点,实现相应控制,由底向上分为四个部分: CAN 节点电路、 CAN 控制器驱动、CAN 应用层协议、 CAN 节点应用程序。虽然不同节点完成的功能不同,但是都有相同的硬件和软件结构。CAN收发器和控制器分别对应CAN的物理层和数据链路层,完成CAN报文的收发;功能电路,完成特定的功能,如信号采集或控制外设等;主控制器与应用软件按照CAN报文格式解析报文,完成相应控制。CAN 硬件驱动是运行在主控制器(如 P89V51 )上的程序,它主要完成以下工作:基于寄存器的操作,初始化 CAN 控制

11、器、发送 CAN 报文、接收 CAN 报文;如果直接使用 CAN 硬件驱动,当更换控制器时,需要修改上层应用程序,移植性差。在应用层和硬件驱动层加入虚拟驱动层,能够屏蔽不同 CAN 控制器的差异。一个 CAN 节点除了完成通信的功能,还包括一些特定的硬件功能电路,功能电路驱动向下直接控制功能电路, 向上为应用层提供控制功能电路函数接口。 特定功能包括信号采集、 人机显示等。CAN 收发器是实现 CAN 控制器逻辑电平与 CAN 总线上差分电平的互换。实现 CAN 收发器的方案有两种,一是使用 CAN 收发 IC(需要加电源隔离和电气隔离),另一种是使用 CAN隔离收发模块。推荐使用第二种。CA

12、N 控制器是 CAN 的核心元件, 它实现了 CAN 协议中数据链路层的全部功能, 能够自动完成 CAN 协议的解析。 CAN 控制器一般有两种,一种是控制器 IC (SJA1000 ),另一种是集成CAN 控制器的 MCU ( LPC11C00 )。MCU 负责实现对功能电路和 CAN 控制器的控制: 在节点启动时, 初始化 CAN 控制器参数;通过 CAN 控制器读取和发送 CAN 帧;在 CAN 控制器发生中断时,处理 CAN 控制器的中断异常;根据接收到的数据输出控制信号;接口管理逻辑:解释 MCU 指令, 寻址 CAN 控制器中的各功能模块的寄存器单元,向主控制器提供中断信息和状态信

13、息。发送缓冲区和接收缓冲区能够存储 CAN 总线网络上的完整信息。验收滤波是将存储的验证码与 CAN 报文识别码进行比较,跟验证码匹配的 CAN 帧才会存储到接收缓冲区。CAN 内核实现了数据链路的全部协议。2.13 CAN 协议应用层概述CAN 总线只提供可靠的传输服务,所以节点接收报文时,要通过应用层协议来判断是谁发来的数据、数据代表了什么含义。 常见的 CAN 应用层协议有: CANOpen 、DeviceNet 、J1939 、iCAN 等。CAN 应用层协议驱动是运行在主控制器(如 P89V51 )上的程序,它按照应用层协议来对CAN 报文进行定义、完成 CAN 报文的解析与拼装。例

14、如,我们将帧 ID 用来表示节点地址,当接收到的帧 ID 与自身节点 ID 不通过时,就直接丢弃,否则交给上层处理;发送时,将帧 ID 设置为接收节点的地址。2.14 CAN 收发器SJA1000 的输出模式有很多,使用最多的是正常输出模式,输入模式通常不选择比较器模式,可以增大通信距离,并且减少休眠下的电流。收发器按照通信速度分为高速 CAN 收发器和容错 CAN 收发器。同一网络中要使用相同的 CAN 收发器。 CAN 连接线上会有很多干扰信号,需要在硬件上添加滤波器和抗干扰电路。也可以使用 CAN 隔离收发器(集成滤波器和抗干扰电路)。CAN 控制器与 MCU 的连接方式SJA1000

15、可被视为外扩 RAM ,地址宽度 8 位,最多支持 256 个寄存器1 #define REG_BASE_ADDR 0xA000 / 寄存器基址2unsigned char *SJA_CS_Point = (unsigned char *) REG_BASE_ADDR ;34/ 写 SJA1000 寄存器5void WriteSJAReg(unsigned char RegAddr, unsigned char Value) 6*(SJA_CS_Point + RegAddr) = Value;7return;8910/ 读 SJA1000 寄存器11unsigned char ReadSJA

16、Reg(unsigned char RegAddr) 12return (*(SJA_CS_Point + RegAddr);13将 存区的数据 写入寄存器 for (i=0;ilen;i+) WriteSJAReg(RegAdr+i,ValueBufi); 将 多个寄存器 入 存区 for (i=0;ilen;i+) ReadSJAReg(RegAdr+i,ValueBufi); 文件包含方案:每个程序包含用到的 文件每个程序包含一个公用 文件,公用头文件包含所有其他头文件1#ifndef _CONFIG_H_ /防止头文件被重复包含2#define _CONFIG_H_3#include

17、/ 包含 80C51 寄存器定义头文件4#include SJA1000REG.h/ 包含 SJA1000 寄存器定义头文件56/ 定义取字节运算7#define LOW_BYTE(x)(unsigned char)(x)8#define HIGH_BYTE(x)(unsigned char)(unsigned int)(x) 8)910/ 定义振荡器时钟和处理器时钟频率(用户可以根据实际情况作出调整)11#define OSCCLK 11059200UL12/ 宏定义 MCU 的时钟频率13#define CPUCLK (OSCCLK / 12)14#endif / _CONFIG_H_SJ

18、A1000 上 后 于复位状 ,必 初始化后才能工作。(1 )置位模式寄存器 Bit0 位 入复位模式;(2 ) 置 分 寄存器 率、CAN 模式;(3 ) 置 收 波, 定 和屏蔽 ;(4 ) 置 定 器寄存器 0 、 1 定 CAN 波特率;(5 ) 置 出模式;(6 )清零模式寄存器 Bit0 位退出复位模式;模式寄存器只检测模式: SJA1000 发送 CAN 帧时不检查应答位;只听模式:此模式下 SJA1000 不会发送错误帧,用于自动检测波特率; SJA1000 以不同的波特率接收 CAN 帧,当收到 CAN 帧时,表明当前波特率与总线波特率相同。2.15 波特率设置CAN 总线无

19、时钟,使用异步串行传输;波特率是 1 秒发送的数据位;2.16 CAN 帧发送:发送 CAN 帧的步骤: 1.检测状态寄存器,等待发送缓冲区可用;2.填充报文到发送缓冲区;3.启动发送。SJA1000 具有一个 12 字节的缓冲区,要发送的报文可以通过寄存器 16-28 写入 ,也可通过寄存器 96-108 写入或读出设置发送模式1char SetSJASendCmd(unsigned char cmd) 2unsigned char ret;3switch (cmd) 4default:5case 0:6 ret = SetBitMask(REG_CAN_CMR, TR_BIT); / 正常

20、发送7break;8case 1:9 ret = SetBitMask(REG_CAN_CMR, TR_BIT|AT_BIT); / 单次发送10break;11case 2:12 ret = SetBitMask(REG_CAN_CMR, TR_BIT|SRR_BIT);/ 自收自发13break;14case 0xff:15ret = SetBitMask(REG_CAN_CMR, AT_BIT);/终止发送16break;1718return ret;19发送函数1unsigned char SJA_CAN_Filter8 = /定义验收滤波器的参数, 接收所有帧0x00, 0x00,

21、0x00, 0x00,2/ ACR0ACR330xff, 0xff, 0xff, 0xff4/ AMR0AMR35;6unsigned char STD_SEND_BUFFER11 = / CAN发送报文缓冲区70x08, / 帧信息,标准数据帧,数据长度= 880xEA, 0x60, /帧 ID = 0x75390x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa/帧数据10;11void main(void) /主函数,程序入口1213timerInit();/初始化14D1 = 0;15SJA1000_RST = 1; /硬件复位 SJA10001

22、6timerDelay(50); /延时 500ms17SJA1000_RST = 0;18SJA1000_Init(0x00, 0x14, SJA_CAN_Filter);/初始化 SJA1000 ,设置波特率为191Mbps20/ 无限循环, main()函数不允许返回21for(;) 22SJASendData(STD_SEND_BUFFER, 0x0);23timerDelay(100);/延时 1000ms2425为什么帧 ID 是 0x753 ,这与 CAN 帧在缓冲区的存储格式有关。终端电阻非常重要,当波特率较高而且没加终端电阻时,信号过冲非常严重。SJA1000 有 64 个字节的接收缓冲区( FIFO ),这可以降低对 MCU 的要求。 MCU 可以通过查询或中断的方式确定 SJA1000 接收到报文后读取报文。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1