3脉冲波形参数自动测试系统Word文件下载.docx
《3脉冲波形参数自动测试系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《3脉冲波形参数自动测试系统Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
2.用程控方式完成对脉冲波形参数的测量,显示脉冲波形及参数测量结果。
五、实验结果:
一、脉冲波形参数自动测试系统需求分析:
答:
函数/任意波形发生器33220A手动调剂产生脉冲信号,信号输出到数字示波
器DSO5012A,在LabWindows/CVI集成环境下编写脉冲参数测量操纵程序,
通过LXI总线操纵数字示波器完成脉冲参数的测量,并在用户界面上显示脉
冲波形及脉冲参数测量结果。
二、本次实验设计的脉冲参数测量系统应用程序界面如下:
3、本次实验内容的主体为一个程序的编制,程序的框架如下:
4、LabWindow/CVI程序代码如下:
#include<
>
#include"
PulseParameter"
#defineRESOURCE"
TCPIP0:
:
"
staticintpanelHandle;
ViSessiondefaultRM,vi;
doublepreamble[10];
#defineWAVE_DATA_SIZE5000
unsignedcharwaveform_data[WAVE_DATA_SIZE];
voidInitialize(void);
voidCapture(void);
voidWaveform(void);
intmain(intargc,char*argv[])
{
if(InitCVIRTE(0,argv,0)==0)
return-1;
/*outofmemory*/
if((panelHandle=LoadPanel(0,"
PANEL))<
0)
DisplayPanel(panelHandle);
RunUserInterface();
DiscardPanel(panelHandle);
return0;
}
intCVICALLBACKQuit(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
switch(event)
{
caseEVENT_COMMIT:
QuitUserInterface(0);
break;
}
intCVICALLBACKAcquire(intpanel,intcontrol,intevent,
charbuf[256]={0};
doubletemp;
viOpenDefaultRM(&
defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&
vi);
viClear(vi);
Initialize();
Capture();
viPrintf(vi,"
MEASURE:
SOURCECHAN1\n"
);
viQueryf(vi,"
FREQUENCY?
\n"
"
%lf"
&
temp);
SetCtrlVal(panelHandle,PANEL_Edt_Frequency,temp);
VBASE?
SetCtrlVal(panelHandle,PANEL_Edt_Low,temp);
VTOP?
SetCtrlVal(panelHandle,PANEL_Edt_High,temp);
PERIOD?
SetCtrlVal(panelHandle,PANEL_Edt_Period,temp);
VAMPLITUDE?
SetCtrlVal(panelHandle,PANEL_Edt_Amplitude,temp);
VPP?
SetCtrlVal(panelHandle,PANEL_Edt_PTPeak,temp);
RISETIME?
SetCtrlVal(panelHandle,PANEL_Edt_RTime,temp);
FALLTIME?
SetCtrlVal(panelHandle,PANEL_Edt_FTime,temp);
PWIDTH?
SetCtrlVal(panelHandle,PANEL_Edt_PWidth,temp);
NWIDTH?
SetCtrlVal(panelHandle,PANEL_Edt_NWidth,temp);
DUTYCYCLE?
SetCtrlVal(panelHandle,PANEL_Edt_PDutycycle,temp);
Waveform();
viClose(vi);
viClose(defaultRM);
intCVICALLBACKGetPeriod(intpanel,intcontrol,intevent,
doublePeriod;
CHAN1\n"
Period);
SetCtrlVal(panelHandle,PANEL_Edt_Period,Period);
intCVICALLBACKGetTop(intpanel,intcontrol,intevent,
doubletop;
top);
SetCtrlVal(panelHandle,PANEL_Edt_High,top);
intCVICALLBACKGetBase(intpanel,intcontrol,intevent,
doublebase;
base);
SetCtrlVal(panelHandle,PANEL_Edt_Low,base);
intCVICALLBACKGetAmplitude(intpanel,intcontrol,intevent,
doubleamplitude;
amplitude);
SetCtrlVal(panelHandle,PANEL_Edt_Amplitude,amplitude);
intCVICALLBACKGetPTPeak(intpanel,intcontrol,intevent,
doublevpp;
vpp);
SetCtrlVal(panelHandle,PANEL_Edt_PTPeak,vpp);
intCVICALLBACKGetWaveform(intpanel,intcontrol,intevent,
intCVICALLBACKGetFrequency(intpanel,intcontrol,intevent,
doublefrequency;
frequency);
SetCtrlVal(panelHandle,PANEL_Edt_Frequency,frequency);
intCVICALLBACKGetRTime(intpanel,intcontrol,intevent,
doublertime;
rtime);
SetCtrlVal(panelHandle,PANEL_Edt_RTime,rtime);
intCVICALLBACKGetFTime(intpanel,intcontrol,intevent,
doubleftime;
ftime);
SetCtrlVal(panelHandle,PANEL_Edt_FTime,ftime);
intCVICALLBACKGetPWidth(intpanel,intcontrol,intevent,
doublepwidth;
pwidth);
SetCtrlVal(panelHandle,PANEL_Edt_PWidth,pwidth);
intCVICALLBACKGetNWidth(intpanel,intcontrol,intevent,
doublenwidth;
nwidth);
SetCtrlVal(panelHandle,PANEL_Edt_NWidth,nwidth);
intCVICALLBACKGetPDutycycle(intpanel,intcontrol,intevent,
doubledutycycle;
dutycycle);
SetCtrlVal(panelHandle,PANEL_Edt_PDutycycle,dutycycle);
voidInitialize(void)
viPrintf(vi,"
*RST\n"
AUTOSCALE\n"
voidCapture(void)
ACQUIRE:
TYPENORMAL\n"
COMPLETE100\n"
DIGITIZECHAN1\n"
voidWaveform(void)
intwaveform_size,i;
doubletime_array[WAVE_DATA_SIZE],amp_array[WAVE_DATA_SIZE];
doubleXmin,Xmax,Ymin,Ymax;
DeleteGraphPlot(panelHandle,PANEL_GRAPH_Pulse,-1,VAL_IMMEDIATE_DRAW);
WAVEFORM:
FORMATBYTE\n"
POINTS1000\n"
viQueryf(vi,"
PREAMBLE?
%,10lf\n"
preamble);
SetCtrlVal(panelHandle,PANEL_Edt_TimeBase,preamble[4]*100);
SetCtrlVal(panelHandle,PANEL_Edt_Vertical,preamble[7]*32);
Xmin=[6])*preamble[4]+preamble[5];
Xmax=[6])*preamble[4]+preamble[5];
Ymin=[9])*preamble[7]+preamble[8];
Ymax=[9])*preamble[7]+preamble[8];
SetAxisScalingMode(panelHandle,PANEL_GRAPH_Pulse,VAL_BOTTOM_XAXIS,VAL_MANUAL,Xmin,Xmax);
SetAxisScalingMode(p