多路CAN设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多路CAN设计

基于MCP2515的多路CAN总线接口及驱动程序设计在铁路系统中,为了保证列车的安全运行,需要对铁轨及周围状况进行实时检测。目前采用的方法是在铁路沿线安装多个检测设备,用于检测洪水、大风、泥石流等自然灾害及轨温等参数。这些设备一般采用的通信方式是RS232、RS485或CAN,并通过专线连接至监控中心的各个监控设备。这种方式极大浪费了线路资源,也不易于设备的统一管理。因此,需要一种安装在铁路沿线的设备,它将附近的检测设备发送的信息统一收集并通过一条专线直接送往监控中心。为了与多个检测设备通信,必须同时具有多个RS232、RS485和CAN接口。基于这种应用需要,本文提出了扩展多个CAN总线接口的方法。 1? 系统结构 1.1? 芯片介绍系统   采用Atmel公司的AT91RM9200(以下简称“9200”)作为MCU。该处理器基于ARM920T内核,主频为180 MHz时,性能可达到200MIPS;最高主频为209 MHz。该处理器还具有丰富的外设资源,非常适合工业控制领域的应用[1];采用的操作系统是ARMLinux,内核版本为2.4.19。   目前主流的CAN协议控制器一般采用I/O总线(SJA1000等)或SPI接口(MCP2515等)与MCU进行通信。由于本设计采用PC /104总线扩展卡的方式来扩展多个RS232和RS485接口,没有多余的I/O片选线可用,因此最终选用9200的SPI接口与MCP2515进行多路CAN总线接口的扩展。   MCP2515是Microchip公司推出的具有SPI接口的独立CAN控制器。它完全支持CAN V2.0B技术规范,通信速率最高可达1 Mbps,内含3个发送缓冲器、2个接收缓冲器、6个29位验收滤波寄存器和2个29位验收屏蔽寄存器[2];它的SPI接口时钟频率最高可达10 MHz,可满足一个SPI主机接口扩展多路CAN总线接口的需要。   1.2? 系统硬件接口   通过9200的SPI接口,连接了5个MCP2515。由于9200的SPI从设备片选线数量有限,故采用片选译码方式,NPCS0可作为普通的外部中断线使用(NPCS0与IRQ5复用引脚)。由于9200的外部中断线资源有限,故采用中断线共享的方式,即分别有两个MCP2515共享同一中断线,最后一个MCP2515独占一条中断线,以满足不同通信速率下数据处理的需要。   由于设备需要安装在铁路沿线,必须具有防雷击的能力。因此MCP2515与CAN总线收发器(TJA1050)之间采用高速光耦进行完全的电气隔离,并且光耦两端电路的电源也必须用电源隔离模块隔离开,这样才能真正起到隔离的作用。在TJA1050的CANH和CANL引脚与地之间连接2个30 pF的电容,可以过滤CAN总线上的高频干扰;2个二极管可以在总线电压发生瞬变干扰时起保护作用。光耦正常工作时输入电流为10 mA左右,内部发光二极管的正向电压降为1.7 V左右,因此要特别注意输入端串联电阻的阻值选择。 2? SPI主机的工作方式   9200通过SPI接口与5个MCP2515进行通信,9200的SPI控制器工作在主机模式,MCP2515工作在从机模式。MCP2515 支持多个指令(如复位指令、读指令、写指令等),以便于9200通过SPI接口对MCP2515的内部寄存器进行读/写操作。   需要注意的是,SPI使能后,只有在SPI_TDR(发送数据寄存器)中有数据时,才会根据片选配置(固定外设或可变外设)使能相应片选;而 SPI_TDR中无数据时,则片选自动禁用。因此,9200向MCP2515连续发送多个字节时,要保证在前一个字节传输完毕前,后一个字节就被写入到 SPI_TDR中,以避免片选被自动禁用;同时,在传输完每一个字节后,还要读取SPI_RDR(接收数据寄存器)。  3? 驱动程序设计   驱动程序是应用程序与硬件之间的中间软件层,它完全隐蔽了设备工作的细节。Linux操作系统根据设备中信息传送方式的不同,将设备分成3种类型:字符设备、块设备和网络设备[3]。9200与MCP2515的通信都是通过SPI接口以字节为单位进行的,因此MCP2515属于字符设备。由于5 个MCP2515共享9200的一个SPI接口,因此采用一个驱动程序来管理所有的MCP2515,这样做有利于对所有设备进行统一管理。   3.1? 驱动程序中定义的主要数据结构   CAN总线通信是基于报文帧的,在驱动程序中,无论发送数据还是接收数据都是基于报文帧的操作[4],因此需要设计合适的数据结构以满足数据操作的需要。  3.1.1接收与发送CAN报文帧结构体   typedef struct {     unsigned char node_num;     unsigned intid;

文档评论(0)

ranfand + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档