基于微控制器的usb-can总线适配器的制作方法

文档序号:6649756阅读:146来源:国知局
专利名称:基于微控制器的usb-can总线适配器的制作方法
技术领域
本发明涉及一种计算机与外设的接口设备。特别是一种基于微控制器的USB-CAN总线适配器。
背景技术
CAN(Controller Area Network)总线作为一种多主机局部网现场总线,由于其组网的灵活性和便捷性、通信的高效性和可靠性以及低廉的成本在工厂的分散控制领域受到了广泛的应用。现代的工厂自动控制化,既需要“分散控制”,更需要有效的“集中管理”,以保障生产的安全和效率,而联络各种设备的现场总线和对设备进行监控的工作站(通常为工业PC机)之间的通信成为一个关键的咽喉。以往的监控站和现场总线之间的通信大多采用两种方式1.设计专用的通信卡和现场总线进行通信;2.通过PC机的RS-232C标准接口和现场总线进行接口。
设计专用的CAN总线通信卡需要了解复杂的PCI或EISA等总线协议标准,其设计的难度可想而知,如果再以最高波特率仅为38.4Kb/s的RS-232C标准接口和最高波特率达1Mb/s的CAN总线进行接口,无疑会造成CAN总线和监控站之间的通信“瓶颈”问题。
可见,包括RS-232在内的接口已经无法满足PC机与外部设备之间不断提高的速度以及稳定性、易用性等方面的要求,并给工程技术人员的设计和用户的运用带来诸多不便。USB(Universal Serial Bus,即通用串行总线)的出现解决了上述问题。USB以其优越的易用性、稳定性、兼容性、扩展性、完备性、网络性和低功耗的特点得到了广泛的欢迎和应用,目前的PC机无论是台式还是便携式,均带有USB插口。并且在最新发布的USB2.0版本中,USB的带宽已经提升到了480Mb/s。

发明内容
本发明的目的在于提供一种基于微控制器的USB总线适配器,可用于对CAN总线上的设备进行监控,微控制器控制数据在USB插口和CAN总线之间传输,解决了CAN总线和PC机间的通信“瓶颈”问题,数据传输可靠性高。
为达到上述目的,本发明采用下述技术方案
一种基于微控制器的USB-CAN总线适配器,包括连接PC机的USB插口和连接CAN总线的CAN总线接口,其特征在于由一个微控制器分别通过一个USB总线控制器和一个CAN总线控制器而连接所述的USB插口和CAN总线接口,实现PC机和CAN总线之间数据传输。
上述的微控制器采用Atmel公司推出的RISC架构的微控制器ATmega 8515。
在上述的基于微控制器的USB-CAN总线适配器中,利用USB插口提供的电源直接对微控制器ATmega 81515供电;在CAN总线控制器与CAN总线接口之间采用光电隔离器件实现连接,并采用一个DC/DC电源变换器给光电隔离器件及其后端器件供电,彻底隔离CAN总线与PC机之间的电气干扰。
在上述的基于微控制器的USB-CAN总线适配器中,微控制器连接一个指示电路在微控制器ATmega 8515的PD0引脚、PD1引脚和PD4引脚与电源之间分别连接一个USB总线指示灯(USB-LED)、一个CAN总线指示灯(CAN-LED)和一个通信指示灯(COM-LED)。
在上述的基于微控制器的USB-CAN总线适配器中,微控制器连接一个键盘在微控制器ATmega 8515的PE2引脚和RESET引脚与电源之间连接一个开关复位按键(JP1)。
上述的CAN总线控制器采用PHILIPS公司的独立CAN总线控制器SJA1000。
上述的USB总线控制器采用全速器件USBN9603。
上述的基于微控制器的USB-CAN总线适配器中,植入的软件包括(1)微控制器ATmega 8515中的USB-CAN适配器固件编程采用GNUAVR的最新版本WinAVR编程,它能够对所有AtmelAVR用C或C++语言进行编程,且能在Win2000下运行;(2)PC机内的USB-CAN适配器驱动程序编程采用Win2000DDK编写,在VC6.0++环境中编译。
本发明与现有技术相比较,具有如下显而易见的突出实质性特点和显著优点本发明设计了一种USB总线到CAN总线的适配器,采用了微控制器分别经CAN总线控制器和USB总线控制器连接CAN总线接口和USB插口,由微控制器控制数据在USB插口和CAN总线之间的传输,解决了CAN总线和PC机间的通讯“瓶颈”问题,PC机和CAN总线之间数据传输波特率可达CAN总线的最高传输效率1Mb/s,且数据传输可靠性高。


