📄 vargaindlg.cpp
字号:
// VarGainDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Calibration.h"
#include "VarGainDlg.h"
#include "interface.h"
#include "calcomp.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CVarGainDlg property page
IMPLEMENT_DYNCREATE(CVarGainDlg, CPropertyPage)
CVarGainDlg::CVarGainDlg() : CPropertyPage(CVarGainDlg::IDD)
{
//{{AFX_DATA_INIT(CVarGainDlg)
m_nPhase = 0;
m_dVARCF = 0.0;
m_nVARCFDEN = 0;
m_dVARCFERR = 0.0;
m_dVARCFEXP = 0.0;
m_nVARCFNUM = 1;
m_nVARDIV = 1;
m_nVARG = 0;
m_dVARLSB = 0.0;
m_dMaxCur = 130.0;
m_dMaxVol = 500.0;
m_dTestCur = 10.0;
m_dTestVol = 220.0;
//}}AFX_DATA_INIT
#ifdef _DEBUG
m_dVARCF = 1.92;
m_nVARCFDEN = 277;
#endif
for (int i=0; i<3; i++)
{
dVARCF[i]=0.0;
nVARCFDEN[i]=0;
nVARCFNUM[i]=1;
dVARCFERR[i]=0.0;
dVARCFEXP[i]=0.0;
nVARG[i]=0;
dVARLSB[i]=0.0;
}
}
CVarGainDlg::~CVarGainDlg()
{
}
void CVarGainDlg::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CVarGainDlg)
DDX_CBIndex(pDX, IDC_COMBO_PHASE, m_nPhase);
DDX_Text(pDX, IDC_EDIT_VARCF, m_dVARCF);
DDX_Text(pDX, IDC_EDIT_VARCFDEN, m_nVARCFDEN);
DDX_Text(pDX, IDC_EDIT_VARCFERR, m_dVARCFERR);
DDX_Text(pDX, IDC_EDIT_VARCFEXP, m_dVARCFEXP);
DDX_Text(pDX, IDC_EDIT_VARCFNUM, m_nVARCFNUM);
DDX_Text(pDX, IDC_EDIT_VARDIV, m_nVARDIV);
DDX_Text(pDX, IDC_EDIT_VARG, m_nVARG);
DDX_Text(pDX, IDC_EDIT_VARLSB, m_dVARLSB);
DDX_Text(pDX, IDC_EDIT_MAXCUR, m_dMaxCur);
DDX_Text(pDX, IDC_EDIT_MAXVOL, m_dMaxVol);
DDX_Text(pDX, IDC_EDIT_TESTCUR, m_dTestCur);
DDX_Text(pDX, IDC_EDIT_TESTVOL, m_dTestVol);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CVarGainDlg, CPropertyPage)
//{{AFX_MSG_MAP(CVarGainDlg)
ON_BN_CLICKED(IDC_BUTTON_WRITE, OnButtonWrite)
ON_BN_CLICKED(IDC_BUTTON_CALVARG, OnButtonCalvarg)
ON_CBN_SELCHANGE(IDC_COMBO_PHASE, OnSelchangeComboPhase)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CVarGainDlg message handlers
BOOL CVarGainDlg::OnSetActive()
{
CPropertySheet* pSheet = (CPropertySheet*)GetParent();
ASSERT_KINDOF(CPropertySheet, pSheet);
pSheet->SetWizardButtons( PSWIZB_BACK | PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}
void CVarGainDlg::OnButtonWrite()
{
UpdateData(TRUE);
dVARCF[m_nPhase] = m_dVARCF;
// nVARCFDEN[m_nPhase] = m_nVARCFDEN;
// dVARCFERR[m_nPhase] = m_dVARCFERR;
// dVARCFEXP[m_nPhase] = m_dVARCFEXP;
// nVARCFNUM[m_nPhase] = m_nVARCFNUM;
// nVARDIV[m_nPhase] = m_nVARDIV;
}
void CVarGainDlg::OnButtonCalvarg()
{
int i;
double mc = 3200.0;
int cfden;
UpdateData(TRUE);
// 计算基准频率
double cfexp = cfref_comp(mc, m_dTestCur, m_dTestVol, 1);
for (i=0; i<3; i++)
{
dVARCFEXP[i] = cfexp;
}
// 计算CFDEN和CFNUM
cfden = cfden_comp(mc,m_dTestCur,m_dTestVol,m_dMaxCur,m_dMaxVol);
for (i=0; i<3; i++)
{
nVARCFDEN[i] = cfden;
}
// Step 1 - 2: Enable VARCF pulse outputs
// Select VAR for VARCF output
// Set gain registers to logic 0
InitVARGainCalibration();
for(i=0; i<3; i++)
{
// Step 3: Setup pulse output
SetupPulseOutput(i);
// Step 4: Set VARCFNUM and VARCFDEN to calculated values
SetRegistersVARCF(nVARCFNUM[i], nVARCFDEN[i]);
// Step 5: Setup system for Itest, Vnom and PF = 0
SetupSystem(m_dTestCur, m_dTestVol, 0);
// Step 6: Calculate values for VARG
// 读取测量时的输出频率
//dVARCF[m_nPhase] = ReadFrequencyVARCF();
// 根据测量频率和基准频率的差别,计算寄存器的校正值
nVARG[i] = gain_cal(dVARCF[i], dVARCFEXP[i], dVARCFERR[i]);
// 计算VARh/LSB
dVARLSB[i] = whlsb_comp(mc,nVARCFDEN[i], nVARCFNUM[i], m_nVARDIV);
}
// Step 7: Write calibration result to registers xVARG
// 将计算得到的校正值写入ADE7758的相应寄存器
WriteRegistersVARGain(nVARG);
// 显示基准频率
m_dVARCFEXP = dVARCFEXP[m_nPhase];
// 显示CFDEN和CFNUM
m_nVARCFDEN = nVARCFDEN[m_nPhase];
m_dVARCFERR = dVARCFERR[m_nPhase];
// 显示校正结果和VARh/LSB
m_nVARG = nVARG[m_nPhase];
m_dVARLSB = dVARLSB[m_nPhase];
UpdateData(FALSE);
}
void CVarGainDlg::OnSelchangeComboPhase()
{
UpdateData(TRUE);
int i = m_nPhase;
m_dVARCF = dVARCF[i];
m_dVARCFEXP = dVARCFEXP[i];
m_nVARCFDEN = nVARCFDEN[i];
m_nVARCFNUM = nVARCFNUM[i];
m_dVARCFERR = dVARCFERR[i];
m_nVARG = nVARG[i];
m_dVARLSB = dVARLSB[i];
UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -