logo资料库

can总线开发步骤(周立功公司).pdf

第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
资料共12页,剩余部分请下载后查看
广 州 周 立 功 单 片 机 发 展 有 限 公 司 w w w . z l g m c u . c o m CAN-bus 开发步骤 一 学习目标 CAN-bus Controller Area Network 即控制器局域网 是国际上应用最广泛的现场总线之一 起 先 CAN-bus 被设计作为汽车环境中的微控制器通讯 在车载各电子控制装置 ECU 之间交换信息 形成 汽车电子控制网络 比如 发动机管理系统 变速箱控制器 仪表装备 电子主干系统中 均嵌入 CAN 控 制装置 CAN-bus 是一种多主方式的串行通讯总线 基本设计规范要求有高的位速率 高抗电磁干扰性 而且 能够检测出产生的任何错误 当信号传输距离达到 10Km 时 CAN-bus 仍可提供高达 5Kbps 的数据传输 速率 由于 CAN 串行通讯总线具有这些特性 它很自然地在汽车 制造业以及航空工业中受到广泛应用 作为一种技术先进 可靠性高 功能完善 成本合理的远程网络通讯控制方式 CAN-bus 已被广泛 应用到各个自动化控制系统中 从高速的网络到低价位的多路接线都可以使用 CAN-bus 例如 在汽车电 子 自动控制 智能大厦 电力系统 安防监控等各领域 CAN-bus 都具有不可比拟的优越性 二 主要内容 2.1 学习方法 CAN-bus 是一门比较系统的技术 涉及的许多新技术来自于各个应用领域 其中 包含各类技术的产 品之间的关系是相辅相承 协作无间 才能构成一个实际运行的 CAN-bus 通讯网络控制系统 站在一个 实际项目的角度 可能只需要取其中一些环节 就足够于具体应用 许多与 CAN-bus 相关的知识点是紧 密衔接的 同时去理解两个知识点有可能比学习其中一个知识点效果更好 比如 熟练地运用 CAN 接口卡 或用户设备模块进行网络通讯 自然而然 就会对 CAN2.0A/B 协议与芯片加深理解 还能够同时掌握与 通讯协议相关的知识点 2.2 基础理论 由 BOSCH 制定的 CAN2.0A/B 协议 可能是 CAN-bus 技术中最枯燥的章节 单独地去理解这些 理论并不容易 最好的方法是多看几个从逻辑分析仪上捕获的 CAN-bus 帧信息波形 一边对照一边分析 另外 将 CAN 原型板与 CAN 接口卡构成一个 CAN-bus 通讯网络 例如 CANstarter 开发套件 然后进 行 CAN-bus 帧通讯 接收/发送/故障 等测试 会对理解 CAN2.0A/B 协议 起到比较好的帮助作用 下图是用示波器捕获的一个 CAN-bus 帧信息 数据帧 的波形 分别为 CAN-H CAN-L 引脚波形 相减即为差分信号 信号包括帧起始 仲裁场 控制场 数据场 CRC 场 应答场 帧结尾等部分 报文 传输由数据帧 远程帧 错误帧 过载帧表示和控制 数据帧/远程帧通过帧间空间相分隔 下图为 CAN-bus 标准报文帧的波形示意图 12 Arbitration Field 6 Control Field 8N (0 £ N £ 8) Data Field 15 CRC Field 2 Ack Field 7 End of Frame 0 0 0 0 1 1 1 1 1 1 1 1 1 11 bits Identifier 4 bits Data Length Code 15 bits CRC 图 2.1 CAN-bus 标准报文帧 下图为 CAN-bus 扩展报文帧的波形示意图 1
广 州 周 立 功 单 片 机 发 展 有 限 公 司 w w w . z l g m c u . c o m 32 Arbitration Field 6 Control Field 8N (0 £ N £ 8) Data Field 16 CRC Field 2 Ack Field 7 End of Frame 0 1 1 0 0 0 1 1 1 1 1 1 1 1 1 11 msb Identifier 18 lsb Identifier 4 bits Data Length Code 15 bits CRC 图 2.2 CAN-bus 扩展报文帧 下图为 CAN-bus 远程帧的波形示意图 32 Arbitration Field 6 Control Field 16 CRC Field 2 Ack Field 7 End of Frame 0 0 11 1 1 000 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 msb Identifier 18 lsb Identifier 0 15 bits CRC 4 bits Data Length Code 图 2.3 CAN-bus 远程帧 下图为 CAN-bus 错误帧的波形示意图 6 Error Flag 0 000000 0 0 0 0 0 0 0 6-12 bits 0 0 0 0 0 0 0 0 0 0 8 Error Delimiter 111 1 1 1 1 1 1 1 1 1 1 1 1 1 Superposition of Error Flags 图 2.4 CAN-bus 错误帧 例如 使用示波器捕获一个报文帧 标准数据帧 的 CAN-H CAN-L 波形分别如下 图 2.5 CAN-bus 数据帧波形 2
广 州 周 立 功 单 片 机 发 展 有 限 公 司 w w w . z l g m c u . c o m 2.3 CAN 芯片 目前 许多大的半导体厂商都生产有各类 CAN 控制器 收发器芯片 但在欧洲 由 PHILIPS 生产的 SJA1000 芯片 CAN 收发器占领着大部分 CAN 应用领域 至 2002 年 累计已生产有 10 亿个 CAN 芯 片投入应用 对于不同的应用领域 应该向用户提供不同的芯片组合 包括合适的 CAN 收发器 CAN 控制器或者 内嵌 CAN 控制器的处理器 由 PHILIPS 生产的 CAN-bus 芯片分为以下几类 分类 型号 简介 32 位 ARM7 芯片 LPC2119/2192/2194 集成 2 路 CAN 通道 LQFP64 小型封装 LPC2290/2292/2294 集成 2/4 路 CAN 通道 TQFP144 封装 8 位 8xC51 芯片 P87C591 集成 PeliCAN 控制器的增强型 MCU 独立 CAN 控制器 SJA1000 应用最广的独立 CAN 控制器 通用 CAN 收发器 高速 CAN 收发器 PCA82C250 PCA82C251 TJA1050 TJA1040 通用 远程通讯 适合工业控制 适合 DeviceNET 网络 控制应用 适合汽车电子 DeviceNET 网络 标准 LIN 收发器 TJA1020 适合汽车电子等 其他器件 十多个型号的 DC/DC 模块 其他 CAN-bus 元件等 表 2.1 ZLGCAN 系列芯片 针对这一系列芯片 ZLGCAN 已制作了很容易编程的程序库 使得工程师可以在不需要深入理解 CAN2.0 协议及芯片内部结构的基础上 就能方便地实现 CAN 通讯 比如 针对 SJA1000 芯片 就只需 调用 初始化 发送 接收 命令 并编写简单的 错误处理 程序 就可以实现与 CAN 相关的所有操作 从而可以将更多的精力用于产品的通讯 协议 功能 操作 显示等方面 l 基于 ARM7 的 FullCAN 函数库 V1.00 l P87C591 CAN 控制器 PeliCAN 模块 V1.00 l P87C591 的 A/D 转换控制器函数 l SJA1000 PeliCAN 函数库 V1.30 l SJA1000 BasicCAN 函数库 V1.00 2.4 CAN 工具 一旦准备启动一个具体的 CAN-bus 项目 首先就会选择合适的 CAN-bus 开发工具 ZLGCAN 系列 CAN 工具品种众多 规格齐全 能够向客户提供多种层次的选择 不仅具有与国际产品相近甚至超越的性 能 又有适合中国国情的价格 性能价格比一流 由于 CAN-bus 是一个串行通讯网络 单个 CAN 节点的调试存在局限性 也会产生许多困难 并不 能够代表实时运行的真正 CAN-bus 网络 因此 在网络中需要建立 1 个 基 于 PC 的 CAN 节 点 可 使 用 ZLGCAN 接口卡等 才能够有效地对 CAN-bus 网络通讯进行 实时 调试/监控 ZLGCAN 可以提供 CANstarter 开发套件 CAN 原型开发板 芯片仿真器 CAN 接 口 卡 CAN 分析仪 CAN 协议转换器 CAN 中 继 器等产品 部分型号已经通过多个行业 企业的实际运行测试 其 中包括很多知名的大型企业 产品性能与质量受到客户信赖 3
广 州 周 立 功 单 片 机 发 展 有 限 公 司 w w w . z l g m c u . c o m 2.5 通讯协议 在建立一个实际运行的 CAN-bus 通讯网络时 由 CAN 底层硬件来实现对物理层 数据链路层的控 制 CAN2.0 协议规定的通讯检错机制已足够保证 CAN-bus 通讯网络具有非常高的可靠性 但对于用户 协议层 仍然需要制定或选择合适的通讯协议 对网络上的通讯数据流进行解析与管理 下图为 CAN-bus 通讯层的概念 CAN-bus 通讯层概念 发送节点 应用协议层 通讯数据 接收节点 应用协议层 数据链路层 ID + Data ... ID + data 数据链路层 物理层 CAN_L CAN_L CAN_H 物理层 CAN-bus 图 2.7 CAN 通讯层概念 对于普通的 CAN-bus 应用领域 采用通常的 命令 响应 模式通讯协议 即可以实现非常可靠 且有效的 主 从 通讯网络 对于需要进行大量数据交换 或者通讯方式灵活的 CAN-bus 网络 也可 以采用一些标准的多主通讯协议 比如 HilonB 协议 或者采用 CAN2.0 协议中远程帧定义 在汽车电子产品领域 通常可参考或直接采用 SAE J1939 等一系列国际标准规范 在电力通讯设计领域 DeviceNET V2.0 规范已被采纳为中国国家标准 是未来数年中电力通讯产品 的通讯规约领导者 在智能楼宇通讯领域 建议使用 Modbus 协议或沿用原 RS485 模式等 主 从 协议 以保持产品 的可持续发展 并可以节省开发人力资源 2.6 CAN 附件 在 CAN-bus 通讯网络的建设中 还需要涉及其他相关联的技术支持 比如 网络保护 通讯电缆 CAN-bus 网络最初被设计作为汽车环境中的微控制器通讯 在车载各电子控制装置 ECU 之间交换信 息 形成汽车电子控制网络 基本设计规范要求有高的位速率 高抗电磁干扰性 而且能够检测出产生的 任何错误 主要是用在强干扰环境 室外远程通讯等场合 因此 CAN-bus 收发器已具备一些保护功能 新一代收发器 比如 TJA1040 TJA1041 TJA1054 等 更具备很完善的保护功能 但在一些远程通讯 场合或强干扰通讯的场合 还需要根据实际情况 考虑增加一些附加网络保护设施 比如过电压保护 TVS 温度保护 PTC 共模扼流圈 防雷击装置 极性保护等 以防止雷击 浪涌 极性反接等 以预防故障发 生 起良好的保护作用 对于通讯电缆 使用国标 AWG18 截面积为 0.75 mm2 的普通双绞线 一般可以保证在 1KM 距离下实现 CAN 可靠通讯 如果 CAN 通讯距离超过 1KM 则建议通讯电缆线的截面积大于 1.5mm2 4
广 州 周 立 功 单 片 机 发 展 有 限 公 司 w w w . z l g m c u . c o m 常规方式是随通讯距离的加长而适当加大电缆线截面积 在强干扰的应用环境下 建议选择有屏蔽层的通 讯电缆线 此时 通讯电缆线应单端良好接地 如果设备要求符合 CAN 高层协议 DeviceNET CANopen 等 则通讯电缆也必须符合对应规范中的要求 三 重点分析 3.1 CAN-bus 历程 虽然 CAN-bus 被称为最易于设计的现场总线技术 但是 如果从头至尾设计一套 CAN-bus 通讯 网络 即使对非常熟悉 MCU 的用户来说 这也不是那么简单的事 ZLGCAN 提供了非常完善的 CAN-bus 技术支持 依靠 ZLGCAN 提供的设计文档 开发工具等帮助 客户甚至只需花费一个工作周的时间 即可以设计并调试完成一个真正的基本 CAN-bus 通讯网络 要知 道 原来这些工作原先可能要花费一个单片机设计工程师近半年的工作时间 下面 我们就以设计并调试一个完整的 CAN-bus 通讯网络 包括芯片为 SJA1000 的 2 个通讯节点 为例 详细介绍这个学习 设计 调试的过程 CAN-bus 节点 (SJA1000 芯片) CAN-bus 节点 (SJA1000 芯片) CAN-bus 网络 图 3.1 一个简单的 CAN-bus 通讯网络 3.1.1 CAN-bus 网络的连接 CAN-bus 网络采用直线拓朴结构 在一个网络上至少存在 2 个 CAN-bus 节点 在总线的 2 个终端 各需要安装 1 个 120Ù 终端电阻 如果节点数目大于 2 中间节点就不要求安装 120Ù 终端电阻 对于干线 其通讯距离与 CAN-bus 网络通讯波特率成反比 在 5Kbps 下能够传输 10Km 距离 在 1Mbps 下能够传输 40m 距离 对于支线 其长度一般不应超过 3 米 如果直接采用国际标准规范 则对 干线 支线有更严格的要求 CAN-bus 信号采用差分传输方式 所有节点的 CAN_H 连接在一起 CAN_L 连接在一起 当总线上 有 1 信号时 CAN_H CAN_L 之间压差 0.9V 称 显性 当总线上有 0 信号时 CAN_H CAN_L 之间压差 0.4V 称 隐性 图 3.2 CAN-bus 信号的差分波形 3.1.2 CAN-bus 单元电路设计 5
广 州 周 立 功 单 片 机 发 展 有 限 公 司 w w w . z l g m c u . c o m 我们以一个参考的 CAN-bus 节点电路为例 进行分析 介绍 这个电路的原图 Protel 格式 存放 在 CANstarter-I 开发套件中 这是一个由 P87C52+SJA1000+PCA82C250+ 电气隔离 组成的 CAN-bus 标准节点电路 SJA1000 芯片选用 XDATA 空间的 0x7F00 地址页 如果是一个简单的应用 则可以省略电气隔离电路 如果用于强干扰场合 则需要补充前面章节所述的保护电路 SJA1000 芯片的复位电路受 P87C52 芯片 IO 引脚控制 这一点需要注意 这是一个非常成熟且可靠的电路 建议直接采用 VCC VCC R1 100K 2 RST_H R U2 MAX810L RST_H RST_CAN INT_CAN 1 2 3 4 5 6 7 8 9 10 11 P15 P16 P17 RST P30 NIC P31 P32 P33 P34 P35 U1 P87C52 (TQFP-44) P04 P05 P06 P07 EA NC ALE PSEN P27 P26 P25 33 32 31 30 29 28 27 26 25 24 23 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 RP1 1 VCC AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 2 3 4 5 6 7 8 9 103 R2 10K VCC RST_CAN ALE A15 VCC R3 10K RST_C1 Q1 8050 WR RD Y1 16M C1 C2 C3 30p C4 30p XTAL3 Y20 16M XTAL4 AD6 AD7 ALE A15 RD WR GND XTAL3 XTAL4 VCC TX0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 R5 10K U6 SJA1000T(SO-28) AD6 AD7 ALE/AS CS RD/E WR CLKOUT VSS1 XTAL1 XTAL2 MODE VDD3 TX0 TX1 AD5 AD4 AD3 AD2 AD1 AD0 VDD1 VSS2 RX1 RX0 VDD2 RST INT VSS3 VCC R6 10K R7 10K 28 27 26 25 24 23 22 21 20 19 18 17 16 15 AD5 AD4 AD3 AD2 AD1 AD0 VCC GND RX1 RX0 VCC RST_C1 INT_CAN GND RX1电平 RX1 SJA1000地址 0x7F00 U3 6N137 VCC R8 470 R9 10K VCC TX0 RX0 A K U4 6N137 VCC VE 2 3 8 7 6 5 VCC VE A K CAN_+5V 8 7 6 5 CAN_V- CAN_+5V 2 3 R11 470 VCC CAN_+5V 4 3 2 1 Vin +Vout GND 0V U7 B0505S-1W C5 R10 CAN_V- R4 10K 1 2 3 4 U5 PCA82C250 TXD GND VCC RXD S CANL CANH Vref CAN_V- 8 CANL CANH 6 7 5 COM2 CAN_male CAN_V- 1 6 2 7 3 8 4 9 5 R12 120 R47 1M C6 103 FG2 图 3.3 CAN-bus 参考单元电路 3.1.3 芯片控制程序的编写 在 CAN-bus 网络中 通讯的数据格式有 2 种 CAN2.0A 格式 11 位 ID 码 也称 BasicCAN 模式 CAN2.0B 格式 29 位 ID 码 也称 PeliCAN 模式 PeliCAN 模式的通讯具有更优秀的表现 且可以兼容 BasicCAN 模式的通讯 因此 对于新开发的 CAN-bus 设计项目 一般都选择 PeliCAN 模式进行通讯 ZLGCAN 提供有 BasicCAN 模式 PeliCAN 模式下 SJA1000 芯片的操作函数库 支持 A51 C51 语言直接调用 使用非常灵活 因此 我们直接在项目中调用 SJA1000_PELI 函数库的 C51 语言版 无 需自行开发关于 SJA1000 的控制程序 对 SJA1000 芯片的操作主要由 3 个功能环节组成 初始化 发送帧 接收帧 SJA1000 芯片的初始化过程比较繁琐 好在 CANstarter-I 开发套件中也提供有完整的初始化示范 源程序 直接调用即可 根据程序分析 SJA1000 芯片的初始化工作分成 10 个步骤完成 步骤 操作对象 函数定义 REG_CAN_TEST REG_CAN_CMR REG_CAN_CDR REG_CAN_OCR REG_CAN_BTRx REG_CAN_ACRx REG_CAN_AMRx REG_CAN_CMR REG_CAN_CMR REG_CAN_IER SJATestInterface() SJAEntryResetMode() SJASetClockDivision() SJASetOutControl() SJASetBandRateStandard() SJASetAccCode() SJASetAccMask() SJAQuitResetMode() SJASystemPrgCMD() WriteSJAReg() 表 3.1 SJA1000 芯片初始化过程 6 1 2 3 4 5 6 7 8 检测硬件连接是否正确 进入复位状态 设置时钟分频寄存器 设置输出控制寄存器 设置通讯波特率 设置代码验收寄存器 设置代码屏蔽寄存器 退出复位状态 设置工作模式 9 10 设置中断使能寄存器
广 州 周 立 功 单 片 机 发 展 有 限 公 司 w w w . z l g m c u . c o m 注意 SJA1000 初始化时 必须确定芯片的硬件复位已经完成 即复位引脚已变为高电平状态 通过 SJA1000 芯片发送 CAN 帧报文 接收 CAN 帧报文 也可以在 SJA1000_PELI 函数库中直接 调用对应的函数 SENDSJADATA(unsigned char *SEND_BUFFER,unsigned char len); REVSJADATA(unsigned char *REV_BUFFER,unsigned char len); 在使用发送函数 SENDSJADATA 和接收函数 REVSJADATA 时 注意其参数*SEND_BUFFER *REV_BUFFER 中所指向的数据内容应符合 CAN2.0B 协议帧格式 在节点设备运行的应用程序中 还需要完成的代码部分就是采用中断/查询方式读取 SJA1000 的中断 寄存器 这也与 SJA1000_PELI 函数库相关 直接调用以下函数 ReadSJAReg(REG_CAN_IR); 关于节点设备其他部分的功能程序 则参照通常的程序设计方法完成 3.1.4 通讯协议的编制 通讯协议的选择可以根据具体应用项目而决定 相关的详细情况请参考前一章节的有关内容 下面以通常的 命令 响应 模式为例 说明在此过程中需要注意的一些习惯事例 l 主节点发送命令时 遵循 主节点发命令 等从节点发回应 OK 模式 即主节点下达一命令 然后等待接收从节点发来的响应数据 再根据所接收数据的正 误 向应用程序报告此命令的执 行情况 l 在帧报文转输过程中 任一帧报文均包含有校验码 接收方需要对报文进行处理 与校验码比较 判断帧报文的传输正确性 l 当主节点发送命令后未收到响应 则尝试重发 由硬件或软件完成 累计达到设定的次数时 即向应用程序报告通讯失败 请求进行检测与维护 3.1.5 CAN-bus 网络的调试 CAN-bus是一个串行通讯网络 因而 单个节点的调试存在许多局限性 并不能够代表实时运行的 真正CAN-bus网络 使用PeliCAN模式支持的 自收自发 测试功能可以检测节点本身的CAN硬件电路功 能 但也不能够测试与CAN-bus网络密切相关的通讯参数 比如 通讯波特率 验收滤波器 总线仲裁 网络负载等相关参数 借助于一套有ZLGCANtest通用测试软件支持ZLGCAN接口卡 就可以方便地监听CAN-bus网络通 讯数据 或者模拟单个CAN-bus节点的行为 向网络发送CAN-bus帧报文 以提供给其它节点接收信息 使用CANalyst分析软件 可以实时监控每一秒的CAN-bus总线负载率 总线传输数据时间/总时间 以确保系统运行在可靠的环境下 另外 借助其标识符编辑功能 还可以将总线上捕获的帧报文按易读的 格式显示 在强大的开发工具帮助下 CAN-bus网络的调试也就变得十分容易而简单 7
广 州 周 立 功 单 片 机 发 展 有 限 公 司 w w w . z l g m c u . c o m 图 3.4 ZLGCANtest 测试软件界面 经历以上步骤 即已成功建立一个CAN-bus通讯网络 3.2 CAN-bus 应用 对于一个 CAN-bus 应用人员 所关心的重点多会集中于 CAN-bus 网络能够真正实施的实际运行项 目 CAN-bus 通讯网络功能强大 领先于众多串行通讯应用领域 在具体的应用项目中 客户需要适当 裁 剪 以经济 可靠的方式组建自己的 CAN-bus 通讯网络 l 组态开发 为能够使更多的用户可以容易地体验 设计 CAN-bus 通讯网络 ZLGCAN 系列产 品提供 OPC 接口 支持在流行的组态软件环境 国内 MCGS KingView 国际 Intouch iFix 等 开发用户自己的 CAN-bus 网络项目 如果大家在设计/应用过程中 了解到或掌握与 CAN-bus 网络相关的通讯规范 产品信息 控制网络 拓展应用等 请与 cantools@zlgmcu.com 邮箱联系 四 难点讲解 4.1 网络通讯连接 所有符合 CAN2.0 规范的节点可以连接在一起 构成一个直线拓朴结构的 CAN-bus 通讯网络 在网 络的 2 个终端 各需要安装 1 个 120Ù 终端电阻 中间节点不要求安装 120Ù 终端电阻 同一个 CAN-bus 通讯网络中 所有 CAN 节点的通讯波特率必须一致 CAN-bus 网络的干线长度与 通讯波特率成反比 通讯波特率为 5Kbps 时能够传输 10Km 距离 为 1Mbps 时能够传输 40m 距离 符合 CAN2.0B PeliCAN 规范的 CAN 节点可以接收或者发送符合 CAN2.0B BasicCAN 规范 的 CAN 帧报文 反之则不行 即 CAN2.0B 规范是扩展的规范 并向下兼容 CAN2.0A 规范 只有正确初始化的 CAN 节点才是 CAN-bus 网络中的可见工作节点 不上电或未初始化为工作状态 的 CAN 节点在 CAN-bus 网络中是不可见的 即使它们已经存在物理连接 8
分享到:
收藏