图1为USB-CAN适配器结构框图。
图2为微控制器通信电路原理图。
图3为USB总线微控制器通信电路原理图。
图4为CAN总线微控制器通信电路原理图。
图5为USBN9603接口方式示意图。
图6为USB-CAN适配器数据传输处理框图。
图7为主程序处理上传FIFO数据流程图。
图8为EP1的Tx中断子程序流程图。
图9为EP2的Rx中断子程序流程图。
图10为USB-CAN适配器应用实例图。
具体实施例方式
本发明的一个优选实施例结合

如下本基于微控制器的USB-CAN总线适配器包括下述硬件和软件。
USB-CAN总线适配器硬件图1所示,本基于微控制器的USB-CAN总线适配器主要包括微控制器1、USB总线控制器8、CAN总线控制器3、指示电路2、电源管理电路。微控制器1是整个系统的枢纽,USB总线控制器8是全速USB总线节点控制器,CAN总线控制器3是工业自动控制领域中独立的CAN总线控制器,指示电路2及电源管理电路为系统辅助电路,PC可以通过USB插口对CAN总线6的设备进行监控。按照微控制器1、USB总线控制器8及CAN总线控制器3之间的通信划分整个硬件系统为3部分,下面加以介绍。
<1>微控制器ATmeag8515通信电路ATmeag8515型微控制器是RISC架构,有多达130条功能强大的指令(大部分只用一个时钟周期执行),32×8通用工作寄存器,完全静态运作,在16MHz的晶振下运行速度可以达到16MIPS,片上2周期的乘法器,其运算速度是目前常用的8051单片机的10多倍,用它可以大大减少USB总线控制器8和CAN总线控制器3之间协调处理的时间,提高了USB-CAN总线适配器的实际通信速率。微控制器1具有非易失性的程序和数据存储器,8K字节的在线可编程Flash;512字节的EEPROM,可进行10万次擦写,使USB-CAN适配器的重要设置参数在掉电情况下仍能保存;512字节的SRAM,因此可选用对AVR微控制器进行C或C++编程的编译器。
如图2所示,ATmeag8515可以扩展高达64K字节的外部程序存储器,ALE(即外部数据存储器地址速使能)引脚分别和SJA1000的ALE/AS及USBN9603的A0/ALE/SI相连,SJA1000、USBN9603在ATmeag8515的空间地址分别为0x7F00H~0x7F7FH、0xBF00H~0xBFFFH;复用ATmeag8515PA口作为数据线分别和SJA1000的AD0~AD7、USBN9603的D0~D7相连进行数据传输;ATmeag8515PB口作为控制口作用于SJA1000、USBN9603,其中PB0、PB1为复位控制口,PB2为DMA控制口,PB3、PB4为USBN96033种模式选择控制口,如图5所示;PD7、PD6分别为SJA1000、USBN9603的读、写使能控制口,PD2、PD3分别为SJA1000、USBN9603的中断输出使能控制口,ATmega8515根据PD2、PD3对SJA1000、USBN9603进行及时的状态诊断和事件处理。
如图2所示,操作JP1按键开关复位ATmeag8515,设置ALE锁存USBN9603、SJA1000,设置PC6、PC7选择控制器,设置PB3、PB4选择工作模式,通过ATmeag8515控制实现数据在USBN9603、SJA1000之间传输,若ATmeag8515检测到需要从SJA1000到USBN9603进行数据传输,且满足软件设置的条件(参照USB-CAN适配器固件编程),设置PC7有效选择SJA1000,PD7有效使能SJA1000 RD/E口,ATmeag8515利用复用的PA口读取SJA1000的AD0~AD7口上的数据,然后设置PC6使能选择USBN9603,PD6有效使能USBN9603 WR/SK口,从D0~D7口写进数据;若需要从USBN9603到SJA1000进行数据传输,条件满足,首先设置PC6有效选择USBN9603,PD7有效使能SJA1000 RD/E口,ATmeag8515利用复用的PA口读取USBN9603的D0~D7口上的数据,且将数据放进内部RAM中,检测然后SJA1000是否满足接受数据,若条件满足,设置PC7使能选择SJA1000,PD6有效使能SJA1000WR口,将暂存于RAM中的数据从D0~D7口写进SJA1000。
<2>USB总线控制器USBN9603USBN9603型USB总线控制器8是全速USB总线节点控制器,传输数据波特率最高可达12Mb/s,内部集成有收发器、倍频电路PLL、3.3V的调节器。
如图3所示,内部集成收发器端口分别为D+、D-,通过18~27Ω的终端电阻与USB电缆连接,调节器端口V3.3通过一个1.5KΩ的上拉电阻连接到USB的D+数据线上,可以使USB主控制器识别出有一个USB全速设备正在连接。
倍频电路PLL,可降低EMI,并具有可编程时钟输出功能,在加电复位状态下,默认频率输出为4MHz,通过微控制器编程设置CLKDIV,其输出频率为CKout=48MHz/(CLKDIV+1)其中CLKDIV为0~15之间的整数,当CLKDIV=2时,Ckout输出为16MHz,CLKOUT引脚和ATmeag8515 XTAL1相连,提供16MHz时钟源。
USB插口电源为+5VDC,最大可提供500mA的电流,而ATmeag8515供电电压在4.5~5.5VDC,Vcc和GND之间最高电流为200mA,故在适配器的电路设计中利用USB插口7提供的电源直接给ATmeag8515供电,免去了电源电路。
USBN9603有7个基于FIFO的端点一个必需的双向控制端点0(8字节缓存),三个发送端点EPC1、EPC3和EPC5(每个64字节缓存),三个接端点EPC12、EPC4和EPC6(每个64字节缓存)。充分利用USBN9603的FIFO,可以使ATmega8515微控制器和USBN9603控制器并行运行,大大提高了适配器的运行效率。
<3>CAN总线控制器SJA1000如图4所示,SJA1000型CAN总线控制器3是工业自动控制领域中独立的CAN总线控制器,是Philips Semiconductors公司继PCA82C200的下一代产品,在PCA82C200的BasicCAN模式基础上,增加了符合CAN 2.0协议规定的PeliCAN模式,因此它和PCA82C200在电气上是兼容的;支持11位标识符ID和29位标识符ID;在最高达24MHz的晶振下,通信速率达1Mb/s;发送缓存13个字节,接收缓存有64个字节,采用FIFO模式,减少了接收等待时间,提高了实际通信效率。USB-CAN适配器数据传输处理框图如图4所示,CAN总线控制器的数据地址复用口和ATmega8515的PA口相连,它的中断使能端和ATmega8515的INT1引脚相连,使得ATmega8515能够对SJA1000进行及时的状态诊断和事件处理;串行数据传输端通过6N137型光电隔离器件4和PCA82C250型CAN控制器5接口相连,使USB-CAN总线适配器的稳定性及抗干扰能力大为提高。
USB-CAN适配器软件USB-CAN适配器软件包括两部分ATmega8515中的固件和PC机内USB-CAN适配器的驱动软件。
<1>USB-CAN适配器固件编程USB-CAN总线适配器采用GNU AVR的最新版本WinAVR编程,它能够对所有Atmel AVR用C或C++语言进行编程,且能在WIN2000下运行。
USB-CAN适配器固件设计成完全的中断驱动,当ATmega8515处理前台任务时,USB和CAN的传输可以在后台同时进行,提高实际传输效率,易于编程和调试。后台的中断处理子程序通过设置事件标志和数据缓冲区来实现和前台主程序之间的数据交换,如图6所示。当ATmeag8515检测到CAN控制器的状态寄存器而得知接收缓冲CAN_RX_Buffer有数据,就会把数据传到USB控制器的空闲的发送缓冲区TXFIFO-1或TXFIFO-2中;同样,当USB控制器的接收缓冲区RXFIFO-1或RXFIFO-2充满数据时,ATmeag8515就会把RXFIFO-1或RXFIFO-2的数据读到内部一个连续的RAM空间,当CAN总线控制器发送缓冲区CAN_TX_Buffer为空时,再把数据从RAM传到CAN_TX_Buffer。
USB-CAN适配器固件设计中采用乒乓缓存法提高实际传输数率。USBN9603有7个端点,通常FIFO内的数据进行传送或接收时每个端点对应一个管道,但是,两个同方向传输数据的端点也可以利用一个管道,这样可以有效的提高数据的传输率,因为当第一个端点的FIFO传输数据时,微控制器可以对第二个端点的FIFO进行数据读或写,反之亦然。USBN9603在进行批量传输时,其实际传输率大约是512Kb/s,这往往是由于主机的控制器最大每帧数据包数量限制造成的,而不是由于USBN9603本身传输性能。其它传输方式,如中断传输、同步传输、控制传输最高传输数率为1.5Mb/s。采用乒乓缓存法后,可使传输数率提高一倍,从而使传输速率为1Mb/s的CAN总线控制器没有等待接收数据和发送数据空间的情况,解决了数据传输中的“瓶颈”问题。
在USB-CAN适配器中,端点EP1(TXFIFO-1)和EP3(TXFIFO-2)发送数据到主机,EP2(RXFIFO-1)和EP4(RXFIFO-2)从主机接收数据,如图6所示,它们FIFO中的数据长度都是64字节。当主机进行枚举过程中,当节点接收到配置设备请求,固件程序就可以把EP1/EP3和EP2/EP4分别分配同一个端点地址。USBN9603内置有一个优先级表,如果多个端点编程指定为同一个端点号,具有较低号的端点(利用TOGGLE标志区分高低)首先的得到响应和数据。
数据上传当主机发送一个IN令牌给USB-CAN适配器,适配器就开始向PC机发送数据。如图7所示为数据上传的流程图。通过两个标志UPDATE1和UPDATE2把主程序和Tx中断子程序紧密联系起来,体现了前台后台程序设计思想。当UPDATE1清0,上传数据完毕,当置1时,开始传输下一批数据。图8为EP1的Tx中断子程序流程图,UPDATE1在该中断子程序置1。UPDATE2的运行和UPDATE1相似。
数据下传当主机发送一个OUT令牌给USB-CAN适配器,适配器就开始接收PC发送的数据,并把暂存在ATmega8515的RAM中,然后传到CAN总线控制器的数据发送缓冲区CAN_TX_Buffer。图9为EP2的Rx中断子程序流程,显示了PC的数据如何传到CAN总线的发送缓冲区。端点EP4的Rx中断子程序流程和EP2的相似。
<2>USB-CAN适配器驱动程序编程USB-CAN适配器设备驱动程序采用Win2000 DDK编写,在VC6.0++环境中编译。驱动程序运行于内核模式,其程序组织主要是按功能进行划分,而不是一种层次结构。即插即用例程和电源管理例程完全按照USB标准总线驱动程序参考编写。
一个驱动程序可以被多个类似的硬件使用,但驱动程序的某些全局初始化操作只能在第一次被装入时执行一次。而DriverEntry例程就是用于这个目的,它是内核模式驱动程序主入口点。I/O管理器按下面方式调用该例程extern″C″NTSTATUS DriverEntry(IN PDRIVER OBJECT DriverObject,INPUNICODE STRING RegistryPath)DriverEntry的第一个参数是一个指针,指向一个刚被创建的驱动程序对象。
DriverEntry的第二个参数是设备服务键的键名。
本设计中该例程的各个域设置如下DriverObject->DriverUnload=UsbCan_DriverUnload;
DriverObject->DriverExtension->AddDevice=UsbCan_AddDevice;
DriverObject->MajorFunction[IRP_MJ_CREATE]=UsbCan_DispatchCreate;
DriverObject->MajorFunction[IRP_MJ_CLOSE]=UsbCan_DispatchClose;
DriverObject->MajorFunction[IRP_MJ_READ]=UsbCan_DispatchRead;
DriverObject->MajorFunction[IRP_MJ_WRITE]=UsbCan_DispatchWrite;
DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL]=UsbCan_DispatchInternalControl;
DriverObject->MajorFunction[IRP_MJ_POWER]=UsbCan_DispatchPower;
DriverObject->MajorFunction[IRP_MJ_PNP]=UsbCan_DispatchPnp;
DriverObject->MajorFunction[IRP-MJ_DEVICE_CONTROL]=UsbCan_DispatchControl;
本基于微控制器的USB-CAN适配器的应用实例USB-CAN适配器在分布式PLC控制系统中的应用如图10所示,笔记本电脑通过该适配器和PLC控制系统的CAN总线进行连接,实现了一个笔记本对多个PLC进行程序下载及对多个PLC运行状况进行监视,特别是在上位机只进行监视情况下,可以进行热插拔而不影响系统的运行,给系统调试带来极大的方便。经USB测试软件测试,其最高传输数率在40m内达到了1Mb/s。
权利要求
1.一种基于微控制器的USB-CAN总线适配器,包括连接PC机的USB插口(7)和连接CAN总线(6)的CAN总线接口(5),其特征在于由一个微控制器(1)分别通过一个USB总线控制器(8)和一个CAN总线控制器(3)而连接所述的USB插口(7)和CAN总线接口(5),实现PC机和CAN总线之间数据传输。
2.根据权利要求1所述的基于微控制器的USB-CAN总线适配器,其特征在于所述的微控制器(1)采用Atmel公司推出的RISC架构的微控制器ATmega 8515。
3.根据权利要求1或2所述的基于微控制器的USB-CAN总线适配器,其特征在于利用USB插口(7)提供的电源直接对微控制器ATmega 81515供电;在CAN总线控制器(3)与CAN总线接口(5)之间采用光电隔离器件(4)实现连接,并采用一个DC/DC电源变换器(9)给光电隔离器件(4)及其后端器件供电,彻底隔离CAN总线与PC机之间的电气干扰。
4.根据权利要求1或2所述的基于微控制器的USB-CAN总线适配器,其特征在于微控制器(1)连接一个指示电路(2)在微控制器ATmega 8515的PD0引脚、PD1引脚和PD4引脚与电源之间分别连接一个USB总线指示灯(USB-LED)、一个CAN总线指示灯(CAN-LED)和一个通信指示灯(COM-LED)。
5.根据权利要求1或2所述的基于微控制器的USB-CAN总线适配器,其特征在于微控制器(1)连接一个键盘在微控制器ATmega 8515的PE2引脚和RESET引脚与电源之间连接一个开关复位按键(JP1)。
6.根据权利要求1或2所述的基于微控制器的USB-CAN总线适配器,其特征在于所述的CAN总线控制器(3)采用PHILIPS公司的独立CAN总线控制器SJA1000。
7.根据权利要求1或2所述的基于微控制器的USB-CAN总线适配器,其特征在于所述的USB总线控制器(8)采用全速器件USBN9603。
8.根据权利要求2所述的基于微控制器的USB-CAN总线适配器,其特征在于植入的软件包括1)微控制器ATmega 8515中的USB-CAN适配器固件编程采用GNUAVR的最新版本WinAVR编程,它能够对所有AtmelAVR用C或C++语言进行编程,且能在Win2000下运行;2)PC机内的USB-CAN适配器驱动程序编程采用WIN2000DDK编写,在VC6.0++环境中编译。
全文摘要
本发明涉及一种基于微控制器的USB-CAN总线适配器。它包括连接PC机的USB插口和连接CAN总线的CAN总线接口,由一个微控制器分别通过一个USB总线控制器和一个CAN总线控制器而连接所述的USB插口和CAN总线接口,实现PC机和CAN总线之间数据传输。本发明由微控制器控制数据在USB插口和CAN总线之间的传输,解决了CAN总线和PC机间的通讯“瓶颈”问题,PC机和CAN总线之间数据传输波特率可达CAN总线的最高效率1Mb/s,且数据传输可靠性高。
文档编号G06F3/06GK1897594SQ20051011208
公开日2007年1月17日 申请日期2005年12月27日 优先权日2005年12月27日
发明者徐美华, 冉峰, 李润光 申请人:上海大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1