USB视频采集

2024-07-26

USB视频采集(共8篇)

USB视频采集 篇1

0 引言

Video for Linux(简称V4L)是Linux中关于视频设备的内核驱动,它为针对视频设备的应用程序编程提供一系列接口函数,包括现今市场上流行的TV卡、视频捕捉卡和USB摄像头等。同时也提供无线电通信和文字电视广播解码和垂直消隐的数据接口。在Linux下,USB摄像头视频采集的正常使用依赖于对Video for Linux内核标准的支持,对于USB摄像头,提供其驱动程序中需要的基本I/O操作接口函数open、read、write、close的实现。并定义了在设备驱动程序中所使用的一些通用的数据结构及内核接口符号。

1 Video for Linux接口函数和数据结构

在内核中的drivers/media/video/videodev.c文件,是内核开发者提供的一个Video for Linux设备驱动程序模块,它向外提供了一些内核接口符号和一些通用的数据结构,以便供驱动程序开发者在该模块的基础上堆叠出自己的特定设备的驱动程序。Video for Linux设备在内核中的注册int video_device_register(struct video_device*vfd,int type,int nr)各变量含义如下:

vfd:想要注册的video_device结构;

type:注册的设备的类型,共有以下四种:

VFL_TYPE—GRABBER_A frame grabber

VFL_TYPE_VTX-A teletext device

VFL_JYPE_VBI-Vertical blank data(undecoded)

VFL_TYPE_RADIO-A radio card

这几个宏在vidcodev.h中都有相关定义;

Video for Linux支持的主要结构体为video_device,其结构定义在videodev.h文件中,定义如下:

struct video_device

{

struct module*owner;//指明该模块的拥有者,一般为THIS_MODULE

char name[32];//设备名称

int type;//设备类型

int hardware;

int(*open)(struct video_device*,int mode);//设备的打开函数

void(*close)(struct video_device*);//设备的关闭函数

long(*read)(struct video_device*,char*,unsigned long,in noblock);//设备的读函数

long(*write)(struct video_device*,const char*,unsigned long,in noblock);//设备的写函数

unsigned int(*poll)(struct video_device*,struct file*,poll_table*);

int(*ioctl)(struct video_device*,unsigned int,void*);//设备的I/O控制函数

int(*mmap)(struct video_device*,const char*,unsigned long);//设备的内存映射函数

};

程序中用到的主要系统调用函数有:open(“/dev/video0”,int flags)、close(fd)、mmap(void*start,size_length,int prot,int flags,int fd,off_t offset)、munmap(void*start,size_t length)和ioctl(int fd,int cmd,……)。

Linux系统中把设备看成设备文件,在用户空间可以通过标准的I/O系统调用函数操作设备文件,从而达到与设备通信交互的目的。当然,在设备驱动中要提供对这些函数的相应支持。其中ioctl(in fd,int cmd,…)函数在用户程序中用来控制I/O通道,其中,fd就是用户程序打开设备时使用open函数返回的文件标示符,cmd就是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,有或没有是和cmd的意义相关的。ioctl函数是文件结构中的一个属性分量,也就是说,如果驱动程序提供了对ioctl的支持,用户就可以在用户程序中使用ioctl函数控制设备的I/O通道。

2 视频信号采集实现

2.1 USB摄像头驱动设计

USB摄像头属于视频设备,在Videofor Linux中为应用程序定义了一系列的接口函数,内核、驱动和应用程序都是依靠这个标准来进行交流。在内核中,摄像头对应的设备文件名为/dev/video0,主设备号是81,次设备号根据摄像头数目来确定,本设计中仅使用一个摄像头,所以可以通过mknod/dev/video0 c 81 0来创建节点。USB摄像头驱动程序实现原理如图1所示。USB摄像头的驱动和通用设备的驱动准则一样,但需要与内核提供的视频驱动挂钩。即首先在驱动中声明一个video_device结构,并为其指定文件操作函数指针数组fops,向系统注册。在应用程序发出文件操作的相关命令时,核心根据这些指针调用相应函数,并将该结构作为参数传递给它们。这样,就完成了驱动和核心之间的通信。如下所示:

Static struct video_device vdev_template={……};//声明video_device,指出挂接驱动

Static Struct file_operations spca5xx_fops={……};//声明本驱动的文件操作函数指针

Struct video_device*vdev=video_devdata(file);//从文件指针中提取出video_device结构

在vidco_device结构中,有一个私有指针priv,可以将它指向一块保留内存。在这块内存中,保存着本驱动、本设备的相关初始化信息。这块内存的申请、初始化、指针指向等工作都是在USB驱动的枚举函数probe中完成。这样,在枚举函数将控制权返还给系统后,因为内核不销毁保留内存,所以驱动仍然保留着自己的信息。在驱动卸载函数中需要将申请的各块内存全部释放。

2.2 视频采集程序实现

对设备的操作需要通过ioctl()给驱动发送命令、传递不同的参数,先要配置好Linux内核的Documentation/v4l/APL.html文件,程序里调用ioctl()。主要调用的函数有:open()函数,用来打开视频设备,get_capability()函数和get_picture()函数用来获取视频设备的信息,初始化设备调用v4l set norm()函数,对视频信号的采集需要调用v4l grab frame()函数,最后关闭视频设备用到close()函数。接下来介绍设备初始化和视频的截取。

2.2.1 设备的初始化

首先打开视频设备,摄像头在系统中对应的设备文件为/dev/video0,采用系统调用函数camera_fd=open(“/dev/video0”,O_RDWR)(注:camera_fd是设备打开后返回的文件描述符)。以下是open函数的具体实现:

int camera-open(char*dev,camera device*vd)

{

if(!dev)

dev=dev/video0;

if((vd->fd=open(dev,O_RDWR))<0){

perror(“camera_open:”);retum-1;

}

if(camera-cap(vd))

retum-1;

if(camera-pic(vd))

return-1;

return 0;

}

接着,利用ioctl WIDIOCGCAP读取struct video_cability中有关摄像头的信息。

int camera_cap(camera_device*vd)

{

if(ioctl(vd->fd,VIDIOCGCAP,&(vd->capability))<0)

{

perror(“camera_cap:”);

return-1;

}

return 0;

}

该函数成功返回后,从内核空间将这些信息拷贝到用户程序空间camera_cap各成员分量中,使printf函数就可得到各成员分量信息。然后通过调用ioctl VIDIOCSFBUF设置内存缓冲区的相关信息,缓冲区的信息也可通过printf函数输出;通过调用ioctl VIDIOCSWIN完成对视频窗口的设置;如窗口的宽度,高度等;通过调用ioctl VIDIOCSPICT来设置所采集图像的属性,如亮度,对比度等。

2.2.2 视频截取

初始化设备后,就可以开始视频图像的截取,有两种方法:一种是read()直接读取;另外一种mmap()内存映射。Read()通过内核缓冲区来读取数据;而mmap()通过把设备文件映射到内存中,绕过了内核缓冲区。显而易见,内存访问速度是远高于磁盘访问的,所以mmap方式优于I/O访问方式。不过,采用mmap()方式的前提是拥有带内存管理单元(MMU)的CPU,本课题采用的S3C2410是具有MMU的CPU。用mmap(内存映射)方式截取视频;mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以向访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。采用共享内存通信的一个明显的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。基于以上优点,所以在程序实现中采用了内存映射方式,即mmap()方式。

(1)实现摄像头设备文件到内存区的映射:调用buf=void*mmap(void*addr,size_t len,int prot,int flags,int fd,off_toffset)。以下是个函数各参数的注释:len:映射到调用进程地址空间的字节数,它从被映射文件开头offset个字开始算起;prot:指定共享内存的访问权限PROT_READ(可读),PROT-WRITE(可写),PROT_EXEC(可执行);flags:MAP_SHARED MAP_PRIVATE中必选一个,MAP_FIXED不推荐使用;addr:共享内存的起始地址,一般设0,表示由系统分配;mmap():返回值是系统实际分配的起始地址;

下面是该函数的程序实现:

int camera_mmap_init(camera_device*vd)

{

if(camera_mbuf(vd)<0)

return-1;

if((vd->map=mmap(0,vd->mbuf.size,PROT_READ|PROT_WRITE,

MAP_SHARED,vd->fd,0))<0)

{

perror(“camera_mmap_init:mmap”);

return-1;

}

return 0;

}

通过调用该函数,可以将设备文件的内容就映射到内存区,该映射内存区可读可写并且不同进程间可共享。该函数成功时返回映像内存区的指针,失败时返回值为-1。

