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

📄 phasedlg.cpp

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

#include "stdafx.h"
#include "Calibration.h"
#include "PhaseDlg.h"
#include "calcomp.h"

#include "interface.h"

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

/////////////////////////////////////////////////////////////////////////////
// CPhaseDlg property page

IMPLEMENT_DYNCREATE(CPhaseDlg, CPropertyPage)

CPhaseDlg::CPhaseDlg() : CPropertyPage(CPhaseDlg::IDD)
{
	//{{AFX_DATA_INIT(CPhaseDlg)
	m_iPhase = 0;
	m_iAPCFDEN = 0;
	m_dAPCFERR = 0.0;
	m_dAPCFEXP = 0.0;
	m_iAPCFNUM = 1;
	m_iPHCAL = 0;
	m_dTestCur = 10.0;
	m_dTestVol = 220.0;
	m_dAPCF = 0.0;
	m_iFreq = 0;
	//}}AFX_DATA_INIT
#ifdef _DEBUG
	m_dAPCF = 0.9821;
	m_iFreq = 2083;
	m_iAPCFDEN = 277;
#endif

	for (int i=0;i<3;i++)
	{
		dAPCF[i] = 0.0;
		dAPCFEXP[i] = 0.0;
		dAPCFERR[i] = 0.0;
		iAPCFNUM[i] = 1;
		iAPCFDEN[i] = 0;
		iPHCAL[i] = 0;
		iFreq[i] = 0;
	}
}

CPhaseDlg::~CPhaseDlg()
{
}

void CPhaseDlg::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPhaseDlg)
	DDX_CBIndex(pDX, IDC_COMBO_PHASE, m_iPhase);
	DDX_Text(pDX, IDC_EDIT_APCF, m_dAPCF);
	DDX_Text(pDX, IDC_EDIT_APCFDEN, m_iAPCFDEN);
	DDX_Text(pDX, IDC_EDIT_APCFERR, m_dAPCFERR);
	DDX_Text(pDX, IDC_EDIT_APCFEXP, m_dAPCFEXP);
	DDX_Text(pDX, IDC_EDIT_APCFNUM, m_iAPCFNUM);
	DDX_Text(pDX, IDC_EDIT_PHCAL, m_iPHCAL);
	DDX_Text(pDX, IDC_EDIT_TESTCUR, m_dTestCur);
	DDX_Text(pDX, IDC_EDIT_TESTVOL, m_dTestVol);
	DDX_Text(pDX, IDC_EDIT_FREQ, m_iFreq);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPhaseDlg, CPropertyPage)
	//{{AFX_MSG_MAP(CPhaseDlg)
	ON_BN_CLICKED(IDC_BUTTON_WRITE, OnButtonWrite)
	ON_CBN_SELCHANGE(IDC_COMBO_PHASE, OnSelchangeComboPhase)
	ON_BN_CLICKED(IDC_BUTTON_CAL_PHASE, OnButtonCalPhase)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPhaseDlg message handlers

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

// 将数据存入相应的变量
void CPhaseDlg::OnButtonWrite() 
{
	int i;
	UpdateData(TRUE);
	
	i = m_iPhase;
	dAPCF[i] = m_dAPCF;
	iFreq[i] = m_iFreq;
	//iAPCFNUM[i] = m_iAPCFNUM;
	//iAPCFDEN[i] = m_iAPCFDEN;
	
}

// 选择不同相时,更新显示数据
void CPhaseDlg::OnSelchangeComboPhase() 
{
	UpdateData(TRUE);
	int i = m_iPhase;
	
	m_dAPCF = dAPCF[i];
	m_dAPCFEXP = dAPCFEXP[i];
	m_iAPCFDEN = iAPCFDEN[i];
	m_iAPCFNUM = iAPCFNUM[i];
	m_dAPCFERR = dAPCFERR[i];
	m_iPHCAL = iPHCAL[i];
	m_iFreq = iFreq[i];
	
	UpdateData(FALSE);
}

// 进行相位校正
void CPhaseDlg::OnButtonCalPhase() 
{
	int i;
	double mc = 3200.0;
	
	UpdateData(TRUE);

	// 计算基准频率
	double cfexp = cfref_comp(mc,m_dTestCur,m_dTestVol,0.5);
	for (i=0;i<3;i++)
	{
		dAPCFEXP[i] = cfexp;
	}

	// Step 1: Enable APCF output
	EnableAPCF();

	for (i=0; i<3; i++)
	{
		// Step 2: Setup pulse output for phases
		SetupPulseOutput(i);

		// Step 3: Setup system for Itest, Vnom, pf=0.5
		SetupSystem( m_dTestCur, m_dTestVol, 0.5);

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

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

		// Step 4: calculate phase error and calculate values for xPHCAL
		// 根据测量频率和基准频率的差别,计算寄存器的校正值
		iPHCAL[i] = phase_cal(iFreq[i],dAPCF[i],dAPCFEXP[i],dAPCFERR[i]);
	}
	
	// Step 5: write calculation results to xPHCAL registers
	// 将计算得到的校正值写入ADE7758的相应寄存器
	WriteRegistersPhase(iPHCAL);


	// 显示基准频率
	m_dAPCFEXP = dAPCFEXP[m_iPhase];

	m_dAPCFERR = dAPCFERR[m_iPhase];

	// 显示校验结果
	m_iPHCAL = iPHCAL[m_iPhase];
	
	UpdateData(FALSE);
}

⌨️ 快捷键说明

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