第40章 CAN—通讯实验—零死角玩转STM32-F429系列

2019-09-20来源: eefocus关键字:CAN  通讯实验  STM32-F429系列

本章参考资料:《STM32F4xx 中文参考手册2》、《STM32F4xx规格书》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》。


若对CAN通讯协议不了解,可先阅读《CAN总线入门》、《CAN-bus规范》文档内容学习。


关于实验板上的CAN收发器可查阅《TJA1050》文档了解。


40.1 CAN协议简介

CAN是控制器局域网络(Controller Area Network)的简称,它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11519),是国际上应用最广泛的现场总线之一。


CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。近年来,它具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强及振动大的工业环境。


40.1.1 CAN物理层

与I2C、SPI等具有时钟信号的同步通讯方式不同,CAN通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有CAN_High和CAN_Low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。


1.    闭环总线网络

CAN物理层的形式主要有两种,图 401中的CAN通讯网络是一种遵循ISO11898标准的高速、短距离"闭环网络",它的总线最大长度为40m,通信速度最高为1Mbps,总线的两端各要求有一个"120欧"的电阻。


图 401 CAN闭环总线通讯网络


2.    开环总线网络

图 402中的是遵循ISO11519-2标准的低速、远距离"开环网络",它的最大传输距离为1km,最高通讯速率为125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个"2.2千欧"的电阻。

图 402 CAN开环总线通讯网络


3.    通讯节点    

从CAN通讯网络图可了解到,CAN总线上可以挂载多个通讯节点,节点之间的信号经过总线传输,实现节点间通讯。由于CAN通讯协议不对节点进行地址编码,而是对数据内容进行编码的,所以网络中的节点个数理论上不受限制,只要总线的负载足够即可,可以通过中继器增强负载。


CAN通讯节点由一个CAN控制器及CAN收发器组成,控制器与收发器之间通过CAN_Tx及CAN_Rx信号线相连,收发器与CAN总线之间使用CAN_High及CAN_Low信号线相连。其中CAN_Tx及CAN_Rx使用普通的类似TTL逻辑信号,而CAN_High及CAN_Low是一对差分信号线,使用比较特别的差分信号,下一小节再详细说明。


当CAN节点需要发送数据时,控制器把要发送的二进制编码通过CAN_Tx线发送到收发器,然后由收发器把这个普通的逻辑电平信号转化成差分信号,通过差分线CAN_High和CAN_Low线输出到CAN总线网络。而通过收发器接收总线上的数据到控制器时,则是相反的过程,收发器把总线上收到的CAN_High及CAN_Low信号转化成普通的逻辑电平信号,通过CAN_Rx输出到控制器中。


例如,STM32的CAN片上外设就是通讯节点中的控制器,为了构成完整的节点,还要给它外接一个收发器,在我们实验板中使用型号为TJA1050的芯片作为CAN收发器。CAN控制器与CAN收发器的关系如同TTL串口与MAX3232电平转换芯片的关系,MAX3232芯片把TTL电平的串口信号转换成RS-232电平的串口信号,CAN收发器的作用则是把CAN控制器的TTL电平信号转换成差分信号(或者相反)。


4.    差分信号

差分信号又称差模信号,与传统使用单根信号线电压表示逻辑的方式有区别,使用差分信号传输时,需要两根信号线,这两个信号线的振幅相等,相位相反,通过两根信号线的电压差值来表示逻辑0和逻辑1。见图 403,它使用了V+与V-信号的差值表达出了图下方的信号。


图 403 差分信号


相对于单信号线传输的方式,使用差分信号传输具有如下优点:


    抗干扰能力强,当外界存在噪声干扰时,几乎会同时耦合到两条信号线上,而接收端只关心两个信号的差值,所以外界的共模噪声可以被完全抵消。


    能有效抑制它对外部的电磁干扰,同样的道理,由于两根信号的极性相反,他们对外辐射的电磁场可以相互抵消,耦合的越紧密,泄放到外界的电磁能量越少。


    时序定位精确,由于差分信号的开关变化是位于两个信号的交点,而不像普通单端信号依靠高低两个阈值电压判断,因而受工艺,温度的影响小,能降低时序上的误差,同时也更适合于低幅度信号的电路。


由于差分信号线具有这些优点,所以在USB协议、485协议、以太网协议及CAN协议的物理层中,都使用了差分信号传输。


5.    CAN协议中的差分信号

