15.22、 CAN总线回环实验.pdf

上传人:紫竹语嫣 文档编号:5514364 上传时间:2020-05-27 格式:PDF 页数:21 大小:511.86KB
返回 下载 相关 举报
15.22、 CAN总线回环实验.pdf_第1页
第1页 / 共21页
15.22、 CAN总线回环实验.pdf_第2页
第2页 / 共21页
15.22、 CAN总线回环实验.pdf_第3页
第3页 / 共21页
15.22、 CAN总线回环实验.pdf_第4页
第4页 / 共21页
15.22、 CAN总线回环实验.pdf_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《15.22、 CAN总线回环实验.pdf》由会员分享,可在线阅读,更多相关《15.22、 CAN总线回环实验.pdf(21页珍藏版)》请在三一文库上搜索。

1、 CAN总线回环实验总线回环实验 这一节我们将向大家介绍STM32的CAN总线的基本使用。有了STM32,CAN总线将变 得简单,俗话说“百闻不如一见”,应当再加上“百见不如一试”。在本小节,我们初始化 CAN总线,分别测试轮询模式和中断模式下的CAN总线环回,并通过神舟IV号的LED和串 口等指示CAN环回的数据传送结果。本节分为如下几个部分: 1 CAN总线回环实验的意义与作用 2 实验原理 3 软件设计 4 硬件设计 5 下载与验证 6 实验现象 ? 意义与作用意义与作用 什么是什么是 CAN 总线?总线? CAN,全称“Controller Area Network” ,即控制器局域网

2、控制器局域网,是国际上应用最广泛的工 业级现场总线之一。 它是一种具有国际标准而且性能价格比又较高的现场总线, 当今自动控 制领域的发展中能发挥重要的作用。最初 CAN 被设计作为汽车环境中的微控制器通讯,在 车载各电子控制装置 ECU 之间交换信息,形成汽车电子控制网络。比如:发动机管理系统、 变速箱控制器、仪表装备、电子主干系统中,均嵌入 CAN 控制装置。 CAN 控制器局部网是 BOSCH 公司为现代汽车应用领先推出的一种多主机局部网,由 于其卓越性能现已广泛应用于工业自动化、多种控制设备、交通工具、医疗仪器以及建筑、 环境控制等众多部门。在北美和西欧,CAN 总线协议已经成为汽车计算

3、机控制系统和嵌入 式工业控制局域网的标准总线,并且拥有以 CAN 为底层协议专为大型货车和重工机械车辆 设计的 J1939 协议。近年来,其所具有的高可靠性和良好的错误检测能力受到重视,被广泛 应用于汽车计算机控制系统和环境温度恶劣、 电磁辐射强和振动大的工业环境。 控制器局部 网将在我国迅速普及推广。 由于 CAN 为愈来愈多不同领域采用和推广, 导致要求各种应用领域通信报文的标准化。 为此, 1991 年 9 月 PHILIPS SEMICONDUCTORS 制订并发布了 CAN 技术规范 (VERSION 2.0) 。该技术规范包括 A 和 B 两部分。2.0A 给出了曾在 CAN 技术

4、规范版本 1.2 中定义的 CAN 报文格式,而 2.0B 给出了标准的和扩展的两种报文格式。此后,1993 年 11 月 ISO 正 式颁布了道路交通运载工具-数字信息交换-高速通信控制器局部网(CAN)国际标准 (ISO11898) ,为控制器局部网标准化、规范化推广铺平了道路。 CAN 总线特点 CAN 总线是一种串行数据通信协议,它是一种多主总线,通信介质可以是双绞线、同 轴电缆或光导纤维。通信速率可达 1MBPS。CAN 总线通信接口中集成了 CAN 协议的物理 层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余 检验、优先级判别等项工作。 CAN 协议

5、的一个最大特点是废除了传统的站地址编码,而代之以对通信数据块进行编 码。采用这种方法的优点可使网络内的节点个数在理论上不受限制,数据块的标识码可由 11 位或 29 位二进制数组成,因此可以定义 211 或 229 个不同的数据块,这种按数据块编码 的方式,还可使不同的节点同时接收到相同的数据,这一点在分布式控制系统中非常有用。 数据段长度最多为 8 个字节, 可满足通常工业领域中控制命令、 工作状态及测试数据的一般 要求。同时,8 个字节不会占用总线时间过长,从而保证了通信的实时性。CAN 协议采用 CRC 检验并可提供相应的错误处理功能,保证了数据通信的可靠性。CAN 卓越的特性、极 高的

6、可靠性和独特的设计,特别适合工业过程监控设备的互连,因此,越来越受到工业界的 重视,并已公认为最有前途的现场总线之一。 另外,CAN 总线采用了多主竞争式总线结构,具有多主站运行和分散仲裁的串行总线 以及广播通信的特点。CAN 总线上任意节点可在任意时刻主动地向网络上其它节点发送信 息而不分主次,因此可在各节点之间实现自由通信。CAN 总线协议已被国际标准化组织认 证,技术比较成熟,控制的芯片已经商品化,性价比高,特别适用于分布式测控系统之间的 数通讯。CAN 总线插卡可以任意插在 PC AT XT 兼容机上,方便地构成分布式监控系统。 3. CAN 总线技术介绍 3.1 位仲裁 要对数据进行

7、实时处理,就必须将数据快速传送,这就要求数据的物理传输通路有较高的 速度。在几个站同时需要发送数据时,要求快速地进行总线分配。实时处理通过网络交换的 紧急数据有较大的不同。一个快速变化的物理量,如汽车引擎负载,将比类似汽车引擎温度这 样相对变化较慢的物理量更频繁地传送数据并要求更短的延时。 CAN 总线以报文为单位进行数据传送,报文的优先级结合在 11 位标识符中,具有最低二 进制数的标识符有最高的优先级。这种优先级一旦在系统设计时被确立后就不能再被更改。 总线读取中的冲突可通过位仲裁解决。 当几个站同时发送报文时,站1的报文标识符为011111; 站 2 的报文标识符为 0100110;站

8、3 的报文标识符为 0100111。 所有标识符都有相同的两位 01, 直到第 3 位进行比较时,站 1 的报文被丢掉,因为它的第 3 位为高,而其它两个站的报文第 3 位 为低。站 2 和站 3 报文的 4、5、6 位相同,直到第 7 位时,站 3 的报文才被丢失。注意,总线中 的信号持续跟踪最后获得总线读取权的站的报文。在此例中,站 2 的报文被跟踪。这种非破 坏性位仲裁方法的优点在于,在网络最终确定哪一个站的报文被传送以前,报文的起始部分已 经在网络上传送了。所有未获得总线读取权的站都成为具有最高优先权报文的接收站,并且 不会在总线再次空闲前发送报文。 CAN具有较高的效率是因为总线仅仅

9、被那些请求总线悬而未决的站利用,这些请求是根 据报文在整个系统中的重要性按顺序处理的。这种方法在网络负载较重时有很多优点,因为 总线读取的优先级已被按顺序放在每个报文中了,这可以保证在实时系统中较低的个体隐伏 时间。 对于主站的可靠性,由于 CAN 协议执行非集中化总线控制,所有主要通信,包括总线读取 (许可)控制,在系统中分几次完成。这是实现有较高可靠性的通信系统的唯一方法。 3.2 CAN 与其它通信方案的比较 在实践中,有两种重要的总线分配方法:按时间表分配和按需要分配。在第一种方法中 , 不管每个节点是否申请总线,都对每个节点按最大期间分配。由此,总线可被分配给每个站并 且是唯一的站,

10、而不论其是立即进行总线存取或在一特定时间进行总线存取。这将保证在总 线存取时有明确的总线分配。在第二种方法中,总线按传送数据的基本要求分配给一个站 , 总线系统按站希望的传送分配(如:Ethernet CSMA/CD)。因此,当多个站同时请求总线存取时, 总线将终止所有站的请求,这时将不会有任何一个站获得总线分配。为了分配总线,多于一个 总线存取是必要的。 CAN 实现总线分配的方法,可保证当不同的站申请总线存取时,明确地进行总线分配。 这 种位仲裁的方法可以解决当两个站同时发送数据时产生的碰撞问题。 不同于 Ethernet 网络的 消息仲裁,CAN 的非破坏性解决总线存取冲突的方法,确保在

11、不传送有用消息时总线不被占 用。甚至当总线在重负载情况下,以消息内容为优先的总线存取也被证明是一种有效的系统。 虽然总线的传输能力不足,所有未解决的传输请求都按重要性顺序来处理。在 CSMA/CD 这 样的网络中,如 Ethernet,系统往往由于过载而崩溃,而这种情况在 CAN 中不会发生。 3.3 CAN 的报文格式 在总线中传送的报文,每帧由 7 部分组成。 CAN 协议支持两种报文格式,其唯一的不同是 标识符(ID)长度不同,标准格式为 11 位,扩展格式为 29 位。 在标准格式中,报文的起始位称为帧起始(SOF),然后是由 11 位标识符和远程发送请求位 (RTR)组成的仲裁场。R