(2)数据采集。调用ioctl(fd,VIDIOCMCAPTURE,&camera_buf截取图像,然后调用ioctl(fd,VIDIOCSYNC,&frame)函数,该函数成功返回则表示采集完毕。在此基础上同样可实现连续帧的采集,即一次采集连续多帧图像的数据,Video4Linux最多支持一次采集32帧,此时首先要设置camera_buf.frame为要采集的帧数,而每一帧的数据在内存中的起始位置为data+camera_mbuf.offsets[frame],其中camera_mbuf为video_buf结构体变量的一个声明,利用ioctl(fd,VDIOCGMBUF,&camera_mbuf便可获得camera--mbuf的信息。除此之外还要设置数据缓冲区的大小,然后利用ioctl VDIOCMCAPTURE操作进行数据的连续采集,直到缓冲区中的剩余空间无法保存一个完整的数据帧,此时缓冲区中没有剩余的空间供数据采集进程使用。以下是控制连续采集的循环语句:

for(frame=0;frame<vidbufframes;frame++)

{

mapbuf.frame=frame;

if(ioct1(cam,VIDIOCMCAITURE,&camer_mbuf<0){

perror(“VIDIOCMCAPTURE”);

exit(-1);

}

}

当缓冲区中没有可利用的空间时,系统调用ioctl VIDIOCSYNC操作来检查当前的视频采集过程是否完成,如果完成,应用程序就通过buf=bigbuf+vidbuf.offsets[frame]为数据帧分配地址,这样缓冲区中的数据帧就可被安全的保存下来供其他进程使用。

3 结语

Video for Linux作为Linux中关于视频设备的内核驱动,其为视频设备编程提供一系列接口函数,数据结构为用户编写视频设备驱动提供极大的便利,本文基于Video for Linux内核开发,编写USB摄像头驱动程序,实现了USB摄像头对视频信号的采集实现,并在移动目标自动跟踪系统中应用效果良好。

参考文献

[1]蔡婧璇,潘银松.基于嵌入式Video4Linux的USB视频信号采集[J].电子设计应用,2009,2:40-42.

[2]戴丽.基于Video4Linux的USB摄像头图像采集实现[D].合肥工业大学,2008.

[3]毛德操,胡希明.Linux内核情景分析(下)[M].杭州:浙江大学出版社,2001.

[4]李善平等.Linux与嵌入式系统[M].北京:清华大学出版社,2002:236-418.

[5]孙天泽,袁文菊,张海峰.嵌入式设计及Linux驱动开发指南[M].北京:电子工业出版社,2006,1.

[6]黄智伟,邓月明,王彦.ARM9嵌入式系统设计基础教程[M].北京:北京航空航天大学出版社,2008.

USB视频采集 篇2

【中文摘要】在当今的信息化社会,基于Internet等开放式网络的电子商务活动越来越频繁,个人电子身份认证是未来社会发展的必然趋势。网络信息化的发展使个人身份的信息安全成为现今社会的一个关键问题。身份识别是保护信息安全所面临的一个难题,与传统身份识别方法相比,生物特征识别因为具有防伪性好、便于携带、不易丢失和遗忘等优点而得到了越来越广泛的应用。在线签名识别是一种利用人的生物特征进行身份识别的技术,通过计算机把在线签名的图像、笔顺、速度和压力等信息与真实签名样本进行对比,以实时识别签名的真伪。本文研究的重点是基于四线电阻式触摸屏的在线签名数据采集系统的软硬件设计。采集系统的硬件设计主要包含了数据采集模块、显示模块、USB通信模块和控制模块四个组成部分。其工作原理是通过四线电阻式触摸屏以200Hz的采样频率采集签名者的笔迹信息,并实时传给MCU。MCU将数据进行简单处理后送给显示模块进行笔迹图像的复原,供签名者参考。在这之后将数据通过USB接口传给PC机进行显示和保存,在详细介绍了整体电路设计思想的基础上,还介绍了四线电阻式触摸屏和触摸屏控制器ADS7846的控制方式、液晶控制器SED1335的工作原理以及USB总线...【英文摘要】In modern information society, electronic business that based on the open network called Internet is

becoming more and more popular.Nowadays the development of network information makes the information security of individual status to become a key question.Identity verification is a problem which information security faces.The biometric identification has obtained more widespread application because it has some advantages compared with traditional identity verification, such as the security is good, easy...【关键词】数据采集 签名识别 USB通信

【英文关键词】Data acquisition Signature identification USB 【目录】基于USB接口技术实现在线签名的数据采集和通信摘要3-4ABSTRACT4-5

第一章 绪论8-16

1.1 生物特征识别技术概述8-10背景和意义88-10

1.1.1 生物特征识别技术的产生

1.1.2 主要的生物特征识别技术及优势比较

1.2.1 1.2 在线手写签名识别技术的概述10-13在线手写签名识别技术在国内外研究现状10-12题的研究意义12-1313-1613-1616-20

1.2.2 本课

1.3 课题的主要工作与论文组织

1.3.2 论文组织1.3.1 课题的主要工作13第二章 在线签名数据采集和通信系统的总体设计2.1 系统方案总体设计框架16-17

2.2.1 数据采集模块

2.2 系统硬2.2.2 显示模块件构成17-20

17-1818-2020-3820-212.2.3 USB通信模块182.2.4 控制模块第三章 在线签名的数据采集和通信系统的硬件设计3.1 数据采集模块20-29

3.1.1 触摸屏介绍

3.1.3 3.1.2 电阻式触摸屏的工作原理21-23触摸屏控制器ADS784623-2727-29293.2 显示模块29-33

3.1.4 ADS7846控制电路设计

3.2.1 SED1335的特点

3.2.3 SED1335的指令

3.3 USB3.2.2 SED1335的结构29-31集31-323.2.4 SED1335控制电路设计32-33

3.3.1 USB总线介绍34通信模块33-38优点34-35

3.3.2 USB总线

第四4.1 系统4.2.1 4.2.3 USB

3.3.3 USB接口芯片及控制设计35-38章 在线签名的数据采集与通信系统软件设计38-70软件设计组成部分采集子程序39-41通信子程序45-5151-70

4.2 固件程序开发38-514.2.2 显示子程序41-45

4.3 上位机主要驱动程序的开发和设计

4.3.2 即插即用管59-60

4.3.4 I/O控

第五章 4.3.1 人机界面设计51-58

4.3.3 电源管理模块理模块58-59制模块60-61结束语70-7271-72致谢

4.3.5 动态链接库的实现61-705.1 工作总结70-7172-74

参考文献

USB视频采集 篇3

该系统主要由心音信号采集电路、A/D转换、USB通信和上位机显示部分组成。实验结果表明该系统可以高效、实时地显示采集到的心音信号, 并且可以达到视听合一的目的, 得到的信号信噪比高, 利于后续的研究。

1 心音信号采集电路

利用自制的心音传感器采集到的信号为毫伏级信号, 经过前置放大电路进行初步放大, 对放大后的信号进行低通滤波, 然后经过中间级放大, 通过耳机输出, 因为此时的信号仅有几百毫伏, 为了便于后期处理, 需经过后级可调放大, 得到伏级信号可经过A/D等后期处理。

1.1 前置放大电路设计

由于心音信号十分微弱, 而前置放大电路又是微弱信号检测的第一级, 担负着将微弱信号放大的任务, 应该尽量减少测量过程中引入的观测噪声。而前置放大器则是引入噪声的主要部件之一, 所以要求前置放大器应该具有很好的低噪声性能[4]。又因为处理的是声音信号, 所以选取了具有超低失真低噪声的OPA2134运算放大器, 同时还具有高输入阻抗、高共模抑制比、低漂移等特点。前置放大电路如图2所示。

J2为传感器输入接口, 作为前置放大, 为了抑制噪声, 放大倍数不应该太大, 此电路的放大倍数为1+R2/R1。电容C1的作用是平滑滤波, 降低高频增益。

1.2 低通滤波器的设计

从前级放大电路得到的信号十分微弱, 并且掺杂着听诊头与衣服或者皮肤摩擦的噪音以及一些高频的机械噪声, 所以需要通过低通滤波器来滤除高频成分。

低通滤波器电路如图3所示。设计中采用二阶压控型低通有源滤波器, 相比一阶滤波器, 可以使输出电压在高频段以更快的速率下降, 以改善滤波效果。为了使电路稳定工作, 滤波器的增益应该小于3[5]。

电路增益, 截止频率, 其中R=R6=R7, C=C6=C7, fo≥800Hz。

1.3 中间级放大电路设计

图4为中间级放大电路, 由于需要驱动耳机输出, 采用了适合应用在高品质和专业音响设备、仪器、控制电路及电话通道中的放大器NE5532AP。考虑听觉的舒适度, 这一级的放大倍数也不能过大。为了得到更好的效果最好采用双电源供电, R8可以调节耳机音量。

1.4 后级放大电路设计

由于从中间级得到的信号只有几百毫伏, 不便于后期的处理, 所以在这里又加了一级放大, 可以得~-5 V到+5 V之间的信号, 便于A/D采样。

2 A/D转换

本系统采用STC12C5A60S2单片机作为主控芯片。该单片机自带8路10位高速A/D转换器, 速度可达250k Hz (25万次/s) 。STC12C5A60S2系列单片机ADC由多路选择开关、比较器、逐次比较寄存器、10 bit DAC、转换结果寄存器 (ADC_RES和ADC_RESL) 以及ADC_CONTR构成。

STC12C5A60S2系列单片机的ADC是逐次比较型ADC。逐次比较型ADC由一个比较器和D/A转换器构成, 通过逐次比较逻辑, 从最高位 (MSB) 开始, 顺序地对每一输入电压与内置D/A转换器输出进行比较。经过多次比较, 使转换所得的数字量逐次逼近输入模拟量对应值。逐次比较型A/D转换器具有速度高、功耗低等优点。

3 USB通信

本文采用南京沁恒公司的USB芯片CH372, 该芯片可以实现1 MB/s的传输速度, 全速USB设备接口, 兼容USB V2.0, 即插即用, 外围元器件只需要晶体和电容。提供一对主端点和一对辅助端点, 支持控制传输、批量传输、中断传输, 具有简便的内置固件模式和灵活的外部固件模式。内置固件模式屏蔽了相关的USB协议, 自动完成标准的USB枚举配置过程, 完全不需要本地端控制器作任何处理, 简化了单片机的固件编程。本文中采用STC12C5A60S2来控制CH372实现下位机与上位机的USB通信。

4 上位机软件的编写

上位机利用VS2010平台开发, 开发的界面要比Microsoft Visual C++6.0美观。主要采用MFC的位图双缓冲机制对采集到的数据进行图形绘制[6], 得到的图形是连续的, 而不是一屏一屏地刷新。双缓冲的原理可以形象地理解为:把电脑屏幕看作一块黑板。首先在内存环境中建立一个“虚拟”的黑板, 然后在这块黑板上绘制复杂的图形。图形全部绘制完毕时, 再一次性地把内存中绘制好的图形“拷贝”到另一块黑板 (屏幕) 上。采取这种方法可以提高绘图速度, 极大地改善绘图效果。

5 实验结果

该系统已经成功采集了多例心音样本, 采集时需保持现场安静, 轻压传感器。图5所示为一例正常心音, 从该图可清晰地分辨出心音的各种成分, 其中的有效成分得到了很好的保留。

实验结果表明, 该系统能够很好地显示采集到的心音波形, 利于医生对心音进行分析。该系统采用廉价的STC12C5A60S2 (市场价6元) 作为单片机, 利用其自带的AD大大降低了设备的成本。同时可以进一步完善该设备, 使之成为大众可用的便携式医疗器械。

摘要:设计了一款基于USB的心音信号采集系统。该系统包括心音采集电路、USB通信和上位机显示。通过心音传感器将采集到的数据进行放大去噪处理, 经由A/D转换通过USB将数据传送到上位机, 并以波形的形式实时显示采集到的数据。该系统可以准确、实时地显示并听到采集到的心音信号。

关键词:USB,A/D转换,心音信号

参考文献

[1]陈天华.基于现代信号处理技术的心音与心电信号分析方法[M].北京:机械工业出版社, 2012.

[2]韦哲, 李战明, 程自峰.基于声卡的心音信号采集与处理系统的实验研究[J].中国医疗设备, 2008, 23 (10) :7-10.

[3]王晓燕, 曾庆宁, 粟秀尹.基于FPGA的心音信号采集[J].微型机与应用, 2012, 31 (11) :28-30.

[4]刘俊, 张斌珍.微弱信号检测技术[M].北京:电子工业出版社, 2005.

[5]高吉祥.模拟电子技术[M].北京:电子工业出版社, 2008.

USB视频采集 篇4

温度是工、农业生产的主要环境因素,它对工农业的生产有着重要的影响,所以对其进行准确快速的测量并进行处理是具有很特殊的重要意义[1]。对温度进行采集,并送到PC机实时处理,以前往往采用的是计算机的串行接口,但这一老式计算机接口存在着不少缺陷。比如接口规格不统一、非共享式接口、占用资源大等等这样那样的缺点[2]。USB接口是一种计算机应用领域的新型接口基于USB接口的温度采集系统就是通过温度传感器对现场温度进行测量,并利用微型处理器(单片机),通过USB接口实时的传给计算机,计算机利用软件根据已经设计好的要求对其进行报警等相应的处理,该采集系统能够对温度进行实时大范围的精确处理。

2 系统总体设计

2.1 系统整体方框图

根据前面的分析,知道系统要实现以上功能,必须由以下几部分组成:温度采集单元、下位机温度初步处理单元、USB设备接口、上位机应用程序。

系统的结构原理图如图1:

温度传感器单元对生产温度环境进行测量,将测量温度传给下位机(单片机),单片机对采集到的温度进行初步处理后,将处理了的数据通过USB接口上传给上位机,而上位机将实时的显示采集到的温度[3],如果要对现场环境进行处理,则上位机可以发送命令,经过USB接口传送到下位机,下位机根据接受到的数据并对其进行分析,进而做出处理,如报警等各种操作。

2.2 系统的特性

由于该系统利用USB接口,所以具有USB的实时传送数据,与上位机进行信息交流,而上位机又可以连接在互联网上,所以远程的PC机也可以利用互联网对温度检测系统进行查看等各种操作。该系统利用先进的温度传感器,可以对温度快速的进行反应,把温度数据传到下位机进行初步处理数据,进而与上位机通信。总的来说,该系统有以下几点特点:

1)工作人员可以远离生产环境通过计算机对其进行查看处理;

2) 多点温度测量;

3) 全天候检测温度,并可以在没有工作人员的参与下对生产环境进行简单处理;

4) 对生产环境的温度进行设计极限温度,一旦超过极限温度,系统将对其进行报警,并停止生产环境的工作;

5) 测量温度误差比较精确,在0.5℃内。

2.3 系统的功能

该系统主要有以下功能:

1) 对温度进行检测。利用该系统可以远离恶劣生产环境的情况下,对其进行温度测量;

2) 对现场温度进行实时采集;并在PC机上显示出来;

3) 在PC机上实时做出温度图像;工作人员在电脑上便可以直观的得到系统温度图像;

4) 简单的系统控制;通过计算机上的应用软件可以对温度设置,一旦超过极限温度,发出报警,进而通知工作人员快速的对生产现场进行各种相应操作,这样可以防止温度超出极限温度;

5) 在上位机端的应用软件上提供系统使用帮助。用户可以利用该功能帮助对系统进行操作。

3 系统软件设计

系统要对温度进行采集,首先必须利用上位机对下位机(单片机)发出命令,单片机根据接收到的命令,根据预先的规则对不同的命令做出不同的处理。然后把处理结果发回上位机,上位机接收到温度数据后,根据温度数据画出数据采集图像。这就是系统要实现功能,根据这一要求,设计出系统的软件。

系统整体模块流程图如图2:

下面分别设计下位机和上位机的程序流程图。

3.1 下位机的软件设计

单片机端的应用程序主要实现的功能就是对DS18B20进行采集温度,把采集到的温度通过USB接口芯片上传到计算机端的应用程序。下位机的程序设计流程图3:

下位机的程序流程图中包括单片机和DS18B20和单片机的通信流程图,以及单片机和USB设备接口芯片的通信流程图[4]。

其中DS18B20和单片机的通信流程图如下图4:

这里是单片机如何根据DS18B20的特性来控制它,进行温度转换,并读取温度。把温度数据保存在单片机端。

单片机先初始化DS18B20温度传感器,对其复位,然后按DS18B20的时序来读写命令,DS18B20根据命令进行操作,单片机和DS18B20的通信过程主要为:单片机对DS18B20复位,跳过读写系列号操作(送0x CC命令到DS18B20),启动温度转换,再次复位,送读温度命令0x BE,读出温度。这就是单片机和DS18B20的通信过程,将得到的温度单片机在进行处理,把温度数据传到上位机。上位机实时显示温度值。为了便于说明DS18B20和单片机间的通信过程[5],下面给出读出DS18B20温度的程序:

上传数据是通过查询DS18B2是否转换完,转换完,则上传,否则等待;上位机的应用软件向下位机发送数据,CH372的端点接受器接受来着来自计算机的数据,通过中断来通知单片机,单片机开始接受收据,并进行处理。

3.2 上位机软件设计

上位机接受来自下位机的数据,根据数据进行操作,实现各种功能。

下面给出上位机的程序流程图5。

4 系统调试

4.1 硬件调试

在整个系统的调试过程中要注意以下几点[6,7]:

1) 单片机P0口必须加上拉电阻,以防芯片CH372被烧坏,因为其电流最大值为500u A。

2) 在CH372的滤波电容0.1u F中,并联一个5K-10K的电阻。使得系统在断电时,把电容中的电能及时的释放掉,确保电路下使用通电时CH372能够可上电复位。这也是该系统的一个改进和创新。

3) 芯片CH372和单片机不能使用同一个晶振,以防在发生问题时,不知道是芯片CH372还是单片机出现问题。

4) 为使得DS18B20在工作中稳定,必须在其P11口接4.7k的电阻。

4.2 软件调试

4.2.1 下位机软件调试

下位机的软件调试主要分两部分:单片机和CH372Z时间的通信、单片机与温度传感器DS18B20的通信。

1) 单片机和CH372之间的通信

硬件部分利用具有上拉电阻的口作为的、、线,所以通过软件控制口信号来达到控制的读写命令和读写数据。只要注意CH372的读写时间要求就可以很快实现。单片机的P2口是作为CH372的数据口,利用它来发送和接受CH372的数据。

这里特别强调的一点是的初始化程序,如果初始化不成功,电脑无法识别硬件,后期将无法进行。所以初始化程序必须注意的一点。下面给出CH372的初始化程序。

初始化成功后,下位机连接到机上,安装了驱动程序的机就可以识别硬件。完成这部分工作之后先进入上为机和下位机联合的调试,然后再调试DS18B20和DS18B20之间的通信[9]。

2) 单片机和DS18B20之间的通信

单片机要根据DS18B20的时序要求和读写要求来读取温度数据。由于DS18B20是一线式数字温度传感器,对时序要求比较高,延时程序误差大,则不能读出数据。必须强调访问DS18B20的顺序如下:①初始化;②ROM命令;③DS18B20的函数命令。

总之,这部分编程主要注意的就是延时程序的准确性。并按照DS18B20的操作顺序便可以把温度数字传到单片机。

4.2.2 上位机的软件调试

主要有两个模块组成:通信模块和图像处理模块。其中通信模块负责处理上位机和下位机之间的通信,图像处理模块负责温度采集图像。主要流程如下:

1) 用C++Builder提供的implib.exe工具重新生成该动态库(xxx.dll)的导入库(xxx.lib)。命令如下:

implib ch372.lib ch372.dll。

ch372.dll为已有动态库,ch372.lib为要生成的导入库。由此生成的导入库ch372.lib格式与C++Builder开发平台是相容的;

2) 在动态库的头文件ch372.h中,对其输出函数重新说明,语句如下:

3) 然后采用隐式链接法,将重新生成的导入库(ch372.lib)和重新说明的头文件(ch372.h)加入到C++Builder应用程序的工程项目中,进行编译和连接。

4) 图像处理模块,应用软件根据接受到的温度,利用C++ builder在窗体上画出动态连接图,主要采用窗体Canvas属性来实现。

4.2.3 上位机和下位机联机调试

下位机(单片机)对CH372初始化成功之后,上位机就能够识别下位机设备(USB设备),上位机调试部分也初步完成,那就进入系统整体调试。

1) 测试单片机和PC机能否正常通信

在下位机的程序部分设计一个往上位机发送的字符数组,在PC机上进行操作,看是否能成功接受数组,如果能,则说明单片机可以往上位机发生数据,不行则修改上位机和下位机相关部分的程序。接下来PC往下位机发送数据,如果下位机能够成功返回相同的数据到PC机上,则说明上为机和下位之间的通信已经成功。

2) 测试单片机能否对DS18B20正常的读取温度

DS18B20的对时序要求很高,一定要准确,并且按DS18B20的顺序来进行操作,在硬件电路原理没有错的情况下,如果温度读起不正确,或者无法读取温度,只能是出现两种错误,一是时序问题,没有按照DS18B20的时序精度来对其进行操作,二是单片机访问DS18B20的顺序问题,单片机没有严格按照访问DS18B20的顺序对起发送命令,单片机访问DS18B20的顺序这里再次声明:初始化、ROM命令、DS18B20的函数命令。

这一部分出现的两个问题,大部分情况下出现的是时序问题,所以特别注意单片机对于DS18B20的精确延时。

3) 采集温度[10]

各部分通信正常后,便可以采集数据并处理。因为系统采集过程是上位机每发送一条采集命令,下位机就上传一次温度数据,所以这一步主要调试的是上位机要间隔多长时间定时向下位机发送采集命令,使系统能快速采集温度并上传,并防止发生读写等冲突。

5 效果图

从图像中可以看到,当前设定的报警温度是34.3,但采集的温度为35.9375,可以看到红色的圆点发光,这即是报警,说明当前的温度高于之前设定的温度极限值。

6 系统性能指标

系统性能指标主要是:

1) 测量温度误差小于或者等于0.5℃;

2) 温度显示分辨率为0.0625℃;

3) 测量温度范围在0℃~70℃;

4) 具有控制报警功能。

7 结论

此基于USB接口的温度采集系统用于实际生活中后,经长期测试后,检测温度实时高效稳定。

摘要:针对目前在工业、农业环境中需要快速对温度进行监控、采集的情况,设计了一种基于USB接口的温度控制器,采用单片机为核心、CH372和一线式数字温度传感器为配件的USB温度采集系统。该系统可以实时显示温度采集图像,并对超过其内部设定的极限温度进行报警。

嵌入式USB便携数据采集卡研究 篇5

CY7C68013属于EZ-USB FX2系列, 架构图如图1所示:

FX2集所有USB外围要求的特点于一身, 为外围提供D+、D-两条USB连接线, SIE (串行接口引擎) 对串行数据编、解码, 并进行错误校验、位填充和其他USB传输的信号级任务。最终将串行数据变为并行数据与USB Interface间通讯。SIE操作在全速和高速模式, 为了增加USB2.0的带宽, 端点FIFO和从FIFO是一致的, 这样可以节省内部数据传输时间。CPU是增强的8051内核, 使用内部RAM来存储程序和数据。CPU在USB通讯中的角色是双重的, 第一, 通过控制端点服务主机请求, 实施高速USB协议。第二, 可以使用普通的8051功能。对USB通讯来说, 51内核的功能只是简单的配置接口, 监控传输, 本身并不会参与到传输中。

2 采集卡硬件电路设计

2.1 AD转换部分硬件设计

该设计中使用了AD7492作为主采样器件, 这是一款12位高速, 低功耗, 持续逼近型ADC, 操作电压2.7V-5.25V, 设计中使用了SV单电源供电, 采样频率高达1MSPS, 内部有低噪音、宽带宽的跟踪保持放大电路, 可以处理的带宽达到10MHz。

AD7492很容易与微处理器或DSP接口。输入信号从CONVST的下降沿开始被采样, 转换也从此点启动。忙 (BUSY) 信号线在转换起始时为高电平, 880ns后跳变为低电平以表示转换结束。没有与此过程相关的管线延时。转换结果是借助标准CS和RD信号从一个高速并行接口存取的。AD7492采用先进的技术来获得高数据通过率下的低功耗。在5V电压下, 速度为1MSPS时, 平均电流仅为1.72ma;它还可对可变电压/数据通过率进行管理。在5V供电电压和500kSPS数据通过率下的消耗电流为1.24mA。

这款芯片可以操作在全休眠模式或者部分休眠模式, 在转化结束后, 芯片自动进入休眠模式以减小高速时的功耗, 休眠模式可以通过pS/FS引脚选择, 其电路图如图2所示。

2.2 CPU与EEPROM的接口电路

CY7C68013芯片本身不带ROM, 所以扩展一片64Kbit的I2C串行E2PROM存储程序代码。该芯片为低功耗应用而开发, 可以充分利用FX2的I2C接口而不用占用其它I/O接口, 电路图如图4所示。

2.3 CPU与键盘、显示的接口电路

