目录

现代物理实验信号测量和分析 Labview

其他AD卡

Labjack U12介绍、相关下载

说明书

— 推荐先看一下labjack U12 中文说明书 labjack u12快速指南 wiki版 。相关的驱动程序慢慢上传。

—以上是数据采集卡usb-1208fs的一些相关文档

驱动相关

usb-1208fs

>另有一张cd包含 InstaCal TracerDAQ SoftWIRE,后面两个好象是卡自带的应用程序,一共大小是422M,没有上传.

DSO-2150

数字示波器DSO-2150驱动及应用程序

LJ-U12卡在Matlab中的使用

安装

模拟信号的测量

eanalogout函数

其执行时间为20 毫秒或更少(在Windows 下其典型值为16 毫秒)。如果要输出的值小于0,DLL 将输出上次的输出值。这样就可以只改变一个通道的电压值。注意当DLL 刚刚载入时,它并不知道原先的值是什么,它只能认为它们都是0伏。同样当LabJack不是被DLL复位的情况下,DLL记忆的原先的电压值可能不是0,而实际的值却已经为0。

  • idnum – 设备号,系列号或-1(所能找到的第一个设备)
  • demo – 正常操作时为0,大于0时为演示模式。演示模式允许用户在没有
  • AO0 – 要输出到AO0的0.0到5.0伏的电压。
  • AO1 – 要输出到AO1的0.0到5.0伏的电压。

默认返回值: LabJack 的错误码,无错时为0。

 • idnum – 返回设备号或-1(如果没有找到LabJack的话)

eanalogin函数(适合于单值测量)

analogin

上面提供一个样本,相比原文件作了改动与说明(下载的m文件可以直接运行) — 许文仪 2007/06/14 15:42

aiburst函数(短时连续读入)

aiburst函数使用的是采集卡的内置计数器,相比eanalogin函数,它没用循环结构导致的采样频率失真问题。

函数调用格式: [voltage stateIOout scanrate overvoltage errorcode idnum]=
aiburst (idnum,demo,stateIOin,updateIO,ledon,numchannels,channels,gains,scanrate,diablecal,trigerIO,triggerstate,numscans,timeout,transfermode)

先对输入的参数做一下说明

aiburst函数的输出量

Aistreamstart-Aistreamread-Aistreamclear

aistreamread
这组指令用来测量连续信号,其基本功能相当于一个数字示波器,利用matlab丰富的数据处理功能,我们可以自己设计出超级示波器。上面提供的下载就是在matlab中利用simulink工具包所完成的示波器的雏形。下面分别介绍三个指令及其用法。

1.Aistreamstart指令,运行后AD卡开始采集数据,并将采集到的数据存放于其内存中(4096),等待下一步的读取指令aistreamread
函数指令格式: [scanRate errorcode idnum] = AIStreamStart(idnum, demo, stateIOin, updateIO, ledOn, numChannels, channels, gains, scanRate, disableCal, readCount)
输入量说明:

输出量说明:

2.AistreamRead指令:读取AD卡内存中的数据 函数指令格式 :[voltages stateIOout LjScanBacklog overVoltage errorcode] = AIStreamRead(localID, numChannels,numScans, timeout)
输入量说明:

输出量说明:

原英文说明书关于这个指令的参量说明有误,请以此处为准。

3.Aistreamclear:停止读取 函数指令格式:[errorcode] = AIStreamClear(localID) 这里还是要注意localID不是-1,而是默认的设备号(一般为0) 使用aistreamstart与aistreamread指令后,请记得用aistreamclear停止读数,否则内存会很快溢出。
这组指令的调用格式一般为aistreamstart-aistreamread-aistreamread-aistreamread…-aistreamclear 其中,aistreamstart一旦启动后,数据流就会不断的存入AD卡内存中,此时应使用aistreamread将之读入到计算机中,否则很快就会使卡的内存溢出。对于高频读取,手动操作整个过程是不现实的,应当使用脚本文件自动控制这一流程。(考虑到计算机切换对象所需的时间,这可能就是为什么aistreamstart的扫描频率要比aiburst低的原因。) 此外,在这整个过程中,matlab是无法调用其他指令的。 — 许文仪 2007/06/17 12:13