12、TR 位标明是数据帧还是请求帧,在请求帧中没有数据字节。 控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格式。它还包括一个保留位 (ro),为将来扩展使用。它的最后四个字节用来指明数据场中数据的长度(DLC)。数据场范围 为 08 个字节,其后有一个检测数据错误的循环冗余检查(CRC)。 应答场(ACK)包括应答位和应答分隔符。发送站发送的这两位均为隐性电平(逻辑 1),这 时正确接收报文的接收站发送主控电平(逻辑 0)覆盖它。用这种方法,发送站可以保证网络中 至少有一个站能正确接收到报文。 报文的尾部由帧结束标出。在相邻的两条报文间有一很短的间隔位,如果这时没有站进 行总线存取,总

13、线将处于空闲状态。 3.4 数据错误检测 不同于其它总线,CAN 协议不能使用应答信息。 事实上,它可以将发生的任何错误用信号 发出。CAN 协议可使用五种检查错误的方法,其中前三种为基于报文内容检查。 3.4.1 循环冗余检查(CRC) 在一帧报文中加入冗余检查位可保证报文正确。 接收站通过 CRC 可判断报文是否有错。 3.4.2 帧检查 这种方法通过位场检查帧的格式和大小来确定报文的正确性,用于检查格式上的错误。 3.4.3.应答错误 如前所述,被接收到的帧由接收站通过明确的应答来确认。如果发送站未收到应答,那么 表明接收站发现帧中有错误,也就是说,ACK 场已损坏或网络中的报文无站接收

14、。CAN 协议 也可通过位检查的方法探测错误。 3.4.4 总线检测 有时,CAN 中的一个节点可监测自己发出的信号。 因此,发送报文的站可以观测总线电平 并探测发送位和接收位的差异。 3.4.5 位填充 一帧报文中的每一位都由不归零码表示,可保证位编码的最大效率。然而,如果在一帧报 文中有太多相同电平的位,就有可能失去同步。 为保证同步,同步沿用位填充产生。 在五个生。 在五个连续相等位后,发送站自动插入一个与之互补的补码位;接收时,这个填充位被自动丢 掉。例如,五个连续的低电平位后,CAN 自动插入一个高电平位。CAN 通过这种编码规则检 查错误,如果在一帧报文中有 6 个相同位,CAN

15、就知道发生了错误。 如果至少有一个站通过以上方法探测到一个或多个错误,它将发送出错标志终止当前的 发送。这可以阻止其它站接收错误的报文,并保证网络上报文的一致性。当大量发送数据被 终止后,发送站会自动地重新发送数据。 作为规则,在探测到错误后 23 个位周期内重新开始发 送。在特殊场合,系统的恢复时间为 31 个位周期。 但这种方法存在一个问题,即一个发生错误的站将导致所有数据被终止,其中也包括正确 的数据。因此,如果不采取自监测措施,总线系统应采用模块化设计。为此,CAN 协议提供一 种将偶然错误从永久错误和局部站失败中区别出来的办法。 这种方法可以通过对出错站统计 评估来确定一个站本身的错

16、误并进入一种不会对其它站产生不良影响的运行方法来实现,即 站可以通过关闭自己来阻止正常数据因被错误地当成不正确的数据而被终止。 3.4.6 CAN 可靠性 为防止汽车在使用寿命期内由于数据交换错误而对司机造成危险,汽车的安全系统要求 数据传输具有较高的安全性。如果数据传输的可靠性足够高,或者残留下来的数据错误足够 低的话,这一目标不难实现。 从总线系统数据的角度看,可靠性可以理解为,对传输过程产生的 数据错误的识别能力。 残余数据错误的概率可以通过对数据传输可靠性的统计测量获得。 它描述了传送数据被 破坏和这种破坏不能被探测出来的概率。残余数据错误概率必须非常小,使其在系统整个寿 命周期内,按

17、平均统计时几乎检测不到。计算残余错误概率要求能够对数据错误进行分类 , 并且数据传输路径可由一模型描述。 如果要确定 CAN 的残余错误概率,我们可将残留错误的 概率作为具有 8090 位的报文传送时位错误概率的函数,并假定这个系统中有 510 个站, 并且错误率为 1/1000,那么最大位错误概率为 1013 数量级。例如,CAN 网络的数据传输率 最大为 1Mbps,如果数据传输能力仅使用 50%,那么对于一个工作寿命 4000 小时、平均报文 长度为 80 位的系统,所传送的数据总量为 91010。 在系统运行寿命期内,不可检测的传输错 误的统计平均小于 102 量级。 换句话说,一个系

18、统按每年 365 天,每天工作 8 小时,每秒错误 率为 0. 7 计算,那么按统计平均,每 1000 年才会发生一个不可检测的错误。 4.应用举例 某医院现有 5 台 16T/H 德国菲斯曼燃气锅炉,向洗衣房、制剂室、供应室、生活用水、 暖气等设施提供 5kg/cm2 的蒸汽,全年耗用天然气 1200 万 m3,耗用 20 万吨自来水。医院采 用接力式方式供热,对热网进行地域性管理,分四大供热区。其中冬季暖气的用气量很大, 据此设计了基于 CAN 现场总线的分布式锅炉蒸汽热网智能监控系统。现场应用表明:该楼 宇自动化系统具有抗干扰能力强,现场组态容易,网络化程度高,人机界面友好等特点。 CA