CAN协议中对它使用的CAN_High及CAN_Low表示的差分信号做了规定,见表 401及图 404。以高速CAN协议为例,当表示逻辑1时(隐性电平),CAN_High和CAN_Low线上的电压均为2.5v,即它们的电压差VH-VL=0V;而表示逻辑0时(显性电平),CAN_High的电平为3.5V,CAN_Low线的电平为1.5V,即它们的电压差为VH-VL=2V。例如,当CAN收发器从CAN_Tx线接收到来自CAN控制器的低电平信号时(逻辑0),它会使CAN_High输出3.5V,同时CAN_Low输出1.5V,从而输出显性电平表示逻辑0。


表 401 CAN协议标准表示的信号逻辑

image.png

图 404 CAN的差分信号(高速)


在CAN总线中,必须使它处于隐性电平(逻辑1)或显性电平(逻辑0)中的其中一个状态。假如有两个CAN通讯节点,在同一时间,一个输出隐性电平,另一个输出显性电平,类似I2C总线的"线与"特性将使它处于显性电平状态,显性电平的名字就是这样来的,即可以认为显性具有优先的意味。


由于CAN总线协议的物理层只有1对差分线,在一个时刻只能表示一个信号,所以对通讯节点来说,CAN通讯是半双工的,收发数据需要分时进行。在CAN的通讯网络中,因为共用总线,在整个网络中同一时刻只能有一个通讯节点发送信号,其余的节点在该时刻都只能接收。


40.1.2 协议层

以上是CAN的物理层标准,约定了电气特性,以下介绍的协议层则规定了通讯逻辑。


1.    CAN的波特率及位同步

由于CAN属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间使用约定好的波特率进行通讯,特别地,CAN还会使用"位同步"的方式来抗干扰、吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常。


位时序分解

为了实现位同步,CAN协议把每一个数据位的时序分解成如图 405所示的SS段、PTS段、PBS1段、PBS2段,这四段的长度加起来即为一个CAN数据位的长度。分解后最小的时间单位是Tq,而一个完整的位由8~25个Tq组成。为方便表示,图 405中的高低电平直接代表信号逻辑0或逻辑1(不是差分信号)。

图 405 CAN位时序分解图


该图中表示的CAN通讯信号每一个数据位的长度为19Tq,其中SS段占1Tq,PTS段占6Tq,PBS1段占5Tq,PBS2段占7Tq。信号的采样点位于PBS1段与PBS2段之间,通过控制各段的长度,可以对采样点的位置进行偏移,以便准确地采样。


各段的作用如介绍下:


    SS段(SYNC SEG)


SS译为同步段,若通讯节点检测到总线上信号的跳变沿被包含在SS段的范围之内,则表示节点与总线的时序是同步的,当节点与总线同步时,采样点采集到的总线电平即可被确定为该位的电平。SS段的大小固定为1Tq。


    PTS段(PROP SEG)


PTS译为传播时间段,这个时间段是用于补偿网络的物理延时时间。是总线上输入比较器延时和输出驱动器延时总和的两倍。PTS段的大小可以为1~8Tq。


    PBS1段(PHASE SEG1),


PBS1译为相位缓冲段,主要用来补偿边沿阶段的误差,它的时间长度在重新同步的时候可以加长。PBS1段的初始大小可以为1~8Tq。


    PBS2段(PHASE SEG2)


PBS2这是另一个相位缓冲段,也是用来补偿边沿阶段误差的,它的时间长度在重新同步时可以缩短。PBS2段的初始大小可以为2~8Tq。


通讯的波特率

总线上的各个通讯节点只要约定好1个Tq的时间长度以及每一个数据位占据多少个Tq,就可以确定CAN通讯的波特率。


例如,假设上图中的1Tq=1us,而每个数据位由19个Tq组成,则传输一位数据需要时间T1bit =19us,从而每秒可以传输的数据位个数为:


1x106/19 = 52631.6 (bps)


这个每秒可传输的数据位的个数即为通讯中的波特率。


同步过程分析

    波特率只是约定了每个数据位的长度,数据同步还涉及到相位的细节,这个时候就需要用到数据位内的SS、PTS、PBS1及PBS2段了。


根据对段的应用方式差异,CAN的数据同步分为硬同步和重新同步。其中硬同步只是当存在"帧起始信号"时起作用,无法确保后续一连串的位时序都是同步的,而重新同步方式可解决该问题,这两种方式具体介绍如下:


(1)    硬同步


若某个CAN节点通过总线发送数据时,它会发送一个表示通讯起始的信号(即下一小节介绍的帧起始信号),该信号是一个由高变低的下降沿。而挂载到CAN总线上的通讯节点在不发送数据时,会时刻检测总线上的信号。


见图 406,可以看到当总线出现帧起始信号时,某节点检测到总线的帧起始信号不在节点内部时序的S