数字信号输入输出

Edigitalin函数

idnum:设备号,系列号;或-1(所能找到的第一个LJ设备)。

  demo: 正常操作时为0,大于0时为演示模式。演示模式允许在没有LabJack的情况下调用该函数。
  channel: 要读取的数字口号。IO口是0-3,D口是0-15。
  readD: 大于0时读取D25端口,否则读取IO端口。

state:非零值表示高电平,0 表示低电平。

  errorcode: 错误代码,0表示无错误。
  idnum: 返回设备号或-1(如果没有找到LabJack的话)
(PS:对这个系统不太熟,不知道上传后保存到哪里去了……) 谷雨 2007/06/16 00:42
已经修正,在最上面列出了。 — YuXi 2007/06/16 10:59

计数器使用

Ecount函数

输入:

输出:

测试中的问题

30mv左右用单端只能看到噪声,差分模式经过20倍放大还能看到正弦信号,电压再小用差分加放大也看不到信号了,全是噪声。基本可以排除是接地不良的问题,测试过gnd口与信号发生器地线是等势的。怀疑是测试中提到需要自校准的原因:cal校准常数与单端输入的test都是黄色背景的”passed”。
应该说,测量时候应该考虑量程问题。20VPP的量程对于30mVPP的信号来说太大了,背景比信号大也是很正常。如果测量信号过于小的话,还是应该考虑采用前置的放大器,将信号调节到适合的量程再来测量为好。
YuXi 2007/06/14 12:12

Labview的使用案例

简介

安装

内网应该有:

ftp://10.21.120.1/Vol01/_Engineering/NI/LabView85/[NI.LabVIEW图形化开发环境].TLF-SOFT-NI.LabVIEW.v8.5.ISO-TBE.bin

大家到ycul.org查一下即可。我朋友做的校内搜索。 — YuXi 2007/10/10 10:34
keygen8.5.rarlabview8.5的算号器

模拟信号的测量

电压单值测量

eanalogin示例.rar

短时连续读入


此vi中,在最左方用下拉列表输入测量要求参数,包括是否使用差动测量,将所有数据捆绑为簇后输入AIBurst子函数(按名称组合簇,故可以清楚看到AIBurst所需要的参数及顺序),同时准备了一个默认的簇,当用户输入参数缺省时使用这个默认值。AIBurst测量结束后返回一个所用频道数(行)*每通道所得数据(列)的二维数组,实际测量频率,以及是否出错,超量程等信息。将电压值作为Y轴,实际采集频率的倒数作为X轴的缩放比例,从而得到电压—时间的曲线图。从两组电压值分别得到功率图作为Y轴,然后用(实际采集频率/采集数据个数)作为X轴,从而得到电压有效值-频率的曲线图。将原始的二维数组转置(变为每频道数据*频道数),添加每个值的序号乘以实际采样频率(即每个数据所得的估计时刻)作为第一行,然后可以将这个3*N的数组以八位有效数字保存在文件中。

持续信号测量


此函数要求测量参数以簇的形式整体输入(例子中的Analog Input Commands一项)。在中间的while循环中有一个顺序结构,分别进行计时,延时,读取数据(调用AIStreamRead)三个步骤。在得到二维数组形式的电压后并未进行处理。处理方法可以参看上个例子。 — 孙梦超 2007/10/22 20:55

数字信号输入输出


命令参数输入是一个由4个布尔数组组成的簇。两个数据输出的类型都是由2个布尔数组组成的簇。这样的优点是连线简单,缺点是更改其中某个数据困难。如果只需更改或读取一个端口的状态,用这个函数反而麻烦,此时可选用EDigitalIn和EDigitalOut。 — 孙梦超 2007/10/22 22:10

计数器使用