19、N 总线典型特征 CAN 总线有如下基本特点 废除传统的站地址编码,代之以对通信数据块进行编码,可以多主方式工作; 采用非破坏性仲裁技术,当两个节点同时向网络上传送数据时,优先级低的节点主 动停止数据发送,而优先级高的节点可不受影响继续传输数据,有效避免了总线冲突; 采用短帧结构,每一帧的有效字节数为 8 个,数据传输时间短,受干扰的概率低, 重新发送的时间短; 每帧数据都有 CRC 校验及其他检错措施, 保证了数据传输的高可靠性, 适于在高干 扰环境下使用; 节点在错误严重的情况下,具有自动关闭总线的功能,切断它与总线的联系,以使 总线上其他操作不受影响; 可以点对点,一对多及广播集中方式传

20、送和接受数据。 CAN 总线的优点 具有实时性强、传输距离较远、抗电磁干扰能力强、成本低等优点; 采用双线串行通信方式,检错能力强,可在高噪声干扰环境中工作; 具有优先权和仲裁功能,多个控制模块通过 CAN 控制器挂到 CAN-bus 上,形成多 主机局部网络; 可根据报文的 ID 决定接收或屏蔽该报文; 可靠的错误处理和检错机制; 发送的信息遭到破坏后,可自动重发; 节点在错误严重的情况下具有自动退出总线的功能; 报文不包含源地址或目标地址,仅用标志符来指示功能信息、优先级信息。 STM32 处理器的 CAN 总线,支持 CAN 协议 2.0A 和 2.0B。具有以下特点: ? 支持CAN协

21、议2.0A和2.0B主动模式 ? 波特率最高可达1兆位/秒 ? 支持时间触发通信功能 发送 ? 3个发送邮箱 ? 发送报文的优先级特性可软件配置 ? 记录发送SOF时刻的时间戳 接收 ? 3级深度的2个接收FIFO ? 14个位宽可变的过滤器组由整个CAN共享标识符列表 ? FIFO溢出处理方式可配置 ? 记录接收SOF时刻的时间戳 ? 可支持时间触发通信模式 ? 禁止自动重传模式 ? 16位自由运行定时器 ? 定时器分辨率可配置 ? 可在最后2个数据字节发送时间戳 管理 ? 中断可屏蔽 ? 邮箱占用单独1块地址空间,便于提高软件效率 STM32 的 CAN 一共有 3 个主要的工作模式,分别

22、是初始化、正常和睡眠模式。 ? 初始化模式初始化模式 软件通过对CAN_MCR寄存器的INRQ位置1,来请求bxCAN进入初始化模式,然后等待 硬件对CAN_MSR寄存器的INAK位置1来进行确认软件通过对CAN_MCR寄存器的INRQ位 清0,来请求bxCAN退出初始化模式,当硬件对CAN_MSR寄存器的INAK位清0就确认了初 始化模式的退出。 当bxCAN处于初始化模式时,报文的接收和发送都被禁止,并且CANTX引脚输出隐性 位(高电平)。 ? 正常模式正常模式 在初始化完成后,软件应该让硬件进入正常模式,以便正常接收和发送报文。软件可以 通过对CAN_MCR寄存器的INRQ位清0,来请

23、求从初始化模式进入正常模式,然后要等待硬 件对CAN_MSR寄存器的INAK位置1的确认。在跟CAN总线取得同步,即在CANRX引脚上 监测到11个连续的隐性位(等效于总线空闲)后,bxCAN才能正常接收和发送报文。 ? 睡眠模式(低功耗)睡眠模式(低功耗) 软件通过对CAN_MCR寄存器的SLEEP位置1,来请求进入这一模式。在该模式下, bxCAN的时钟停止了,但软件仍然可以访问邮箱寄存器。当bxCAN处于睡眠模式,软件想 通过对CAN_MCR寄存器的INRQ位置1,来进入初始化式,那么软件必须同时对SLEEP位清 0才行。 有2种方式可以唤醒(退出睡眠模式)bxCAN:通过软件对SLEE

