具体描述
内容简介
CAN总线嵌入式开发—从入门到实战(第2版)
CAN总线通信技术广泛应用于工业自动化、汽车电子、楼宇建筑、医疗器械、电梯网络、工程机械等行业,市场每年对该类控制产品需求量巨大。本书从目前几种流行的CAN通信控制电路的器件入手,结合CAN总线通信学习板,详细介绍了CAN总线嵌入式应用开发技术。
本书内容主要包括CAN控制器和单片机的接口技术、CAN总线在A/D采集控制板传输中的应用、支持片上CANopen协议的LPC11Cxx系列微控制器的CAN应用设计及CAN总线在酒店客房智能化系统中的工程应用。每一种实例都从方案论证、硬件电路设计、软件程序设计方面进行庖丁解牛式的论述,并且书中所有硬件电路均制作出电路板,所有程序均在电路板上调试运行通过。本书是再版书,相比第1版,本书更正了一些错误,并增加了部分内容。
本书旨在为广大嵌入式CAN总线通信技术的研发者提供实战化的软、硬件技术参考,书中的电路图和源程序可以直接拿来参考运用,大大提高了工程师的工作效率。
目录
第1章 CAN 总线基础知识………………………………………………………… 1
1.1 CAN 总线简介………………………………………………………………… 1
1.2 CAN 总线基本工作原理……………………………………………………… 2
1.3 CAN 的标准格式和扩展格式………………………………………………… 3
1.4 CAN 的节点硬件构成………………………………………………………… 3
1.5 CAN 控制器…………………………………………………………………… 4
1.6 CAN 收发器…………………………………………………………………… 5
1.7 CAN 总线接口电路保护器件………………………………………………… 6
1.7.1 共模扼流圈……………………………………………………………… 6
1.7.2 ESD防护………………………………………………………………… 7
1.7.3 CAN 总线网络保护……………………………………………………… 7
1.8 CAN 总线通信过程…………………………………………………………… 8
1.9 CAN 总线控制器芯片滤波器的作用………………………………………… 9
1.10 CAN 总线的报文格式……………………………………………………… 10
1.10.1 数据帧………………………………………………………………… 10
1.10.2 远程帧………………………………………………………………… 13
1.10.3 错误帧………………………………………………………………… 14
1.10.4 过载帧………………………………………………………………… 15
1.10.5 帧间空间……………………………………………………………… 16
1.11 振荡器容差………………………………………………………………… 17
1.12 位定时要求………………………………………………………………… 17
1.13 同 步……………………………………………………………………… 18
1.14 位流编码及位填充………………………………………………………… 19
1.15 CAN 总线错误处理………………………………………………………… 20
1.15.1 错误类型……………………………………………………………… 20
1.15.2 错误标志……………………………………………………………… 20
1.16 故障界定…………………………………………………………………… 21
1.16.1 故障界定的方法……………………………………………………… 21
1.16.2 错误计数规则………………………………………………………… 21
1.16.3 错误标记及错误中断类型…………………………………………… 22
1.17 CAN 网络与节点的总线拓扑结构………………………………………… 23
1.17.1 总线结构拓扑………………………………………………………… 23
1.17.2 CAN 总线通信距离…………………………………………………… 24
1.17.3 CAN 中继器…………………………………………………………… 25
1.17.4 CAN 网桥……………………………………………………………… 27
1.17.5 CAN 集线器…………………………………………………………… 28
1.17.6 CAN 网关……………………………………………………………… 28
1.18 CAN 总线传输介质………………………………………………………… 29
1.18.1 双绞线………………………………………………………………… 29
1.18.2 光 纤………………………………………………………………… 33
1.19 改善电磁兼容性的措施…………………………………………………… 34
1.19.1 增加电阻值抑制共模干扰…………………………………………… 34
1.19.2 分开的总线终端……………………………………………………… 35
1.19.3 斜率控制……………………………………………………………… 35
1.20 CAN 网络的实时性能及通信波特率的设置……………………………… 36
1.20.1 网络延时……………………………………………………………… 36
1.20.2 CAN 网络通信速率选择……………………………………………… 37
1.20.3 CAN 网络通信速率的一致性………………………………………… 38
1.21 CAN 总线节点设备的电源………………………………………………… 40
第2章 CAN 控制器SJA1000与8051系列单片机接口设计…………………… 44
2.1 CAN 控制器SJA1000 ……………………………………………………… 44
2.1.1 SJA1000引脚排列及其功能…………………………………………… 44
2.1.2 BasicCAN 模式下内部寄存器地址表………………………………… 47
2.1.3 PeliCAN 模式下内部寄存器地址表………………………………… 48
2.1.4 BasicCAN 和PeliCAN 模式的区别…………………………………… 50
2.1.5 8051系列单片机控制SJA1000的方式……………………………… 50
2.1.6 SJA1000的滤波器设置………………………………………………… 51
2.1.7 CAN 总线通信波特率的计算………………………………………… 56
2.1.8 SJA1000初始化流程…………………………………………………… 58
2.2 CAN 总线驱动器…………………………………………………………… 59
2.2.1 TJA1040概述………………………………………………………… 59
2.2.2 TJA1040功能………………………………………………………… 60
2.3 CAN 总线DC/DC光电隔离技术………………………………………… 61
2.3.1 DC/DC电源隔离模块………………………………………………… 61
2.3.2 高速光耦6N137 ……………………………………………………… 64
2.4 51系列单片机CAN 总线学习板实物图…………………………………… 64
2.5 51系列单片机CAN 总线学习板硬件电路设计…………………………… 66
2.5.1 电路原理图……………………………………………………………… 66
2.5.2 SJA1000晶振的电路设计……………………………………………… 71
2.6 双节点CAN 总线通信……………………………………………………… 73
2.6.1 程序流程框图设计……………………………………………………… 74
2.6.2 SJA1000的硬件接口地址定义………………………………………… 75
2.6.3 程序头文件定义说明…………………………………………………… 76
2.6.4 子函数详解……………………………………………………………… 80
2.6.5 完整的CAN 总线学习板发送源程序………………………………… 89
2.6.6 完整的CAN 总线学习板CAN 转232串口源程序………………… 95
2.6.7 STC89C52单片机串口下载程序…………………………………… 102
2.7 多节点CAN 总线系统的程序设计……………………………………… 104
2.7.1 多节点CAN 总线系统的连接……………………………………… 104
2.7.2 多节点CAN 总线系统地址的定义及功能实现…………………… 105
2.7.3 多节点CAN 总线系统通信数据含义……………………………… 105
2.7.4 多节点CAN 总线系统程序流程图………………………………… 107
2.7.5 多节点CAN 总线通信中的从节点源程序………………………… 108
2.8 CAN 总线地址设置详解…………………………………………………… 113
2.8.1 BasicCAN 的ID设置方法…………………………………………… 113
2.8.2 PeliCAN 的ID设置方法…………………………………………… 113
第3章 CAN 控制器MCP2515与8051系列单片机接口设计………………… 115
3.1 CAN 控制器MCP2515 …………………………………………………… 115
3.1.1 MCP2515概述………………………………………………………… 115
3.1.2 MCP2515的内部寄存器……………………………………………… 118
3.1.3 8051系列单片机怎样控制MCP2515 ……………………………… 119
3.2 CAN 总线学习板(MCP2515)实物图…………………………………… 119
3.3 CAN 总线学习板(MCP2515)硬件电路设计…………………………… 120
3.3.1 电路原理图…………………………………………………………… 120
3.3.2 晶振的选择及CAN 通信波特率的计算…………………………… 125
3.4 双节点通信系统的程序设计……………………………………………… 127
3.4.1 程序头文件定义说明………………………………………………… 127
3.4.2 子函数详解…………………………………………………………… 132
3.4.3 完整的CAN 总线学习板发送源程序……………………………… 140
3.4.4 完整的CAN 总线学习板CAN 转232串口源程序………………… 144
3.5 芯片SJA1000和MCP2515在滤波器设置时的区别…………………… 147
第4章 CAN 总线在A/D 采集控制板传输中的应用…………………………… 149
4.1 ADμC812单片机简介……………………………………………………… 149
4.1.1 ADμC812单片机主要性能及引脚说明……………………………… 149
4.1.2 ADμC812单片机8路12位ADC简介…………………………… 151
4.1.3 ADμC812单片机ADC基准电压…………………………………… 151
4.1.4 ADμC812单片机ADC的输入驱动………………………………… 153
4.1.5 ADμC812单片机ADC工作模式…………………………………… 155
4.2 带有CAN 总线的A/D采集控制板实物图……………………………… 157
4.3 系统硬件电路设计………………………………………………………… 158
4.3.1 电路原理图…………………………………………………………… 158
4.3.2 采集信号的调理……………………………………………………… 163
4.4 系统程序设计……………………………………………………………… 164
4.4.1 流程图………………………………………………………………… 164
4.4.2 子函数详解…………………………………………………………… 165
4.4.3 控制源程序…………………………………………………………… 165
4.4.4 ADμC812单片机CAN 总线学习板串口下载程序………………… 173
4.5 带有Flash存储器的CAN 总线采集控制电路………………………… 176
4.5.1 28F320J5存储器简介………………………………………………… 176
4.5.2 存储器芯片与单片机CPU 工作速度匹配问题…………………… 179
4.5.3 单片机与28F320J5的连接………………………………………… 179
4.5.4 ADμC812单片机构成的带有存储功能的振动测量控制板………… 179
第5章 基于LPC11Cxx系列微控制器的CAN 应用设计……………………… 198
5.1 LPC11Cxx系列微控制器………………………………………………… 198
5.1.1 简 介………………………………………………………………… 198
5.1.2 器件信息……………………………………………………………… 198
5.1.3 功能介绍……………………………………………………………… 199
5.1.4 引脚描述……………………………………………………………… 199
5.2 CAN 寄存器………………………………………………………………… 200
5.2.1 CAN 寄存器汇总……………………………………………………… 202
5.2.2 报文接口寄存器……………………………………………………… 207
5.2.3 报文处理程序寄存器………………………………………………… 216
5.2.4 CAN 时钟分频器寄存器……………………………………………… 219
5.3 LPC11Cxx系列微控制器的片上CAN 控制器的结构………………… 219
5.4 基于微控制器和非隔离CAN 收发器的电路…………………………… 220
5.4.1 器件简介……………………………………………………………… 220
5.4.2 接口电路设计………………………………………………………… 221
5.5 基于微控制器和隔离CAN 收发器的电路……………………………… 222
5.5.1 器件简介……………………………………………………………… 222
5.5.2 接口电路设计………………………………………………………… 223
5.6 无须扩展外部CAN 控制器与CAN 收发器的CAN 接口电路………… 223
5.7 基于通用驱动库的CAN 应用编程……………………………………… 224
5.7.1 通用驱动库简介……………………………………………………… 224
5.7.2 CAN 应用编程流程…………………………………………………… 270
5.7.3 编程解决方案………………………………………………………… 271
5.8 应用示例———RS 232C/CAN 总线转换器……………………………… 293
5.8.1 示例简介……………………………………………………………… 293
5.8.2 工具介绍……………………………………………………………… 294
5.8.3 实现原理……………………………………………………………… 301
5.8.4 演示步骤……………………………………………………………… 301
5.9 程序编写…………………………………………………………………… 304
5.9.1 宏配置………………………………………………………………… 304
5.9.2 变量定义……………………………………………………………… 305
5.9.3 主程序………………………………………………………………… 305
5.9.4 程序分解……………………………………………………………… 308
5.10 示例运行…………………………………………………………………… 311
5.10.1 配置上位机软件……………………………………………………… 311
5.10.2 运行示例程序………………………………………………………… 312
第6章 CAN 总线在酒店客房智能化系统中的应用…………………………… 316
6.1 功能要求及方案论证……………………………………………………… 316
6.1.1 控制说明……………………………………………………………… 317
6.1.2 网络结构……………………………………………………………… 319
6.1.3 硬件成本……………………………………………………………… 320
6.1.4 通信协议及CAN 地址分配………………………………………… 322
6.2 客房终端…………………………………………………………………… 322
6.3 客房终端硬件电路设计…………………………………………………… 323
6.3.1 电源部分电路设计…………………………………………………… 323
6.3.2 多按键中断资源设计………………………………………………… 324
6.3.3 多继电器驱动电路设计……………………………………………… 325
6.3.4 灯具调光电路设计…………………………………………………… 326
6.3.5 CAN 总线通信电路设计……………………………………………… 326
6.4 软件设计…………………………………………………………………… 328
6.4.1 程序流程图…………………………………………………………… 328
6.4.2 SJA1000控制器CAN 字节协议…………………………………… 328
6.4.3 客房终端源程序……………………………………………………… 330
6.4.4 CAN 总线控制模块…………………………………………………… 345
6.4.5 CAN 总线控制模块原理……………………………………………… 346
6.4.6 CAN 总线控制模块源程序…………………………………………… 347
参考文献……………………………………………………………………………… 356
前言/序言
自本书第1版和读者见面以来,我们可喜地看到CAN总线技术在我国各行业的应用越来越广泛。本书“电路共享、源码开放”的写作理念得到读者的广泛认可,这一点可以从读者反馈及当当网的销售评论中得以见证。
感谢行业内的读者对该书第一版中的错误提出的宝贵修改建议,本书第2版中已经对其进行了更正。应广大读者的要求,结合近几年的CAN项目工程实践,本版次中增加了改善电磁兼容性的措施、CAN网络的实时性能及通信波特率设置、CAN总线节点设备的电源等与工程应用结合非常紧密的内容。
本书在编写的过程中,注重代码程序的完整性,愿意和那些注重代码完整性的读者交流,研讨技术问题。有兴趣的读者可以发送电子邮件,期待和您进一步交流。
作者
2016年3月
CAN 总线嵌入式开发—从入门到实战(第2版) 深入浅出,引领您掌握 CAN 总线嵌入式开发的精髓与实践。 随着汽车电子、工业自动化、医疗设备等领域的飞速发展,高效、可靠的通信总线技术成为支撑这些应用的关键。在众多通信协议中,CAN(Controller Area Network)总线以其独特的优势,在嵌入式系统中扮演着至关重要的角色。它以其高稳定性、低成本、强大的抗干扰能力以及灵活的网络拓扑,成为实现分布式控制的理想选择。 本书《CAN 总线嵌入式开发—从入门到实战(第2版)》正是一本为致力于掌握 CAN 总线嵌入式开发技术的读者量身打造的权威指南。作为该领域的经典之作的全新升级,本书在内容深度、广度及实用性上都进行了全面的梳理与拓展,旨在帮助读者从零基础迅速入门,逐步深入,最终能够独立完成复杂的 CAN 总线嵌入式系统设计与开发。 本书的核心价值在于其系统性的知识体系构建和贴近实战的开发流程展现。 第一部分:奠定坚实基础,深入理解 CAN 总线原理 在正式进入嵌入式开发之前,对 CAN 总线本身有着深刻的理解至关重要。本书首先从最基础的概念入手,详细阐述了 CAN 总线的历史渊源、发展现状及其在各个行业的应用场景。读者将在这里了解到 CAN 总线为何能够成为工业界和汽车界广泛采用的标准,其核心优势体现在何处。 接着,本书将逐一剖析 CAN 总线的核心技术特性。这包括: 报文帧结构: 深入解析 CAN 报文的各个组成部分,例如仲裁场、控制场、数据场、CRC 校验以及应答场等。读者将理解不同字段的含义及其在保证通信可靠性中的作用。 通信机制: 详细介绍 CAN 总线的多主总线和事件触发通信方式。理解报文的优先级仲裁机制(基于 CSMA/CD+AMP)是掌握 CAN 总线通信的关键。本书将通过大量的图示和实例,清晰地解释不同优先级报文如何进行竞争,以及最终如何保证高优先级报文的优先发送,从而实现高效稳定的数据传输。 错误检测与处理: CAN 总线之所以稳定可靠,很大程度上归功于其强大的错误检测和处理机制。本书将深入讲解位错误、填充错误、CRC 错误、格式错误和确认错误等各种类型的错误,以及 CAN 控制器如何主动进行错误报告和错误帧的发送。同时,也会探讨总线关闭(Bus Off)等高级错误状态的管理。 物理层与电气特性: 了解 CAN 总线的物理层设计,包括差分信号传输、总线终端电阻的作用,以及不同 CAN 标准(如 CAN FD)在传输速率和数据吞吐量上的提升。 通过这一部分的学习,读者将建立起对 CAN 总线通信原理的全面认知,为后续的嵌入式开发打下坚实的基础。 第二部分:迈入实战,掌握嵌入式开发的关键技能 理论的海洋固然重要,但脱离实践的知识是空洞的。本书的精华之处在于将抽象的 CAN 总线原理与具体的嵌入式开发紧密结合,带领读者一步步走向实战。 硬件选型与配置: 针对不同的嵌入式应用场景,本书将引导读者选择合适的微控制器(MCU)平台,并详细介绍常见的 CAN 控制器接口。读者将学习如何根据项目需求,从众多的 MCU 系列中做出明智的选择,并了解不同 MCU 系列的 CAN 外设特性。 软件开发环境搭建: 熟悉嵌入式开发流程的读者会知道,高效的开发环境是事半功倍的保证。本书将详细介绍常用的嵌入式集成开发环境(IDE),以及如何进行 CAN 驱动程序的开发和调试。无论是使用特定的 MCU SDK,还是利用通用的 RTOS(实时操作系统)框架,本书都会提供清晰的指导。 CAN 驱动程序设计: 这是本书的重头戏。读者将学习如何编写底层的 CAN 驱动程序,包括: CAN 控制器初始化: 如何配置 CAN 控制器的波特率、工作模式(如正常模式、回环模式、静默模式等)以及邮箱(Mailbox)的分配。 报文发送: 讲解如何构造 CAN 报文,填写标识符、数据长度码(DLC)以及数据内容,并将报文成功发送到总线上。 报文接收: 介绍如何配置接收滤波,以精确地接收目标报文,并讲解如何从接收邮箱中读取接收到的报文数据。 中断处理: 深入讲解 CAN 中断的原理,包括发送完成中断、接收中断、错误中断等,并指导读者如何编写高效的中断服务程序(ISR),以实现实时高效的数据处理。 RTOS 与 CAN 总线集成: 在许多复杂的嵌入式系统中,实时操作系统(RTOS)是必不可少的。本书将重点讲解如何将 CAN 总线通信与 RTOS 相结合。这包括: 任务设计: 如何设计独立的任务来处理 CAN 报文的发送和接收,以及如何利用 RTOS 的同步机制(如信号量、消息队列)来协调任务间的通信。 中断与 RTOS 的配合: 探讨如何在 RTOS 的中断上下文中安全地处理 CAN 中断,以及如何通过发送信号量或消息队列来唤醒等待的任务。 常用 RTOS 平台的 CAN 示例: 可能会针对 FreeRTOS、RT-Thread 等流行的 RTOS,提供具体的 CAN 应用示例,帮助读者快速上手。 第三部分:进阶应用与实战项目,夯实技术能力 在掌握了 CAN 总线的基础原理和核心开发技能后,本书将带领读者进入更高级的领域,并通过一系列贴近实际的开发项目,巩固所学知识,提升解决实际问题的能力。 CAN FD(Flexible Data-Rate)深入解析: 随着数据量的不断增加,传统的 CAN 2.0B 速率已显不足。本书将详细介绍 CAN FD 的优势,包括更高的比特率、更大的数据载荷,以及如何对现有 CAN 应用进行升级以支持 CAN FD。读者将学习 CAN FD 报文的帧结构差异,以及在硬件和软件上需要进行的相应调整。 CAN 协议栈的理解与应用: 在实际应用中,我们往往需要更高级别的协议来规范 CAN 总线上的数据通信。本书将介绍一些常见的 CAN 协议栈,例如: J1939: 在商用车领域广泛应用,本书将介绍 J1939 的基本概念、消息格式以及如何在嵌入式系统中实现 J1939 协议栈。 CANopen: 在工业自动化领域应用广泛,本书将详细讲解 CANopen 的对象字典(Object Dictionary)、服务数据对象(SDO)、过程数据对象(PDO)和网络管理(NMT)等关键概念,并提供相应的开发指南。 自定义协议设计: 对于一些特定的应用场景,可能需要设计自有的 CAN 通信协议。本书将提供设计高效、可靠自定义 CAN 协议的原则和方法。 CAN 总线网络设计与调试: 一个完整的 CAN 应用不仅仅是单个节点的开发,更重要的是整个网络的协同工作。本书将讨论: 网络拓扑选择: 如何根据应用需求选择合适的 CAN 网络拓扑。 报文 ID 分配策略: 讲解如何合理分配 CAN 报文的标识符,以避免冲突,并优化总线利用率。 总线负载分析与优化: 如何通过工具和方法来分析 CAN 总线的负载情况,并采取有效措施来降低总线负载,提高通信效率。 CAN 总线故障诊断与排除: 提供实用的方法和工具,帮助读者快速定位和解决 CAN 总线通信中出现的各种问题。 典型实战项目: 本书将提供几个完整的、具有代表性的实战项目,例如: 多节点分布式数据采集系统: 使用 CAN 总线连接多个传感器节点,并将采集到的数据统一发送到主控节点。 电机控制系统: 通过 CAN 总线实现主控制器与电机驱动器之间的通信,实现精确的电机速度和位置控制。 车载诊断(OBD-II)接口开发: 学习如何通过 CAN 总线与车载诊断系统进行交互,读取车辆故障码和实时数据。 工业机器人通信: 使用 CANopen 或自定义协议实现机器人各关节模块与主控制器之间的通信。 智能家居总线控制: 将 CAN 总线应用于智能家居设备的互联互通。 这些实战项目将涵盖从硬件连接、软件编写、参数配置到整体调试的全过程,让读者在实践中深化理解,掌握解决复杂问题的能力。 本书的亮点特色: 由浅入深,循序渐进: 结构清晰,逻辑严谨,从基础概念到高级应用,层层递进,适合不同层次的读者。 理论与实践并重: 既有对 CAN 总线原理的深入剖析,又有大量的代码示例和实战项目,确保读者学以致用。 权威性与前沿性结合: 融合了 CAN 总线最新的发展趋势,例如 CAN FD 的应用,以及各种主流的协议栈介绍。 丰富的图示与案例: 大量的原理图、时序图、报文结构图以及代码片段,帮助读者更直观地理解抽象概念。 贴近实际开发环境: 针对当下流行的 MCU 平台和 RTOS 进行了详细介绍和示例演示。 强调调试技巧: 提供了实用的 CAN 总线调试方法和工具使用指南,帮助读者快速定位和解决问题。 适合读者群体: 嵌入式系统初学者: 希望快速掌握 CAN 总线通信技术的工程师和学生。 有一定嵌入式开发经验的工程师: 想要深入了解 CAN 总线,并将其应用于实际项目的开发者。 汽车电子、工业自动化、医疗设备等行业的从业人员: 需要掌握 CAN 总线技术以应对工作需求的专业人士。 对物联网(IoT)和分布式控制系统感兴趣的读者。 《CAN 总线嵌入式开发—从入门到实战(第2版)》不仅仅是一本书,更是您在 CAN 总线嵌入式开发领域的一位得力伙伴。它将陪伴您从零开始,逐步成长为一名出色的 CAN 总线开发者,为您的职业生涯开辟更广阔的道路。无论您是想为下一代智能产品注入新的活力,还是想优化现有的工业控制系统,本书都将为您提供坚实的技术支撑和宝贵的实践经验。 立即翻开本书,开启您的 CAN 总线探索之旅!