《基于构件化的嵌入式系统设计》 课件 项目8 利用CAN实现多机通信_第1页
《基于构件化的嵌入式系统设计》 课件 项目8 利用CAN实现多机通信_第2页
《基于构件化的嵌入式系统设计》 课件 项目8 利用CAN实现多机通信_第3页
《基于构件化的嵌入式系统设计》 课件 项目8 利用CAN实现多机通信_第4页
《基于构件化的嵌入式系统设计》 课件 项目8 利用CAN实现多机通信_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统设计

为了实现嵌入式系统设计的可移植和可复用,嵌入式硬件和嵌入式软件均采用构件化的设计思想,即对嵌入式硬件和嵌入式软件进行封装,供系统设计者调用,并倡导嵌入式软件分层设计的理念,以大幅度降低嵌入式技术学习难度和开发难度。

本书特色:项目任务驱动,突出学以致用,注重实践创新。每个项目且均采用了“通用知识”→“嵌入式构件设计”→“应用层程序设计”→“学以致用与创新”的学习流程。采用“搭积木”的思想,逐步提高嵌入式系统设计能力。

本书可作为高等学校电子信息类、计算机类、自动化类等专业的嵌入式系统设计教材,也可作为嵌入式技术培训教材,还可供从事嵌入式技术开发的工程技术人员参考。项目1:GPIO基础应用—实现闪灯和开关状态检测与控制功能项目2:利用定时中断实现频闪灯项目3:GPIO和定时器的综合应用—实现数码管显示、键盘测控、测温功能项目4:利用UART实现上位机和下位机的通信项目5:利用

Timer

实现PWM和输入捕获功能项目6:利用

ADC

设计简易数字电压表项目7:利用SPI实现多机串行通信项目8:利用CAN实现多机通信教

项目8利用CAN实现多机通信【项目导读】

CAN(ControllerAreaNetwork,控制器局域网)是德国Bosch公司针对汽车电子领域开发的具有国际标准的现场总线,由于CAN具有很强的可靠性、安全性和实时性,目前CAN广泛应用于汽车电子、工业控制、农业控制、机电产品等领域的分布式测控系统中。利用CAN可以很方便地实现多机联网。【学习目标】(1)理解CAN的通用知识,包括CAN的相关概念、硬件结构、通信原理和优点。(2)熟悉MCU的CAN主要特性和引脚,掌握MCU的CAN底层驱动构件的使用方法。(3)能够利用MCU的CAN底层驱动构件头文件进行多机之间的CAN应用层程序设计,并掌握CAN通信功能测试方法。*(4)熟悉MCU的CAN底层驱动构件源文件的设计方法。任务8.1

理解CAN的通用知识8.1.1CAN系统的总体构成和CAN节点的硬件结构120Ω120Ω负载电阻(终端电阻)的作用是防止反射波干扰CAN系统主要由若干个节点、两条数据传输线(CAN-H和CAN-L)及负载电阻组成。1、CAN系统的总体构成任务8.1

理解CAN的通用知识8.1.1CAN系统的总体构成和CAN节点的硬件结构2、CAN节点的硬件结构CAN节点的硬件结构主要由传感器、MCU、CAN控制器、CAN收发器、执行器组成。任务8.1

理解CAN的通用知识8.1.2CAN的网络通信原理1、CAN的网络结构:CAN控制器硬件实现CAN收发器硬件实现

CAN应用系统软件设计的主要任务是对其应用层程序进行设计应用层、数据链路层、物理层——实时性强任务8.1

理解CAN的通用知识8.1.2CAN的网络通信原理2、CAN的数据传输流程数据打包并/串转换数字信号→电压信号边说边听电压信号→数字信号验收过滤串/并转换数据解包ID

+长度+相关数据CRC应答信号任务8.1

理解CAN的通用知识8.1.2CAN的网络通信原理3、CAN总线电压信号与数字信号之间的关系CAN收发器11位以上的隐性位:空闲CAN-H与CAN-L的电压值具有何特点?任务8.1

理解CAN的通用知识8.1.2CAN的网络通信原理4、CAN的帧ID、数据优先级、数据的仲裁

CAN为多主工作方式,任一节点均可在任意时刻主动地向CAN总线上发送数据,而不分主从。

若有多个节点同时向CAN总线上发送数据,那么在CAN系统中是如何实现数据的仲裁(决定哪个数据先发,哪个数据后发)?——需要先理解帧ID和数据优先级的关系

节点发送的数据包实时性要求越高,优先级越高,对应的帧ID就越小。

原理:当多个节点同时向总线上发送数据时,总线上的结果是这多个数据“逻辑与”的值。节点A发送数据:

0节点B发送数据:

10—显性位1—隐性位0优先级高!总线上显示数据:

0在实际应用时,应该按照数据包的优先级,给每个数据包分配一个唯一的ID。注意:CAN协议要求ID的高7位不能同时为1。任务8.1

理解CAN的通用知识8.1.2CAN的网络通信原理4、CAN的帧ID、数据优先级、数据的仲裁

当一个节点向CAN总线上发送数据包时,首先向总线上发送自己的帧ID。

在发送帧ID的过程中,如果一个节点向总线上发送的数据和从总线上接收到的数据一致,那么该节点就可以继续向总线上发送数据;否则,该节点就要停止向总线上发送数据。

