《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > 基于USB的CAN总线智能适配卡的软硬件设计

基于USB的CAN总线智能适配卡的软硬件设计

2009-02-12
作者:季厌浮

  摘 要: 采用SJA1000作为CAN控制芯片,使用PDIUSBD12作为USB的控制芯片,并利用AT89C52作为微控制器,设计了基于USB的CAN总线智能适配卡的硬件结构。在此基础上,设计了适配卡的软件实现方案。针对CAN总线容易受到外界干扰的弱点,使用6N137进行信号隔离。
  关键词: USB接口;CAN总线;微控制器;智能适配卡

 

  随着信息技术的飞速发展,各种数据的实时采集和处理在现代工业控制中已经成为必不可少的部分,这就要求现场设计的接口简单灵活且具有较高的数据传输率。控制器局域网CAN(Controller Area Network)总线属于现场总线的范畴,是一种具有高可靠性、支持分布式控制和实时控制的串行通信总线标准。传统的适配卡设计方案中,CAN总线网络与计算机的连接通常采用的是RS232、ISA或者PCI接口,但是随着计算机接口技术的迅速发展,ISA接口已经逐渐被淘汰。RS232接口数据传输率太低,PCI接口虽然可以实现高速传输,但其主要缺点是占用有限的系统资源,设计复杂,并且无法用于便携式计算机的扩展,必须有高质量的驱动程序保证系统的稳定。USB技术正是顺应接口技术发展而提出的一种快速、双向、同步传输、廉价的并且可以进行热插拔的通用串行总线。
  本文设计了基于USB接口的CAN总线适配卡的硬件结构和软件实现方案。该适配卡既可以对数据起到转发的作用,即收集CAN总线上各个节点的数据,转发给上位机,并把上位机的命令和数据发给各节点;也可以完成对CAN总线上的用户系统的部分监控管理工作,故又被称为智能适配卡[1]。通过在矿井等特殊现场环境下的实践应用,证明该适配卡具有良好的抗干扰能力和高速的传输性能。
1 智能适配卡的硬件结构
  适配卡的硬件电路主要由微控制器、CAN总线接口、USB总线接口和信号隔离模块等部分组成,如图1所示。

 


1.1 AT89C52微控制电路
  AT89C52是一个低电压、高性能CMOS 8位单片机,片中内置有8KB可反复擦写的Flash存储单元和256B随机存取数据存储器RAM,功能强大。AT89C52是该接口电路的控制核心,其中P0、P2口用作16位数据I/O口,P1、P3口用作控制。
  微控制器负责对USB设备控制器和CAN控制器进行控制。在微控制器内部驻留有USB通信协议和CAN通信协议,完成USB通信协议和CAN总线通信协议转换,实现USB接口和CAN接口通信数据的透明传输[2]
1.2 USB接口电路
  本设计中USB控制芯片采用Philips公司的PDIUSBD12。该芯片是一款性价比很高的USB器件,内部集成了串行接口引擎SIE、存储器管理单元MMU、集成RAM、模拟收发器以及电压调整器,可与任何外部微控制器实现高速数据传输的并行接口(2MB/s)。提供3个端点,其中主端点(端点2)的双缓冲配置增加了数据吞吐量并轻松实现实时数据传输。
  PDIUSBD12与微控制器的接口有二种方式:多路地址/数据总线方式、单地址/数据总线方式。在本设计中,采用的是前一种方式,即使用了AT89C52的INT0、ALE、WR、RD和P0口,A0脚接地,当PDIUSBD12接收到主机的有效信息时,会产生一个中断通知AT89C52进行处理。若微控制器的输出地址为奇数,则表示对PDIUSBD12发送指令;若输出地址为偶数,则表示对PDIUSBD12进行数据传输。AT89C52将数据经PDIUSBD12的并行接口送入FIFO存储器。对微控制器而言,PDIUSBD12看起来就像1个带8位数据总线和1个地址位的存储器件。由于在USB的信号传递过程中会掺杂进瞬间的高压噪声,这些噪声对USB口的收发电路将产生致命的危害,因此需要对这些噪声电压进行抑制。在USB接口电路设计中,使用了SN75240,它可以对USB接口中的不正常电压进行有效的抑制,以保证硬件设备的安全[3]
1.3 CAN总线电路
  在本设计中,CAN总线控制器采用Philips公司生产的SJA1000,它作为一个发送、接收缓冲器,实现主控制器和总线之间的数据传输。CAN总线控制器接口芯片采用PCA82C250,它是CAN总线控制器和物理总线的接口,可以对总线提供不同的发送能力和对CAN控制器提供不同的接收能力。为了增强CAN总线的抗干扰能力,SJA1000的TX0和RX0并不是直接与PCA82C250的TXD和RXD相连,而是通过高速光电耦合器6N137后与PCA82C250相连。这样就很好地实现了总线上各CAN节点间的电气隔离,如图2所示。不过应注意:光耦部分电路所采用的两个电源Vcc和Vdd必须完全隔离,否则采用光耦就会失去意义。电源的完全隔离可采用小功率电源隔离模块,或带+5V隔离输出的开关电源模块实现。

 

2 智能适配卡的软件设计
  适配卡的软件设计主要包括CAN通信软件设计、USB设备端通信软件设计、USB设备驱动程序设计和应用程序设计四大部分。
