设备:PC+安捷伦电源(型号:6319D)+GPIB
开发环境:VS2010+MFC+VISA
定义电源信息如下,
typedef struct PowerUnitTag
{
BOOL bOpenEnable;
ViSession instrumentHandle;
int nGPIBAddress;
int nPowerAddress;
int nPowerModel;
int nStatus;
double dbVoltage;
double dbVoltageOffset;
double dbCurrent;
double dbMeasureCurrent;
char cDeviceID[80];
}PowerUnit;
功能:
1)电源输出开关控制
void CXXXXDlg::OnBnClickedBtnOnPower()
{
int viStatus = NULL;
powerUnit.nPowerModel = 1;
powerUnit.nGPIBAddress = 0;
//powerUnit.nPowerAddress = 5;
powerUnit.nPowerAddress = atoi(ini_poweraddress);
powerUnit.nStatus = NEED_OPEN;
viStatus = PowerOpen(&powerUnit);
if(viStatus)
{
MessageBox("电源控制错误!", "警告:",MB_ICONWARNING);
return;
}
powerUnit.nStatus = OUTPUT_NULL;
powerUnit.dbVoltage =3.8;//OUT_VOLTAGE;
powerUnit.dbVoltageOffset = 0;//OUT_VOLTAGE;
powerUnit.dbCurrent = 2.5;
viStatus = PowerOutput(&powerUnit,OUTPUT_ON);
if(viStatus)
{
MessageBox("电源控制错误!","警告:",MB_ICONWARNING);
return;
}
powerUnit.nStatus = OUTPUT_ON;
nTimeElapsed=0;
}
2)电流测量
void CXXXDlg::tmSampleTimer()
{
double dbCurrent=0.0;
double dbDisplayCurrent=0.0;
dbAverage = 0.0;
// begin sample current
nTickCount++;
PowerMeasureCurrent(powerUnit, &dbCurrent);
dbCurrent *= 1000;//current is milliampere
//calculate the max /min /average current
CString strCurren=_T("");
CString strMaxCurren=_T("");
CString strMinCurren=_T("");
CString strAverageCurren=_T("");
if(nTickCount == 1)
{
dbTotal = dbMaximum = dbMininum = dbAverage = dbCurrent;
}
else if(nTickCount > 0)
{
if(dbCurrent > dbMaximum)
{
dbMaximum = dbCurrent;
}
else if(dbCurrent < dbMininum)
{
dbMininum = dbCurrent;
}
dbTotal += dbCurrent;
dbAverage = dbTotal/nTickCount;
}
dbDisplayCurrent = dbAverage;
strCurren.Format("%6.1fmA", dbCurrent);
SetDlgItemText(IDC_STATIC_CURRENT_VALUE,strCurren);
strMaxCurren.Format("%6.1fmA", dbMaximum);
SetDlgItemText(IDC_STATIC_MAXCURRENT_VALUE,strMaxCurren);
strMinCurren.Format("%6.1fmA", dbMininum);
SetDlgItemText(IDC_STATIC_MINCURRENT_VALUE,strMinCurren);
strAverageCurren.Format("%6.1fmA", dbAverage);
SetDlgItemText(IDC_STATIC_AVERAGECURRENT_VALUE,strAverageCurren);
SetDlgItemText(IDC_EDIT_CURRENT_VALUE,strAverageCurren);
UpdateWindow();
}
3)封装接口
extern "C" __declspec(dllexport) int PowerOpen(PowerUnit* Handle,BOOL display = TRUE);
extern "C" __declspec(dllexport) int PowerOutput(PowerUnit* Handle,const int mode);
extern "C" __declspec(dllexport) int PowerMeasureCurrent(const PowerUnit Handle,double *dbCurrent);
extern "C" __declspec(dllexport) int PowerClose(const PowerUnit Handle);
通过这里提供的接口,可以通过程序自动控制电源输出的打开关闭,模拟上下电的压力测试;还可以对电流进行采样分析,绘制波形图,分析功耗等。qq:2533740151