24、P位清0,或硬件检测 CAN总线的活动。 ? 实验原理实验原理 CAN发送报文介绍发送报文介绍 应用程序选择1个空发送邮箱; 设置标识符, 数据长度和待发送数据; 然后对CAN_TIxR 寄存器的TXRQ位置1,来请求发送。TXRQ位置1后,邮箱就不再是空邮箱;而一旦邮箱不 再为空,软件对邮箱寄存器就不再有写的权限。TXRQ位置1后,邮箱马上进入挂号状态, 并等待成为最高优先级的邮箱,参见发送优先级。一旦邮箱成为最高优先级的邮箱,其状态 就变为预定发送状态。一旦CAN总线进入空闲状态,预定发送邮箱中的报文就马上被发送 (进入发送状态)。一旦邮箱中的报文被成功发送后,它马上变为空邮箱;硬件相应地

25、对 CAN_TSR寄存器的RQCP和TXOK位置1,来表明一次成功发送。 如果发送失败,由于仲裁引起的就对CAN_TSR寄存器的ALST位置1,由于发送错误引 起的,就对TERR位置1。 发送的优先级可以由标识符和发送请求次序决定: ? 由标识符决定 当有超过1个发送邮箱在挂号时, 发送顺序由邮箱中报文的标识符决定。 根据CAN协议, 标识符数值最低的报文具有最高的优先级。 如果标识符的值相等, 那么邮箱号小的报文先被 发送。 ? 由发送请求次序决定 通过对CAN_MCR寄存器的TXFP位置1, 可以把发送邮箱配置为发送FIFO。 在该模式下, 发送的优先级由发送请求次序决定。该模式对分段发送

26、很有用。 CAN接收报文介绍接收报文介绍 接收到的报文,被存储在3级邮箱深度的FIFO中。FIFO完全由硬件来管理,从而节省了 CPU 的处理负荷,简化了软件并保证了数据的一致性。应用程序只能通过读取FIFO输出邮箱, 来读取FIFO中最先收到的报文。 根据CAN协议,当报文被正确接收(直到EOF域的最后1位都没有错误),且通过了标 识符过滤,那么该报文被认为是有效报文。 ? 接收相关的中断条件 ? 一旦往FIFO存入1个报文,硬件就会更新FMP1:0位,并且如果CAN_IER寄存器的 FMPIE位为1,那么就会产生一个中断请求。 ? 当FIFO变满时(即第3个报文被存入),CAN_RFxR寄

27、存器的FULL位就被置1,并 且如果CAN_IER寄存器的FFIE位为1,那么就会产生一个满中断请求。 ? 在溢出的情况下,FOVR位被置1,并且如果CAN_IER寄存器的FOVIE位为1,那么 就会产生一个溢出中断请求 ? 标识符过滤 在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此, 发送者以广播的形式把报文发送给所有的接收者。(注:不是一对一通信,而是多机通信) 节点在接收报文时根据标识符的值决定软件是否需要该报文;如果需要,就拷贝到 SRAM里;如果不需要,报文就被丢弃且无需软件的干预。 为满足这一需求,bxCAN为应用程序提供了14个位宽可变的、可配置的过滤

28、器组 (130),以便只接收那些软件需要的报文。硬件过滤的做法节省了CPU开销,否则就必须 由软件过滤从而占用一定的CPU开销。每个过滤器组x由2个32位寄存器,CAN_FxR0和 CAN_FxR1组成。 过滤器的模式的设置 ? 通过设置CAN_FM0R的FBMx位, 可以配置过滤器组为标识符列表模式或屏蔽位模 式。 ? 为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。 ? 为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。 ? 应用程序不用的过滤器组,应该保持在禁用状态。 过滤器优先级规则 ? 位宽为32位的过滤器,优先级高于位宽为16位的过滤器 ? 对于位宽相同的过滤器,

29、标识符列表模式的优先级高于屏蔽位模式 ? 位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级高 上面的例子说明了bxCAN的过滤器规则:在接收一个报文时,其标识符首先与配置在 标识符列表模式下的过滤器相比较;如果匹配上,报文就被存放到相关联的FIFO中,并且 所匹配的过滤器的序号被存入过滤器匹配序号中。 如同例子中所显示, 报文标识符跟#4标识 符匹配,因此报文内容和FMI4被存入FIFO。 如果没有匹配,报文标识符接着与配置在屏蔽位模式下的过滤器进行比较。 如果报文标识符没有跟过滤器中的任何标识符相匹配, 那么硬件就丢弃该报文, 且不会 对软件有任何打扰。 ? 接收邮箱(FI

30、FO) 在接收到一个报文后,软件就可以访问接收FIFO的输出邮箱来读取它。一旦软件处理 了报文(如把它读出来),软件就应该对CAN_RFxR寄存器的RFOM位进行置1,来释放该 报文,以便为后面收到的报文留出存储空间。 中断中断 bxCAN占用4个专用的中断向量。通过设置CAN中断允许寄存器(CAN_IER),每个中断 源都可以单独允许和禁用。 发送中断可由下列事件产生: 发送邮箱0变为空,CAN_TSR寄存器的RQCP0位被置1。 发送邮箱1变为空,CAN_TSR寄存器的RQCP1位被置1。 发送邮箱2变为空,CAN_TSR寄存器的RQCP2位被置1。 FIFO0中断可由下列事件产生: FI

