⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vargainladlg.cpp

📁 ADE7758校正程序,只需根据需要添加通信子程序
💻 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 + -