本函数设计严谨。循环开始前调用clock函数得到时间。while寻含开始后用一个没有实际意义的顺序结构(只有一格)来实现延时的功能,即可以在指定秒数之后再开始计数。读数结束后再次计时,从而可以用计数除以时间得到频率。用户可以选择显示所得计数或者计算所得频率。使用专门的文件写入函数(LJcounter data file write.vi)可以写入计数,频率,计时等数据。 — 孙梦超 2007/10/22 22:09

应用:XY记录仪


扫描频率50hz,信号频率1hz。图像完好。

扫描频率50hz,信号频率10hz。初始信号不好,之后图形完好。

扫描频率512hz,信号频率10hz。图形完好。

扫描频率512hz,信号频率100hz。单次信号不好,但多个周期共同采样后图形内缘形成椭圆。
更正:上图应说“外缘”形成椭圆。因为几次测量都没有调节电压,因此X轴变化范围都是-1.2到0.8。不难看出图像失真是由于采样频率过小。

labjack在c/c++中使用简介

   //---------------------------------------------------------------------------
  //
  //  ljcstream.c
  //  
  //  Simple example starts a stream and reads 250 scans/second from 4 channels
  //  for 5 seconds.   
  //
  //  Requires LabJack U12 DLL V1.05 or later.
  //
  //  support@labjack.com
  //  1/2002
  //----------------------------------------------------------------------
  //
 
  #include <stdio.h>
  #include <wtypes.h>
  #include "ljackuw.h"
 
  void initArrays(float (*voltages)[4],long *stateIOout);
 
  main()
  {
	long error;
	long id=-1,*idnum=&id;
	long localID=-1;
	long demo=0,numChannels=4,disableCal=0;
	long transferMode=0;
	long channels[4]={0,1,2,3};
	long gains[4]={0,0,0,0};
	float sr=250.0F,*scanRate=&sr;
	long numScans=250,timeout=10;
	float voltages[4096][4]={0.0F};
	long stateIOout[4096]={0};
	long ljb=-1,*ljScanBacklog=&ljb;
	long ov=-1,*overVoltage=&ov;
	long numIts = 5;
	long i;
	long junk;
 
 
	id=-1;
	error = AIStreamStart(idnum,demo,0,0,1,numChannels,channels,gains,scanRate,disableCal,0,0);
	localID = *idnum;
	printf("\nAIStreamStart error = %d\n",error);
	printf("Local ID = %d\n",localID);
	i=0;
	while((!error)&&(i<numIts))
	{	
		initArrays(voltages,stateIOout);
		junk=0;
		error = AIStreamRead(localID,numScans,timeout,voltages,stateIOout,0,ljScanBacklog,overVoltage);
		printf("\nAIStreamRead error = %d\n",error);
		printf("1st Scan:  V1=%f, V2=%f,V3=%f, V4=%f\n",voltages[0][0],voltages[0][1],voltages[0][2],voltages[0][3]);
		printf("LabJack Scan Backlog = %d\n\n",*ljScanBacklog);
		i++;
	}
	error = AIStreamClear(localID);
	printf("\nAIStreamClear error = %d\n",error);
 
 
	printf("\nPress Enter\n");
	getchar();
 
  }
 
 
  void initArrays(float (*voltages)[4],long *stateIOout)
  {
	long j,k;
 
	for(j=0;j<4096;j++)
	{
		for(k=0;k<4;k++)
		{
			voltages[j][k]=0.0F;
		}
	}
	for(j=0;j<4096;j++)
	{
		stateIOout[j]=0;
	}
 
	return;
  }

用步进马达驱动小车

步进马达接线示意图

马达特性说明

  1. 电源:驱动电源为12v,信号电源为5v方波信号。可再接5v电压使反转。
  2. 马达失步频率:在脉冲周期低于32ms(31hz)时,马达经常失步;在周期为35ms时,偶尔失步;在周期为40ms时,基本不失步。
  3. 脉冲次数与转动角度:每两个完整方波马达转动一次;每40个完整方波马达转动一圈,即平均每个方波可转动9度;不失步时,转动角度与信号频率无关。
  4. 发热:接通电源后马达发热情况严重。估计可达近百度。

步进电机参考资料

labview教学演示工具箱

labview教学演示工具箱