带全速USB接口的PICl8F4550应用设计 |
2008-5-12 16:37:00 曹卫锋 闫红岩 文方 供稿 |
| 引 言 随着USB(Universal Scrial Bus)技术的发展,特别是高速(480 Mbps)USB2.0协议的出现,几乎所有的PC外设都可以移植到USB上,所以USB的PC外设的发展空间是巨大的,甚至在不久的将来,USB将完全取代异步串口和打印机并口,PC机厂商将不会再生产机箱上带异步串口和打印机并口的PC机了,机箱上也不会再有那么多的连线了。 USB是一种快速的、双向同步传输的、廉价并可以进行热插拔的串行接口。利用USB总线技术,开发适用于科学研究和工业生产的各种仪器仪表设备,借以取代传统计算机测控系统中采用串行RS232或并行接几的仪器仪表设备,使计算机测控系统更加高效实时,方便灵活。 利用USB总线的数据采集方案有两种,一种是采用普通单片机加上专用的USB通信芯片。该方案可充分利用开发人员原有的硬件资源和软件知识,开发成本较低,但系统的设计和调试较为麻烦,且电磁兼容性差,容易造成主机不能识别USB设备。另一种是利用具有USB接口功能的单片机。使用这些专用芯片构成的数据采集系统电路设计简单,调试方便,电磁兼容性好。然而,目前大部分具有USB功能的单片机都是专门针对个人计算机外围设备或消费市场的需要而设计的,忽略了嵌入式工程师的需要。Microchip公司新款PIC18F4550系列单片机的问世,为广泛的嵌入式应用增添了全速USB的优势,即使遇到恶劣的操作环境或在只能不定时地连接个人计算机的情况下,也能正常工作。 本文以光栅位移传感器检测系统的设计为背景,详细介绍了带全速USB接口的单片机PICl8F4550的应用设计方法。 1 PICl8F4550介绍 新器件的全速USB 2.O接口具有1 KB双重存取RAM,支持高达32个端点(双向16对)和2种数据传输速率(即全速模式12 Mbps和低速模式1.5 Mbps),具有USB协议所规定的4种数据传输方式(控制传输方式、中断传输方式、批量传输方式和实时传输方式)。该接口包括一个片上收发器和一个并行流端口,能把数据直接传送到外部的设备,不仅减小了CPU的开销,而且大大增强了系统的抗干扰能力和工作可靠性。 PICl8F4550的硬件资源菲常丰富,包含33个I/O,I/O端口为端口A、B、C、D、E;具有多个中断源和1个中断优先级选择,4个定时器,32 KB程序闪存,256字节EEP-ROM数据存储器,2 048字节数据随机存储器以及8×8硬件乘法器;集成了13通道的10位A/D转换器,2个CCP(比较/捕捉/PWM)模块.1个增强型CCP模块和1个看门狗;具有省电功能的休眠模式;1个USART不仅支持异步与同步的串行通信,而且支持LIN总线;2个模拟比较器,支持I2C和SPI通信的主控同步串行端口,可编程欠压复位及低电压检测电路等。 PIC18F4550单片机的一个关键特性在于它配备了32 KB自编程增强型闪存。使得设计人员可以通过USB端口对最终应用进行现场升级。结合新器件配备的一系列片上外设和纳瓦技术(nanoWatt)的功耗管理功能,使其非常适用于多种嵌入式应用,包括工业、医疗、汽车、电池供电和消费类产品等。 2 PICl8F4550的设计应用 ②大量程测量兼有高分辨率。感应同步器和磁栅式传感器也具有大量程测量的特点,但分辨力和精度都不如光栅位移传感器。 ③可动态测量,易于实现测量及数据处理自动化。 ④具有较强的抗干扰能力,对环境条件的要求不像激光干涉传感器那么严格,但不如感应同步器和磁栅式传感器的适应性强。油污和灰尘会影响它的可靠性,主要适合于在实验室和环境较好的车间使用。 2.2 PICl8F4550硬件设计 ![]() 图1 光栅位移传感器检测系统硬件电路框图 2.3 单片机软件部分设计 ![]() 图2 单片机软件部分流程 2.4 PICl8F4550的固件设计 微芯公司提供了一系列的USB寄存器,使用这些寄存器可以完成USB通信。大多数的USB通信都是通过中断来完成的,在USB中断服务程序内,要实现输入/输出接口,允许大多数的USB程序在后台完成。从应用的观点来看,枚举过程和数据通信的发生好像没有联系。 对于单片机控制程序,目前没有任何厂商提供自动生成固件(firmware)的工具,因此所有程序都要由自己手工编制。由于USB协议的复杂性,并且考虑到广大客户的需求,因此,Mictochip公司在推出PIC18F4550系列芯片时,提供了面向不同客户群的DEMO程序,这就大大减轻了系统开发人员的负担,同时缩短了开发周期。本系统的设计就是在Microehip公司提供的DEMO程序的基础上,进行必要的修改来完成的。本设计的具体固件主要由以下8个文件组成。 ①main.c:系统的主程序,包括InitializeSystem()和USBTasks(void)两个子程序,主要完成系统的初始化以及其他各种子程序的调用。 ②usb9.c:实现的是USB协议第9章的功能,包括枚举总线的接口和核心功能,以及USB的中断服务程序。它处理由USB用户所产生的所有的中断。在这个程序中,主要实现对描述符的枚举以及休眠、复位功能,主要包括USBCheckStdRequest(void)、USBStdGetDscHandler(void)和USBStdFeatureReqHandler(void)等5个子程序。 ③usbctrltrf.c:主要实现USB控制传输所需的各种功能,主要由USBCtrlTrfSetupHandler(void)、USBCtr—IEPServieeCompiete(void)和USBPrepareForNextSetupTrf(void)等8个子程序组成。 ④usbdrv.e:主要实现与USB驱动相关的功能,包括检查总线状态、USB模块使能、USB模块挂起、远程唤醒等功能;主要由USBSuspend(void)、USBModuleEnable(void)、USBSoftDetach(void)和USBDriverService(void)等12个子程序组成。 ⑤usbdsc.c:主要是对该系统的描述,包括厂商、产品号等的描述。 ⑥usbgen.c:对USB设备类的配置(在这里把它配置为通用USB类),主要包括USB通用类的初始化端点和读写,由USBGenlnitEP(void)、USBGenRead(byte*buffer,byte len)和USBGenWrite(byte*buffer,bytelen)三个子程序组成。 ⑦usbmmap.c:主要用于检查USB在通信过程中,端点号与BDT(缓冲器描述符表)之间的匹配。 ⑧user.c:直接面向用户的应用程序,可以帮助用户完成自己的初始化配置、处理数据的读/写、I/O口的处理,设备的请求等。本设计中下位机的大部分功能都是由这个程序来实现的,比如A/D转换及其数据的读取、1MHz的PWM波形产生等。它主要包括UserInit(void)、BlinkUSBStatus(void)、ServiceRequests(void)、ProcessI()(void)、ResetTempLog(void)和ReadPOT(void)六个子程序。 2.5 PC机软件编程 PC机的软件部分主要用于实现上位机同下位机之间的USB通信,光栅位移传感器位移信号的细分和显示等功能。实现这一功能的方法有很多种,比如采用简单的VB、数据处理能力很强的Delphi,或国内外广泛采用的Borland C和VC等。为了下一步的软件开发以及与厂家的其他软件接口,本系统上位机的软件部分采用VC++6.0来实现。图3是PC机软件部分的流程图。 ![]() 图3 PC机软件部分流程 结 语 |



