📄 vargainladlg.cpp
字号:
// VarGainLCDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Calibration.h"
#include "VarGainLADlg.h"
#include "calcomp.h"
#include "interface.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CVarGainLADlg property page
IMPLEMENT_DYNCREATE(CVarGainLADlg, CPropertyPage)
CVarGainLADlg::CVarGainLADlg() : CPropertyPage(CVarGainLADlg::IDD)
{
//{{AFX_DATA_INIT(CVarGainLADlg)
m_iLineCyc = 0;
m_iVARHR = 0;
m_iVARCFDEN = 0;
m_iVARCFNUM = 1;
m_dVARCFEXP = 0.0;
m_iPHASE = 0;
m_dMaxCur = 130.0;
m_dMaxVol = 500.0;
m_dTestCur = 10.0;
m_dTestVol = 220.0;
m_dVARLSB = 0.0;
m_iVARDIV = 1;
m_iVARG = 0;
//}}AFX_DATA_INIT
#ifdef _DEBUG
m_iLineCyc = 511;
m_iVARHR = 24008;
m_iVARCFDEN = 277;
#endif
for (int i=0;i<3;i++)
{
iVARCFDEN[i]=0;
iVARCFNUM[i]=1;
dVARCFEXP[i]=0.0;
iVARHR[i] = 0;
iVARG[i]=0;
dVARLSB[i]=0.0;
}
}
CVarGainLADlg::~CVarGainLADlg()
{
}
void CVarGainLADlg::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CVarGainLADlg)
DDX_Text(pDX, IDC_EDIT_VARCFDEN, m_iVARCFDEN);
DDX_Text(pDX, IDC_EDIT_VARHR, m_iVARHR);
DDX_Text(pDX, IDC_EDIT_VARCFEXP, m_dVARCFEXP);
DDX_Text(pDX, IDC_EDIT_VARCFNUM, m_iVARCFNUM);
DDX_CBIndex(pDX, IDC_COMBO_PHASE, m_iPHASE);
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);
DDX_Text(pDX, IDC_EDIT_LINECYC, m_iLineCyc);
DDX_Text(pDX, IDC_EDIT_VARLSB, m_dVARLSB);
DDX_Text(pDX, IDC_EDIT_VARDIV, m_iVARDIV);
DDX_Text(pDX, IDC_EDIT_VARG, m_iVARG);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CVarGainLADlg, CPropertyPage)
//{{AFX_MSG_MAP(CVarGainLADlg)
ON_BN_CLICKED(IDC_BUTTON_CALVARG, OnButtonCalvarg)
ON_BN_CLICKED(IDC_BUTTON_WRITE, OnButtonWrite)
ON_CBN_SELCHANGE(IDC_COMBO_PHASE, OnSelchangeComboPhase)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CVarGainLADlg message handlers
void CVarGainLADlg::OnButtonCalvarg()
{
int i;
double mc = 3200.0;
UpdateData(TRUE);
// 计算基准频率
double cfexp = cfref_comp(mc,m_dTestCur,m_dTestVol,1);
for (i=0;i<3;i++)
{
dVARCFEXP[i] = cfexp;
}
// Step 0: Set VARCFNUM/VARCFDEN
SetRegistersVARCF(m_iVARCFNUM, m_iVARCFDEN);
// Step 1 - 4:
InitVARGainCalibration_LineMode();
// Step 5: Setup system for Itest, Vnom and pf = 0
SetupSystem(m_dTestCur, m_dTestVol, 0);
// Step 6: Reset status register
ResetStatusRegister();
// Step 7: Read all xVAHR registers
ReadRegistersVARHR(iVARHR);
// 这里actime_comp()调用使用了50Hz的固定频率,如果有变化,可以换成变量
double actime = actime_comp(m_iLineCyc, 50, 3);
// Step 8: Calculate xVARG
// 计算寄存器的校正值
for (i=0;i<3;i++)
{
iVARG[i] = gain_cal2(mc,m_dTestCur,m_dTestVol,actime,iVARHR[i],m_iVARDIV,dVARLSB[i]);
}
// Step 9: Write to xVARG
// 将计算得到的校正值写入ADE7758的相应寄存器
WriteRegistersVARGain(iVARG);
// 显示基准频率
m_dVARCFEXP = dVARCFEXP[m_iPHASE];
// 显示VAR Gain的校正结果
m_iVARG = iVARG[m_iPHASE];
m_dVARLSB = dVARLSB[m_iPHASE];
UpdateData(FALSE);
}
void CVarGainLADlg::OnButtonWrite()
{
int i;
UpdateData(TRUE);
i = m_iPHASE;
iVARHR[i] = m_iVARHR;
iVARCFDEN[i] = m_iVARCFDEN;
iVARCFNUM[i] = m_iVARCFNUM;
}
void CVarGainLADlg::OnSelchangeComboPhase()
{
UpdateData(TRUE);
int i = m_iPHASE;
m_dVARCFEXP = dVARCFEXP[i];
m_iVARCFDEN = iVARCFDEN[i];
m_iVARCFNUM = iVARCFNUM[i];
m_iVARHR = iVARHR[i];
m_iVARG = iVARG[i];
m_dVARLSB = dVARLSB[i];
UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -