电子科技大学自动化学院
标准实验报告
(实验)课程名称测试系统集成技术
电子科技大学教务处制表
电子科技大学
实 验 报 告
学生姓名:胡武君 学号: 201222260139 指导教师:马敏
实验地点: 主楼C211 实验时间: 周二下午
一、实验室名称: 现代测试技术实验室
二、实验项目名称: 脉冲波形参数的自动测试系统
三、实验学时:4
四、实验内容:
1.组建脉冲波形参数的自动测试系统
2.设计脉冲参数测量系统界面
2.用程控方式完成对脉冲波形参数的测量,显示脉冲波形及参数测量结果。
五、实验结果:
1.脉冲波形参数自动测试系统需求分析
函数/任意波形发生器33220A手动调节产生脉冲信号,信号输出到数字示波器DSO5012A,在LabWindows/CVI集成环境下编写脉冲参数测量控制程序,通过LXI总线控制数字示波器完成脉冲参数的测量,并在用户界面上显示脉冲波形及脉冲参数测量结果。
2.本次实验设计的脉冲参数测量系统应用程序界面如下:
修改后:
本次实验内容的主体为一个程序的编制,程序的框架如下:
LabWindow/CVI程序修改代码如下:
void Initialize(void)
{
viPrintf(vi,"*RST\n");
viPrintf(vi,"CHAN1:IMPedance FIFTy \n");
viPrintf(vi,":AUTOSCALE\n");
}
报告评分:
指导教师签字:
电子科技大学
实 验 报 告
学生姓名及学号:马先文2011079150001
朱 科2011079120020
指导教师:王子斌
实验地点: C2-110 实验时间:2014.6.10
一、实验室名称: 现代测试技术实验室
二、实验项目名称:脉冲波形参数的自动测试系统
三、实验学时: 4学时
四、实验内容:
1.组建脉冲波形参数的自动测试系统
2.设计脉冲参数测量系统界面
2.用程控方式完成对脉冲波形参数的测量,显示脉冲波形及参数测量结果。
五、实验结果:
1、脉冲波形参数自动测试系统需求分析:
答:函数/任意波形发生器33220A手动调节产生脉冲信号,信号输出到数字示波
器DSO5012A,在LabWindows/CVI集成环境下编写脉冲参数测量控制程序,
通过LXI总线控制数字示波器完成脉冲参数的测量,并在用户界面上显示脉
冲波形及脉冲参数测量结果。
2、本次实验设计的脉冲参数测量系统应用程序界面如下:
3、本次实验内容的主体为一个程序的编制,程序的框架如下:
4、LabWindow/CVI程序代码如下:
#include <cvirte.h>
#include <userint.h>
#include <visa.h>
#include "Pulse Parameter Test.h"
#define RESOURCE "TCPIP0::192.168.1.108::inst0::INSTR"
static int panelHandle;
ViSession defaultRM,vi;
double preamble[10];
#define WAVE_DATA_SIZE 5000
unsigned char waveform_data[WAVE_DATA_SIZE];
void Initialize(void);
void Capture(void);
void Waveform(void);
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "Pulse Parameter Test.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
int CVICALLBACK Quit (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
QuitUserInterface (0);
break;
}
return 0;
}
int CVICALLBACK Acquire (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
char buf[256]={0};
double temp;
switch (event)
{
case EVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viPrintf(vi,":MEASURE:SOURCE CHAN1\n");
viQueryf(vi,":MEASURE:FREQUENCY?\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_Frequency,temp);
viQueryf(vi,":MEASURE:VBASE?\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_Low,temp);
viQueryf(vi,":MEASURE:VTOP?\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_High,temp);
viQueryf(vi,"MEASURE:PERIOD?\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_Period,temp);
viQueryf(vi,"MEASURE:VAMPLITUDE?\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_Amplitude,temp);
viQueryf(vi,"MEASURE:VPP?\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_PTPeak,temp);
viQueryf(vi,"MEASURE:RISETIME?\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_RTime,temp);
viQueryf(vi,"MEASURE:FALLTIME?\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_FTime,temp);
viQueryf(vi,"MEASURE:PWIDTH?\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_PWidth,temp);
viQueryf(vi,"MEASURE:NWIDTH?\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_NWidth,temp);
viQueryf(vi,"MEASURE:DUTYCYCLE?\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_PDutycycle,temp);
Waveform();
viClose(vi);
viClose(defaultRM);
break;
}
return 0;
}
int CVICALLBACK GetPeriod (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double Period;
switch (event)
{
case EVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:PERIOD? CHAN1\n","%lf",&Period);
SetCtrlVal(panelHandle,PANEL_Edt_Period,Period);
viClose(vi);
viClose(defaultRM);
break;
}
return 0;
}
int CVICALLBACK GetTop (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double top;
switch (event)
{
case EVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:VTOP? CHAN1\n","%lf",&top);
SetCtrlVal(panelHandle,PANEL_Edt_High,top);
viClose(vi);
viClose(defaultRM);
break;
}
return 0;
}
int CVICALLBACK GetBase (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double base;
switch (event)
{
case EVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:VBASE? CHAN1\n","%lf",&base);
SetCtrlVal(panelHandle,PANEL_Edt_Low,base);
viClose(vi);
viClose(defaultRM);
break;
}
return 0;
}
int CVICALLBACK GetAmplitude (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double amplitude;
switch (event)
{
case EVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:VAMPLITUDE? CHAN1\n","%lf",&litude);
SetCtrlVal(panelHandle,PANEL_Edt_Amplitude,amplitude);
viClose(vi);
viClose(defaultRM);
break;
}
return 0;
}
int CVICALLBACK GetPTPeak (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double vpp;
switch (event)
{
case EVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:VPP? CHAN1\n","%lf",&vpp);
SetCtrlVal(panelHandle,PANEL_Edt_PTPeak,vpp);
viClose(vi);
viClose(defaultRM);
break;
}
return 0;
}
int CVICALLBACK GetWaveform (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
Waveform();
viClose(vi);
viClose(defaultRM);
break;
}
return 0;
}
int CVICALLBACK GetFrequency (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double frequency;
switch (event)
{
case EVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:FREQUENCY? CHAN1\n","%lf",&frequency);
SetCtrlVal(panelHandle,PANEL_Edt_Frequency,frequency);
viClose(vi);
viClose(defaultRM);
break;
}
return 0;
}
int CVICALLBACK GetRTime (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double rtime;
switch (event)
{
case EVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:RISETIME? CHAN1\n","%lf",&rtime);
SetCtrlVal(panelHandle,PANEL_Edt_RTime,rtime);
viClose(vi);
viClose(defaultRM);
break;
}
return 0;
}
int CVICALLBACK GetFTime (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double ftime;
switch (event)
{
case EVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:FALLTIME? CHAN1\n","%lf",&ftime);
SetCtrlVal(panelHandle,PANEL_Edt_FTime,ftime);
viClose(vi);
viClose(defaultRM);
break;
}
return 0;
}
int CVICALLBACK GetPWidth (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double pwidth;
switch (event)
{
case EVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:PWIDTH? CHAN1\n","%lf",&pwidth);
SetCtrlVal(panelHandle,PANEL_Edt_PWidth,pwidth);
viClose(vi);
viClose(defaultRM);
break;
}
return 0;
}
int CVICALLBACK GetNWidth (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double nwidth;
switch (event)
{
case EVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:NWIDTH? CHAN1\n","%lf",&nwidth);
SetCtrlVal(panelHandle,PANEL_Edt_NWidth,nwidth);
viClose(vi);
viClose(defaultRM);
break;
}
return 0;
}
int CVICALLBACK GetPDutycycle (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double dutycycle;
switch (event)
{
case EVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:DUTYCYCLE? CHAN1\n","%lf",&dutycycle);
SetCtrlVal(panelHandle,PANEL_Edt_PDutycycle,dutycycle);
viClose(vi);
viClose(defaultRM);
break;
}
return 0;
}
void Initialize(void)
{
viPrintf(vi,"*RST\n");
viPrintf(vi,":AUTOSCALE\n");
}
void Capture(void)
{
viPrintf(vi,":ACQUIRE:TYPE NORMAL\n");
viPrintf(vi,":ACQUIRE:COMPLETE 100\n");
viPrintf(vi,":DIGITIZE CHAN1\n");
}
void Waveform(void)
{
int waveform_size,i;
double time_array[WAVE_DATA_SIZE],amp_array[WAVE_DATA_SIZE];
double Xmin,Xmax,Ymin,Ymax;
DeleteGraphPlot (panelHandle, PANEL_GRAPH_Pulse, -1, VAL_IMMEDIATE_DRAW);
viPrintf(vi,":WAVEFORM:FORMAT BYTE\n");
viPrintf(vi,":WAVEFORM:POINTS 1000\n");
viQueryf(vi,":WAVEFORM:PREAMBLE?\n","%,10lf\n",preamble);
SetCtrlVal(panelHandle,PANEL_Edt_TimeBase,preamble[4]*100);
SetCtrlVal(panelHandle,PANEL_Edt_Vertical,preamble[7]*32);
Xmin = (0.0-preamble[6])*preamble[4]+preamble[5];
Xmax = (1000.0-preamble[6])*preamble[4]+preamble[5];
Ymin = (0.0-preamble[9])*preamble[7] + preamble[8];
Ymax = (256.0-preamble[9])*preamble[7] + preamble[8];
SetAxisScalingMode (panelHandle, PANEL_GRAPH_Pulse, VAL_BOTTOM_XAXIS, VAL_MANUAL, Xmin, Xmax);
SetAxisScalingMode (panelHandle, PANEL_GRAPH_Pulse, VAL_LEFT_YAXIS, VAL_MANUAL, Ymin, Ymax);
viPrintf(vi,":WAVEFORM:DATA?\n");
waveform_size = WAVE_DATA_SIZE;
viScanf(vi,"%#b\n",&waveform_size,waveform_data);
for (i=0;i<1000;i++)
{
amp_array[i] = ((float)waveform_data[i]-preamble[9])*preamble[7] + preamble[8];
time_array[i] = ((float)i-preamble[6])*preamble[4]+preamble[5];
}
PlotXY (panelHandle, PANEL_GRAPH_Pulse, time_array, amp_array, 1000, VAL_DOUBLE, VAL_DOUBLE, VAL_THIN_LINE, VAL_SIMPLE_DOT, VAL_SOLID, 1,
VAL_YELLOW);
}
六、思考题:
1、在本次实验的示波器程控测量过程中,是否每次测量都需要重新做示波器初始化的工作?
答:每次测量都需要重新做示波器初始化的工作。
重新做示波器的初始化工作后仪器才能进入正常的运行,保证不
受其它程序的影响,才能保证应用程序运行时不会出错(这是系
统总线的要求),从而实时显示波形。
2、如果没有指定脉冲波形的幅度及频率,能否利用该测试程序获取未知脉冲波形的相关参数?
答:能利用该测试程序获取未知脉冲波形的相关参数。
波形的测试是仪器设备完成的,程序只是通过控制器的接口功能
去程控另一个仪器,并不直接参与参数的测量。
报告评分:
指教师签字:
实验一TTL集成逻辑门电路参数测试姓名同组一实验目的1加深了解TTL逻辑门的参数意义2掌握TTL逻辑门电路的主要参数及测量方法3认…
电子科技大学微电子与固体电子学院标准实验报告课程名称集成电路原理与设计电子科技大学教务处制表电子科技大学实验报告学生姓名学号指导教…
激光脉冲测距组长孙汉林制作PPT组员张莹讲解吕富敏制作报告1目录一工作原理31测距仪工作原理32激光脉冲测距仪光学原理结构33测距…
时域测试技术综合实验报告书实验名称时域波形的参数测量实验班级一班学号20xx220xx125姓名杨梅实验时间年月日得分一实验目的1…