基于MCP2510和CH375的CAN-USB接口卡设计
发布时间:2008/6/3 0:00:00 访问次数:522
1. 引言
can以其优良的性能,广泛应用在嵌入式系统中,pc机有丰富的软件和强大的功能,在工业网络中,将pc机设计成can网络的一个节点,方便数据处理等。
can网络与pc机的连接可通过以下几种方式:1)can-rs232接口卡;2)can-pci接口卡;3)can-usb接口卡。can-rs232接口卡速度太慢,且不支持热插拔;can-pci接口卡虽然速度快,但不支持热插拔。而采用can-usb接口卡,不但速度快,而且支持热插拔,并且可以从系统中直接汲取电流而不需要外部供电。
文[1][2]中所设计的can-usb接口卡,均采用sja1000和pidusbd12, sja1000为并行总线接口,与现在许多无外部总线的mcu不适应,pidusbd12也为并行总线接口,且与mcu的软件接口编写复杂,本文中设计的can-usb接口卡,usb接口芯片选择南京沁恒电子有限公司生产的ch375,该芯片支持全速设备接口usb v1.1,该公司提供了完善的usb驱动程序;并且该芯片内部集成了usb 接口sie、数据缓冲区、被动并行接口、串行接口、命令解释器、控制传输的协议处理器、通用的固件程序等,这样,以ch375设计的usb设备,不需要详细了解usb 通讯协议,开发编程非常方便[ 3]。can协议芯片选择mcp2510,该芯片采用spi接口,连接方便,有3个发送缓冲区,2个接收缓冲区,宽工作电压,低功耗[4]。
2. 系统硬件设计
设计can-usb接口卡,硬件方面需要usb接口芯片、can协议芯片和微处理器。系统的硬件框图见图1。
微处理器选择华邦公司的w78e516,该芯片与mcs-51系列单片机兼容,内部集成有64k的flash、看门狗、256字节辅助存储器,还支持在系统可编程(isp)。
ch375与mcu的连接提供了并行接口和串行接口,本文采用了并行接口,w78e516与ch375的接口电路。
由于ch375可输出复位信号,微处理器可利用此复位信号,从而不需要其它专门复位电路。设计中还必须注意,ch375的晶振频率必须为12mhz,笔者曾经接11.0592 mhz晶振时,系统不能正常工作,改为12mhz时,则可正常工作。
can协议芯片选择mcp2510,总线驱动器采用pca82c250。设计如图3所示。如果要求can总线上各节点间电气隔离,可在mcp2510与pca82c250之间加高速光隔离(如6n137)进行电气隔离,本文因版面限制而省略了光隔。
3. 下位机程序设计
下位机程序的功能是,当接收到can报文,将此报文重新组成适合usb传输的数据包,并装载到usb的发送缓冲区,而当从usb接收到数据包,则将此数据包重新组成适合can传输的帧。
下位机程序设计采用keil c进行设计,由于mcp2510是spi接口,而w78e516没有spi接口,故编写了专门操作spi接口的程序。
设计中,can报文采用了标准11位id,并且根据can帧格式,在单片机内存中,定义can报文发送缓冲区和接收缓冲区。
虽然ch375的端点每次最大可传输64字节,但为了设计方便,我们设计成每次只传输11个字节,用如下的结构体表示。
struct struct_usb
{
unsigned char usb_cmd;
unsigned char dat[10];
};
usb_cmd中指示每次数据包的含义,以方便pc机与单片机传递信息。dat[10]为将传输到can总线上的数据,或从can总线上接收到的数据。
为防止通讯接收溢出,在设计中,为can和usb定义了比较大的数据缓冲区,启用了w78e516芯片上的256字节辅助存储器,keil c编译时配置存储器模式为compact模式,但在设计中需要注意的是:main()函数的语句中,必须先用赋值语句对寄存器chpenr和chpcon进行配置,启用w78e516芯片上的256字节辅助存储器,然后,才能执行函数调用语句,否则程序虽在编译时可通过,但运行时会出现错误。
4.上位机程序设计
上位机程序采用vb进行设计,由于沁恒公司为ch375提供了丰富的动态链接库(api函数),在程序设计时,只需声明和调用这些api函数,下面介绍编程注意事项。
在程序设计时,程序中调用ch375的第一个api函数应为ch375的设备开启函数,declare function ch375opendevice lib "ch375dll.dll" (byval iindex as long) as long,该函数的功能是打开ch375设备。关闭应用程序时,需调用设备关闭函数,declare sub ch375closedevice lib "ch375dll.dll" (byval iindex as long),该函数的功能是关闭ch375设备。对于pc机向单片机发送数据和接收来自单片机的数据,只需调用相关的api函数即可。
编写完上位机程序,当can-usb接口卡通过usb连接线与pc机的usb接口相连之后,系统会检测到新硬件,此时,安装好驱动程序,就可以使用该设备。正常工作时,此卡中与ch375相连的led亮。
5. 结论
本文作者创新点为采用ch375和mcp2
1. 引言
can以其优良的性能,广泛应用在嵌入式系统中,pc机有丰富的软件和强大的功能,在工业网络中,将pc机设计成can网络的一个节点,方便数据处理等。
can网络与pc机的连接可通过以下几种方式:1)can-rs232接口卡;2)can-pci接口卡;3)can-usb接口卡。can-rs232接口卡速度太慢,且不支持热插拔;can-pci接口卡虽然速度快,但不支持热插拔。而采用can-usb接口卡,不但速度快,而且支持热插拔,并且可以从系统中直接汲取电流而不需要外部供电。
文[1][2]中所设计的can-usb接口卡,均采用sja1000和pidusbd12, sja1000为并行总线接口,与现在许多无外部总线的mcu不适应,pidusbd12也为并行总线接口,且与mcu的软件接口编写复杂,本文中设计的can-usb接口卡,usb接口芯片选择南京沁恒电子有限公司生产的ch375,该芯片支持全速设备接口usb v1.1,该公司提供了完善的usb驱动程序;并且该芯片内部集成了usb 接口sie、数据缓冲区、被动并行接口、串行接口、命令解释器、控制传输的协议处理器、通用的固件程序等,这样,以ch375设计的usb设备,不需要详细了解usb 通讯协议,开发编程非常方便[ 3]。can协议芯片选择mcp2510,该芯片采用spi接口,连接方便,有3个发送缓冲区,2个接收缓冲区,宽工作电压,低功耗[4]。
2. 系统硬件设计
设计can-usb接口卡,硬件方面需要usb接口芯片、can协议芯片和微处理器。系统的硬件框图见图1。
微处理器选择华邦公司的w78e516,该芯片与mcs-51系列单片机兼容,内部集成有64k的flash、看门狗、256字节辅助存储器,还支持在系统可编程(isp)。
ch375与mcu的连接提供了并行接口和串行接口,本文采用了并行接口,w78e516与ch375的接口电路。
由于ch375可输出复位信号,微处理器可利用此复位信号,从而不需要其它专门复位电路。设计中还必须注意,ch375的晶振频率必须为12mhz,笔者曾经接11.0592 mhz晶振时,系统不能正常工作,改为12mhz时,则可正常工作。
can协议芯片选择mcp2510,总线驱动器采用pca82c250。设计如图3所示。如果要求can总线上各节点间电气隔离,可在mcp2510与pca82c250之间加高速光隔离(如6n137)进行电气隔离,本文因版面限制而省略了光隔。
3. 下位机程序设计
下位机程序的功能是,当接收到can报文,将此报文重新组成适合usb传输的数据包,并装载到usb的发送缓冲区,而当从usb接收到数据包,则将此数据包重新组成适合can传输的帧。
下位机程序设计采用keil c进行设计,由于mcp2510是spi接口,而w78e516没有spi接口,故编写了专门操作spi接口的程序。
设计中,can报文采用了标准11位id,并且根据can帧格式,在单片机内存中,定义can报文发送缓冲区和接收缓冲区。
虽然ch375的端点每次最大可传输64字节,但为了设计方便,我们设计成每次只传输11个字节,用如下的结构体表示。
struct struct_usb
{
unsigned char usb_cmd;
unsigned char dat[10];
};
usb_cmd中指示每次数据包的含义,以方便pc机与单片机传递信息。dat[10]为将传输到can总线上的数据,或从can总线上接收到的数据。
为防止通讯接收溢出,在设计中,为can和usb定义了比较大的数据缓冲区,启用了w78e516芯片上的256字节辅助存储器,keil c编译时配置存储器模式为compact模式,但在设计中需要注意的是:main()函数的语句中,必须先用赋值语句对寄存器chpenr和chpcon进行配置,启用w78e516芯片上的256字节辅助存储器,然后,才能执行函数调用语句,否则程序虽在编译时可通过,但运行时会出现错误。
4.上位机程序设计
上位机程序采用vb进行设计,由于沁恒公司为ch375提供了丰富的动态链接库(api函数),在程序设计时,只需声明和调用这些api函数,下面介绍编程注意事项。
在程序设计时,程序中调用ch375的第一个api函数应为ch375的设备开启函数,declare function ch375opendevice lib "ch375dll.dll" (byval iindex as long) as long,该函数的功能是打开ch375设备。关闭应用程序时,需调用设备关闭函数,declare sub ch375closedevice lib "ch375dll.dll" (byval iindex as long),该函数的功能是关闭ch375设备。对于pc机向单片机发送数据和接收来自单片机的数据,只需调用相关的api函数即可。
编写完上位机程序,当can-usb接口卡通过usb连接线与pc机的usb接口相连之后,系统会检测到新硬件,此时,安装好驱动程序,就可以使用该设备。正常工作时,此卡中与ch375相连的led亮。
5. 结论
本文作者创新点为采用ch375和mcp2