引言
目前,在工业和许多其他场合依然使用基于PCI板卡、ISA板卡的数据采集系统,价格昂贵、接插不方便。USB(Universal Serial Bus,通用串行总线)是计算机上的一种新型接口技术,它使得计算机和外部设备的连接十分方便。USB具有高效、快速、价格低廉、体积小和支持热拔插等优点,使其成为数据采集系统设计的新宠儿。然而当前的USB数据采集设备大多采用的是专门的USB接口芯片,而且根据不同的需求,需要外扩一定数量的A/D转换芯片,使得接口非常复杂,增加了系统的开发难度,进而对系统的稳定性产生影响。本设计采用意法半导体公司开发的基于CortexM3内核的新型32位微控制器STM32F103x作为主控芯片。该芯片内部集成了全速USB2.0设备接口模块和16通道的12位高精度A/D转换器,单芯片即可完成设计任务,避免了复杂的接口电路设计,有效地降低了系统接口的复杂度和系统开发的难度,在很大程度上提高了系统的稳定性。
1 主控芯片STM32F103x
STM32F103x是意法半导体公司生产的基于ARM CortexM3处理器核的微控制器。CortexM3是基于ARMv7M体系结构的32位标准处理器,具有低功耗、少门数、短中断延迟、低调试成本等众多优点。它是专门为在微控制器系统、汽车电控系统、工业控制系统和无线网络等对功耗和成本敏感的嵌入式应用领域实现高系统性能而设计的,大大简化了编程的复杂性,集高性能、低功耗、低成本于一体。STM32F103x微控制器采用了先进的CortexM3内核结构,具有丰富的性能出众的片上外设,包括16通道的12位A/D转换器、7通道的DMA控制器、16位定时器、USART接口、CAN接口(2.0B)和USB2.0全速接口(12 Mbps)等。
2 数据采集系统硬件设计
2.1 数据采集系统硬件结构
多路数据采集系统的硬件结构框图如图1所示,主要包含5个模块: 信号输入接口模块、信号调理模块、数据采集及预处理模块、USB2.0通信模块和上位机模块。其中的信号输入接口模块实现信号的隔离接入;信号调理模块对输入信号进行放大或衰减,以适应A/D转换器的转换量程;数据采集及预处理模块和USB2.0通信模块实际是由微控制器STM32F103x独自实现的。STM32F103x通过内部A/D转换器对经过调理后的信号进行采集,然后进行数据的预处理,并将预处理后的数据通过USB2.0全速接口传送到上位机。上位机模块主要是对获取的数据进行存储和分析处理。由于大量的工作都是在STM32F103x内部完成的,只需通过简单的寄存器设置和程序设计即可完成数据的采集和传输过程,这在很大程度上优化了系统的设计。
图1多路数据采集系统的硬件结构框图
2.2 STM32F103x的ADC模块
STM32F103x系列微控制器所带的2个12位ADC是一种逐次逼近型模拟数字转换器。它有16个外部通道,可测量16个外部信号源。各通道的A/D转换可以是单次、连续、扫描或不连续模式执行,其转换结果可以左对齐或右对齐方式存储在16位数据存储器中。ADC转换频率最高可达1 MHz,且每个通道的采样间隔时间均可独立编程设置。在通道转换期间, ADC能产生DMA请求,使DMA来传输ADC转换值,提高了数据传输的效率。ADC模块的结构示意图如图2所示。
图2 ADC模块结构示意图
2.3 STM32F103x的USB2.0全速设备接口模块
USB接口模块为上位机和由微控制器实现的功能设备之间提供了符合USB规范的通信连接。USB接口模块通过和微控制器共享一块专用的数据缓冲区实现上位机和系统存储器之间的数据传输。这块专用数据缓冲区的大小由所使用的端点数目和每个端点最大的数据分组大小来决定,每个端点最大可使用512字节缓冲区,最多可用于16个单向或8个双向端点。USB接口模块根据USB规范实现了令牌分组的检测,数据发送/接收的处理和握手分组的处理。整个传输的数据格式由硬件自动生成,其中包括CRC的生成和校验。USB2.0全速设备接口模块的结构示意图如图3所示。
图3 USB2.0全速设备接口模块结构示意图
3 数据采集系统软件设计
数据采集系统软件设计主要包括设备固件程序设计和上位机应用程序设计两部分。
3.1 设备固件程序
设备固件程序设计的两个主要部分是ADC模块的配置和USB模块的配置与通信。
(1) ADC模块的配置
意法半导体公司针对ARM的32位STM32F103x系列MCU提供了固件库。该固件库提供了包括ADC在内的各种功能模块的软件使用接口,使用该固件库可以有效节省用户产品的开发和调试时间。利用该库,本设计中ADC的配置代码如下:
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
// ADC1和ADC2工作在独立模式
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
//使能扫描
ADC_InitStructure.ADC_ContinuousConvMode= ENABLE;
// ADC转换工作在连续模式
ADC_InitStructure.ADC_ExternalTrigConv= ADC_
ExternalTrigConv_None;//由软件触发转换
ADC_InitStructure.ADC_DataAlign= ADC_DataAlign_Right;
//转换数据右对齐
ADC_InitStructure.ADC_NbrOfChannel=16;
//共16个转换通道
ADC_Init(ADC1, &ADC_InitStructure);
在ADC正式工作之前,应首先进行ADC的校准,以保证ADC的精度。其校准代码如下:
ADC_ResetCalibration(ADC1);//使能ADC1复位校准寄存器
while(ADC_GetResetCalibrationStatus(ADC1));
//等待复位结束
ADC_StartCalibration(ADC1);//启动ADC1校准
while(ADC_GetCalibrationStatus(ADC1));
//等待ADC1完成校准
ADC校准之后通过函数ADC_SoftwareStartConvCmd(ADC1, ENABLE)即可启动A/D转换。
(2) USB模块的配置与通信
意法半导体公司还提供了针对STM32F系列的USB开发工具包。该工具包是一个完整的固件和软件包,包括所有USB传输方式的范例,大大减少了开发人员的工作量。利用USB工具包主要完成对USB模块的配置及与USB主机(即上位机)之间的通信。
USB规范定义了4种数据传输类型:控制传输、块传输、中断传输和同步传输。块传输适用于传输大量的且对传输时间和传输速率均无要求的数据;中断传输适用于传输少量或中量的且对传输时间有要求的数据;同步传输适用于传输大量的,速率恒定的且对传输时间有要求的数据;控制传输适用于传输少量的且对传输时间和传输速率均无要求,但必须保证数据传输的可靠性。
在本设计中,端点0为控制传输端点,实现USB设备上电后的配置过程;端点1为OUT中断传输端点,用以接收上位机发送的命令,实现上位机对数据采集过程的控制;端点2为IN块传输端点,将数据采集结果实时地传送到上位机,供上位机进行数据分析和处理。利用意法半导体公司提供的USB开发工具包并参照范例,修改一些描述符(设备描述符、配置描述符、接口描述符和端点描述符等)和设备复位函数,添加相应的端点传输中断服务程序等,即可方便地实现本系统的USB设备开发。端点2的配置代码如下:
SetEPType(ENDP2, EP_BULK);
SetEPRxStatus(ENDP2, EP_RX_DIS);
SetEPTxAddr(ENDP2, ENDP2_TXADDR);
SetEPTxStatus(ENDP2, EP_TX_NAK);
端点2工作时的代码如下:
UserToPMABufferCopy((u8*)wADC_ConvertedValue,
GetEPTxAddr(ENDP2), DATA_SIZE);
SetEPTxCount(ENDP2, DATA_SIZE);
SetEPTxStatus(ENDP2, EP_TX_VALID);
在设置端点2发送有效之后,USB模块可自动完成端点2缓冲区的数据发送。
3.2 上位机应用程序
本设计采用一种使用NIVISA和LabVIEW进行USB数据采集系统上位机程序开发的快速简单而且有效的方法,从而避开传统的Windows编程技术。通过在LabVIEW下调用NIVISA子控件程序,可以方便地实现与USB设备的通信和应用程序界面的开发。
VISA(Virtual Instrument Software Architecture)是一个用来与各种仪器总线进行通信的高级应用编程接口(API),不受平台、总线和环境的限制。在利用NIVISA完成对USB设备的驱动后,即可在LabVIEW开发环境中直接使用VISA面板对USB设备进行控制和通信。
LabVIEW是当今国际上唯一的编译型图形化编程语言,能方便、快捷地进行应用程序开发。本系统利用LabVIEW设计的USB多路数据采集系统用户界面如图4所示。
图4 多路数据采集系统用户界面
本系统实现了对16路外部信号的实时采集。图4中在实时波形显示区域,可以实时地显示4个通道的波形曲线。这4个通道通过选择可以是16个通道中的任意一个通道。在实时数据显示区域,能观测到每一路数据采集的结果;在左侧的控制及状态显示区域,可以实现设备选择、采集过程的控制以及数据采集系统的工作状态显示。
结语
本设计实现了基于STM32F103x的USB多路数据采集系统,以STM32F103x微控制器为主控芯片实现了外部信号的调理、采集、预处理和USB数据传输,以及上位机应用程序的开发。主控芯片STM32F103x内部集成了丰富的功能模块,使系统无需外扩大量芯片而能实现数据采集功能,降低了开发的复杂度和成本,达到了提高系统稳定性的目的。