31、FO0接收到一个新报文,CAN_RF0R寄存器的FMP0位不再是00。 FIFO0变为满的情况,CAN_RF0R寄存器的FULL0位被置1。 FIFO0发生溢出的情况,CAN_RF0R寄存器的FOVR0位被置1。 FIFO1中断可由下列事件产生: FIFO1接收到一个新报文,CAN_RF1R寄存器的FMP1位不再是00。 FIFO1变为满的情况,CAN_RF1R寄存器的FULL1位被置1。 FIFO1发生溢出的情况,CAN_RF1R寄存器的FOVR1位被置1。 错误和状态变化中断可由下列事件产生: 出错情况,关于出错情况的详细信息请参考CAN错误状态寄存器(CAN_ESR)。 唤醒情况,在CA

32、N接收引脚上监视到帧起始位(SOF)。 CAN进入睡眠模式。 波特率设定波特率设定 CAN总线通信的难点在于波特率的设定 ,当然如果是近距离通信,只有几十米那就可 以忽略了,如果几公里 波特率位序时序 都需要好好计算不然通信是不成功的。 CAN控制器器只需要进行少量的设置就可以进行通信,就可以像RS232/485那样使用。 其 中较难设置的部分就是通信波特率的计算。CAN总线能够在一定的范围内容忍总线上CAN 节点的通信波特率的偏差,这种机能使得CAN总线有很强的容错性,同时也降低了对每个 节点的振荡器精度。 实际上,CAN总线的波特率是一个范围。假设定义的波特率是250KB/S,但是实际上根

33、 据对寄存器的设置,实际的波特率可能为200300KB/S(具体值取决于寄存器的设置),简单 介绍一个波特率的计算,在CAN的底层协议里将CAN数据的每一位时间(TBit)分为许多的 时间段(Tscl),这些时间段包括: A 位同步时间(Tsync) B 时间段1(Tseg1) C 时间段2(Tseg2) 其中位同步时间占用1个Tscl;时间段2占用(Tseg1+1)个Tscl;时间段2占用(Tseg2+1)个 Tscl,所以CAN控制器的位时间(TBit)就是: TBit=Tseg1+Tseg2+Tsync=(TSEG1+TSEG2+3)*Tscl,那么CAN的波特率(CANbps)就是 1

34、/TBit。 但是这样计算出的值是一个理论值。 在实际的网络通信中由于存在传输的延时、 不同节 点的晶体的误差等因素,使得网络CAN的波特率的计算变得复杂起来。CAN在技术上便引 入了重同步的概念, 以更好的解决这些问题。 这样重同步带来的结果就是要么时间段1(Tseg1) 增加TSJW(同步跳转宽度SJW+1),要么时间段减少TSJW,因此CAN的波特率实际上有 一个范围: 1/(Tbit+Tsjw) CANbps1/(Tbit-Tsjw) CAN有波特率的值四以下几个元素决定: A 最小时间段Tscl; B 时间段1 TSEG1; C 时间段2 TSEG2; D 同步跳转宽度 SJW 那么

35、Tscl又是怎么计算的呢?这是总总线时序寄存器中的预分频寄存器BRP派上了用 场,Tscl(BRP+1)/FVBP。FVBP为微处理器的外设时钟。 而TSEG1与TSEG2又是怎么划分的呢?TSEG1与TSEG2的长度决定了CAN数据的采样 点, 这种方式允许宽范围的数据传输延迟和晶体的误差。 其中TSEG1用来调整数据传输延迟 时间造成的误差,而TSEG2则用来调 整不同点节点晶体频率的误差。 但是他们由于过于 灵活,而使初次接触CAN的人有点无所适从。TSEG1与TSEG2的是分大体遵循以下规则: Tseg2Tscl2,Tseg22TSJW,Tseg1Tseg2 总的来说,对于CAN的波特

36、率计算问题,把握一个大的方向就行了,其计算公式可了 规结为: BitRate = Fpclk/( (BRP+1) * (Tseg1+1)+(Tseg2+1)+1) ? 硬件设计硬件设计 在神舟 IV 号 STM32 开发板中,我们使用了处理器 STM32F107VCT6 的 CAN 外扩 TI 的 VP230 CAN 总线收发芯片来实现 CAN 总线接口。 神舟 IV 号开发板板载了 2 组 CAN 总线接口,所以可以在外部将 CAN1 和 CAN2 连接起来 完成 CAN 总线实验。STM32F107VCT6 这款处理器集成了 CAN 总线接口,在开发板上我们使用 了 TI 公司的 3.3V

