引言
USB总线具有传输速度快、应用范围广、即插即用等优点,成为当前主流的串口通信标准。本文设计了由FT245BL、MSP430F149单片机以及Labview构成的4通道简易数据采集系统,并对此系统的原理及实现方法进行了介绍。
1 数据采集系统硬件设计
数据采集系统的一般原理如图1所示。本采集系统中,4路被测信号先通过信号调理电路转换为适合A/D采样的电信号,然后由MSP430F149单片机内部的A/D转换器将电信号转换为数字信号,最后通过USB接口接入PC机,并在PC机上利用Labview软件构建采集界面。
图1 数据采集系统的原理图
1.1 单片机的选择
单片机采用TI公司的MSP430F149芯片。MSP430F149为16位混合信号处理器,突出特点是超低功耗,正常工作时电流在200 μA左右,低功耗模式可实现2 μA甚至0.1 μA的低功耗[1]。MSP430F149内置8路12位的SAR型高速A/D转换器,其转换速率可达到200 ksps,可以在没有CPU干预的情况下进行16次独立采样并保存结果。采用片内的A/D转换不仅可以降低系统的复杂性,而且可以提高系统的可靠性,避免了接口的复杂性[1]。
1.2 信号调理电路
信号调理电路主要将各种传感器探测到的电信号转换为适合A/D采集的电信号。对于本系统,片内ADC的参考电压为3.3 V,采用外接方式,因此需要通过一个高输入阻抗、低输出阻抗的4路高精度放大滤波电路将电信号范围转换为0~3.3 V。
1.3 USB接口电路
USB接口电路如图2所示。USB控制芯片采用FTDI公司的FT245BL。FT245BL是完全集成化的USB接口模块,满足USB1.1/2.0标准,无需用户编写驱动程序,其内部结构图可参照FTDI公司的官方网站[2]。FT245BL的主要功能是在内部硬件逻辑的作用下实现USB串行数据格式与并行数据格式的双向转换,中间的转换工作全部由芯片自动完成,无需考虑硬件的设计[2]。
图2 USB接口电路
2 数据采集系统软件设计
2.1 单片机程序设计
本程序设计中,采样信号采用时序电路产生的信号。时钟源采用5 MHz的内部振荡器ADC12OSC,转换模式设置为序列通道多次转换,通过合理设置ADC12MCTLx寄存器,选择采样通道并将转换结果存放到相应的ADC12MEMx寄存器中。依据以上设置,ADC12模块转换结果的计算公式为:
其中,NADC为转换的结果,VIN为输入的模拟电压。
USB既可接收上位机发送的指令,也可将采样值实时发送到PC机上。当单片机扫描接收数据标志为1,且P2.6口检测到低电平时,表明可以向PC机发送数据;然后单片机通过8位数据总线D0~D7发送数据,通过信号WR由高到低的变化读入数据,当P2.6口为低电平时,表明此次数据发送完成,可以进行下一次数据的发送。主程序流程如图3所示。
图3 主程序流程
2.2 上位机程序设计
2.2.1 驱动的安装
FT245BL芯片的最大优点是免去了复杂的固件编程和驱动程序的编写。FTDI公司免费提供虚拟串行口VCP驱动程序和动态链接库D2XX驱动程序,安装VCP驱动的传输速率最高可达到300 KB/s,安装D2XX驱动的传输速率最高可达到1 MB/s。当USB接口与主机连接后,在PC机上安装FTDI公司免费提供的版本号为2.08.02的驱动程序和压缩文件,该驱动程序兼容Windows 2000/XP/Vista/7等操作系统。安装好驱动后,打开设备管理器,查看端口和通用串行总线控制器,分别出现了“USB Serial Converter”和“USB Serial Port”,这样就完成了USB驱动的安装。FT245BL芯片的使用,简化了USB 数据接口的设计,加快了USB系统的开发进程。
2.2.2 应用程序设计
安装驱动后,USB与主机实现连接,但Labview软件不直接支持非NI公司的数据采集设备,此系统采用调用动态链接库来实现Labview与采集设备的连通。所谓动态链接库(DLL)是指应用程序在运行时与库文件链接的技术。它是在应用程序运行时被装入和链接的,而不是把源代码复制到应用程序中去,因此可实现多个应用程序之间代码和资源的共享。Labview可以通过调用库函数节点实现对动态链接库中函数的调用。
在程序框中的互连接口,选择调用库函数节点,双击左键出现调用库函数对话框。根据Labview与DLL的参数对应关系填写好DLL文件的路径、被调用函数名、参数的类型及返回类型。需要注意的是,当调用多个函数时要分别填写参数的个数和对应的类型,而且在调用过程中应保持数据位的一致。填好单击OK按钮后,Labview将自动生成各参数的入口及出口状态,这样就实现了Labview与DLL的调用[3]。在实现采集前,需要调用一些库函数对系统进行一些设置,通过调用FT_ListDevices()函数可得到设备的描述和USB接口的运行状态。按照此类调用方法,通过调用FT_OpenEx()函数得到句柄,通过调用FT_Write()、FT_Read()实现对USB接口的读写操作,还可以根据自己的设计需要调用其他函数来实现比特率、奇偶校验码设定等功能,这些设置可以参照FTDI公司的参考文档[4]。根据设计需求,依次调用所需的函数实现对采集系统的设置。此外,根据设计的采样速率,需要在上位机建立一个缓存。
数据采集系统要实现4通道数据采集,因此采用数组的读写方式。由图4可知,单片机与USB接口的通信是通过并口实现的,而并口传送的最大数值为255,采样范围为0~4095,因此需要在单片机的发送程序中编写数据转换程序,将采样值分别转换为千位、百位、十位、个位,依次进行传送,上位机通过串口接收数据后依次进行还原。
图4 USB通信方式
为了数据能够稳定地传输,当单片机接收到上位机发送的指令后,首先发送一个标识符,标识符采用并口发送数值15,随后用数据转换程序依次通过并口发送4个通道的数据,上位机通过对标识符的识别将接收到的数据进行还原。
3 系统测试
用数字万用表(当量程为2 V时,分辨率为1 mV)分别测量4路直流电信号,分别测得1.267 V、0.743 V、0.812 V、0.494 V。将这4路信号与单片机的转换接口P6.0~P6.1相连,采集系统运行后的前面板如图5所示。
将上述采样值按照公式(1)转换为电压,与电压表的误差最大不超过0.02 V。
编者注:单片机程序和Labview部分程序见本刊网站www.mesnet.com.cn。
图5 采集系统运行后的前面板
结语
本文介绍了一种简易4通道数据采集系统。测试表明,该数据采集系统结构简单,成本低,界面美观,可对多个通道数据进行准确测量。在此架构下,可根据应用需求选用相应的微控制器和模/数转换器件。