您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 的环境监测数据采集系统设计
作者简介:刘建鑫,男,1980年出生,汉族,黑龙江省牡丹江市人,硕士,中科天融(北京)科技有限公司研发部工程师。从事环境监测气体分析仪器研发及电路设计工作。基于PIC18F4550的环境监测数据采集系统设计刘建鑫,郭炜,胡刚(中科天融(北京)科技有限公司,北京,100085)摘要:本文介绍了基于PIC18F4550单片机和USB-HID类的数据采集系统,并列举了该系统在环保分析仪器中的应用实例。详细介绍了相关的电路设计、单片机固件程序和上位机程序的开发流程。该方案具有实用性强,成本低廉,开发周期短等特点。关键字:PIC18F4550;USB;数据采集;HID中图分类号:X851DesignofAUSBDataAcquisitionSystemforEnvironmentMonitoringBasedonPIC18F4550MCULIUJian-Xin,guowei,hugang(TalroadTechnologyLTD.,Beijing,100085,China)Abstract:ThisarticleintroducesaUSBdataacquisitionsystembasedonPIC18F4550MCUandUSB-HIDClass,anddescribesanapplicationofit.RelatedCircuits,MCUfirmwareandPCprogramarealsointroducedindetail.Thissystemischaracterizedwithpracticability,inexpensivenessandrapidityofdevelopingperiod.Keywords:PIC18F4550;USB;dataacquisition;HID引言USB(UniversalSerialBUS,通用串行总线)接口现今已经成为各种计算机上的通用配置,具有高速性、易获得性和兼容性等突出特点。与其他数据传输方式相比,USB总线硬件集成自动数据校验和自动重发功能,具有较高可靠性。从传输速度上看,USB总线适用于对采集速度要求适中的场合,可满足大部分测量采集应用的需要。所以,使用USB技术的数据采集系统非常适合应用在各种环保监测设备中。但是USB技术有一定复杂性,USB标准文档内容多且抽象,涉及的知识广泛,导致很多工程技术人员入门困难,往往将大量开发时间浪费在USB通信方面,而非重要的应用上。针对此问题,本文介绍一种基于PIC18F4550单片机和WindowsUSBHID类设备驱动程序进行USB接口采集系统的开发方法,具有上手容易、开发周期短、成本低廉和性能优良等特点,适合各种环保在线监测领域的数据采集应用。1PIC18F4550单片机介绍芯片PIC18F4550来自MCU厂商Microchip,属于带有USB接口的特殊功能中高档单片机,编译环境及仿真器与其他PIC系列的单片机相同,程序开发过程也类似,所以对于有单片机开发经验的工程师来说很容易上手。该芯片主要有如下特点[1]:1、内置稳压器的片上USB收发器,兼容USBV2.0标准,支持低速(1.5Mb/s)和全速(12Mb/s);2、最多13路通道10位精度模数转换器模块(A/D);3、具有8x8单周期硬件乘法器;4、具有增强型CCP模块:在PWM模式下,该模块提供10位分辨率的1、2或4路调制输出来控制半桥和全桥驱动器,适用于直流电机的控制;5、具有常用电路接口。可通过此芯片轻松实现USB转并行接口、GPIO、I2C、SPI、PWM等功能;可以通过I2C或SPI接口外接ADC芯片来进行扩更高精度或更高速率的ADC展。6、具有增强型通用同步/异步收发器(UniversalSynchronousAsynchronousReceiverTransmitter,USART),可以在模块的基础上轻松扩展出RS232或RS485接口,还可实现更多功能,包括自动波特率检测和校准,以及自动唤醒,这些使EUSART模块成为局域互连网络(LocalInterconnectNetwork,LIN)总线系统非常理想选择。总之,芯片PIC18F4550价格低廉,接口丰富,功耗低,可利用的开发资源丰富,既拥有USB接口可进行高速数据通信,又具有单片机外设接口丰富、开发简便、控制能力强等特点,特别适合用于构建中低速数据测量及控制系统。2数据采集系统电路设计举例基于PIC18F4550的数据采集系统除可实现与上位机的USB通信功能外,还能够方便地拓展出多种电路接口,方便工程师根据应用灵活配置外围电路模块。图1硫气体分析仪中基于PIC18F4550的数据采集子系统例如在TR2294B1气体分析仪中使用的数据采集系统即基于PIC18F4550芯片(如图1),该采集系统实现如下功能:1、通过ADC电路模块放大、采集KE-25氧传感器信号,实时测量样气中的氧浓度;2、利用温度传感器18B20测量分析仪机箱内的工作温度,并使用PID控制算法输出PWM信号调节机箱风扇转速,使机箱内温度的波动保持在±0.1℃范围内,从而使设备传感器工作稳定,减少分析仪的温度漂移;PIC18F4550温度传感器18B20氧传感器KE-25闪光氙灯散热风扇USBSPISPI4~20mA电流输出PWM主机3、发出脉冲信号控制紫外脉冲氙灯闪光;4、通过控制阀泵的通断来切换气路;5、将测量数据以4~20mA的形式向外输出。下面对其中的USB通信、AD采集和4~20mA电流信号输出部分进行详细说明。图2PIC18F4550实现USB通信功能的电路模块首先,通过PIC18F4550进行USB通信,需要在电路上进行相应配置。图2是PIC18F4550采集系统USB通信接口电路。其无需外接电源,而是直接从USB接口中的Vbus取电,最大取电电流可达500mA。根据USB规范的要求,D-或D+端口必须有上拉电阻,大小为1.5kΩ(±5%),在PIC18F4550芯片内部集成了内部上拉电阻,用户可以在程序中进行选择配置,将上拉电阻加载在D+端口,表示配置为全速设备(Fullspeed),将上拉电阻加载在D-端口,表示配置为低速设备(Lowspeed)。芯片的Vusb引脚为使用外部上拉电阻提供3.3V电源,当使用内部上拉电阻时不使用该引脚,可将其禁用,但无论怎样配置,一定要在该引脚上外接470pF的电容,否则会导致USB通信不正常。芯片一般外接20MHz晶振,也可使用其他低频率的晶振。因为要为USB通信模块提供48MHz时钟,芯片使用锁相环将外接晶振频率转化为48MHz时钟,所以外接晶振频率值不是任意,具体可参考PIC18F4550的使用手册进行选择。为防止晶振时钟信号上升沿退化,可在晶振两端跨接1MΩ电阻。ADC模拟电压信号采集模块使用AD7705BZ芯片组建(如图3),适用于低频16位精度信号采集。ADC芯片AD7705BZ集成信号放大与采集功能,带有数字滤波功能,温漂小,非常合适低频小信号的采集。图3ADC模块电路电流信号输出模块使用12位精度DAC芯片TLV5614C和4~20mA输出芯片XTR115U组建(如图4),精度高,抗干扰能力强,适用于信号的远程传输;可使用一片TLV5614C实现4路输出(图4中仅实现1路);电流输出部分使用24V电压供电。图44~20mA电流信号输出电路3单片机程序设计通过PIC18F4550,可以实现各类应用,例如USB存储设备、音频视频设备、人机交互设备、打印设备等,USB规范中也针对不同类别的应用而定义了很多标准应用类。其中应用比较广泛且开发简便的一个是HID(HumanInterfaceDevice,人机接口设备)类。HID类设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID类设备,可以将HID类应用于其他非人机交互的应用,其具有以下优点[2][3]:1、实时性强,延迟时间有保障。HID类使用中断或控制的方式进行数据传输,上位机Host以最低1ms的周期轮询USBHID设备,上位机Host对通信的响应有最长保证时间。从而适合数据采集、控制等应用。2、Windows操作系统为USBHID类提供了充分的驱动程序支持,提供了丰富的API接口供用户调用。只要芯片的通信数据支持HID规范,用户便不必开发Windows底层驱动程序,大大减少了开发工作量。由于HID类设备具有以上优点,所以特别适合应用于中低速的数据采集系统。为了支持用户USB产品的开发,Microchip公司为其生产的带USB通信功能的单片机提供MCHPFSUSBFramework开发包。开发包中包含了各种USB应用程序的框架、实例和详细的说明文档,帮助用户在短时间内开发出符合自身要求的USB应用系统。MCHPFSUSBFramework开发包中为HID类程序提供的程序结构如图5。图5PIC18F4550HID类程序结构其中通用代码主要完成编译器相关的设置和通用数据类型的定义;USB配置代码用于设置USB传输活动;USB程序栈中的各部分代码用于处理USB底层数据传输任务,对于初步接触USB开发的人员,可先不必深入此部分代码。用户应用代码主要位于main.c文件中的ProcessIO()函数中,是用户根据实际应用需要而编写的应用程序,对于数据采集系统而言,这部分代码主要应该完成外部数据的采集,并及时上传给上位机,同时监控上位机的应用控制命令,完成对外部设备的控制。下面对用户代码的框架进行说明(如图6)。在单片机程序中有两种处理USB通信总线事务的方式,一是中断方式,即当总线上有USB事务时,触发芯片的高优先级中断处理函数YourHighPriorityISRCode(),在其中调用USBDeviceTasks()来对事务进行处理;另一种方式是采用轮询的方法,即在主程序中的无限循环中定期调用USBDeviceTasks()。用户应用代码主要位于ProcessIO()函数中,是用户根据实际应用需要而编写的应用程序。在该函数中,使用HIDRxHandleBusy(USBOutHandle)函数来检查是否有数据被接收,使用HIDTxHandleBusy(USBInHandle)函数检查是否可以向上位机上传数据;收到的数据被放置在ReceivedDataBuffer数组中,要发送的数据需被放置在ToSendDataBuffer数组中;使用HIDRxPacket函数接收数据,使用HIDTxPacket函数发送数据。PIC18F4550USB-HID类程序通用代码USB配置代码用户应用代码Compiler.hGenericTypeDefs.husb_config.husb_descriptors.cmain.cUSB程序栈usb.husb_device.husb_ch9.husb_device.cusb_function_hid.c……图6PIC18F4550用户应用程序举例4上位机Windows应用程序设计由于Windows为USBHID类设备提供了充分支持,用户可不必编写底层驱动程序,节省了开发时间,上位机的应用程序可直接通过调用各个WindowsAPI来对HID设备进行操作。程序的具体操作步骤如下[4]:1、首先需要定位设备,获取指定HID设备的路径,并监测设备的可用状态。为检测设备的插入和移除事件,程序须对相应插入和移除事件进行注册,将主窗口的句柄发送给RegisterDeviceNotification。当一个新设备被探测到或被移除,Windows将向主窗口发送voidYourHighPriorityISRCode(){#ifdefined(USB_INTERRUPT)//如果使用中断方式处理USB总线事务USBDeviceTasks();#endif}voidmain(void){InitializeSystem();//初始化系统#ifdefined(USB_INTERRUPT)USBDeviceAttach();//检查设备的连接状态#endifwhile(1){#ifdefined(USB_
本文标题:的环境监测数据采集系统设计
链接地址:https://www.777doc.com/doc-920769 .html