基于STM32F103的USB数据采集模块的设计

发布者:机器人总动员最新更新时间:2023-10-11 来源: elecfans关键字:STM32F103  USB  数据采集模块 手机看文章 扫描二维码
随时随地手机看文章

通用串行总线(USB,universalserialbus)由于具有高传输速率、即插即用和易于扩展等优点而被广泛应用于计算机外设、数字设备和仪器仪表等领域。ARM嵌入式处理器因其低廉的成本和较好的性能被广泛地应用于企业应用、汽车系统、家庭网络和无线技术等市场领域。将USB与ARM相结合是进行数据采集、处理与传输的理想解决方案。


1、USB数据采集系统概述

USB数据采集系统由主机和USB设备两部分组成,如图1所示。本系统中,PC作为USB主机,USB采集模块作为USB设备,通过USB接口与主机相连。模块与主机连接之后,主机能够正确识别设备并将设备初始化(枚举)。设备初始化完毕后,主机向采集模块发送采集命令和任务参数。采集模块正确接收命令后将命令解析并执行,然后通过USB接口将采集到的数据回传到主机上。


从层次上划分,USB系统的软、硬件资源可划分为3个层次:总线接口层、设备层及功能层。接口层涉及的是具体的物理层,主要实现物理信号和数据包的交互,它包括物理链接、电信号环境和包传输机制;设备层主要提供USB基本协议栈,执行通用的USB的各种操作和请求命令,从逻辑上讲就是USB系统软件与USB逻辑设备之间的数据交换;功能层提供每个USB设备所需的特定功能,包括客户应用软件和设备功能块,它们之间有直接的逻辑对应关系。这种对应关系说明在逻辑上客户应用软件只需考虑如何实现具体设备功能即可。USB的层次结构对应关系如图2所示。

基于STM32F103的USB数据采集模块的设计

图1  USB数据采集系统组成


2、数据采集系统方案设计

在系统开发中选用集成度高的器件,不仅开发方便,而且所开发的系统的性能及其可靠性也较高。另一方面,由于USB接口设备是采用总线供电的,考虑到总线输出功率有限,尽量采用集成度高的器件有利于降低USB总线的负荷。但选用集成度高的器件及其开发工具会导致成本的提高,所以要综合各种因素统筹考虑。

基于STM32F103的USB数据采集模块的设计

图2  USB系统的层次对应关系

当前,USB的开发方法主要有两种:一种采用具有USB接口的MCU,另一种采用普通MCU和USB通信芯片。后者是目前被广泛采用的方法,技术相对成熟,开发成本较低。由于STM32ARM本身自带A/D转换器和USB控制器,仅需一片ARM即可完成采集与传输的功能,因此无需再外加USB通信芯片,但是调试的成本较大。


本模块选用的处理器STM32F103是意法半导体新近推出的STM32的增强型系列处理器,主频为72MHz,带有片内RAM和USB2.0接口、16通道的12位A/D转换器等丰富的外设。其中系统集成的双ADC结构允许双通道采样/保持,能够实现12位的转换精度、1μs的转换速度。由于STM32丰富的片内资源,本数据采集模块仅需一片STM32F103以及常见的外部电路即可,电路结构简单紧凑。数据采集模块的硬件组成框图如图3所示。

基于STM32F103的USB数据采集模块的设计

图3  数据采集模块的硬件组成框图

整个数据采集模块采用外部USB取电,USB的+5V电压经由LD1117稳压芯片转换成3.3V供ARM及外设使用。复位电路能够完成上电复位与手动复位。由于USB工作的时钟频率为48MHz,所以选用8MHz外部晶振经由9倍频为72MHz作为系统主频,72MHz再1.5分频后得到准确的48MHz时钟。为了提高采集的效率,在ARM的内存空间开辟4KB作为数据缓冲区。外部模拟信号送入A/D转换器进行模数转换。A/D每次转换结束之后,使用DMA方式将转换后的16位数据顺序搬移到数据缓冲区中。待缓冲区满后,将4KB数据打包经由USB总线回传到PC主机,由应用程序进行数据处理。

3、软件设计与实现

系统软件设计包括3个部分:固件驱动程序开发、USB设备驱动程序开发、主机应用程序开发。三者是一个有机整体,缺一不可,需要互相配合,才能完成可靠、高速的数据采集与传输。3.1STM32F10xxxUSB固件驱动程序库简介STM32F10xxxUSB固件驱动程序库是意法半导体公司专为STM32F10xxx系列ARM微处理器提供的固件驱动程序库,其主要用途是利用STM32F10xxx系列微控制器中的USB宏单元来简化应用开发。USB固件库分为内核层和应用接口层两个层次,层次结构框图如图4所示。

基于STM32F103的USB数据采集模块的设计

图4  USB固件库层次结构框图

内核层:该层管理使用USBIP硬件与USB标准协议两者间的直接通信。USB库内核遵从USB2.0标准并和标准的STM32F10xxx固件库分离。

应用接口层:该层为用户提供了内核和最终应用之间的完整接口。

在USB内核层,采用调用构造体函数指针的方法调用应用回调函数,用这样的方法将USB内核层与应用接口层连接在一起。在实际应用中,开发人员可以不对内核层进行十分深入的理解,也无需对内核层函数进行修改,仅对应用接口层函数进行必要的修改即可。


3.2、固件驱动程序设计

固件驱动程序(又称单片机程序)是指固化到CPU模块内的软件。固件程序采用模块化设计,主要模块包括:数据采集控制模块和数据通信模块两大部分。模块化设计的优点是可靠性高、可读性好、软件改动简单。

USB设备在上电之后需要首先完成系统时钟配置及片内外设的初始化操作。设备初始化完毕后,采集命令的接收、解析及数据传输的所有操作均在中断服务程序中完成。中断源及对应功能如表1所列。定时器3为节拍发生器,定时器中断用于定时触发A/D转换器采样与转换。DMA通道1产生中断表明4KB数据缓存已满,可以将AD采样数据打包并通过USB发送。

表1中断源及对应功能

基于STM32F103的USB数据采集模块的设计

3.3、驱动程序设计

USB设备驱动程序介于USB硬件与数据采集系统应用程序之间,为它们之间的通信提供桥梁。USB的驱动程序属于WDM(Windowsdrivermodel)类型,Windows98/2000等操作系统均支持该类型的驱动程序[3]。USB驱动程序使用DriverStudio中的Driverworks2.7编写。DriverWorks提供了3个函数类:KUsbLowerDevice,KUsbInterface和KUsbPipe类,用于实现USB设备操作。KUsbLowerDevice类用于逻辑设备的编程,KUsbInterface类用于接口的编程,KUsbPipe类用于管道的编程。最基本的例程有设备的启动、停止、卸载、读写、设备控制等例程。

在端点初始化时,定义最大传输字节数为4096B。而固件每次传输字节数最大为64B,因此传输4096B的数据需要将数据分成32包分包发送,主机接收数据拼包的过程由驱动程序自动完成。

3.4、应用程序设计

用户应用服务程序直接面向用户,是控制数据采集软件的最上层,不仅提供与用户交互的界面,还能通过发送各种控制命令来控制采集模块的工作。在Windows中,应用程序实现与WDM的通信过程是:应用程序先用CreateFile函数打开设备,然后用DeviceIOControl与WDM进行通信,包括从WDM中读数据和写数据给WDM两种情况,也可以用ReadFile从WDM中读数据或用WriteFile写数据给WDM。当应用程序退出时,用CloseHandle关闭设备。表2列出了几种常用的分发例程及其所对应的Win32函数。

表2常用的分发例程

表1中断源及对应功能

采集卡控制的软件流程图如图5所示。首先需要打开设备,如果设备没有被找到,则会显示错误信息;如果设备能够被正确识别,则需要继续设置采样频率。正确设置采样频率后就可以单击开始接收数据按钮接收数据了。发送区会不停显示出已发送的命令串,在接收区则会不停显示出接收到的数据包编号。如果需要停止数据采集,只需单击停止数据采集按钮即可。

表1中断源及对应功能

图5  应用软件流程图


程序在实现数据可视化的过程中,使用了ActiveX控件。ActiveX与具体的编程语言无关,利用ActiveX控件可以较好地实现可视化的外观效果,从而逼真、形象地显示工业应用中的各种仪器、仪表设备的外观。本应用中利用了LabVIEW中一个名为NTGraph的ActiveX控件,实现了数据的可视化输出。实际测试时使用了频率为1kHz的正弦波信号,实测截图如图6所示。

表1中断源及对应功能

图6  实测波形


4、结束语

该数据模块经过实际测试,效果良好,整个系统工作正常,最高采样频率为300kHz,达到了预期设计的数据采集控制与数据传输的目的,与虚拟仪器的结合必将带来广阔的应用前景。

关键字:STM32F103  USB  数据采集模块 引用地址:基于STM32F103的USB数据采集模块的设计

上一篇:STM32的Cortex-M3中断异常处理
下一篇:一款基于stm32芯片的智能家居系统的设计

推荐阅读最新更新时间:2024-11-10 12:54

兆讯216兆M3内核MCU,MH2103ACCT6完美替代STM32F103C8T6/CBT6
兆讯恒达软硬件完美替代F103/105系列,F103系列等 MH2103CCCT6/MH2103ACCT6 MH2103ARPT6 MH2103AVET6 MH2103AVGT6 MH2103AZET6 主频216兆 内置的存储器包括:最大1024K Flash,96K S 该系列内置了多达2个高级、10个通用定时器、2个基本定时器、3个12位的、2个12位的, 还包含标准和先进的通信接口包括:3个S接口、2个I2S接口、2个接口、5个U(S)ART接口、1个2.0 全速串行通信接口、1个总线控制器、1个O接口 MH2103A(C)xxxx
[机器人]
英特尔USB神经运算棒可推动AI普及
英特尔(Intel)新推出的Movidius神经运算棒(Neural Compute Stick),可让用户不需借由云端系统,就能直接透过USB进行人工智能与深度学习应用开发,减少机器学习应用测试所需花费的成本。   根据 IBTimes及据VentureBeat报导,Movidius神经运算棒是全球第一个以USB为基础的深度学习推论套件。这项产品使用了Caffe框架,可透过USB 3.0与64位元Ubuntu 16.04电脑连接。电脑本身则需配备1GB RAM及4GB的内建存储器。Movidius神经运算棒能够在离线的状态下使用,因此更方便人工智能原型的开发。   Movidius神经运算棒所使用的Myriad 2 VPU拥有强
[半导体设计/制造]
PIC单片机的USB接口的应用 一个简单的USB HID 测试程序
1)HID 是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。 2)CDC 虚拟串口,可与PC机直接联机通讯,如同RS232。 3)USB MSC (Mass Storage class) MSC是一种计算机和 移动设备 之间的传输协议,它允许一个通用串行总线(USB)设备来访问主机的计算设备,使两者之间进行文件传输。设备包括: 移动硬盘 ,移动光驱,U盘,SD、TF等储存卡读卡器,数码相机,手机等等 .......... 注意:每一个USB设备,都需要一个独立的身份编码
[单片机]
PIC单片机的<font color='red'>USB</font>接口的应用 一个简单的<font color='red'>USB</font> HID 测试程序
关于STM32F103型号的矩阵按键的程序书写
最近参加电子大赛要写一个矩阵按键,刚开始写了好长时间换了好几个矩阵按键都不好使,但是 我感觉我的程序和原理都没有错,调试了好久也没有发现问题在哪?我按照我自己的思路把程序重写了一遍bug消失了,程序很好的运行。程序贴出来,纪念一下。 #include keypad.h #include stm32f10x.h #include delay.h /*************************************************************************/ /****************************************************************
[单片机]
STM32F103VET6——ADC单通道中断读取实验讲解
编程要点 Define GPIO ADC_InitTypeDef ADC时钟 通道的转换顺序和采样时间 使能ADC转换完成中断 使能ADC转换开始 校准ADC 选取ADC转化触发源 配置中断优先级 编写中断服务函数 main函数 /*-----GPIO-----*/ static void ADC_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; ADC_GPIO_APBxClock_FUN ( ADC_GPIO_CLK, ENABLE ); GPIO_InitStructure.GPIO_Pin = ADC_PIN; //必须为模拟输入 GPIO
[单片机]
如何让CDC类USB设备批量接收64字节以上数据
很多STM32开发者在实现CDC类虚拟串口与PC主机通信过程中,有时会遇到点麻烦而不得其解。那就是当主机端单次发送的数据不超过64字节时,接收正常。一旦发送数据量大于64字节时就接收失败,总是出现丢包现象,似乎只能接收64字节以内的数据。网上有人干脆建议主机每次发送不要超过64字节,当然,也有人提及要作分包处理但没具体实现代码可以参考。 作为CDC类的USB设备,到底能不能正确接收来自主机64字节以上的批量数据呢? 其实是可以的,只是当我们一次传输的数据大于当前端点所支持的最大包长时【这里端点使用BULK传输,一般最大包长默认设置为64字节】,USB模块会做分包传输,将一批数据传输分成多个处理 ,即多个transaction来
[单片机]
USB 3.0连接器引脚、接口定义及封装尺寸
  USB 3.0采用的双总线结构,在速率上已经达到4.8Gbps,所以称为Super speed,在USB 3.0的LOGO上显示为SS,由于接口变化太大,再加上把USB 3.0协议集成到相关芯片组肯定也需要时间,所以USB 3.0的普及应该至少再需三年以上。   说明:   本文插图及封装尺寸来源,USB 3.0-final.pdf(Date:November/12/2008),USB 3.0协议可在USB官方 http://www.usb.org/ 下载到。   USB 3.0中定义的连接器包括(本文不包含连接线缆):   §USB 3.0 A型插头和插座   §USB 3.0 B型插头和插座   §US
[嵌入式]
PN8386-5V 3A智能USB插座手机充电器方案
PN8386-5v3a充电器方案特征: ■输入电压:90~265V全电压 ■输出功率:15W ■输出电压:5V ■输出电流:3A±3% ■效 率:85.64% ■高压启动+多工作模式+同步整流技术,满足COC V5 Tier 2 ■PN8386独特PFM 工作曲线,降低变压器体积,简化EMC 设计 PN8386-5v3a充电器方案电路具有过载保护,过流保护,开环保护,以及VDD过压保护等功能,提高了整个系统的可靠性; 待机小于50mW,动态性能好,可满足六级能效,更多六级能效5v3a充电器方案
[嵌入式]
PN8386-5V 3A智能<font color='red'>USB</font>插座手机充电器方案
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved