USB-CAN转换接口设计

来源:本站
导读:目前正在解读《USB-CAN转换接口设计》的相关信息,《USB-CAN转换接口设计》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《USB-CAN转换接口设计》的详细说明。
简介:提出一种使用USB接口实现CAN总线网络与计算机连接的方案,可以应用在使用上位机监控和CAN总线的场合。文中介绍主控制器PIC18F258的CAN通讯模块特点,USB-CAN通讯接口工作的基本原理,讨论了CAN总线与USB之间的硬件接口电路。同时,分析了固件编程方法及主控制器程序的架构。

本文介绍了基于Labwindow/CVI 7.0和VISA的USB驱动程序设计,这种设计方法快捷、方便,为上位机驱动程序的设计提供了一种新的解决思路。系统已经成功应用在虚拟车辆模拟测试系统中。

1 硬件系统设计

系统硬件由3部分组成:USB通讯器件,主控制器,CAN电平转换器件。USB通讯硬件采用Philips公司的符合USB1.1规范的器件PDIUSBD12,主控制器使用的是Macmchip公司的PIC18F258,CAN电平转换器件使用的是PCA82C250。系统硬件结构如图1和图2所示:

USB-CAN转换接口设计USB-CAN转换接口设计

主控CPU-PIC18F258支持在线仿真的调试方式,内部集成了一个CAN 通讯控制器,可以简化系统的硬件结构,提高系统的可靠性。此CAN 模块支持CAN2.0A和CAN2.0B协议,可编程的位速率可达1Mbps,支持标准数据帧、扩展数据帧、远程帧、出错帧、过载帧、空闲帧等类型。CAN模块使用RB3/CANRX和RB2/CANTX/IN32 引脚与CAN 总线驱动器芯片PCA82C250接口。接口电平电路如图2所示。

PDIUSBD12是Philips公司推出一款性价比很好的USB接口器件,该器件使用并行接口的方式与微控制器进行通讯,使用起来灵活方便,它同时还支持DMA的传输方式。

图1中D+引脚信号电平通过器件SoftConnect命令内部上拉,从而向主机表示为一个全速设备。SUSPEND是双向引脚,用以向微控制器指示器件是否挂起。当有USB总线事件发生时,INT引脚向微控制器发出中断信号。PDIUSBD12支持总线复用和非复用2种并行接口模式,以方便连接不同类型的微控制器。

在系统中PDIUSBD12与PIC18F258的硬件连接采用了单地址/数据总线配置方案。主控CPU的PORTC连接D12的双向数据13,通过对RD_N(读选通,低有效)和WR_N(写选通,低有效)控制实现对PDIUSBD12的读写 PDIUSBD12的地址位A0连接主控制器的RA0,A0=0时选择命令,A0=1时选择数据。INT_N是USB中断请求脚,发出USB中断请求;GL_N是GOODLINK指示灯,在调试过程中非常有用,在通信时会不停闪烁,如果一直亮或者一直暗,表示USB接口有问题,如果D12挂起,则LED关闭。CLKOUT是D12的时钟输出,可以通过固件编程改变其频

率,在调试固件时,可作为参考。RESET_N复位引脚接主控CPU的RA1口,可以通过此对其进行复位,工作时需将其置高。CS_N片选,低有效。D+、D-为USB的输出数据引脚,是和上位PC机的通讯线。硬件系统的工作电源由PC机通过USB提供。

2 软件设计

软件设计包括微控制器的编程开发和计算机端USB驱动程序开发两部分。

2.1 微控制器编程开发

主控制器通过固件程序与计算机进行数据交换。固件设计的目的是:使PDIUSBD12在USB上达到最大的传输速率;增加系统的可扩展性和硬件无关性。固件要实现的内容:一是对集成的CAN控制器初始化,接收CAN总线送来的数据,收集CAN网络状态信息,并将主机的数据下发到CAN 网络;二是对PD1USBD12初始化,完成USB总线连接过程,并组织CAN网络和主机之间的数据传送。设计中采用MPLAB集成开发环境,使用c语言和汇编语言混合编程来完成程序。

2.1.1 PDIUSBDI2 端点设置

D12的端点采用模式0(非同步模式),由于端点0即主端点被固定用于控制输入输出,不能用作通用的输出传输端点,端点1的最大信息包为16Bytes,采用了端点2作为主数据端点,它的最大信息包为64Bytes.

2.1.2 CAN通讯协议设定

为了使设计具有更好的兼容及可升级性,采用了CAN2.0B扩展帧模式。在CAN模块的3个接收和发送缓冲器中只使用了发送缓存器0和接收缓冲器0。通讯波特率为250 Kbit.使用RB3/CANRX和RB2/CANTX/INT2引脚与CAN总线接口。要配置CANRX和CABTX为CAN接口,需要将主控制器的I/O口分别设置成输入和输出模式。在CAN配置模式下设置发送缓冲器0为扩展标志符模式,初始化接收过滤器和接收屏蔽器为接收所有CAN数据包。完成所有配置后,转入正常操作模式。