37、 电压的 CAN 总线收发器来实现 CAN 物理层,如下图所示。CAN 总线收发器 型号为 VP230。 相关硬件电路如下: 图表 1 CAN 总线接口原理图 其中 VP230 是 TI 公司推出的 3.3V CAN 总线收发器。它具有如下特性: ? 工作电压为 3.3V ? 满足 HBM 模式 16KV 的 ESD 防护 ? 允许总线上最到 120 个节点 ? 符合 ISO 11898 标准要求 ? 具有过热关断保护功能 VP230 的逻辑框图如下: 管脚功能如下: CAN网拓扑结构: ? 软件设计软件设计 时钟使能配置时钟使能配置 在本实验中,我们分别通过轮询和中断两种方式,测试CAN总线

38、的环回,并通过LED 指示灯和串口指示CAN总线环回结果。 因此, 我们先初始化使用到的硬件资源有串口和LED 灯,CAN1总线接口,具体代码如下: CAN总线中断配置总线中断配置 在本实验中,我们通过分别利用轮询和中断方式进行CAN的环回(loopback)实验,因 此,我们需要设置CAN1接口的接收终端及其优先级,在本例程中,设置中断组1个,CAN1 的子优先级级为0,相关代码如下: 轮询方式轮询方式CAN总线环回测试总线环回测试 在本实验中, CAN环回实验, 分成中断和轮询两种模式进行测试, 其中轮询方式的CAN 接口初始化和测试主要是由TestStatus CAN_Polling(v

39、oid)函数实现的。 在这个函数中,我们首先对CAN1接口进行配置,包括bus-off管理,wake-up模式设置等 等, 其中CAN_Init函数根据CAN_InitStruct中指定的参数初始化CAN寄存器, 相关代码如下: CAN_InitStruct 结构体的成员说明见下表 CAN_TTCM CAN_TTCM用来使能或去使能时间触发通讯模式 CAN_ABOM CAN_ABOM用来使能或者去使能自动离线管理 CAN_AWUM CAN_AWUM用来使能或者去使能自动唤醒模式 CAN_NART CAN_NART用来使能或者去使能非自动重传模式 CAN_RFLM CAN_RFLM用来使能或者去

40、使能FIFO锁定模式 CAN_TXFP CAN_TXFP用来使能或者去使能发送FIFO优先级 CAN_MODE 设置CAN工作模式, 可设置为正常工作模式 (CAN_Mode_Normal) 静 默模式(CAN_Mode_Silent),环回模式( CAN_Mode_LoopBack)和 静默环回模式(CAN_Mode_Silent_LoopBack) CAN_SJW 定义重新同步跳跃宽度, 即每位中可以延长或缩短多少个时间单位的上 限,可设置为14个时间单位(CAN_SJW_1tq CAN_SJW_4tq) CAN_BS1 设 定 时 间 段 1 的 时 间 单 位 数 目 , 可 设 置

41、为 1 16 个 时 间 单 位 (CAN_BS1_1tq CAN_BS1_16tq)。 CAN_BS2 设 定 时 间 段 2 的 时 间 单 位 数 目 , 可 设 置 为 1 16 个 时 间 单 位 (CAN_BS1_1tq CAN_BS1_16tq)。 CAN_Prescaler 设定一个时间单位的长度,它的范围是11024 在完成CAN的基本参数配置以后,我们还需要对滤波器的参数进行配置,这个主要是通过 CAN_FilterInit函数实现的,相关代码如下: CAN_FilterNumber 指定待初始化的过滤器,它的范围是1到13 CAN_FilterMode 指定过滤器将被初始

42、化的模式,可设置为标识符屏蔽位 模式(CAN_FilterMode_IdMask)或者标识符列表模式 (CAN_FilterMode_IdList) CAN_FilterScale 过 滤 器 位 宽 , 可 设 置 为 2 个 16 位 过 滤 器 (CAN_FilterScale_Two16bit)或者1 个32位过 滤器 (CAN_FilterScale_One32bit)。 CAN_FilterIDHigh 用来设定过滤器标识符(32位位宽时为其高段位,16位 宽时为第一个)。它的范围是0x0000到0xFFFF。 CAN_FilterIDLow 用来设定过滤器标识符(32位位宽时为其

43、低段位,16位 宽时为第二个)。它的范围是0x0000到0xFFFF。 CAN_FilterMaskIDHigh 用来设定过滤器屏蔽标识符或者过滤器标识符(32位位 宽时为其高段位,16位宽时为第一个)。它的范围是 0x0000到0xFFFF。 CAN_FilterMaskIDLow 用来设定过滤器屏蔽标识符或者过滤器标识符(32位位 宽时为其低段位,16位宽时为第二个)。它的范围是 0x0000到0xFFFF。 CAN_FilterFIFOAssignment 设置指向过滤器的FIFO(0或者1) CAN_FilterActivation 使能或者去使能过滤器 前面,我们完成了CAN总线接口