[1] [2] [3] [4] [5] [6] [7]
关键字:CAN  通讯实验  STM32-F429系列 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic475156.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:第31章 TIM—基本定时器—零死角玩转STM32-F429系列
下一篇:第46章 DCMI—OV5640摄像头—零死角玩转STM32-F429系列

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32F103 CAN总线配置总结
stm32的can总线的配置如下:      CAN_InitStructure.CAN_TTCM=DISABLE;//禁止时间触发通信模式      CAN_InitStructure.CAN_ABOM=DISABLE;      CAN_InitStructure.CAN_AWUM=DISABLE;      CAN_InitStructure.CAN_NART=DISABLE;//CAN报文只被发送1次,不管发送的结果如何(成功、出错或仲裁丢失)      
发表于 2019-10-08
STM32 CAN总线调试经验
前言STM32 CAN代码网上很多,但大都是讲如何配置的,对于一些原理以及注意事项没有很清楚的说明。在实际调试过程中,两个设备间的通信只要设备CAN的配置一样基本就可以调通,但在增加设备的过程中,很容易出现多设备无法通信的问题,这里主要就这一问题进行说明。硬件STM32F042G4 + MAX3051测试过程测试板回来后,两个设备间的通信轻松搞定,但在增加设备的过程中,增加的设备总是不能正常通信。详细比对了一下配置,也没有任何问题。后来,仔细研读MAX3051的芯片手册,得到以下几个重要信息:MAX3051有四种工作模式高速模式:数据传输速率可达1Mbps,但抗干扰能力弱,需要双绞线斜率控制:可编程控制最高500kbps的传输速率
发表于 2019-10-08
基于STM32F103RBT6 的CAN双机通讯成功案例工程下载
硬件平台:STM32F103RBT6   此程序稍作修改可以用于F103全系列。功能:双机通讯,通过USB-CAN分析仪收发即可以调试。当然,如果你手头有两块STM32的开发板或是电路板,也可以实验。使用Keil uVision 4编译即可实验。注意:我使用的电路板,里面CAN的引脚采用默认的,不是remap的,如果你的开发板或是电路板是remap的,先remap后使用。详细请参考代码。(1)烧写主机程序,上电后,会在串口打印出信息。串口设置:115200 N 8 1(2)通过CAN分析仪,连接好线,CANH与CANL,然后设置通讯的波特率。目前为1Mbps  36M/(1+2+3)/6=1Mbps
发表于 2019-10-08
基于STM32F103RBT6 的CAN双机通讯成功案例工程下载
STM32 CAN总线通信学习笔记(一)
一、CAN总线简介CAN 是控制器局域网络(Controller Area Network, CAN)的简称。CAN采用数据块编码的方式,数据块根据帧的类型,能够让挂载在总线上的不同节点接收到相同的数据,再根据每个节点的配置对信息进行选择性处理(处理or丢弃)。CAN总线具有以下特点:1. 多主控制在总线空闲时,所有的单元都可以发送消息;具有CSMA/CA机制,即最先访问总线的单元可获得发送权;多个单元同时发送消息时,优先级高的标志(ID)单元可获得发送权,其中ID并不是发送的目的地址,而是表示访问总线的消息的优先级,仲裁机制会对消息ID的每个位继续比较,仲裁为高优先级的单元可继续发送消息,仲裁失败的单元则停止发送而进行
发表于 2019-10-08
STM32 CAN总线通信学习笔记(一)
STM32 CAN 波特率的计算
STM32里的CAN 支持2.0A,2.0B, 带有FIFO,中断等, 这里主要提一下内部的时钟应用.bxCAN挂接在APB1总线上,采用总线时钟,所以我们需要知道APB1的总线时钟是多少. 我们先看看下图,看看APB1总线时钟:APB1时钟取自AHB的分频, 而AHB又取自系统时钟的分频, 系统时钟可选HSI,HSE, PLLCLK, 这个在例程的RC设置里都有的,总线时钟MHz   (3+TS1+TS2)*(BRP+1
发表于 2019-10-08
stm32HAL库之can操作
基于STM32CubeMx的CAN配置信息volatile1.系统时钟APB1=36MHZ2.CAN计算通信率计算公式,参考数据手册, CAN bit timing register (CAN_BTR) 寄存器NominalBitTime计算公式: NominalBitTime =1 t × q +  tBS1 + tBS23.STM32CubeMx设置的Prescaler为8->对应BRP=7,TimeSeg1=6->对应TS1=5,TimeSeg2=2->对应TB2=2,STM32F103ZE对应APB1设置为36M,即Time for one Bit的时间为(1 + TimeSeg1+
发表于 2019-10-08
stm32HAL库之can操作
小广播
何立民专栏 单片机及嵌入式宝典

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

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved