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

📄 vargaindlg.cpp

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