




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、 摘要本实验介绍一种基于CAN总线控制器SJA1000的总线节点模块,包括SJA1000的部分重要寄存器的功能介绍,以及软件编程的实现。 特点:1. 可实现任意单片模块的互相通信,由于SJA1000兼容5V和3.3V的逻辑电平,且供电电压也为3.3V5.6V,因而可以使基于逻辑供电5V和3.3V的系统能够很容易的挂在CAN总线网络上,解决模块之间的电平不兼容问题。2. 总线控制器宇驱动器之间利用6N137高速光耦隔离技术,使得网络上的各个模块与总线本身完全隔离,保证了总线的安全性,也保证了各模块之间的独立性。当总线网络中含有大负载驱动时这点表现的尤为重要。3. 由于采用SJA1050作为总线驱动器,实现数据在总线网络里高速传输,最高速度可达到1Mbps。二、CAN总线简介1 .CAN总线的特点 CAN(Controller Area Network局域控制网) 总线由Bosch、Benz研究试验,于1986年2月正式提出,至1993年11月Bosch CAN2.0成为国际标准(ISO11898)。2000年CAN总线芯片年度销售超过1亿片,欧产轿车都至少装配一条CAN总线网络。目前CAN总线的应用已从汽车、火车、轮船迅速扩展到机械工业、纺织机械、农用机械、机器人、数控机床、医疗器械、家用电器及传感器等领域。其被公认为是最有前途的现场总线之一。由于采用了许多新技术及独特的设计,CAN总线与一般的通讯总线相比,它的数据通讯具有突出的可靠性、实时性和灵活性。其特点可概括如下:l CAN是到目前为止唯一有国际标准的现场总线。l CAN为多主方式工作,网络上任一节点均可在任一时刻主动地向网络上其他节点发送信息,而不分主从。l 在报文标识符上,CAN上的节点分成不同的优先级,可满足不同的实时需要,优先级高的数据最多可在134s内得到传输。l CAN采用非破坏总线仲裁技术。当多个节点同时向总线发送信息发生冲突时,优先级较低的节点会主动的退出发送,而最高优先级的节点可不受影响的继续传输数据,从而大大节省了总线冲突仲裁时间。尤其是在网络负载很重的情况下,也不会出现网络瘫痪的情况(以太网则可能)。l CAN节点只需要通过对报文的标识符滤波即可实现点对点、一点对多点及全局广播等几种方式传送接收数据。l CAN的直接通信距离最远可达10km(速率5kbps以下);通信速率最高可达1Mbps(此时通信距离最长为40m)。l CAN上的节点数取决于总线驱动电路,目前可达110个。在标准帧报文标识符有11位,而在扩展帧的报文标识符(29位)的个数几乎不受限制。l 报文采用短帧结构,传输时间短,受干扰概率低,保证了数据出错率极低。l CAN的每帧信息都有CRC校验及其他检错措施,具有极好的检错效果。l CAN通信介质可为双绞线、同轴电缆或光纤,选择灵活。l CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响。2.CAN总线的位数值表示与通信距离CAN总线上用显性(Dominant)和隐性(Recessive)两个互补的逻辑值表示0和1。当在总线上出现同时发送显性位和隐性位时,总线上数值将出现显性。如图所示,VCAN-H和VCAN-L为CAN总线收发器与总线之间的两接口引脚,信号是以两线之间的“差分”电压形式出现。在隐性状态,VCAN-H和VCAN-L被固定在平均电压附近,Vdiff近似于0。在总线空闲或隐性位期间,发送隐性位。显性位以大于最小阈值的差分电压表示。三、CAN控制器SJA10001. CAN控制器的作用CAN就是总线型结构的一种适合工业现场自动控制的计算机局域网络。在网络的层次结构中,数据链路层和物理层是保证通信质量至关重要、不可缺少的部分,也是网络协议中最复杂的部分。CAN控制器就是扮演这个角色,它是以一片可编程芯片上的逻辑电路组合来实现这些功能,对外它提供了与微处理器的物理线路接口。通过对它的编程,CPU可以设置它的工作方式,控制它的工作状态,进行数据的发送和接收,把应用层建立在它的基础上。SJA1000便是一块最常用的CAN总线控制器。2. SJA1000简介1)JA1000的内部结构及管脚定义下图为SJA1000的引脚图:SJA1000 具有28 个引脚,下面对部分引脚进行介绍。MODE:模式选择输入,1(高电平)=Intel 模式;0(低电平)=Motorola 模式。TX0、TX1:从CAN 输出驱动器0,1 输出到物理总线上。RX0、RX1:从物理CAN 总线输入到SJA1000 的输入比较器。INT:中断输出,用于中断微控制器。INT 在内部中断寄存器各位都置位时,低电平有效。CLKOUT:SJA1000 产生的提供给微控制器的时钟输出信号,时钟信号来源于内部振荡器且通过编程驱动,时钟控制寄存器的时钟关闭位可禁止该引脚。SJA1000 的其他引脚分别为:AD0AD7,数据/地址复用总线;ALE/AS,Intel 模式/Motorola模式的地址锁存信号;RD/E、WR,读写控制信号;CS 片选信号输入,低电平有效;XTAL1,输入到振荡器放大电路,外部振荡信号由此输入;XTAL2 振荡器放大电路的输出,使用外部振荡信号时左开路输出;VDD1、VDD2、VDD3,5V 电压端;VSS1、VSS2、VSS3,与上述电压端相对的接地端。2)重要寄存器要编写CAN总线通讯程序,只要了解CAN总线协议,熟悉SJA1000寄存器的配置,就可以完成CAN总线通讯。所以我们首先必须要详细了解SJA1000的寄存器。(1)SJA1000 的两个工作模式(Basic 和Peli)所使用的寄存器数目不同,功能也不尽相同。Basic CAN 有从0-31 共32 个寄存器可用,Peli CAN 有从0-127 共128 个寄存器可用。要实现CAN通讯,主要就是怎么配置这些寄存器。(2)要掌握的重要寄存器:模式寄存器;命令寄存器;状态寄存器;中断寄存器;中断使能寄存器;总线定时器0,总线定时器1;输出控制寄存器;时钟分频寄存器;屏蔽寄存器0-3;验收代码寄存器0-3。(3)模式寄存器的作用:控制SJA1000的运行在什么模式下。包括:睡眠模式;自检测模式;复位模式;只听模式。(4)命令寄存器的作用:启动发送或自发送;释放接收寄存器;中止发送(5)状态寄存器的作用:指示SJA1000的状态,以判断是否可以进行下一步操作。(6)中断寄存器的作用:当发生中断后,读其值可以判断是什么原因引起的中断。(7)中断使能寄存器的作用:打开相应的中断。(8)总线定时器的作用:设置通讯的速率。(9)输出控制寄存器的作用:控制输出模式(10)时钟分频寄存器的作用:控制CAN总线采用那种模式。(11)验收代码寄存器和屏蔽寄存的作用:决定接收哪类标志码的数据。注意验收滤波器的设置。3)重要寄存器功能介绍(peliCAN模式)(1)模式寄存器(MOD)(地址0)模式寄存器的内容用来改变CAN控制器的行为方式。CPU把这个控制寄存器作为读/写存储器,可以由CPU设置或复位。MOD.75 保留MOD.4 睡眠模式(=1睡眠,=0唤醒)MOD.3 验收滤波器模式(=1选择单向滤波器(32位长度)起作用,=0选择双向验收滤波器(16位)起作用)MOD.2 自检模式(=1自检测,=0正常模式)MOD.1 只听模式(=1只听,=0正常模式)MOD.0 复位模式(=1复位模式,=0正常模式)(2)命令寄存器 (地址1)命令寄存器(CMR)中的一个命令启动CAN控制器传输层的一个动作,为只写寄存器。CMR.75 保留。CMR.4 自接受请求(=1信息可以同时发送和接收)。CMR.3 清除数据溢出(=1数据溢出状态位被清除)。CMR.2 释放接受缓冲器(=1释放,=0无动作)。CMR.1 中止发送(=1如果不是正在处理,则取消等待中的发送请求)。CMR.0 发送请求(=1报文被发送)。(3)状态寄存器 (地址2)状态寄存器(SR)反映CAN控制器的状态。只读存储器。SR.7 总线状态(=1总线关闭,=0总线开启)。SR.6 错误状态(=1至少一个错误寄存器达到或超过报警额限寄存器(EWLR)定义的CPU报警额限)。SR.5 发送状态(=1正在发送报文,=0空闲)。SR.4 接收状态(=1正在接收报文,=0空闲)。SR.3 发送完成状态(=1最近一次发送完成,=0未完成)。SR.2 发送缓冲器状态(=1释放,=0锁定)。SR.1 数据溢出状态(=1溢出,=0未溢出)。SR.0 接收缓冲器状态(=1有完整的报文,=0无完整的报文)。(4)中断寄存器 (地址3)中断寄存器(IR)用做中断源的识别。IR.7 总线错误中断(=1置检测到总线错误,=0复位) IR.6 仲裁丢失中断(=1当CAN控制器丢失仲裁变为接受器时,且中断使能寄存器相应位置1)IR.5 错误认可中断IR.4 唤醒中断 (=1检测到总线有活动)IR.3 数据溢出中断(=1数据有溢出)IR.2 出错报警中断(=1出错引起的中断)IR.1 发送中断(=1报文发送完成)IR.0 接受中断(=1RXFIFO中部为空)说明:中断使能寄存器相应位必须置1才能有效(5)中断使能寄存器 (地址4)控制中断寄存器相应位的中断使能。(6)仲裁丢失捕捉寄存器(地址11)包括了仲裁丢失的位置信息,其中ALC.75为保留位,ALC.4.0为仲裁丢失的具体位置其值从031分别对应ID.28ID.0 RTR位。(7)错误代码捕捉寄存器(地址12)错误代码捕捉寄存器(ECC)包含了总线错误的类型和位置信息。ECC.7.6 错误代码 00,01,10,11分别对应:位错,格式错,填充错,其它类型错;ECC.5 错误发生方向(=1接收时发生错误,=0发送时发生错误);ECC.40 错误代码组合;(8)错误报警额限寄存器(地址13)当错误次数超出该寄存器值后便触发错误中断。(9)RX错误计数器(地址14)(10)TX错误计数器(地址15)(11)发送缓冲器(地址 1628)下图为扩展帧格式地址分配 第一个字节是帧信息(BIT)字节,它说明了帧格式(SFF或EFF),远程帧或数据帧和数据长度。SFF有两个字节的标识码,EFF有四个字节的标识码。数据长度最多长8个字节。发送缓冲器长13个字节,位于CAN地址的1628(见上图);BIT.7 帧结构格式;BIT .6 远程帧发送请求;BIT.54忽略;BIT.30 数据长度代码位,不超过8。 地址1720为TX标识码序列 TX标识码1(地址17) BIT70 对应ID.2821;TX标识码2(地址18)BIT70 对应ID.2013; TX标识码3(地址19)BIT70 对应ID.125; TX标识码4(地址20)BIT73 对应ID.40,BIT20忽略(12)接收缓冲器接收缓冲器(RXB)的布局与发送缓冲器很相似。是RXXFIFO的可以访问的部分,位于CAN地址的1618。每条报文又分为描述符区和数据区(见下图)。 描述符区1617的功能描述和发送缓存器的一致。 数据区在帧信息字节的接收字节长度代码(DLC)代表实际发送的数据长度码。由上图所示,RXFIFO共有64个报文字节空间。一次可以储存的报文数决定于报文长度。当接收到的报文超出64字节后便会发生数据溢出中断,但前提是数据溢出中断使能。(13)接收滤波器的结构与作用在验收滤波器的作用下,只有当接受到报文的标识位和验收滤波器预定义的位值相等时,CAN控制器才允许将已接收到的报文存入RXFIFO。验收滤波器由验收代码寄存器(ACRn)和验收屏蔽寄存器(AMRn)定义。要接收的报文的位模式在验收代码寄存器中定义。相应的验收屏蔽寄存器允许定义某些位为“无关”。两种不同过滤模式可由模式寄存器中MOD.3选择:MOD.3 = 1为单滤波模式,=0为双滤波模式。其实CAN的两个滤波器的作用可以近似看作是节点的地址,但又有别于地址的功能,它可以通过选择单滤波模式增加接收报文的范围,作为监听使用。例如在一个CAN总线网络中,我们可以让所有节点发送报文时,将TX标识码的头两个字节的内容设定为相同的内容,而后两个字节则标识目标节点的位子,这样我们就可以让一个节点设定为单滤波模式,它便可以接受到网络里传送的每一条报文,并将所有的保文上传到上位机处理,实现对网络的监听。而其他节点可以根据具体的功能选择滤波方式。(14)RX报文计数器(地址29)RX报文计数器(RMC)寄存器反映了RXFIFO中的有效报文的数目。每接受一次该值加一,每次释放接收缓冲器命令减一。每次复位后,该寄存器清0。(15)RX缓冲器起始地址寄存器(略)4)公共寄存器在PeliCAN和BasicCAN模式均意义相同。(1)总线时序寄存器0(地址6)总线时序寄存器0(BTR0)定义了波特率预置器(BRP)和同步跳转宽度(SJW)的值。如果在PeliCAN的操作模式下,该寄存器是只读的。BIT0.50(BRP.50)是波特率预置器位域,使得CAN系统时钟的周期tscl是可编程的。 tscl=2tclkx(32xBRP.5+16XBRP.4+8XBRP.3+4XBRP.2+2XBRP.1+BRP.0+1) tslk=XTAL的震荡周期=1/fxtalBIT0.76(SJW.10)是同步跳转宽度位域。同步跳转宽度tSJW定义了一个位周期的可以被一次重新同步缩短或延长的时钟周期的最大数目。tSJW=tSCLx(2xSJW.1+SJW.0+1)(2)总线时序寄存器1(地址7)总线时序寄存器1(BTR1)定义了一个位周期的长度、采样点的位置和在每个采样点的采样数目。(3)输出控制寄存器(地址8)输出控制寄存器(OCR)允许由软件控制建立不同输出驱动的配置。(4)时钟分频寄存器(地址31)BIT20 用来定义外部CLKOUT引脚的输出频率;BIT3 时钟关闭位 =1CLKOUT输出失效;四、CAN总线驱动器通过前面的介绍可知,CAN总线的位数值以差分的方式表示的,然而由控制器出来的数值表示仍旧0、1表示法,因而需要在控制器于总线之间外接一片驱动器,实现两种数值的转换。同时总线驱动器也使得总线的传输距离增加。本实验采用的是SJA1050作为总线的驱动器。下图为SJA1050的结构图。注:关于SJA1050的具体功能介绍可以查询相关资料,在此不作详细说明。五、节点的硬件介绍1节点结构框图数据采集卡包括一块430单片机(或飞思卡尔单片机),CAN总线控制芯片和发射芯片、五个端口和一个和上位机相连的串口(可以是USB转串口)。2硬件电路图上图所示为CAN总线系统中的控制单元电路原理图,控制单元采用独立CAN总线控制器SJA1000,驱动器选用SJA1050,其中控制器和驱动器之间采用两片6N137高速光耦电路完全隔离,这样做可以保证总线的安全性,同时也保证了总线上的各模块的独立性。在总线CANL和CANH到地各反接一个各肖特基二极管和30p的电容,当CANL或CANH的电压由于环境原因过高时可以保证总线及驱动器的安全。六、软件介绍1. 程序流程图1)主程序流程2. 部分程序介绍1)SJA1000读操作下图为SJA1000在Intel Model下的读数据时序/-读取数据-uchar CAN_Read(uchar Adr)/read data from Adr;uchar Rdata; PORTB = Adr;/地址送入 DDRB = 0xff;/将PORTB设为输出方式 CAN_ALE = 1; CAN_ALE = 0;/地址锁定脉冲 DDRB = 0X00;/将PORTB改为输入方式 CAN_RD = 0;/数据输出 Rdata = PORTB;/数据读入 CAN_RD = 1;/数据输出关闭 return Rdata;/数据返回2)SJA1000写操作下图为SJA1000在Intel Model下的写数据时序/-写数据-void CAN_Write(uchar Adr,uchar Data)/Write Data to Adr; CAN_ALE = 0; PORTB = Adr;/送入地址 DDRB = 0xff; CAN_ALE = 1; CAN_ALE = 0;/地址锁定 CAN_WR = 0; PORTB = Data;/放置数据 CAN_WR = 1;/数据锁定3)SJA1000初始化/-总线节点初始-void CAN_Init(void) /初始化总线节点uchar ACRR4; uchar AMRR4; uchar Judge,i; CAN_CS = 0;/选中总线控制器 ACRR0 = 0x11; ACRR1 = 0x22; ACRR2 = 0x33; ACRR3 = 0x44;/接收代码寄存器,节点1 AMRR0 = 0xff; AMRR1 = 0Xff; AMRR2 = 0xff; AMRR3 = 0xff;/接收屏蔽寄存器。只接收主机发送的信息 CAN_RST = 0; /复位CAN_RST = 1; do / .0=1-reset MODRe,进入复位模式,以便设置相应寄存器 /防止未进入复位模式,重复写入 CAN_Write(0x00,0x09); Judge = CAN_Read (0x00); while(!(Judge & 0x01); CAN_Write(0x1f,0x88);/ CDR.3=1时钟关闭, .7=0-basic CAN, .7=1-Peli CAN CAN_Write(0x06,0x31);/BTR0 CAN_Write(0x07,0x1c);/BTR1总线波特率设定 CAN_Write(0x04,0x01);/IER .0=1-接收中断使能; .1=0-关闭发送中断使能 CAN_Write(0x08,0xaa);/OCR 配置输出控制寄存器 CAN_Write(0x01,0x04);/CMR释放接收缓冲器 for(i=0x10;i0x14;i+) CAN_Write(i,ACRRi-0x10);/初始化标示码 for(i=0x14;i0x18;i+) CAN_Write(i,AMRRi-0x14);/初始化掩码 do /确保进入自接收模式 CAN_Write(0x00,0x04); Judge = CAN_Read(0x00); while(!(Judge&0x04); CAN_CS = 1;/拉高片选,防止误操作4)节点数据发送void CAN_TXD(uchar *data) uchar Judge,i; uchar TX_buffer13 ; CAN_CS = 0;/初始化标示码头信息 TX_buffer0 = 0x88;/.7=0扩展帧;.6=0数据帧; .3=1数据长度 TX_buffer1 = 0x01;/本节点地址TX_buffer2 = 0x02;/ TX_buffer3 = 0x03;/TX_buffer4 = 0x00;/初始化标示码头信息 /初始化发送数据单元 TX_buffer5 = data0; TX_buffer6 = data1; TX_buffer7 = data2; TX_buffer8 = data3;/ TX_buffer9 = data4;/ TX_buffer10 = data5;/ TX_buffer11 = data6;/ TX_buffer12 = data7;/ /初始化数据信息 do Judge = CAN_Read(0x02);/ 读取状态寄存器值 while(Judge & 0x01); /SR.4=1 正在接收,等待 do Judge = CAN_Read(0x02);/ 读取状态寄存器值 while(!(Judge & 0x08); /SR.3=0,发送请求未处理完,等待 do Judge = CAN_Read(0x02);/ 读取状态寄存器值 while(!(Judge & 0x04); /SR.2=0,发送缓冲器被锁。等待 for(i = 0x10;i=0x1c;i+) CAN_Write(i,TX_bufferi - 0x10); CAN_Write(0x01,0x10);/报文发送使能 CAN_CS = 1;5)主程序void main(void) /* put your own code here */ EnableInterrupts; DDRB =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新质生产力与企业出海
- 新媒体主播:新质生产力的新职业代表
- 新质生产力带来的发展机遇
- 圆轴扭转的概念及内力
- 2025年口腔颌面外科特殊手术处理模拟测试答案及解析
- 新质生产力的国内与国际视野
- 2025年神经外科常见手术操作技能评估答案及解析
- 2025年眼科青光眼手术前后护理注意事项模拟考试卷答案及解析
- 2025年法医学法医鉴定常见案例答案及解析
- 2025年骨科手术常见并发症的应急处理模拟考试卷答案及解析
- 2025年宣城市总工会招聘社会化工会工作者13名笔试参考题库附答案解析
- 2025-2026学年苏科版(2024)初中物理九年级上册教学计划及进度表
- 咸味香精基础知识培训课件
- 2025年医院药师职业技能大赛试题(附答案)
- 2025年9月新版劳务用工合同范本(可规避风险)
- 肥胖症诊疗指南(2024年版)解读
- 《焊接结构生产》课件-第一单元 焊接结构生产基础知识
- 中国钾离子电池行业市场前景预测及投资价值评估分析报告
- 烟草局联合快递企业开展涉烟寄递违法行为培训
- 高一历史秋季开学第一课:走进高中历史的星辰大海
- 医药公司经营风险管理
评论
0/150
提交评论