2.1.3 主程序开发

为了提高固件的运行效率,主程序对系统进行初始化后开放中断,在中断服务程序中对事件进行分析和必要的处理,并设置相应的变量标志和数据缓冲区。主程序则循环查询变量标志,调用相应的子程序进行处理。这种程序结构使得主程序能够在前台处理各种数据传送任务,同时又可以通过中断在后台及时处理总线事件。当主控CPU处理前台任务时USB的传输可在后台进行。这就确保了最佳的传输速率和更好的软件结构,同时简化了编程和调试。后台中断服务程序ISR和前台主程序循环之间的数据交换通过事件标志和数据缓冲区来实现。

主程序完成所有I/O配置及CAN初始化配置服务子程序,并等待USB与PC机建立连接。程序在建立好与上位PC机通讯后即等待数据交换;如果发生CAN接收事件,则将CAN数据包连同标识符一同通过端点2发送到Pc机;如果发生USB接收事件,则将包数据分解为标识符和数据两部分,通过CAN发送服务子程序发送到总线。主循环流程如图3所示。

USB-CAN转换接口设计

整个模块在硬件和软件的设计过程中贯彻了简洁、易维护、易升级的思想,在保证可靠性的前提下,尽量简化设计,为了保证传输的实时性,只负责完成数据的转发工作,复杂的数据处理工作将通过上位机软件LabWindows处理。

2.2 上位机驱动程序的设计

系统的上位机软件的开发使用的是LabWindows/CVI 7.0版本软件。LabWindows/CVI是National Instruments(美国国家仪器公司,简称NI公司)推出的32位的面向计算机测控领域的虚拟仪器软件开发平台,可以在多操作系统下运行。LabWindows/CVI是一个基于标准c开放的开发环境,以工程文件为主体框架把c语言源代码文件、头文件、库文件、目标模块、用户界面文件、动态链接库和仪器驱动程序集成在一起,提供内置式函数库用于完成数据采集、分析和显示任务,它还提供简单的拖放式用户界面编辑器以及自动代码生成工具。利用这些功能,您可以在将代码加入到某项目之前,先对其进行互动式的测试,用LabWindows/CVI定义和建立用户界面,生成或运行ActiveX组件及开发多线程应用。

所使用的USB设备没有现成的驱动程序,而编写驱动程序是一件很困难的事情。NI公司开发的Labwindows/CVI 7.0版本新增VISA的USB大大方便了USB驱动程序的开发。NI VISA3.0包含有VISA驱动程序生成向导可以为USB设备创建INF文件。另外,它内含丰富的数据采集、数据信号分析以及控制等子程序,用户利用创建和调用子程序的方法编写程序,使创建的程序模块化,易于调试、理解和维护,而且程序编程简单、直观。

在系统中安装完NI_VISA后,从开始菜单中打开程序>>National Instrument>> VISA >> VISA Driver Developer Wizard.可以使用这个向导为PXI/PCI或USB设备创建INF文件,使用的USB设备只要在向导的第一个对话框中选中USB即可,以后按照向导的提示填入一些所使用的USB设备的信息,最终将会在所选择的路径下生成相应的INF文件。把此文件复制到c:WINDOWSINF文件夹中并安装,然后就可以安装USB设备了。

USB设备启动后,在应用程序中添加VISA的相关I/O接口软件,就可以实现USB通讯了。主要函数介绍如下:函数ViOpenDefaultRM得到ⅥsA资源管理器句柄;函数ViOpen打开USB设备句柄;函数ViSetAttribute设置发送和接收端点属性;函数ViGetAttribute查看结果;函数ViRead和Viwrite进行读写数据;函数ViClose释放仪器和资源管理器句柄。

在帮助文件中和LabWindows教材中可以查到上面这些函数的使用方法。上位机程序中,调用上面给出的这几个函数就能编写实现上位机与USB器件的通讯。为了实现USB通讯,在传输数据时,读/写数据格式都要与USB协议相兼容。

3 结束语

基于PICI8F258和PDIUSBDI2的USB-CAN转换接口已经成功的应用在虚拟车辆模拟测试系统中,使用方便,运行可靠。基于Labwindows/CVI 7.0和VISA的USB驱动程程开发难度低,使用灵活方便,大大加快了系统的开发效率。

提醒:《USB-CAN转换接口设计》最后刷新时间 2024-03-14 01:07:26,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《USB-CAN转换接口设计》该内容的真实性请自行鉴别。