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

📄 varoffsetdlg.cpp

📁 ADE7758校正程序,只需根据需要添加通信子程序
💻 CPP
字号:
// VarOffsetDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Calibration.h"
#include "VarOffsetDlg.h"
#include "calcomp.h"
#include "interface.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CVarOffsetDlg property page

IMPLEMENT_DYNCREATE(CVarOffsetDlg, CPropertyPage)

CVarOffsetDlg::CVarOffsetDlg() : CPropertyPage(CVarOffsetDlg::IDD)
{
	//{{AFX_DATA_INIT(CVarOffsetDlg)
	m_iPhase = 0;
	m_dClkin = 10.0e6;
	m_dMinCur = 0.05;
	m_dTestVol = 220.0;
	m_iVAROS = 0;
	m_dVARCF = 0.0;
	m_iFreq = 0;
	m_iVARCFDEN = 0;
	m_dVARCFERR = 0.0;
	m_dVARCFEXP = 0.0;
	m_iVARCFNUM = 1;
	//}}AFX_DATA_INIT
#ifdef _DEBUG
	m_dVARCF = 0.009773;
	m_iFreq = 2083;
	m_iVARCFDEN = 277;
#endif

	for (int i=0;i<3;i++)
	{
		iFreq[i] = 0;
		iVAROS[i] = 0;
		iVARCFDEN[i] = 0;
		iVARCFNUM[i] = 1;
		dVARCF[i] = 0.0;
		dVARCFEXP[i] = 0.0;
		dVARCFERR[i] = 0.0;
	}
}

CVarOffsetDlg::~CVarOffsetDlg()
{
}

void CVarOffsetDlg::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CVarOffsetDlg)
	DDX_CBIndex(pDX, IDC_COMBO_PHASE, m_iPhase);
	DDX_Text(pDX, IDC_EDIT_CLKIN, m_dClkin);
	DDX_Text(pDX, IDC_EDIT_FREQ, m_iFreq);
	DDX_Text(pDX, IDC_EDIT_TESTCUR, m_dMinCur);
	DDX_Text(pDX, IDC_EDIT_TESTVOL, m_dTestVol);
	DDX_Text(pDX, IDC_EDIT_VAROS, m_iVAROS);
	DDX_Text(pDX, IDC_EDIT_VARCF, m_dVARCF);
	DDX_Text(pDX, IDC_EDIT_VARCFDEN, m_iVARCFDEN);
	DDX_Text(pDX, IDC_EDIT_VARCFERR, m_dVARCFERR);
	DDX_Text(pDX, IDC_EDIT_VARCFEXP, m_dVARCFEXP);
	DDX_Text(pDX, IDC_EDIT_VARCFNUM, m_iVARCFNUM);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CVarOffsetDlg, CPropertyPage)
	//{{AFX_MSG_MAP(CVarOffsetDlg)
	ON_CBN_SELCHANGE(IDC_COMBO_PHASE, OnSelchangeComboPhase)
	ON_BN_CLICKED(IDC_BUTTON_WRITE, OnButtonWrite)
	ON_BN_CLICKED(IDC_BUTTON_CAL_VAROS, OnButtonCalVaros)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CVarOffsetDlg message handlers

BOOL CVarOffsetDlg::OnSetActive() 
{
	CPropertySheet* pSheet = (CPropertySheet*)GetParent();
	ASSERT_KINDOF(CPropertySheet, pSheet);
	pSheet->SetWizardButtons( PSWIZB_BACK | PSWIZB_NEXT);
	
	return CPropertyPage::OnSetActive();
}

// 三相选择改变
void CVarOffsetDlg::OnSelchangeComboPhase() 
{
	UpdateData(TRUE);
	m_iFreq = iFreq[m_iPhase];
	m_dVARCF = dVARCF[m_iPhase];
	m_iVAROS = iVAROS[m_iPhase];
	m_iVARCFDEN = iVARCFDEN[m_iPhase];
	m_iVARCFNUM = iVARCFNUM[m_iPhase];
	m_dVARCFERR = dVARCFERR[m_iPhase];
	m_dVARCFEXP = dVARCFEXP[m_iPhase];
	UpdateData(FALSE);
}

// 存入数据
void CVarOffsetDlg::OnButtonWrite() 
{
	UpdateData(TRUE);
	iFreq[m_iPhase] = m_iFreq;
	iVARCFDEN[m_iPhase] = m_iVARCFDEN;
	iVARCFNUM[m_iPhase] = m_iVARCFNUM;
	dVARCF[m_iPhase] = m_dVARCF;
	
}

// 校正偏置
void CVarOffsetDlg::OnButtonCalVaros() 
{
	int i;
	double mc = 3200.0;
	
	UpdateData(TRUE);
	
	// 计算基准频率
	double cfexp = cfref_comp(mc,m_dMinCur,m_dTestVol,1);
	for (i=0; i<3; i++)
	{
		dVARCFEXP[i] = cfexp;
	}
	
	// Step 1 - 2:	Enable VARCF output
	//				Set offset registers xVAROS to logic zero
	InitVAROffsetCalibration();

	for (i=0; i<3; i++)
	{
		// Step 3: Setup pulse output for phase A, B or C
		SetupPulseOutput(i);

		// Step 4: Setup system for Imin Vnom and pf = 0
		SetupSystem(m_dMinCur, m_dTestVol, 0);

		// Step 5: calculate values for xVAROS

		// 读取测量时的输出频率
		//dVARCF[m_iPhase] = ReadFrequencyVARCF();

		// 读取i相的实测频率
		//iFreq[i] = GetFreq(i);

		// 计算寄存器的校正值
		iVAROS[i] = offset_cal(m_dClkin,dVARCF[i],dVARCFEXP[i],iVARCFDEN[i],iVARCFNUM[i],iFreq[i],1,dVARCFERR[i]);
	}

	// Step 6: Write calibration results to registers xVAROS
	// 将计算得到的校正值写入ADE7758的相应寄存器
	WriteRegistersVAROffset(iVAROS);

	// 显示基准频率
	m_dVARCFEXP = dVARCFEXP[m_iPhase];

	m_dVARCFERR = dVARCFERR[m_iPhase];

	// 显示VAR Offset的校正结果
	m_iVAROS = iVAROS[m_iPhase];
	UpdateData(FALSE);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -