在线情况
楼主
  • 头像
  • 级别
  • 门派
  • 职务总版主
  • 声望+9
  • 财富5
  • 积分3065
  • 经验390701
  • 文章6744
  • 注册2006-03-07
基于MSP430与SJA1000的CAN通信系统的设计
 作者:刘发慧
 摘自:PLC

1  引言
CAN总线是国际上应用最广泛的现场总线之一。最早是由德国Bosch公司推出,用于汽车内部测量与执行部件之间的数据通信协议。CAN总线的应用范围遍及从高速网络到低成本的多线路网络,广泛应用于控制系统中的各检测和执行机构之间的数据通信。现场总线领域中,CAN总线得到了计算机芯片商的广泛支持,他们纷纷推出直接带有CAN接口的微处理器 (MCU)芯片。CAN是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高的抗电磁干扰性,而且能够检测出产生的任何错误。CAN网络具有如下特点:网络上任意一个节点均可在任意时刻主动向网络上的其它节点发送信息,而不分主从;采用非破坏性总线仲裁技术,当两个节点同时向网络上传送信息时,优先级低的节点主动停止数据发送,而优先级高的节点可不受影响地继续传输数据;具有点对点,一点对多点及全局广播传送接收数据的功能;通讯距离最远可达10km(5kbps),通讯速率最高可达1Mbps(40m),网络节点数实际可达110个,每一帧的有效字节数最多为8个,这样传输时间短,受干扰的概率低;通讯介质采用廉价的双绞线即可,无特殊要求;每帧信息都有CRC校验及其它检错措施,数据出错率极低,可靠性极高;在传输信息出错严重时,节点可自动切断它与总线的联系,以使总线上的其它操作不受影响。

2  SJA1000独立控制器简介
目前广泛流行的 CAN总线器件有两大类:一类是独立的CAN控制器,如82C200、SJA1000及Intel82526/82527等,另一类是带有在片CAN的微控制器,如P8SC582及16位微控制器87C196CA/CB等。我们选用PHILIPS公司的SJA1000CAN控制器以及82C250总线收发器,见图1。主要是考虑到SJA1000支持CAN2.0A/B规约。而82C250可以支持110个CAN节点,并且国内市场上PHILIPS的产品型号比较多,购买比较方便。
PHILIPS公司的SJA1000是符合CAN2.0B协议的总线控制器,它是应用于汽车和一般工业环境的独立CAN 总线控制器。由于硬件和软件的兼容它将会替代PCA82C200,它与PCA82C200 相比具有更先进的特征因此特别适合于轿车内的电子模块传感器制动器的连接和通用工业应用中特别是系统优化系统诊断和系统维护时特别重要。SJA1000具有完成CAN通信协议所要求的全部特性。经过简单总线连接的SJA1000可完成CAN总线的物理层和数据链路层的所有功能。其硬件与软件设计可兼容基本 CAN模式(BasicCAN)和新增加的增强CAN模式(PeliCAN)CAN2.0B协议。SJA1000的主要特性为:
(1) 管脚及电气特性与独立CAN总线控制器PCA82C200兼容;
(2) 软件与PCA82C200兼容(缺省为基本CAN模式);
(3) 扩展接收缓冲器(64字节FIFO);
(4) 支持CAN2.0B协议;
(5) 同时支持11位和29位标识符;
(6) 位通讯速率为1Mbits/s;
(7) 增强CAN模式(PeliCAN);
(8) 采用24MHz时钟频率;
(9) 支持多种微处理器接口;
(10) 可编程CAN输出驱动配置;支持热插拔;工作温度范围为-40~+125℃。

 [imga]../../upload/2006/09/21/010345.jpg[/imga]
           图1     SJA1000的硬件原理图
3  硬件设计原理框图
硬件设计原理框图参见图2。其中,从控制器选择MSP430F149。MSP430是TI公司最新出产的一种具有超低功耗的功能强大的16位单片机,MSP430F149是该系列中的一种型号。

 [imga]../../upload/2006/09/21/010357.jpg[/imga]
图2     硬件设计原理框图


3.1  MSP430单片机的优点
(1) 超低功耗,MSP430F149运行在1MHz时钟条件下时,工作电流视工作模式不同为0.1~400μA,工作电压为1.8~3.6V。
(2) 具有强大的处理能力,采用RISC指令集,只需简洁的27条指令,高度正交指令结构,处理内核功能强大并且非常灵活。
(3) 超低功耗的数控振荡器技术,可以实现频率调节和无晶体运行。外接时钟频率范围为32768Hz~8MHz,并且可以实现分频。从低功耗模式到运行模式的唤醒时间仅为6μs.4程序代码空间为60KB+256字节的FLASH,2k字节的RAM。采用串行在线编程方式,为用户编译程序和控制参数提供灵活的空间。5MSP430F149具有强大的中断功能,48个I/O引脚,它的I/O与传统的I/O不同,每个I/O口分别对应输入、输出、功能选择、中断等多个寄存器,使得功能口和通用I/O口复用,在对同一个I/O口进行操作前要选择其要实现的功能,这样大大的增强了端口的功能和灵活性,我们就是利用I/O 口来实现对CAN总线控制器的控制的。由于MSP430F149具有以上的特点,十分适合开发的要求,所以选用其作为系统的主芯片。收发器选择 PHILIPS公司的PCA82C250。
3.2  实际应用中的注意事项
从图2中看出硬件电路的设计并不是很困难,但是在实际应用中应该注意几点:
(1) 在CAN总线的两端应该有两个120Ω的电阻,这两个电阻对于总线阻抗的匹配,起着相当重要的作用。忽略掉它们,会使数据通信的抗干扰性及可靠性大大降低,甚至无法通信。
(2) 82C250第8脚与地之间的电阻Rs称为斜率电阻,它的取值决定了系统处于高速工作方式还是斜率控制方式。把该引脚直接与地相连,系统将处于高速工作方式;而在斜率控制方式时,上升及下降的斜率取决于Rs的阻值,通讯的速度越快,则Rs的阻值越小。实验数据表明15~200kΩ为Rs较理想的取值范围。在这里把82C250第8脚接地使系统处于高速工作方式。
(3) 82C250的第5脚Vref提供了一个VCC/2的输出电压,是为了给前面CAN控制器的模拟比较器提供一个参考电压,使比较器能够准确地读出总线上的位值。如果系统传输距离近,环境干扰小,可以不用电流隔离,这样可直接把82C250的Vref端与RX1脚相连,从而简化了电路。如果电路采用电流隔离,SJA1000的RX1引脚应该输入VCC/2的电压。

4  CAN通信软件的设计思想
CAN节点模块的软件设计CAN节点模块的软件设计主要包括三部分, SJA1000的初始化, 数据的发送和接收。这三部分程序是CAN模块进行数据通讯的基本部分。熟悉了这三部分就能编写出利用CAN总线进行数据通讯的一般应用程序。下面就这三部分程序设计进行一个描述。
4.1  SJA1000的初始化程序
SJA1000 的初始化只有在复位模式下才可以进行。初始化主要包括工作方式的设定、接收屏蔽寄存器(AMR)和接收代码寄存器(ACR)的设置、总线时序寄存器的设置、输出模式寄存器和中断寄存器的设置等。初始化设置完成以后,SJA1000就可以进入工作状态,进行正常的通讯工作。需要初始化的CAN控制寄存器有:模式寄存器、时分寄存器、接收代码寄存器、屏蔽寄存器、总线定时寄存器、输出控制寄存器等。其流程图如图3所示。

  [imga]../../upload/2006/09/21/010752.jpg[/imga]
             图3     SJA1000初始化流程图
4.2  发送和接收程序
发送数据程序把数据存储区中待发送的数据取出,组成信息帧,并将主机的ID地址,填入帧头,然后将信息帧发送到CAN控制器的发送缓冲区。在接收到主机的发送请求后,发送程序启动发送命令。信息从 CAN控制器发送到总线是由CAN控制器自动完成的。信息从CAN总线到CAN控制器的接收缓冲区也是由CAN控制器自动完成的。接收程序只需从接收缓冲区读取信息,并将其存储在数据存储区。发送和接收程序流程分别如图4图5所示。
  [imga]../../upload/2006/09/21/010910.jpg[/imga]
  图4  接收数据的中断服务程序流程     图5 发送数据的中断服务程序流程

5  结束语
实践表明,SJA1000是一种较好的 CAN总线控制器件,它的抗干扰性能优良,通信速率较高,电路也比较简单。在PeliCAN模式下,其识别码达29位,因而可满足各种应用场合。在自动化控制系统中,合理安排这29位识别码可以使许多问题得以简化。PeliCAN模式增加的各种功能,大大地方便了通信的调试。
[COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
在线情况
2
  • 头像
  • 级别
    • 积分2
    • 经验43
    • 文章2
    • 注册2006-09-21
    有个问题,请教一下,欢迎拍砖:)

    就是:将命令和数据写入sja1000怎么写合适,因为430的地址数据总线不对外,不向51系列可以有指令写命令后在写数据,我可以对sja1000写一个命令,然后接着写数据,那么这个命令和数据之间好像有一个时间限制,我不知道这个时间怎么处理合适,还请多多指教。
    微控网感谢您的参与
    在线情况
    3
    • 头像
    • 级别
    • 门派
    • 职务总版主
    • 声望+9
    • 财富5
    • 积分3065
    • 经验390701
    • 文章6744
    • 注册2006-03-07
    用430模拟一个总线可以吧,就好似驱动并口LCD模块一样。
    [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
    在线情况
    4
    • 头像
    • 级别
      • 积分2
      • 经验43
      • 文章2
      • 注册2006-09-21
      不知实际做过这个项目吗?用430模拟一个总线可以,但是sja1000的控制时序锂好像有最小间隔时间,不知怎样实现有保证
      微控网感谢您的参与
      在线情况
      5
      • 头像
      • 级别
      • 门派
      • 职务总版主
      • 声望+9
      • 财富5
      • 积分3065
      • 经验390701
      • 文章6744
      • 注册2006-03-07
      我没用过,你研究下。
      [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
      Powered by LeadBBS 9.2 .
      Page created in 0.1719 seconds with 5 queries.