由于56引脚的68013只有PA, PB, PD三组IO, 对于12位的AD, 使用了PB, PD的第二功能, 配置为FD (Fifo Data) 。这样就只剩下PA口8个引脚可用, 不足以完成键盘、显示、测试预留等功能。所以采用了PCF8574 I2C转I0口的方式进行扩展。这样也可以留出足够的IO口用于扩展和测试。 I2C总线是PHILIPS公司推出的芯片间串行数据传输总线, 两根线 ( (SDA, SCL) 即可实现完善的全双工同步数据传送。能够十分方便地构成多机系统和外围器件扩展系统。I2C器件是把I2C的协议植入器件的I/0接口, 使用时器件直接挂到I2C总线上, 这一特点给用户在设计应用系统带来了极大的便利。I2C器件无须片选信号, 是否选中是由主器件发出的I2C从地址决定的。而I2C器件的从地址是由I2C总线委员会实行统一发配。PCF8574A的从地址是0x70a, 本设计中用到的显示模块是FDC-645模块, 是由六位数字显示的串行LCD。模块中常用的引脚有WR, CS和DAT, 占据了CPU的PA^3, PA^4, PA^5。

3 采集卡固件程序设计

关于USB的中断部分可以通过固件架构来负责处理。它针对USB事件的用户程序代码的声明提供了多个相对应的副函数钩子, 而固件架构之所以会这样设计与规划, 这是由于当Windows出现“发现新硬件”的窗口精灵时, 在等待用户按下“OK”信息按钮的这段时间, Windows就会忽略重新设备列举事件。

固件架构包含了很多的副函数钩子, 这些钩子就是应用程序之间的桥梁, 用于应用程序间互相交换数据等。所有的副函数钩子可以分为三类, 即工作分配器、标准设备请求剖析器、USB中断服务例程等。

工作分配器主要包括以下几个函数, void TD_Init (void) 在初始化 (包括设备重新列举前和后) 时被调用, 可在此设置全局变量的初始值。Void TD_Poll (void) 在设备操作过程中重复调用, 要执行的工作要在该函数中完成。

固件的while (1) 循环中调用了该函数。BOOL T'D_Suspend (void) 在设备固件进入中止模式前加以调用。void TDee Resume (void) 在外部有Resume事件时才会调用, 执行此函数后, 设备进入全功率模式。

设备请求剖析器主要包括取得描述符、设置接口、取得接口、取得配置等等的若干个函数。他们在固件架构解出程序代码后, 如果要实现上述功能, 便调用这些剖析器函数。如果在这些函数里面返回“TRUE”, 则实现该命令, 否则就忽略该请求不做任何事情。以取得设备描述符函数为例:

返回TRUE, 当设备有该请求时, 固件架构将实现该请求。其它与此类似。固件的中断服务例程中包括了对USB中断的服务处理。如端点的数据输入输出中断, USB中止中断, USB设置封包 (setup token) 中断等等。

4 结论

本文综合了USB技术与嵌入式技术的优点, 完成了数据采集卡硬件和软件部分的设计, 并从理论的角度分析了采样的速度。对于硬件的设计, 因为涉及到高频信号, 抗干扰性的设计尤其重要。建立在良好的硬件的基础上, 软件的设计相对较为简单。本文中主要从USB设备的特点和结构, 并进一步介绍了Linux下USB设备驱动程序的编写和使用等内容。不同的USB设备需要不同的驱动程序, 这些需要根据设备的功能以及用户对设备的要求来编写。由于设备文件系统的使用, 对于设备可以像操作文件一样使用, 不用记忆每个驱动中不同的入口函数等内容, 利于设备使用方法的统一。

参考文献

[1]刘曼平.DSP与PC机的无线交换调制模块设计[J].微计算机信息.2008, (20) .

[2]周立功.ARM嵌入式系统软件开发实例[M].北京:北京航空航天大学出版社, 2005.

[3]张斌, 高波.Linux网络编程[M].北京:清华大学出版社, 2000.

[4]张弘.USB接口设计[M].西安:西安电子科技大学出版社, 2002.

[5]王琳, 商周, 王学伟, 等.数据采集系统的发展与应用[J].电测与仪表, 2004, (08) .

USB视频采集 篇6

大脑是人类产生行为的中枢,而脑电波形图可以反映出人们的一些生理状态。随着微电子技术、计算机技术的不断发展,许多生物医学仪器也相继问世。数据可视化与信息图形、信息可视化、科学可视化以及统计图形等关系密切。

EEG(electroencephalograph)是通过在脑的各相应区域(头皮、硬膜下等)安放电极,描记大脑神经细胞活动所产生的生物电活动,是反映大脑功能状态的电生理技术。1929年德国神经精神病学家Hans Berger首先在人类完整的头皮上安放电极,描记人类大脑的自发电活动。此后,他的研究成果不断得到电生理及神经生理学家的证实,使EEG学得到发展。随着电子科技的发展,如今脑机接口技术成为主流,NeuroSky(神念科技)将脑机接口技术带出实验室。脑电技术目前主要应用于心理学研究领域,而计算机科学领域主要进行脑机接口技术研发。不同厂商的脑电设备往往需要不同的驱动程序和操作软件才能完成数据采集和分析,例如NeuroSky的多种脑电采集设备都有自己的配套软件,且互不兼容。本文试图采用计算领域的可视化技术,实现针对一般脑电设备的数据采集可视化系统,并在此基础上实现对用户压力状态的分析和判断,以对大学生心理减压提供帮助。

1 研究动机与技术基础

通过一次性电极采集不同人群的脑电波,录入分析设备将脑电波展示在电脑上。脑波仪的优点在于不需要固定头或身体,使用的感应器比较小,时间分析度高,容易使用,可控性强。人的脑电图有4种波:δ波(DELTA/δwave)、θ波(THETA/θwave)、α波(ALPHA/αwave)、β波(BETA/βwave),每一种脑电波都有其相对应的大脑意识状态,也可以说在不同意识状态下需要不同的脑电波才能完成好大脑工作。如果大脑在某个具体情况下不能出现相应的脑波就有麻烦了。例如,如果在想睡眠时大脑不出现δ波和θ波,这就是失眠症(INSOMNIA)。在适当的时候出现适当的脑波的人就是人们所说的天才。

通过脑波的波动变化可以分析出一个人的精神状态变化过程。将脑电波采集分析以后,根据不同的结论给予不同的治疗放松方法,例如:(1)容易紧张,采取深呼吸;(2)睡眠不足,播放低声耳语录音;(3)情绪低落,播放舒缓音乐。本文的研究内容主要解决从原始数据到统计结果,从统计结果到分析结论转变为从原始数据到分析结果,其研究内容包括以下几个部分:(1)数据采集:对原始数据的不同粒度采集;(2)数据分析:对采集到的数据通过某种算法筛选出所需数据,或转变为某种数据模型;(3)数据显示:对所需数据或数据模型进行优化显示。

软件系统开发过程:(1)模型分析:确认数据采集的粒度和数据类型,分析出适当的显示模型;(2)概要设计:分析业务逻辑,研究各部分之间的关系,将各部分模块化;(3)详细设计:对模块化部分进行详细设计;(4)进度安排:预估模块化的大致工作量,安排进度;(5)编码:确定开发环境,实现功能;(6)单元测试:对每个模块进行测试,确保模块功能正常;(7)集成测试:将各模块组合起来,确认功能是否正常,测试是否实现了所有功能。

系统开发采用JavaFx平台,综合使用FXML、LibusbJavaX等开发工具。JavaFx平台在Java技术上构建,非常容易创建和部署。在JavaFx API基础上,可以开发用户的JavaFx代码,它包括JavaFx的高性能图形引擎———Prism、低系统资源占用且高效的窗口系统Glass,以及一个媒体引擎和一个Web引擎。

FXML是JavaFx 2.0提供的一种新技术。FXML是一种在JavaFx应用程序中定义用户界面且基于XML的声明性标记语言,非常适合用来静态布局,如表单、控件和表格。使用FXML技术还可以通过脚本动态构建布局。作为用Java代码创建事件处理以外的替代方案,可以使用任何兼容JSR223脚本引擎的脚本语言来创建处理程序,例如JavaScript、Groovy、Jython和Clojure。

通常情怳下,使用Java语言要访问一个USB设备,需要写C/C++代码实现一个中间件,然后用Java访问这些中间件才能控制USB设备,但是开源组件Libusb做好了访问USB设备的封装(包括Windows、Mac OS、Linux等平台)。用Java访问USB设备时,通过访问Libusb组件提供的接口即可。

2 脑电数据采集及可视化系统开发

2.1 需求分析

系统非功能需求主要体现在以下几个方面:(1)性能需求:本系统要求在2G内存电脑和低配显卡上不卡;(2)可靠性和可用性需求:本系统要保证原始数据不丢失,且尽可能还原原始数据并显示;(3)出错处理需求:本系统对未接入USB外设、硬盘的用户操作均作异常处理;(4)接口需求:需要有USB接口;(5)约束:需要有可发送数据的USB外设接入,需要硬盘有空闲可写入空间;(6)界面需求:窗口大小可移动,可在不同平台上扩展,支持可选设备以及可选图表,如图1所示。

原始数据获取模块负责从USB端口获取序列化数据;数据分析中间件负责将原始数据转变为可识别的数据类型并自动化分析整理数据;显示生成数据模块将分析中间件生成的数据发送到事件总线上,并让数据传递组件传递数据;事件总线负责各个组件之间的消息与数据传递;数据显示负责显示事件总线上传递的数据;数据读取模块包括数据记录以及数据恢复,其中数据记录是和数据显示一样获取事件总线上的数据,数据恢复则是从硬盘上获取历史数据并发送到事件总线上。

2.2 系统设计

2.2.1 系统业务流程

业务流程图是软件行业比较规范且被广泛使用的分析工具,可较直观和准确描述系统业务流程。系统业务流程图和基本算法流程见图2。

2.2.2 系统MVC设计

JavaFx的MVC架构将视图放在FXML和CSS文件中,将控制放在Control类中,将数据模型放在JavaBean中。FXML中的组件可通过fx:id=”xxx”的形式标记为外部引用,Control控制类可通过@FXML的方式获得引用进行控制,JavaBean中的数据主要通过接口或监听进行传递。本系统设计如下(包):Model:date包;View:ui包;Control:event包、log包、util包。

2.2.3 功能模块设计

系统分为显示子系统和后台子系统两个部分。显示部分又分为如下几个模块:(1)显示数据图子模块:显示原始数据,便于对比不同数据,或者单独研究某种数据波动;(2)雨点图子模块:融合原始数据之间的关系与时间关系,将时间概念融入到二维坐标,使得二维坐标可以显示复数数据;(3)饼状图子模块:显示总计的数据比例,可以通过比例的变化分析当前的数据状态。

后台模块有:(1)数据记录子模块:用于记录界面信息或后台数据信息;(2)数据恢复子模块:用于恢复后台数据信息并用显示模块显示;(3)设备获取子模块:获取外设信息以及外设数据切换;(4)设备数据转换中间件:可以根据不同情况或不同设备定制特殊中间件,此处提供中间件接口,可在中间件中获取序列化USB数据,可以定义如何转换数据、分析数据、何时生成数据等操作;(5)数据发送子模块:此模块负责通过事件总线直接与显示模块打交道。系统层次结构如图4所示。

2.2.4 数据格式设计

(1)界面数据:包括窗口大小、窗口位置、窗口状态等,界面数据存储于注册表中,位置为“HKEY_LOCAL_MA-CHINE/Software/JavaSoft/prefs”,写入注册表的好处是比存储文件或数据库读写方便。此外,为了方便对注册表的操作,会有一个注册表管理控制类负责提供读写位置。

(2)后台数据:后台数据指用于显示的原始后台数据,目的在于恢复数据,此处设计为写入文件中。此设计目的:(1)比数据库轻量化;(2)数据生成一个片段化形式,数据总是一片一片的,只要指定起点终点就行,不需要查询,不采用数据库形式;(3)数据量大时存入注册表会显得很冗余,对注册表读写压力会很大,故不考虑注册表形式。后台数据设计的形式为“Long类型的时间+原始数据”,其存储形式如表1所示。

2.2.5 消息传递设计

实时数据可视化是本系统的主要功能,在数据传递、处理、显示等操作中存在很多异步操作,为了解决异步操作,本文采用了事件总线方式。

如图5所示,系统设计了如下几种事件:(1)注册设备事件:在设备初始化阶段,通过注册设备事件将设备显示在界面上;(2)设备变更事件:界面变更设备时,通过设备变更事件改变后台获取数据;(3)中间件事件:中间件事件主要指将分析后的数据发送给控制组件,由控制组件发送给显示组件,通过这种中间代理的方式实现新数据与恢复数据兼容;(4)刷新事件:通过获取控制组件的新数据刷新当前页面;(5)窗口关闭事件:因为本项目设计了很多异步操作,同时也涉及了复数线程,比如说界面线程、生成数据线程等,所以通过一个窗口关闭事件即关闭所有的线程。这些事件通过事件总线实现数据的共享、交互以及同步异步操作。

2.3 系统实现

系统开发环境:Windows 7,开发版本JDK:Java(TM)SE Runtime Environment(build 1.8.0_20-b26)Java HotSpot(TM)64-Bit Server VM(build 25.20-b23,mixed mode),显卡:GT550T内存:4G,硬盘空闲容量:10G。

开发的重点与难点:(1)数据获取:通过USB接口获取数据需要调用第三方接口LibusbJavaX;(2)数据类型:为了方便USB设备扩展,数据转换以及数据分析均采用中间件方式;(3)数据显示:数据通过JavaFx组件显示,API开发不是很完善。此外,虽然是客户端,但因为JavaFx拥有良好的MCV架构,所以可以实现嵌套FXML和CSS两种方法;(4)数据存储:包括对注册表的操作以及对文件的直接读写;(5)数据交互:各个模块间的交互一定是异步的,所以采用事件总线的方式注册监听和触发事件。

原始数据见图6,此图的设计角度是为了对比两种数据或者直观观察单一数据的波动情况,设计思路类似于心电图形式,右下角显示了数据生成的起始时间和当前时间,横坐标是横向滚动的,后台设计的缓存数据为50条记录,超过50条会默认删除最早的数据(此图中横坐标是时间,所以删除的数据位于最左面)。

最新数据分布图(雨点图)见图7。雨点图的设计思路是:通过二维坐标显示两种数据之间的关系,难点在于在二维坐标上显示3种数据:开始设计为每个点上加一个标签,但是当点密集度很高时效果很差,之后设计为用2D显示3D坐标,但这种方法如果不用切片式(山峰切片)会在显示上有歧义,最终以颜色来标明时间特性,如果还有第4种特性,预留的方案是设计成图形变换(例如□或◇),实现方案是通过SVGPath画一个任意形状的封闭图形即可。

饼状频率分布图(见图8)可以直观看到当前用户各个频段脑电的持续状态,如果用户的14Hz以上的高频脑波所占的比例过大,表示用户持续处于压力较大的紧张状态。反之若α占较大比例,则表明用户精神状态较好,注意力集中。

前端的多样化显示基于后台的复杂处理。本系统在后台事件总线的支持下,通过两重缓存实现了实时动态数据读写和显示。后台数据的生命周期如图9所示。

显示模块缓存由一个HashMap构成,其Key值是时间,时间通过ArrayList存储,已经添加显示的数据会删除Key值,而HashMap的重置则在切换其它图表后。设置二重缓存模式,即显示模块缓存和显示组件缓存,是为了解决数据获取与显示中的时间差问题。采用二级缓存显示的动画过程较为自然,没有断续现象,同时二重缓存的数据也更便于管理。

3 实验数据分析

自发脑电信号在不同的意识状态下活动状态各异。按照所在频段的不同分类,一般采用希腊字母(α,β,γ,δ,θ)来表示不同的自发EEG信号节律。

表2给出了一般情况下脑电信号特征及对应的频带。根据已有的心理学研究成果对不同的波段及频率对用户的压力状态进行了分类,如表3所示。

从表3可以看出,当被测用户β波占主导时,用户处于较为紧张的状态,压力大,需要进行减压干预,建议通过舒缓的音乐或者通过能吸引用户的有趣事物转移其注意力;当被测用户α脑波占主导时,用户身心能量耗费最少,相对脑部所获得的能量较高,运作会更加快速、顺畅,灵感及直觉敏锐,脑的活动十分活跃,建议通过一些训练,如听一些古典音乐、读一些轻松的文字让自己处在α波;当被测用户θ脑波占主导时,θ波与脑部边缘系统有很直接的关系,对于触发深层记忆、强化长期记忆(LTP)等帮助极大。但是未经过训练者一旦脑电波降到这么低的频率,会很快进入睡眠状态,对于失眠或者睡不着的用户建议:可以看书、沐浴、数羊、穿戴一些助睡眠设备让脑波进入到θ波;当被测用户δ脑波占主导时,用户在睡眠过程中出现大脑慢活动状态,此时人脑波频率一般在1Hz~3Hz之间,该频率只有在深度睡眠时才会出现。用户要进入此状态,建议在睡前听些催眠曲,让自己进入深度睡眠状态[1]。

本文给出了一种在当前系统辅助下采用基于生物反馈技术辅助用户减压的方法。生物反馈疗法(Biofeedback therapy)是一种利用生理科学仪器,通过人体内生理或病理信息的自身反馈,使患者经过特殊训练后,进行有意识的“意念”控制和心理训练,从而消除病理过程、恢复身心健康的新型心理治疗方法[5]。USB脑电数据可视化系统能将用户脑电数据以波形或图谱的形式显示出来[6],用户可以实时观察自己的脑电波形,依据系统数据判断自身压力状态,进而选择对应的减压方案[3]。当减压方案有效时,系统会给用户以正反馈,即用户会看到自己的脑电波型趋于平缓。生物反馈减压流程如图10所示。

基于生物反馈技术的系统辅助减压步骤:(1)采集用户脑电数据可视化显示为波型或其它形态;(2)用户通过观察脑电波型判断自身压力状态;(3)用户采取预设减压方案,同时观察脑电变化,若脑电趋于压力减缓状态(获得正反馈),则证明减压方案对该用户有效,继续实施,直至压力状态明显减轻或消失。对于有效方案可以反复实施以巩固效果;(4)若脑电波型显示压力状态未得到减缓,则表示当前减压方案对该用户无效,此时应采用其它备选减压方案,直至获得正反馈,得到有效的减压方案。

4 结语

本文介绍了一种基于USB的通用脑电采集及压力状态分析系统。该系统借助当前流行的JavaFX技术实现了对一般脑电设备的数据采集和多形态可视化。基于系统采集的脑电数据,对用户的压力状态进行了初步分类和分析,并在可视化系统帮助下,利用生物反馈技术实现了用户主动缓解自身压力。

参考文献

[1]陈芳容.大学生学业压力源与睡眠质量的特点及其关系[D].福州:福建师范大学,2010.

[2]仇道滨.英国高校心理咨询职业化发展及其启示[J].山东社会科学,2009(9):155-159.

[3]丁宝玺.脑电图数据相关性分析的研究[D].大连:大连交通大学,2007.

[4]陈曾,刘光远.脑电信号在情感识别中的应用[J].计算机工程,2010(9):2631-2637.

[5]李米.生物反馈训练效率及模式的实验研究[D].西安:第四军医大学,2008.

基于USB2.0的数据采集卡 篇7

高速和高精度的数据采集系统成为了现在数据采集的主流,也是今后发展的一种趋势。要突破速度和精度的瓶颈,主要是在A/D转换、主控CPU、以及CPU与主计算机的接口上提高工作性能。相对于处理速度和精度受限的传统MCU,当前主流的DSP、FPGA、ARM等控制核心由于其突出的性能已经成为了科技、工程的主导。在与主机接口方面,ISA、PCI和VXI都是基于PC机的插槽的,这不仅受到主机插槽个数的限制而且还会受到PC机箱内高频信号的干扰,从而影响精度和稳定性。而通用串行总线(Universal Serial Bus,简称USB)的出现则很好的解决了以上的冲突,它使高传输速度、易扩展性、方便的即插即用有机的结合在了一起,使得计算机外围设备的连接更具单一化。这些特点使得U S B将成为接口总线主导。在A/D采样方面,要充分考虑到被采样对象的性能特点,以更好地平衡速度与精度的关系,这是考虑问题的关键点[1]。

2 设计概述

在本设计当中,由于首先要满足采集的速度和实时性要求,其次还要尽量考虑系统的可扩展性,所以在系统中选用目前在高速数字技术领域得到广泛应用的现场可编程门阵列FPGA(Field Programmable Gate Array)作为整个系统的控制中心。用USB作为与上位主机的通信接口,并利用外部FIFO存储器来做存储数据与读取数据之间的缓冲区[2]。

前端的A/D采集选用的是AD9042芯片,它是采样频率可控的高速A/D器件,最高的采样频率为41 MHz。FPGA完成对A/D的启停、采样频率等所有的控制,并根据USB控制器的通信信息完成相应的采样频率调整。A/D转换的结果也由FPGA建立通道将数据存入外部FIFO中缓存。后端的处理就交由USB控制器来完成。当FIFO半满标志有效的时候,USB控制器便从FIFO中读入数据直到空标志有效。这样,数据便被存入USB控制器自身的端点FIFO中,而后通过USB事物将数据传送给主机。整个的数据流过程对外部FIFO提出了很高的要求,它不但要有很高的操作频率而且要能够无缝的与USB控制器实现GPIF连接。不仅如此,由于会出现两个控制器同时对FIFO读写的情况,所以外部FIFO要支持全异步读写操作。而我们选用的CY7C4255(8K x18)完全满足上述几点要求,它的操作频率可以达到100MHz。如图1整个采集系统的功能框图

3 A/D采集的控制与存储

3.1 采样部分

AD9042的所有控制都是由FPGA来完成的,采样获得的数据也由FPGA来建立数据通道保存在外部FIFO中。而FPGA对AD9042采样频率的控制的具体参数是通过与USB控制器通信来获得的,而USB控制器的参数则是从主机获得。在这样的控制流下,FPGA与A/D之间的接口电路示意图如下图2.

FPGA的输入时钟为48MHz,通过verilog HDL语言对FPGA的配置,可以使得的FPGA输出各种基于48 MHz的频率来控制采样,这里我们不需要用PLL来倍频,只需要用基频来分频就可以满足要求了。整个采样控制和数据通道时序都用HDL语言将FPGA配置好,这样FPGA就能够可靠的控制采样和将采样数据送入外部FIFO中。由于篇幅有限,控制A/D采样和数据流传送的HDL代码就不详细列出了。

3.2 存储部分

A/D采样得到的数据流需要快速的写入到外部FIFO中,这就要求FPGA实现写FIFO的各种逻辑并结合采集部分的时序逻辑将数据写入FIFO中。这部分的电路示意图如下图3.

FPGA与FIFO之间的控制连接其实只有WEN和WCLK两跟线。WEN控制写使能,而WCLK控制写入的频率,这个频率应该和采样频率一致,这样才能保证采样数据无损失的被缓存入FIFO中。FIFO的满状态也要和FPGA连接在一起,它表明FIFO已经存满数据,不可以再写入。状态信息也要在配置PFGA的时候充分考虑进去,这样才能保证整个系统的可靠工作。

4 USB接口设计

4.1 控制器与外部FIFO的连接

在这一个系统当中,USB接口扮演了重要的角色,它不仅要完成配置数据和控制命令的传输,更重要的它要完成整个采集数据的发送。这个设计选用的USB2.0协议的控制芯片为CYPRESS公司的FX2系列的CY7C68013。它主要包括USB2.0的收发器,串行接口引擎(SIE),增强51内核,8.5KB的RAM存储器,4KB的FIFO存储器以及可编程接口(GPIF)。FX2有一个通用的可编程接口,由于它几乎支持所有通用的总线,这使得FX2可与外部的ASIC、DSP等其他处理芯片很方便的直接连接和通信[3]。在本设计当中正是利用了该接口与外围的FIFO存储器相连,形成一种独特的数据传输方式—GPIF椨隖IFO进行数据的交换。GPIF方式下,增强51内核就不参与数据传输,USB接口和外围电路直接共享片内FIFO。这样就突破了51内核参与高速数据传输的瓶颈。GPIF方式下,外部FIFO与USB之间的传输不是一次只传输1个字节,而是以突发数据流的形式实现,这样很好的解决了USB高速模式下的带宽问题。FX2与外部FIFO的连接要保证了GPIF传送,其中要特别注意的是GPIF下特有的3个控制信号和3个状态信号的连接,他们要对应连接到外部F I F O的控制和状态管脚,如图4所示。

4.2 控制器固件代码

固件代码是在板子上电之后从外部EEPROM加载到控制器片内XRAM中的。这部分代码要通过调试手段事先下载到外部EEPROM中。USB控制器的固件程序其实就是完成USB各种事物及USB设备功能的代码,主要是对标准请求的支持和对用户自定义功能的支持。FX2系列的控制器有一套完整的固件开发环境,可以方便的在环境中开发各种基于USB的应用。本次设计的整体固件程序的流程如图5。

TD_Init初始化函数是程序的重要函数,在该函数中完成了CPU相关和USB相关的初始化工作,如中断配置,USB端点配置,GPIF配置等。TD_Poll是系统的主循环函数,它完成主要的用户级功能,USB设备所需要完成的动作都应该在这个主循环中实现,当然也可以在某些中断函数中实现。除了上述两个主要函数外,固件中还有各种中断接口,可以在需要的地方填加代码完成相应的动作。固件中的所有标准请求都将在端点0中断函数中被处理,而其他大量数据的传送命令在端点2中断函数中实现。固件代码里要完成相关的命令动作,并与FPGA通信以实现具体的行为控制。而采集通道的数据传送则在主循环TD_Poll函数中依靠配置和触发端点6来完成。数据的传送通道是端点2和端点6。端点2为OUT端点,接受来自主机的数据或命令;端点6为IN端点,通过GPIF方式从外部FIFO读入的数据被直接放入该端点的FIFO中等待向主机传送。主机通过标准请求启动采集任务后,将会不断的发送IN命令要求USB设备回传采集得到的数据。而控制器接受命令后开始启动GPIF传输,将外部FIFO的数据不断的发往主机。固件中另一个重要的问题就是GPI F相关代码的填加。由于GPIF功能是用户可选的,所以要想使用它,必须将配置和启动代码内嵌到固件中,完好地与固件其他模块配合。GPIF传输的实现需要对FX2内部的相关寄存器进行配置并将配置代码内嵌到固件的初始化部分。而配置代码的生成可以借助CYPRESS发布的GPIF Designer工具以图形化的方式完成,最终以源代码的形式填加到固件中。整个固件代码整合后可以通过CY-PRESS发布的调试工具把目标文件下载到芯片中进行板级调试。由于代码在XRAM中运行,所以调试不需要烧写任何EPROM或FLASH而显得非常方便。

5 结束语

本设计充分利用了USB接口总线诸如:传输速率高、使用方便、支持热插拔以及工作可靠性高等优势,并有效的结合了目前在数字领域里得到广泛使用且具有开发周期短、开发低复杂度、频率高、灵活性强以及可扩展性好等特点的可编程逻辑器件CPLD/FPGA,使得整个板卡简洁、高速、高效。系统充分发挥了高速A/D的可控采样率以及USB控制器的高速GPIF接口的性能,突破了数据采集各个关口的瓶颈,从而建立了从采样端到PC接口端的高速数据通路。本系统从某种程度上反映了当前单板系统的构架特点和发展趋势--简洁,灵活,快速。而U S B总线与可编程逻辑器件的出现正是迎合了这种需求。这些技术的出现不仅大大提高了数字技术在各领域的应用,而且也极大地促进了数字技术的进一步发展[4]。本次设计的数据采集板已经在实验室中参与常规实验,结合相应的PC端的显示程序可以形成一个1 MHz—20 MHz的示波器,并有很好的实际效果。

摘要:本文利用高速A/D器件、FPGA和USB控制器设计了一个高速数据采集卡。系统利用高速AD器件和FPGA来完成前端的数据转换和存储。数据先被存储在外部FIFO中,之后由USB控制器将缓存中的数据通过GPIF方式快速读入并通过USB接口传递给上位机,最后由上位机完成后端的相关处理。

关键词:数据采集,USB2.0,GPIF

参考文献

[1]吴量.高速数据采集系统的设计[J].电子测量技术.2006,(29:)85-86

[2]王成儒,李英伟.USB2.0原理与工程开发[M].国防工业出版社.2004,7

[3]常丹华,王军波.基于DSP和USB的高速数据采集与处理系统设计[J].电子技术应用,2006,(11:)102-104

USB视频采集 篇8

MSP430F5529单片机集成了AD转换器和USB2.0接口, 硬件电路简单, 减少了信号干扰, 易于实现。传统的USB驱动程序开发难度大。而NI公司的NI-VISA driver wizard软件可帮助用户快速生成USB驱动文件, 开发者无须花费大量精力学习USB协议的细节, 便能实现单片机与PC的通信。不过更简单的方法是直接安装TI公司提供的USB_CDC通信驱动文件MSP430_CDC.inf, 利用虚拟串口实现USB通信。

1 系统硬件组成

系统整个架构如图1所示。

MSP430F5529芯片是数据采集模块的核心, 该单片机是一种超低功耗的16位混合模拟控制器, 内置12位SAR内核的AD转换模块, 在没有CPU干预下, 该缓冲器允许对16路独立采集而来的ADC信号进行转化和存储。最高采样速度可达200kbps。转换基准电压均可软件选择内部或外部电压源。该单片机内部的基准电压可设置为1.5V或2.5V。信号调理电路应将信号控制在转换基准电压范围内。同时该单片机还集成USB2.0接口模块, 其内部SRAM为8K, 在使用USB通信时占用2K的SRAM。这样的高度集成使得一个最小单片机系统就构成一个采集卡。用户需注意ADC接地和干扰防范, 具体硬件电路参考用户手册即可。

2 系统软件组成

系统软件设计主要包括USB固件程序设计, USB驱动程序设计以及Lab VIEW软件程序设计三个部分。

USB固件程序从功能上分为USB通信和AD数据采集两部分。从最底层开发USB通信程序对不熟悉USB协议的人来讲是不可能完成的任务。参考TI公司官方网站USB开发资源包使问题变得简单, 它包含了开发一个基于USB的MSP430项目所需的所有源代码和示例应用程序。开发者可直接套用其框架和USB API库函数完成, 如果用户使用的是CCS集成开发环境, 通过Help-->Welcome to CCS打开欢迎界面, 展开MSP430ware, 在这里可导入相关例程。

固件开发的另一部分就是AD采集程序的编写。MSP430的AD采集模块功能强大, 有四种转化模式:单通道模式, 重复单通道模式, 序列模式和重复序列模式。本文用6.6端口实现单通道多次转换采集端口, 其相关控制寄存器设置语句如下:

传统USB驱动开发对于非计算机专业的用户来讲难度很大。但是利用NI-VISA提供的USB驱动程序生成软件使得问题简化。首先打开NI-VISA Driver Wizard开发向导, 根据提示输入USB设备相关信息, 主要是VID (USB Manufacturer ID) 和PID (USB Model Code) 的正确填写 (MSP430F5529的VID为“0x2047”, PID为“0x0400”) 。然后将配置好的INF文件安装在Windows环境下, 再将USB设备插入主机完成驱动程序的安装。完成后可用NI MAX软件做通信测试, 打开NI MAX设备和接口项, 发现MSP430F5529支持三种常见设备分别是通信设备类 (CDC) , 人机接口设备类 (HID) , 大容量存储类 (MSC) , 并显示为USB RAW设备。对于USB RAW设备, 每个设备可能使用它们自己的通信协议, 用户须了解相关USB通信协议, 若程序中USB相关参数设置不正确会导致通信错误。还有没有更简单的方法?

事实上, 对于MSP430F5529的CDC通信, 无须用VISA驱动向导生成USB驱动程序。TI公司提供了USB_CDC通信驱动程序文件MSP430_CDC.inf, 用户直接安装就可以快速稳定的实现单片机与Lab VIEW间的通信。安装完毕, 打开windows系统的设备管理器, 在端口项目下显示MSP430_F5529_UE_CDC (COMxx) , 其中xx为串口号。这样的虚拟串口使得用户不需去了解USB协议, 而数据的传输却是通过USB接口完成的。

上位机Lab VIEW软件程序的编写利用NI-VISA函数按串口通信编写, 采用顺序结构:首先添加VISA资源名称控件, 配置串口函数, 添加VISA打开函数。这样通过串口资源选择和相关参数设置, 如波特率、数据位、停止位等, 完成初始化VISA设备的过程。然后调用VISA写入函数, 向单片机写入控制信息。单片机响应后采集数据并发送。再调用VISA读取函数读入采集的数据。要注意, VISA读取函数前需通过使用VISA Bytes at Serial Port节点查询当前串口接收缓冲区中的数据字节数。最后使用VISA关闭函数结束会话。图2为Lab VIEW读取程序框图。

下位机是12位ADC转换模块, 每发送两位数据为一个采集点, 上位机Lab VIEW中需对数据进行变换, 才能正确显示。

3 结束语

用信号发生器产生一个2V的正弦信号, Lab VIEW显示结果正确。该数据采集系统硬件上简单可靠。软件上, 利用TI公司提供的USB_CDC通信驱动文件和USB_API库函数, 使得不了解USB通信协议的用户也能快速实现与上位机Lab VIEW的通信, 极大的缩短开发时间。

摘要:基于低成本, 可靠性的思想设计了本数据采集系统。MSP430F5529单片机自身集成12位AD转换器和USB接口, 硬件电路简单可靠。上位机用Lab VIEW显示采集的数据波形。传统USB驱动开发复杂, 利用NI公司的NI-VISA driver wizard软件可快速生成USB驱动, 但若USB相关参数设置不正确, 容易出错。事实上, 直接利用TI公司提供的USBCDC虚拟串口通信驱动文件MSP430CDC.inf和USBCDCAPI库函数, 可以快速稳定的实现上下位机间的通信。

关键词:MSP430F5529,数据采集,USB,LabVIEW,NI-VISA

参考文献

[1]沈建华, 杨艳琴.MSP430系列16位超低功耗单片机原理与实践[M].北京:北京航空航天大学出版社, 2008.

[2]张桐, 陈国顺.精通Lab VIEW程序设计[M].北京:电子工业出版社, 2008.

[3]余志荣, 杨莉.基于NI-VISA与Lab VIEW的USB接口应用设计[J].单片机与嵌入式系统应用, 2007 (01) .

上一篇:运动场上的物理学下一篇:厌氧系统