2.1 CAN通信软件设计
  CAN通信软件设计主要包括三大部分:初始化CAN控制器SJA1000、发送数据模块和接收数据模块。同时还包括一些数据溢出中断及帧出错的处理。初始化CAN控制器SJA1000主要用来实现CAN控制器工作时的参数设置,这些初始化的内容包括硬件使能CAN控制器、设置CAN报警界限、设置CAN总线波特率、设置中断工作方式、设置CAN验收过滤器的工作方式、设置CAN控制器的工作模式等[4]。这些功能主要是通过设置各寄存器予以实现。
  微控制器AT89C52将USB总线送来的数据转换为符合CAN发送帧格式的数据,通过调用CAN发送数据模块将该数据从CAN控制器SJA1000转发。微控制器AT89C52调用CAN接收数据模块接收来自CAN总线的数据,并把数据转换为符合USB发送帧格式的数据,将该数据通过PDIUSBD12进行转发[5]。CAN通信软件整体工作流程如图3所示。

 


2.2 USB设备端通信软件设计
  USB设备端通信软件设计主要包括PDIUSBD12的硬件驱动层、USB接口控制驱动层、USB协议层和USB应用层软件设计[6]
2.2.1 PDIUSBD12的硬件驱动层软件设计
  PDIUSBD12硬件驱动层主要任务是初始化PDIUSBD12与AT89C52连接的配置,复位PDIUSBD12并建立PDIUSBD12与AT89C52的通信函数。
2.2.2 USB接口控制驱动层软件设计
  USB接口控制驱动层的主要任务是实现PDIUSBD12的各种功能,包括地址使能、读取端点数据、向端点写入数据和设置DMA等,该层中的功能函数通过调用PDIUSBD12硬件驱动层的各函数予以实现。
2.2.3 USB协议层软件设计
  USB协议层的主要任务是处理标准的USB设备请求以及特殊的厂商请求。USB主机通过标准USB设备请求,可设定和获取USB设备的有关信息,完成USB设备的枚举。所有的请求都是通过PDIUSBD12的端点0接收和发送SETUP包来完成。
2.2.4 USB应用层软件设计
  PDIUSBD12支持所有的四种USB数据传输方式。本文适配卡的设计中使用了控制传输、中断传输和批量传输。控制传输只用来传递控制信息,固定使用端点0;中断传输使用端点1,用来传送CAN网络状态信息;批量传输使用端点2,用来实现主机和CAN网络节点之间的数据传送。
  PDIUSBD12具有完善的中断机制,微控制器AT89C52可以通过读PDIUSBD12的中断寄存器获得总线事件。为了提高USB应用层软件的运行效率,主程序对系统进行初始化后开放中断,在中断服务程序中对事件进行分析和必要的处理,并设置相应的变量标志和数据缓冲区。主程序则循环查询变量标志,调用相应的子程序进行处理。这种程序结构使得主程序能够在前台处理各种数据传送任务,同时又可以通过中断在后台及时处理总线事件,有力地确保了最佳的传输速率和更好的软件结构,同时简化了编程和调试[7]。PDIUSBD12中断服务程序如图4所示。

 

2.3 USB设备驱动程序设计
  USB设备驱动程序采用的是WDM( Windows Driver Mode)
  类型。WDM属于操作系统的内核模式,其驱动程序由运行于内核模式的系统代码组成。WDM设备驱动模型与先前的VXD型驱动程序相比,降低了所需驱动程序的数量和复杂性,简化了驱动程序的开发[8]
  本文采用DriverStudio开发工具进行开发。DriverStudio包含VtoolsD、softICE和DriverWork等工具,通过DriverWorks的开发向导Driver Wizard生成驱动程序框架,在其生成的代码框架中再加入对设备上LED灯的控制操作,实现一个完整的USB设备驱动程序。在生成驱动程序的同时,可以同时生成驱动程序的测试程序。编译运行DriverWorks生成的驱动测试程序,能够发现此设备驱动运行是否良好,并能够实现对设备上的LED灯的控制。
2.4 应用程序设计
  对于广大用户而言,与系统的交互是通过应用程序实现,而且整个系统的主要数据处理都在这里完成。因此,运行效率高、界面友好、具有强大数据分析和处理的应用程序的设计,也是系统设计上一个不容忽视的关键因素。应用程序设计的关键是实现从USB外设读取或发送特定数量的数据,本设计中采用Visual C++6.0作为应用程序的开发环境。
  CAN总线与USB总线作为流行的、先进的总线技术都具有广泛的应用和发展前途。本设计通过结合USB与CAN的优点连接扩展了USB在工业控制中的功能,同时大大简化了工业控制与PC机之间的数据通信,具有十分广泛的应用价值。本设计已经完成,并在矿井下数据传输中得到应用,取得了良好的现场应用效果。


参考文献
[1] 张延宇,曹云侠. 基于USB的CAN适配卡的设计与实现[J].微计算机信息,2006,22(1):6-8.
[2]  高强,任恩恩,张涛. CAN总线的PCI接口通信卡设计[J].电子技术应用,2007,33(7):122-124.
[3]  周立功. PDIUSBD12固件编程与驱动开发[M]. 北京:北京航空航天大学出版社,2003.
[4]  律德才,马峰. CAN总线控制器SJA1000的原理及应用[J].电测与仪表,2002,(4):57-59.
[5]  CENA G, VALENZANO A.FastCAN: A high-performance enhance CAN-like network[J]. IEEE Transactions on
Industrial  Electronics, 2000,47(4):951-952.
[6]  高军,刘晓莉,赵延明.基于LPC2292的CAN总线USB接口适配器的设计[J].化工自动化及仪表,2007,34(4):49-52.
[7]  张红彩,赖联琨,姜学东.USB总线在CAN接口卡上的应用与设计[J].自动化与仪表,2006,(3):27-30.
[8]  CANT C. Windows WDM 设备驱动程序开发指南[M].北京:机械工业出版社,2000.

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。