您当前的位置:五五电子网电子知识电子知识资料科研成果基于SJ1000的CAN现场总线设计 正文
基于SJ1000的CAN现场总线设计

基于SJ1000的CAN现场总线设计

点击数:7635 次   录入时间:03-04 11:59:32   整理:http://www.55dianzi.com   科研成果

  控制器局域网CAN( Controller Area Network)是国际上应用最广泛的现场总线之一,是一种有效支持分布式控制或实时控制的串行通信网络。我们使用微处理器控制CAN的方法一般有两种,一种是微处理器本身内带CAN功能的控制器,如飞利浦公司的AM7系列中的LPC2119,关于这种控制方法请参考发表在《电子世界》杂志2010年第1期上的《基于LPC2119的CAN现场总线设计》一文。另一种微处理器内部不带CAN功能的控制器,如我们广泛使用的51系列8位机89S52,这时我们需要外接CAN控制器,用微处理器对其控制来实现CAN功能。

  PHILIPS半导体公司将SJA1000作为PCA82C200 CAN控制器( BasIC CAN)的替代产品。SJA1000增加了一种新的工作模式( Peli CAN),这种模式支持具有很多新特性的CAN 2.OB协议。SJA1000内含丰富的寄存器,功能十分强大,完全搞懂每个寄存器的含义和用法是件不容易的事,更为详细的说明和使用方法,有兴趣的读者可以参考广州周立功单片机有限公司的网站http://www.zlgmcu.com/home.htm.在里面搜索SJA1000即可。对于我们大多数使用者,按着本文下面的叙述,就可轻松完成设计。

  先简单了解一下SJA1000的管脚,23-28,1-2脚ADO~AD7:数据/地址复用总线;3脚ALE/AS:Intel模式/Motorola模式的地址锁存信号:4脚cs:片选信号输入,低电平有效:5脚( RD )/E、6脚WR:读写控制信号:7脚CLKOUT:SJA1000产生的提供给微控制器的时钟输出信号,时钟信号来源于内部振荡器且通过编程驱动,时钟控制寄存器的时钟关闭位可禁止该引脚。9脚XTAL1:输入到振荡器放大电路,外部振荡信号由此输入:10脚XTAL2:振荡器放大电路的输出,使用外部振荡信号时开路输出;9、10脚间一般接晶体振荡器。

  11脚MODE模式选择输入:1(高电平)=Intel模式;0(低电平)=Motorola模式。12脚VDD3、18脚VDD2、22脚VDD,I:5V电压端。8脚VSS1、21脚VSS2、15脚VSS3:是与上述电压端相对应的接地端。13脚TXO、14脚TX1:从CAN输出驱动器O,1输出到物理总线上。19脚RXO、20脚R×1:从物理CAN总线输入到SJA1000的输入比较器。SJA1000内含2路CAN。16脚INT:中断输出,用于中断微控制器,INT在内部中断寄存器各位都置位时,低电平有效,INT是开漏输出。17脚RST:SJA1000的复位端,由微处理器来控制。

  硬件电路设计

  本硬件采用MCU( AT89S52) +CAN控制器(SJA1000)+隔离CAN收发器(CTM  Module)结构,CAN控制器采用PHILIPS的SJA1000,SJA1000是一款独立的控制器,用于汽车和一般工业环境中的控制器局域网络,是目前市面上使用的最广的一款CAN控制器。

65

  单片机最小化系统   上图所示是单片机最小化系统,AT89S52的14、1 5脚外接晶振和电容组成单片机的振荡电路,4脚是复位端,由电阻R1、C1和轻触开关SW1组成,AT89S52使用PLCC44脚封装的贴片器件,利用单片机AT89S52的P1口和复位口进行在线编程,使用at89isp软件在线编程,进行程序的烧写。43

  SJA1000的CAN收发系统SJA1000的CAN收发系统如上图所示,由独立CAN通信控制器SJA1000、CAN总线收发器82C250及高速光耦器6N137等组成。SJA1000的ADO-AD7接到单片机AT89S52的PO口,控制SJA1000进行数据通信。SJA1000的读写控制端5、6脚和地址锁存端3脚接到单片机AT89S52的读写控制端13、1 2脚及锁存端27脚上,SJAl000的片选端CS接到单片机AT89S52的25脚P2.7端,低电平有效,因此,地址为OX7000~OX7FFF。SJA1000的17脚RST复位端接到单片机的P3.4口,SJA1000的16脚INT中断端接到单片机的外中断0的P3.2上,将SJA1000接收的信号通知单片机进入中断。

  SJA1000的TXO和RXO是经过光耦6N137后再与82C250相连,为的是增强CAN总线节点的抗干扰能力。SJA1000有2路CAN,我们只是用了其中的一路。SJA1000的19脚RXO和13脚TXO分别是CAN的收、发信号端,通过2个光耦6N137送到CAN收发驱动PCA82C250的4、1脚,通过驱动后由6、7脚加到CAN总线的CANL和CANH上。本设计中光耦采用了隔离,+VCC通过U9(DC/DC模快)得到+5,尽管这两路电压都是+5V,但不是共地的。

  软件设计

  SJA1000中关于CAN的寄存器特别多,设置起来比较复杂,CAN协议本身也比较复杂,有兴趣的读者可以参考SJA1000的PDF文档和有关CAN协议说明,其实,对于我们应用来说,只要按照我们下面的程序,就可以很好的实现CAN操作,本程序是通过大量实验证明是可行的,应用在很多具体项目中。

  首先,在函数外,或H文件里设置以下,主要是设置SJA1000寄存器的地址,我们使用Peli CAN增强模式:

  #define SJA_MACID×BYTE [Ox70001 //SJA1000片选端CS接单片机A15,起始地址Ox7000

  #define SJA_REG_BaseADD OxBOOO//SJA,IOOO的基地址#define REG_MODE×BYTE[SJA_REG_BaseADD+ Ox001#define REG_CMD XBYTE[SJA_REG_BaseADD+ Ox01]

  #define REG_SR×BYTE[SJA_REG_BaseADD+ Ox02]

  #define REG_IR×BYTE[SJA_REG_BaseADD+ Ox03]

  #define REG_IR_ABLE×BYTE [SJA_REG_BaseADD+Ox04]

76

76

45




本文关键字:暂无联系方式科研成果电子知识资料 - 科研成果

《基于SJ1000的CAN现场总线设计》相关文章>>>