3个节点通过帧ID进行优先级竞争的结果:节点1首先获得总线使用权;在节点1将其数据包发送完毕后,若总线处于空闲状态,则系统会自动使节点2和节点3继续通过发送帧ID重新竞争总线的使用权(自动重发)。

在仲裁过程中,不会出现不同优先级数据包之间的相互破坏——“非破坏性仲裁”。【学以致用】CAN通信优先级分析及应用。任务8.1

理解CAN的通用知识8.1.2CAN的网络通信原理5、CAN验收过滤功能的实现【学以致用】

表8-1:CAN验收过滤应用分析。过滤器标识符寄存器:100101102

过滤器掩码寄存器:

-----

有关有关发送:101+数据A??接收放弃接收接收

放弃接收发送:102+数据A发送:***+数据A

过滤器掩码寄存器:

-----

无关无关例:三个节点:A(发送)、B(接收)、C(接收)

节点A节点B节点CCAN-BUS

帧ID过滤器掩码寄存器:

无关

-----

-----?接收过滤器标识符寄存器:100101102例:三个节点:A(接收)、B(发送)、C(发送)

节点A节点B节点CCAN-BUS发送:***+数据B

帧ID发送:***+数据C

帧ID

通过CAN控制器中过滤器的标识符寄存器和掩码寄存器实现。——点对点、一点对多点(广播式)、多点对一点任务8.1

理解CAN的通用知识8.1.2CAN的网络通信原理6、CAN数据帧的组成

在CAN节点之间的通信中,若将数据从一个节点的发送器传输到另一个节点的接收器,则必须发送数据帧。发送方:写1接收方正确接收:写0总线值:0由CAN控制器硬件自动处理帧内应答实时性强由CAN控制器硬件自动完成有效数据:0~8字节,由用户通过编程设定主要包括有效数据的长度,由用户通过编程设定:0~8字节

主要包括帧ID和远程发送请求位(RTR),由用户通过编程设定。

由CAN控制器硬件自动完成由CAN控制器硬件自动完成

标准格式帧的ID为11位,扩展格式帧的ID为29位。RTR=0,表示该帧为数据帧任务8.1

理解CAN的通用知识8.1.2CAN的网络通信原理7、CAN的波特率(各节点必须使用相同的波特率才能正常通信)8、CAN-H与CAN-L中的“H”和“L”的真正含义CAN-HCAN-L任务8.1

理解CAN的通用知识8.1.3CAN的优点——具有很强的高可靠性、安全性和实时性(1)采用双绞线和差分电压机制——“既能防人,又不害人”(2)采用“边说边听”方式的非破坏性仲裁机制(3)采用短帧格式,核心的有效数据最多8字节——高实时性和可靠性(4)采用先进的循环冗余校验——高可靠性(5)采用帧内应答机制——高实时性任务8.1

理解CAN的通用知识

【知识巩固】

(1)画出CAN节点的硬件结构示意图。

(2)简述CAN的数据传输流程。

(3)CAN的帧ID有何作用?帧ID与数据优先级之间的关系?CAN是如何实现仲裁的?

(4)简述CAN的验收过滤原理。

(5)简述CAN的主要优点。任务8.2掌握MCU的CAN底层驱动构件使用方法8.2.1MCU的CAN主要特性和引脚

STM32F103C8T6中有

1个CAN模块:CAN1。

有3种主要的工作模式:初始化、正常和睡眠。

硬件复位后,CAN进入睡眠模式,以降低功耗。可通过软件请求CAN退出睡眠模式而进入初始化模式,在初始化模式中,完成CAN软件初始化(设置工作方式、波特率,配置过滤器)。

一旦初始化完成,可通过软件请求CAN进入正常模式,这样才能在CAN总线上进行同步,并开始接收和发送数据。CAN1使用的引脚,见

can.h中的宏定义接收数据引脚:CAN_RX发送数据引脚:CAN_TX任务8.2掌握MCU的CAN底层驱动构件使用方法8.2.2MCU的CAN底层驱动构件的组成及使用方法CAN具有初始化、发送和接收三种基本操作。其中,CAN发送是主动任务,不必采用中断方式;而CAN接收是被动任务,为了确保及时接收到对方发送来的每帧数据,CAN接收一般采用中断方式。

CAN底层驱动构件由can.h头文件和can.c源文件组成,若要使用CAN底层驱动构件,只需将这两个文件添加到所建工程的04_Driver(MCU底层驱动构件)文件夹中,即可实现对CAN的操作。见工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx

其中,can.h头文件主要包括相关头文件的包含、一些必要的宏定义、CAN通信的数据包结构体声明、对外接口函数的声明,而can.c源文件则是对外接口函数的具体实现,初学者不必深究。

用户只要熟悉can.h头文件的内容,即可使用CAN底层驱动构件进行编程。【学以致用】

根据can.h头文件,写出实现下列功能的函数调用语句。

(1)定义分别用于存放待发送CAN数据包和待接收CAN数据包的结构体变量SendMsg和RecvMsg。

(2)对CAN模块进行初始化,其中波特率为100kbit/s,预想接收的帧ID值为0x0A,接收过滤器掩码值为0x7FF。

(3)发送一帧CAN报文,其中待发送的CAN数据包保存在结构体变量SendMsg中。

(4)接收一帧CAN报文,并将其保存至结构体变量RecvMsg中。

(5)使能CAN接收中断。任务8.2掌握MCU的CAN底层驱动构件使用方

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论