44、的参数配置和滤波器配置,正常情况下,我们就可以 使用CAN总线接口了,在接下来,我们来看一下另两个非常重要的函数CAN_Transmit()和 CAN_Receive(),如何发送和接收一个正确格式的CAN帧。 在我们的例程中,CAN_Transmit()相关的代码为 它的相关参数说明如下: StdId 用来设定标准标识符。可设置为0到0x7FF ExtId 用来设定扩展标识符,可设置为0到0x3FFFF IDE 用来设定消息标识符的类型,可设置为使用标准标识符(CAN_ID_STD)或 者使用标准标识符+扩展标识符(CAN_ID_EXT) RTR 设定待传输消息的帧类型,可设置为数据帧(CA

45、N_RTR_DATA)或者远程 帧(CAN_RTR_REMOTE) DLC 用来设定带传输消息的帧长度。取值范围0到0x8 Data8 待传输的数据 在调用Transmit发送一帧数据后,程序通过CAN_TransmitStatus()函数,检查CAN数据 帧是否正常传输,待进入传输状态以后,由于是采用LoopBack方式,数据应该马上环回回 接收侧,因此程序接下来又调用CAN_MessagePending()检查CAN接口的挂号信息数据,大 于等于1表示接收到的新的数据,调用CAN_Receive函数进行处理。相关代码为 它的相关参数说明如下: StdId 用来设定标准标识符。可设置为0到0

46、x7FF ExtId 用来设定扩展标识符,可设置为0到0x3FFFF IDE 用 来 设 定 消 息 标 识 符 的 类 型 , 可 设 置 为 使 用 标 准 标 识 符 (CAN_ID_STD)或者使用标准标识符+扩展标识符(CAN_ID_EXT) RTR 设定待传输消息的帧类型,可设置为数据帧(CAN_RTR_DATA)或 者远程帧(CAN_RTR_REMOTE) DLC 用来设定带传输消息的帧长度。取值范围0到0x8 Data8 待传输的数据 FMI 设定消息将要通过的过滤器索引 至此,就实现了一个CAN总线的LoopBack模式的数据收发,在例程中,还对接收的数 据的正确性进行了一系

47、列的判断, 最终确认接收到的数据是否出现错误。 并返回对应的状态。 中断方式中断方式CAN总线环回测试总线环回测试 前面,我们分析了CAN总线环回实验的轮询模式的具体实现过程,接下来,我们一起 分析一下,中断模式下的CAN总线的环回具体实现过程。这个主要是在CAN_Interrupt(void) 函数实现的。 首先,和轮询模式一样,我们也需要通过利用CAN_Init函数和CAN_FilterInit函数初始 化CAN接口和滤波器参数。 主要的不同是,在完成上述初始化以后,我们需要使用CAN FIFO的中断,并完成对应 的中断服务程序。 在主程序中,开启了FIFO的中断响应使能以后,程序调用了C

48、AN_Transmit函数发送CAN数 据帧,由于CAN工作与环回模式,发送的数据帧环回回CAN接口,在中断服务程序中,对 接收的帧进行处理。 中断服务程序位于stm32f10x_it.c文件中,具体的函数实现为 当 FIFO 产生中断时,处理器将自动进入中断服务程序。并对数据正确性进行判断,并 返回对应的状态。 ? 下载与验证下载与验证 神舟IV号光盘源码目录包含本实验的工程源码,在神舟IV号光盘源码22、CAN总线回 环.rarProject22、CAN总 线 回 环EWARMv5STM32F107VC-ARMJISHUExe 目 录 下 的 ARMJISHU_CAN总线回环.hex文件即

49、为前面我们分析的总线回环实验编译好的固件,我们 可以直接将固件下载到神舟IV号开发板中,观察运行效果。 如果使用JLINK下载固件,请按错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。下载固件 到神舟IV号开发板小节进行操作。 如果使用USB下载固件,请按错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。小节进行操 作。 如果使用串口下载固件,请按错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。小节进行 操作。 如果在IAR开发环境中, 下载编译好的固件或者在线调试, 请按错误! 未找到引用源。错误! 未找到引用源。 错误!未找到引用源。错误!未找到引用源。小节进行操作。 如果在MDK开发环境中,下载编译好的固件或者在线调试,请按错误!未找到引用源。错误!未找到引用源。 错误!未找到引用源。错误!未找到引用源。小节进行操作。 ? 实验现象实验现象 首先将固件

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料


经营许可证编号:宁ICP备18001539号-1