使用USB接口芯片CH372实现CAN适配器的软硬件设计
扫描二维码
随时随地手机看文章
利用芯片CH372可在不了解任何USB协议或固件程序甚至驱动程序的情况下,轻松地将并口或串口产品升级到USB接口。该系统在工业现场较之以往的系统,可以更加灵活、高速、高效地完成大量数据交换,并可应用于多种控制系统之中,具有很大的应用价值。
引言
现场总线网络技术的实现需要与计算机相结合。目前,在微机上扩展CAN总线接口设备一般采用PCI总线或者RS-232总线。PCI虽然仍是高速外设与计算机接口的主要渠道,但其主要缺点是占用有限的系统资源、扩展槽地址;中断资源有限;并且插拔不方便;价格较贵;而且设计复杂、需有高质量的驱动程序保证系统的稳定;且无法用于便携式计算机的扩展;RS-232虽然插拔方便,但是传输速率太慢。
本文的设计思想是通过使用USB接口芯片CH372,将计算机与CAN网络控制节点参数相互准确快速地传输。CH372是一种USB总线通用接口芯片,在计算机系统中,通过CH372的配套软件可提供简洁易用的操作接口,从而使其与本地端的单片机通讯就如同读写硬盘中的文件一样简单,由于CH372屏蔽了USB通讯中的所有协议,因而可在计算机应用层与本地端控制器之间提供端对端的连接,在不需要了解任何USB协议或者固件程序甚至驱动程序的情况下,就可轻松地将并口、串口产品升级到USB接口。
CAN适配器用于完成USB总线和CAN总线之间的数据交换。使用MCU统筹安排数据在USB总线和CAN总线之间的数据交换。以MCU为界可以将硬件分为两部分:一是MCU和USB总线交换数据;二是MCU控制CAN控制器,完成CAN数据包到CAN总线位序列协议解释,该系统结构如图1所示。
硬件设计
USB接口电路在微控制器和USB接口的选择上有两种方式:一种是采用具备USB通讯功能的微处理器。随着USB应用的日益广泛,Intel、Cypress、Philips等芯片厂商都推出了具有USB通信接口的微处理器,如8X930A、8X931A、EZ-USB等。由于这些微处理器具有USB接口,它们与过去的开发系统不兼容,需要购买新的开发系统,投资较高。另一种是采用普通微处理器加上专用的USB通信芯片。
现在的专用芯片中较流行的有USBN9602、SL11、PDIUSBD12等。但是,USB接口的开发一般要求设计人员对USB的标准、Firmware编程及驱动程序编写等有较深入的理解,因此限制了一般的硬件工程师对USB接口产品的开发使用。本系统中使用了USB接口芯片CH372,使用非常简单,开发人员只要熟悉单片机的编程及简单的VB或者VC应用程序编程,在较短的时间内就可开发出相应的USB产品。
CH372是一个USB总线的通用设备接口芯片,遵守USB1.1协议。在本地端,CH372具有8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机、DSP等控制器的系统总线上;在计算机系统中,CH372的配套软件提供了简洁易用的操作接口,与本地端的单片机通信就如同读写硬盘中的文件。CH372内置了USB通讯中的底层协议,具有内置固件模式和外置固件模式。在内置固件模式下CH372屏蔽了USB通信中的所有协议,在计算机应用层与本地端控制器之间提供端对端的连接。使用CH372,不需要了解任何USB协议或者固件程序,甚至驱动程序,就可以轻松地将并口、串口的产品升级到USB接口。
CH372芯片的RD和WR可以分别连接到单片机的读选通输出引脚和写选通输出引脚。CS由地址译码电路驱动,用于当单片机具有多个外围器件时进行设备选择。INT可以连接到单片机的中断输入引脚,中断请求是低电平有效。当CS和RD以及A0都为低电平时,CH372中的数据通过D7~D0输出;当CS和WR以及A0都为低电平时,D7~D0上的数据被写入CH372芯片中;当CS和WR都为低电平而A1为高电平时,D7~D0上的数据被作为命令码写入CH372芯片中。CH372芯片的UD+和UD-引脚应该直接连接到USB总线上。如果为了芯片安全而串接保险电阻或者电感,那么交直流等效串联电阻应该在5Ω之内。CH372芯片内置了电源上电复位电路,一般情况下,不需要外部提供复位。
CH372芯片正常工作时需要外部为其提供12MHz的时钟信号。一般情况下,时钟信号由CH372内置的反相器通过晶体稳频振荡产生。外围电路只需要在X1和X0引脚之间连接一个标称频率为12MHz的晶体,并且分别为X1和X0引脚对地连接一个容量为30pF的高频振荡电容。CH372芯片支持5V电源电压或者3.3V电源电压。当使用5V工作电压时,CH372芯片的VCC引脚输入外部5V电源,并且,V3引脚应该外接容量为0.1μF左右的电源退耦电容。当使用3.3V工作电压时,CH372芯片的V3引脚应该与VCC引脚相连接,同时输入外部的3.3V电源,并且与CH372芯片相连接的其它电路的工作电压不能超过3.3V。接口电路如图2所示。
CAN总线接口电路这部分由CAN控制器、CAN接口芯片和光耦组成。CAN控制器完成CAN通讯协议的所有要求,CAN接口芯片是CAN控制器和物理总线间的接口,并经由光耦将数据发往CAN总线,接口电路图如图3所示。
CAN总线控制器采用Philips公司的SJA1000,并辅以该公司的PCA82C250接口驱动器,通过光电隔离器件6N137实现了总线与控制器的隔离。SJA1000是一款独立的控制器,用于汽车和一般工业环境中,从软件的角度来看,对SJA1000的操作通过单片机的访问外部存储器指令来完成,所以,SJA1000可以被视为一种扩展RAM,SJA1000具有标准模式和Peli模式两种应用模式。标准模式符合CAN2.0A协议标准,接收缓冲器有64个字节;Peli模式符合2.0B标准,能处理扩展数据格式,具有仲裁丢失捕获、代码读取等功能。
PCA82C250是CAN控制器和物理总线之间的接口,它具有限定的电流值以保护接收器输出级,避免阳极和阴极的短路,以防止输出级的损坏,PCA82C250CAN接口控制器提供了总线驱动发送和接收能力,高速可达1Mbps,具有较强的抗干扰能力。
为了增强系统抗干扰能力,在SJA1000和CAN总线收发器82C250之间使用两个高速光电隔离器件6N137实现总线和控制器的隔离,以避免干扰,提高工作可靠性。CAN控制器可以选择从RX0、TX0或RX1、TX1接收和发送数据,当使用RX0、TX0工作时,须将RX1接到一个稳定的电平上。高速光耦6N137的最高速度可达10Mbps,利用它可以在隔离的状态下保证系统的高速可靠。
软件设计
本设计中采用的微控制器为P89C51RD2,它是采用先进的CMOS工艺的单片8位微处理器。工作在6时钟模式时,速度是标准51单片机的两倍,此时最高外部晶振可达20MHz。此外,该机型支持ISP编程和IAP编程。软件主程序的流程图如图4所示。
首先进行MCU、SJA1000和USB的初始化,初始化后系统处于循环等待状态,若有中断产生,就进入相应的中断服务程序,如果CAN总线有数据上传,则转入CAN中断服务程序,由微处理器从SJA1000缓冲区接收数据,写入微处理器的数据缓冲区,并置标志返回,如果上位机有数据下传,则转入USB中断服务程序(下位机中断服务程序流程如图5所示),微处理器从USB缓冲区中读取数据,存入缓冲区,并置标志返回,接收数据是将数据从缓冲区读出发送到USB总线,通过USB总线传送到上位机(下位机数据上传子程序流程简图如图6所示),发送数据是将数据从缓冲区读出写入SJA1000的缓冲区,由CAN节点读取,这种处理可以使微处理器在执行完相应的中断程序后只需读取缓冲区,然后执行相应的接收或发送程序即可完成上位机和下位机的数据交换。对于计算机应用层的程序,在计算机上装载WINCHIPHEAD提供的CH372的通用驱动程序后,不必再考虑USB通信协议、固件程序、驱动程序、自动配置过程和底层数据传输过程。只需要根据提供的动态连接库的接口函数,用VB或VC编制自己的应用程序即可。
结束语
综上所述,本系统为计算机与CAN总线之间的直接通信提供了一种有效的方法,适应网络和接口技术的发展,探索现场总线网络和计算机接口的新方法,是很有实践意义的。