724 lines
22 KiB
C
724 lines
22 KiB
C
/*
|
|
* uf_alg_ing.c
|
|
*
|
|
* Created on: 10 ôåâð. 2020 ã.
|
|
* Author: yura
|
|
*/
|
|
|
|
|
|
|
|
#include "IQmathLib.h"
|
|
#include "DSP281x_Examples.h" // DSP281x Examples Include File
|
|
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
|
|
|
|
|
|
|
|
#include "uf_alg_ing.h"
|
|
|
|
#include <master_slave.h>
|
|
#include <params_alg.h>
|
|
#include <params_motor.h>
|
|
#include <params_norma.h>
|
|
#include <params_pwm24.h>
|
|
#include <v_pwm24_v2.h>
|
|
|
|
#include "math_pi.h"
|
|
#include "svgen_dq.h"
|
|
#include "svgen_mf.h"
|
|
#include "dq_to_alphabeta_cos.h"
|
|
|
|
|
|
|
|
//#pragma DATA_SECTION(svgen_mf1,".fast_vars");
|
|
SVGENMF svgen_mf1 = SVGENMF_DEFAULTS;
|
|
|
|
//#pragma DATA_SECTION(svgen_mf2,".fast_vars");
|
|
//SVGENMF svgen_mf2 = SVGENMF_DEFAULTS;
|
|
|
|
|
|
//#pragma DATA_SECTION(svgen_dq_1,".fast_vars");
|
|
SVGENDQ svgen_dq_1 = SVGENDQ_DEFAULTS;
|
|
//#pragma DATA_SECTION(svgen_dq_2,".fast_vars");
|
|
//SVGENDQ svgen_dq_2 = SVGENDQ_DEFAULTS;
|
|
|
|
|
|
UF_ALG_VALUE uf_alg = UF_ALG_VALUE_DEFAULT;
|
|
|
|
void InitVariablesSvgen_Ing(unsigned int freq)
|
|
{
|
|
|
|
|
|
|
|
svgen_dq_1.Ualpha = 0;
|
|
svgen_dq_1.Ubeta = 0;
|
|
|
|
// svgen_dq_2.Ualpha = 0;
|
|
// svgen_dq_2.Ubeta = 0;
|
|
|
|
uf_alg.hz_to_angle = _IQ(2.0 * PI * NORMA_FROTOR / freq ); // îäèí ðàç çà òàêò ØÈÌà
|
|
// uf_alg.hz_to_angle = _IQ(2.0 * PI * NORMA_FROTOR / freq /2.0 ); // äâà ðàçà çà òàêò ØÈÌà
|
|
|
|
|
|
|
|
|
|
// Initialize the SVGEN_MF module
|
|
// svgen_mf1.FreqMax = _IQ(6*NORMA_FROTOR/freq);
|
|
// svgen_mf2.FreqMax = _IQ(6*NORMA_FROTOR/freq);
|
|
//
|
|
//
|
|
// svgen_mf2.Offset=_IQ(0);
|
|
// svgen_mf1.Offset=_IQ(0);
|
|
|
|
init_alpha_Ing(0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void init_alpha_Ing(unsigned int master_slave)
|
|
{
|
|
|
|
|
|
uf_alg.winding_displacement_bs1 = 0;
|
|
uf_alg.winding_displacement_bs2 = 0;
|
|
|
|
|
|
// power_ain1.init(&power_ain1);
|
|
// power_ain2.init(&power_ain2);
|
|
|
|
// svgen_mf1.NewEntry = 0;//_IQ(0.5);
|
|
// svgen_mf2.NewEntry = 0;
|
|
|
|
// svgen_mf1.SectorPointer = 0;
|
|
// svgen_mf2.SectorPointer = 0;
|
|
|
|
//ñäâèã ïî óìîë÷àíèþ 0 ãðàäóñîâ
|
|
// svgen_mf1.Alpha = _IQ(0);
|
|
// svgen_mf2.Alpha = _IQ(0);
|
|
|
|
//
|
|
//
|
|
//
|
|
|
|
#if (SETUP_SDVIG_OBMOTKI == SDVIG_OBMOTKI_30_PLUS)
|
|
// 30 ãðàä. ñäâèã
|
|
// òóò íå ðàäèàíû, à íîðìèðîâàííûå ê 60 ãðàä=1.
|
|
// svgen_mf1.Alpha = _IQ(0.5);
|
|
// svgen_mf2.Alpha = _IQ(0);
|
|
//
|
|
// svgen_mf1.Full_Alpha = svgen_mf1.Alpha;
|
|
// svgen_mf2.Full_Alpha = svgen_mf2.Alpha;
|
|
|
|
// òóò ðàäèàíû
|
|
uf_alg.winding_displacement_bs1 = CONST_IQ_PI6; //_IQ(0.5);
|
|
uf_alg.winding_displacement_bs2 = 0;
|
|
|
|
#else
|
|
|
|
|
|
#if (SETUP_SDVIG_OBMOTKI == SDVIG_OBMOTKI_30_MINUS)
|
|
// -30 ãðàä. ñäâèã
|
|
// òóò íå ðàäèàíû, à íîðìèðîâàííûå ê 60 ãðàä=1.
|
|
// svgen_mf1.Alpha = _IQ(0);
|
|
// svgen_mf2.Alpha = _IQ(0.5);
|
|
// svgen_mf1.Full_Alpha = svgen_mf1.Alpha;
|
|
// svgen_mf2.Full_Alpha = svgen_mf2.Alpha;
|
|
//
|
|
// òóò ðàäèàíû
|
|
uf_alg.winding_displacement_bs2 = CONST_IQ_PI6; // _IQ(0.5);
|
|
uf_alg.winding_displacement_bs1 = 0;
|
|
|
|
#else
|
|
|
|
#if (SETUP_SDVIG_OBMOTKI == SDVIG_OBMOTKI_ZERO)
|
|
// 0 ãðàä. ñäâèã
|
|
// svgen_mf1.Alpha = _IQ(0);
|
|
// svgen_mf2.Alpha = _IQ(0);
|
|
// svgen_mf1.Full_Alpha = svgen_mf1.Alpha;
|
|
// svgen_mf2.Full_Alpha = svgen_mf2.Alpha;
|
|
|
|
uf_alg.winding_displacement_bs1 = 0;
|
|
uf_alg.winding_displacement_bs2 = 0;
|
|
|
|
#else
|
|
#error "!!!ÎØÈÁÊÀ!!! Íå îïðåäåëåí SETUP_SDVIG_OBMOTKI â params_motor.h!!!"
|
|
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////
|
|
#pragma CODE_SECTION(uf_disbalance_uzpt,".fast_run");
|
|
void uf_disbalance_uzpt(_iq Uzad_uf1, unsigned int disable_alg_u_disbalance, _iq kplus_u_disbalance, _iq k_u_disbalance,
|
|
_iq U_1, _iq U_2,
|
|
_iq Uzad_max,
|
|
_iq *Kplus_out)
|
|
{
|
|
_iq pwm_t,delta_U,Uplus,Uminus;
|
|
volatile _iq Kplus;
|
|
static _iq u1=0,u2=0;
|
|
|
|
volatile _iq KplusMax;
|
|
|
|
|
|
// change_pwm_freq(Fzad_uf);
|
|
|
|
|
|
Uplus = U_2;//filter.iqU_2_fast; // òóò Uplus áåðåò îò U2 ò.ê. òóò çíàê "-" ñêîðåå âñåãî íå ó÷èòûâàåòß ãäå-òî
|
|
Uminus = U_1;//filter.iqU_1_fast;
|
|
|
|
delta_U = Uplus - Uminus;
|
|
|
|
if (disable_alg_u_disbalance==0)
|
|
{
|
|
if (kplus_u_disbalance!=0) // åñëè ìû çàäàëè èçâíå, òî åãî è èñïîëüçóåì, ýòî äëÿ òåñòà.
|
|
{
|
|
Kplus = kplus_u_disbalance;
|
|
}
|
|
else
|
|
{
|
|
if (delta_U != 0)
|
|
{
|
|
Kplus = _IQmpy(k_u_disbalance, _IQmpy(Uzad_uf1, (_IQdiv( (Uplus-Uminus), (Uplus+Uminus) )) ) );//CONST_1 + _IQmpy(k_u_disbalance, _IQmpy(Uzad_uf1, ( _IQdiv(_IQmpy(CONST_2,Uplus),(Uplus+Uminus)) - CONST_1 ) ) );
|
|
}
|
|
else
|
|
{
|
|
Kplus = 0;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Uplus = 0;
|
|
// Uminus = 0;
|
|
// delta_U = 0;
|
|
Kplus = 0;
|
|
}
|
|
|
|
KplusMax = _IQmpy(Uzad_uf1,CONST_IQ_05);
|
|
|
|
if (Kplus>=KplusMax)
|
|
{
|
|
Kplus = KplusMax;
|
|
}
|
|
|
|
if (Kplus<=-KplusMax)
|
|
{
|
|
Kplus = -KplusMax;
|
|
}
|
|
|
|
|
|
*Kplus_out = Kplus;
|
|
|
|
|
|
}
|
|
////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// kplus_u_disbalance äîëæåí áûòü ðàâåí = 0, åñëè íå íîëü, òî ýòî òåñò
|
|
// enable_alg_u_disbalance - ðàçðåøèòü ðàáîòó àëãîðèòìà ðàçáàëàíñà
|
|
// k_u_disbalance - êîýô. ñèëû àëãîðèòìà ðàçáàëàíñà.
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//#pragma CODE_SECTION(uf_const_f_24_Ing,".fast_run");
|
|
void uf_const_f_24_Ing(_iq Fzad_uf1,_iq Fzad_uf2,_iq Uzad_uf1, _iq Uzad_uf2,
|
|
unsigned int enable_alg_u_disbalance, _iq kplus_u_disbalance, _iq k_u_disbalance,
|
|
_iq U_1, _iq U_2, unsigned int flag_km_0,
|
|
_iq Uzad_max,
|
|
_iq *Kplus_out)
|
|
{
|
|
|
|
_iq pwm_t,delta_U,Uplus,Uminus;
|
|
_iq Kplus;
|
|
static _iq u1=0,u2=0;
|
|
|
|
volatile _iq KplusMax;
|
|
|
|
|
|
uf_disbalance_uzpt(Uzad_uf1, enable_alg_u_disbalance, kplus_u_disbalance, k_u_disbalance, U_1, U_2, Uzad_max, &Kplus);
|
|
// change_pwm_freq(Fzad_uf);
|
|
|
|
*Kplus_out = Kplus;
|
|
|
|
|
|
/////////////////////////////////////////
|
|
svgen_mf1.Gain = _IQsat(Uzad_uf1,Uzad_max,0); // Pass inputs to svgen_mf1
|
|
svgen_mf1.Freq = Fzad_uf1; // Pass inputs to svgen_mf1
|
|
|
|
// svgen_mf2.Gain = _IQsat(Uzad_uf2,Uzad_max,0);; // Pass inputs to svgen_mf1
|
|
// svgen_mf2.Freq = Fzad_uf2; // Pass inputs to svgen_mf1
|
|
|
|
svgen_mf1.calc(&svgen_mf1); // Call compute function for svgen_mf1
|
|
// svgen_mf2.calc(&svgen_mf2); // Call compute function for svgen_mf2
|
|
/////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
logpar.log1 = (int16)(_IQtoIQ15(Uzad_uf1));
|
|
logpar.log2 = (int16)(_IQtoIQ15(Fzad_uf1));
|
|
logpar.log3 = (int16)((svgen_pwm24_1.Ta_0));
|
|
logpar.log4 = (int16)((svgen_pwm24_1.Ta_1));
|
|
logpar.log5 = (int16)(_IQtoIQ15(svgen_mf1.Ta));
|
|
logpar.log6 = (int16)(_IQtoIQ15(_IQdiv(Kplus,CONST_IQ_10)));
|
|
logpar.log7 = (int16)(_IQtoIQ15(_IQdiv(Kminus,CONST_IQ_10)));
|
|
logpar.log8 = (int16)(_IQtoIQ15(Uplus));
|
|
logpar.log9 = (int16)(_IQtoIQ15(Uminus));
|
|
|
|
*/
|
|
// 1
|
|
// a
|
|
pwm_t = correct_balance_uzpt_pwm24 (svgen_mf1.Ta, Kplus);
|
|
recalc_time_pwm_minimal_2_xilinx_pwm24 (&svgen_pwm24_1, &svgen_pwm24_1.Ta_0, &svgen_pwm24_1.Ta_1, &svgen_pwm24_1.Ta_imp, pwm_t);
|
|
// b
|
|
pwm_t = correct_balance_uzpt_pwm24 (svgen_mf1.Tb, Kplus);
|
|
recalc_time_pwm_minimal_2_xilinx_pwm24 (&svgen_pwm24_1, &svgen_pwm24_1.Tb_0, &svgen_pwm24_1.Tb_1, &svgen_pwm24_1.Tb_imp,pwm_t);
|
|
// c
|
|
pwm_t = correct_balance_uzpt_pwm24 (svgen_mf1.Tc, Kplus);
|
|
recalc_time_pwm_minimal_2_xilinx_pwm24 (&svgen_pwm24_1, &svgen_pwm24_1.Tc_0, &svgen_pwm24_1.Tc_1, &svgen_pwm24_1.Tc_imp,pwm_t);
|
|
|
|
// 2
|
|
svgen_pwm24_2.Ta_0 = svgen_pwm24_1.Ta_0;
|
|
svgen_pwm24_2.Ta_1 = svgen_pwm24_1.Ta_1;
|
|
svgen_pwm24_2.Tb_0 = svgen_pwm24_1.Tb_0;
|
|
svgen_pwm24_2.Tb_1 = svgen_pwm24_1.Tb_1;
|
|
svgen_pwm24_2.Tc_0 = svgen_pwm24_1.Tc_0;
|
|
svgen_pwm24_2.Tc_1 = svgen_pwm24_1.Tc_1;
|
|
|
|
// a
|
|
// pwm_t = correct_balance_uzpt_pwm24 (svgen_mf1.Ta, Kplus);
|
|
// recalc_time_pwm_minimal_2_xilinx_pwm24 (&svgen_pwm24_2, &svgen_pwm24_2.Ta_0, &svgen_pwm24_2.Ta_1, &svgen_pwm24_2.Ta_imp,pwm_t);
|
|
//// b
|
|
// pwm_t = correct_balance_uzpt_pwm24 (svgen_mf1.Tb, Kplus);
|
|
// recalc_time_pwm_minimal_2_xilinx_pwm24 (&svgen_pwm24_2, &svgen_pwm24_2.Tb_0, &svgen_pwm24_2.Tb_1, &svgen_pwm24_2.Tb_imp,pwm_t);
|
|
//// c2
|
|
// pwm_t = correct_balance_uzpt_pwm24 (svgen_mf1.Tc, Kplus);
|
|
// recalc_time_pwm_minimal_2_xilinx_pwm24 (&svgen_pwm24_2, &svgen_pwm24_2.Tc_0, &svgen_pwm24_2.Tc_1, &svgen_pwm24_2.Tc_imp,pwm_t);
|
|
//
|
|
|
|
////
|
|
if (flag_km_0)
|
|
{
|
|
svgen_pwm24_1.prev_level = V_PWM24_PREV_PWM_WORK_KM0;
|
|
svgen_pwm24_2.prev_level = V_PWM24_PREV_PWM_WORK_KM0;
|
|
}
|
|
else
|
|
{
|
|
svgen_pwm24_1.prev_level = V_PWM24_PREV_PWM_WORK;
|
|
svgen_pwm24_2.prev_level = V_PWM24_PREV_PWM_WORK;
|
|
}
|
|
|
|
|
|
|
|
/////////
|
|
/////////
|
|
|
|
// logpar.log10 = (int16)((svgen_pwm24_1.Ta_0));
|
|
// logpar.log11 = (int16)((svgen_pwm24_1.Ta_1));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////
|
|
//#pragma CODE_SECTION(test_calc_simple_dq_pwm24_Ing,".v_24pwm_run");
|
|
void test_calc_simple_dq_pwm24_Ing(_iq Fzad_uf1,_iq Uzad_uf1,
|
|
unsigned int disable_alg_u_disbalance, _iq kplus_u_disbalance, _iq k_u_disbalance,
|
|
_iq U_1, _iq U_2, unsigned int flag_km_0,
|
|
_iq Uzad_max,
|
|
_iq master_tetta,
|
|
_iq master_Uzad_uf1,
|
|
unsigned int master,
|
|
unsigned int n_bs,
|
|
_iq *Kplus_out,
|
|
_iq *tetta_out,
|
|
_iq *Uzad_out
|
|
)
|
|
{
|
|
// static _iq hz_to_angle = _IQ(2.0 * PI * NORMA_FROTOR / FREQ_PWM / 2.0);
|
|
// static _iq tetta = 0;
|
|
_iq pwm_t;
|
|
_iq Kplus;
|
|
_iq Ud = 0;
|
|
_iq Uq = 0;
|
|
_iq add_tetta = 0;
|
|
|
|
DQ_TO_ALPHABETA dq_to_ab = DQ_TO_ALPHABETA_DEFAULTS;
|
|
|
|
////////////////////////////////////////
|
|
|
|
uf_disbalance_uzpt(Uzad_uf1, disable_alg_u_disbalance, kplus_u_disbalance, k_u_disbalance,
|
|
U_1, U_2,
|
|
Uzad_max,
|
|
&Kplus);
|
|
|
|
|
|
////////////////////////////////////////
|
|
|
|
|
|
////////////////////////////////////////
|
|
////////////////////////////////////////
|
|
if (master==MODE_MASTER)
|
|
{
|
|
// ìû master
|
|
add_tetta = _IQmpy(Fzad_uf1, uf_alg.hz_to_angle);
|
|
uf_alg.tetta += add_tetta;
|
|
Ud = 0;
|
|
Uq = _IQsat(Uzad_uf1,Uzad_max,0);
|
|
}
|
|
else
|
|
if (master==MODE_SLAVE)
|
|
{
|
|
// ìû slave
|
|
add_tetta = 0;
|
|
uf_alg.tetta = master_tetta;
|
|
Ud = 0;
|
|
Uq = _IQsat(master_Uzad_uf1,Uzad_max,0);
|
|
}
|
|
else
|
|
{
|
|
// ìû íåïîíÿòíî êòî!
|
|
Ud = 0;
|
|
Uq = 0;
|
|
add_tetta = 0;
|
|
uf_alg.tetta = 0;
|
|
}
|
|
////////////////////////////////////////
|
|
////////////////////////////////////////
|
|
|
|
|
|
|
|
uf_alg.Ud = Ud;
|
|
uf_alg.Uq = Uq;
|
|
|
|
if (uf_alg.tetta > CONST_IQ_2PI)
|
|
{
|
|
uf_alg.tetta -= CONST_IQ_2PI;
|
|
}
|
|
|
|
if (uf_alg.tetta < 0)
|
|
{
|
|
uf_alg.tetta += CONST_IQ_2PI;
|
|
}
|
|
|
|
if (n_bs==0)
|
|
uf_alg.tetta_bs = uf_alg.tetta + uf_alg.winding_displacement_bs1;
|
|
else
|
|
uf_alg.tetta_bs = uf_alg.tetta + uf_alg.winding_displacement_bs2;
|
|
|
|
dq_to_ab.Tetta = uf_alg.tetta_bs;
|
|
////////////////////////////////////////
|
|
////////////////////////////////////////
|
|
|
|
dq_to_ab.Ud = Ud;
|
|
dq_to_ab.Uq = Uq;
|
|
dq_to_ab.calc2(&dq_to_ab);
|
|
|
|
svgen_dq_1.Ualpha = dq_to_ab.Ualpha;
|
|
svgen_dq_1.Ubeta = dq_to_ab.Ubeta;
|
|
////////////////////////////////////////
|
|
|
|
uf_alg.Ualpha = dq_to_ab.Ualpha;
|
|
uf_alg.Ubeta = dq_to_ab.Ubeta;
|
|
////////////////////////////////////////
|
|
|
|
|
|
// svgen_dq_1.Ualpha = 0;
|
|
// svgen_dq_1.Ubeta = 0;
|
|
|
|
svgen_dq_1.calc(&svgen_dq_1);
|
|
|
|
uf_alg.svgen_dq_Ta = svgen_dq_1.Ta;
|
|
uf_alg.svgen_dq_Tb = svgen_dq_1.Tb;
|
|
uf_alg.svgen_dq_Tc = svgen_dq_1.Tc;
|
|
////////////////////////////////////////
|
|
|
|
|
|
// dq_to_ab.Tetta = uf_alg.tetta;
|
|
// dq_to_ab.Ud = Ud;
|
|
// dq_to_ab.Uq = Uq;
|
|
// dq_to_ab.calc2(&dq_to_ab);
|
|
//
|
|
// svgen_dq_2.Ualpha = dq_to_ab.Ualpha;
|
|
// svgen_dq_2.Ubeta = dq_to_ab.Ubeta;
|
|
//
|
|
// svgen_dq_2.calc(&svgen_dq_2);
|
|
|
|
// 1
|
|
// a
|
|
pwm_t = correct_balance_uzpt_pwm24 (svgen_dq_1.Ta, Kplus);
|
|
recalc_time_pwm_minimal_2_xilinx_pwm24 (&svgen_pwm24_1, &svgen_pwm24_1.Ta_0, &svgen_pwm24_1.Ta_1, &svgen_pwm24_1.Ta_imp, pwm_t);
|
|
// b
|
|
pwm_t = correct_balance_uzpt_pwm24 (svgen_dq_1.Tb, Kplus);
|
|
recalc_time_pwm_minimal_2_xilinx_pwm24 (&svgen_pwm24_1, &svgen_pwm24_1.Tb_0, &svgen_pwm24_1.Tb_1, &svgen_pwm24_1.Tb_imp,pwm_t);
|
|
// c
|
|
pwm_t = correct_balance_uzpt_pwm24 (svgen_dq_1.Tc, Kplus);
|
|
recalc_time_pwm_minimal_2_xilinx_pwm24 (&svgen_pwm24_1, &svgen_pwm24_1.Tc_0, &svgen_pwm24_1.Tc_1, &svgen_pwm24_1.Tc_imp,pwm_t);
|
|
|
|
// 2 àíàëîãè÷íî 1 ò.ê. òóò ïàðàë. ðàáîòà â Ingeteam
|
|
svgen_pwm24_2.Ta_0 = svgen_pwm24_1.Ta_0;
|
|
svgen_pwm24_2.Ta_1 = svgen_pwm24_1.Ta_1;
|
|
svgen_pwm24_2.Tb_0 = svgen_pwm24_1.Tb_0;
|
|
svgen_pwm24_2.Tb_1 = svgen_pwm24_1.Tb_1;
|
|
svgen_pwm24_2.Tc_0 = svgen_pwm24_1.Tc_0;
|
|
svgen_pwm24_2.Tc_1 = svgen_pwm24_1.Tc_1;
|
|
|
|
//
|
|
//// a
|
|
// pwm_t = correct_balance_uzpt_pwm24 (svgen_dq_1.Ta, Kplus);
|
|
// recalc_time_pwm_minimal_2_xilinx_pwm24 (&svgen_pwm24_2, &svgen_pwm24_2.Ta_0, &svgen_pwm24_2.Ta_1, &svgen_pwm24_2.Ta_imp,pwm_t);
|
|
//// b
|
|
// pwm_t = correct_balance_uzpt_pwm24 (svgen_dq_1.Tb, Kplus);
|
|
// recalc_time_pwm_minimal_2_xilinx_pwm24 (&svgen_pwm24_2, &svgen_pwm24_2.Tb_0, &svgen_pwm24_2.Tb_1, &svgen_pwm24_2.Tb_imp,pwm_t);
|
|
//// c2
|
|
// pwm_t = correct_balance_uzpt_pwm24 (svgen_dq_1.Tc, Kplus);
|
|
// recalc_time_pwm_minimal_2_xilinx_pwm24 (&svgen_pwm24_2, &svgen_pwm24_2.Tc_0, &svgen_pwm24_2.Tc_1, &svgen_pwm24_2.Tc_imp,pwm_t);
|
|
|
|
////////////////////////////////////////
|
|
////////////////////////////////////////
|
|
|
|
////
|
|
if (flag_km_0)
|
|
{
|
|
svgen_pwm24_1.prev_level = V_PWM24_PREV_PWM_WORK_KM0;
|
|
svgen_pwm24_2.prev_level = V_PWM24_PREV_PWM_WORK_KM0;
|
|
}
|
|
else
|
|
{
|
|
svgen_pwm24_1.prev_level = V_PWM24_PREV_PWM_WORK;
|
|
svgen_pwm24_2.prev_level = V_PWM24_PREV_PWM_WORK;
|
|
}
|
|
|
|
////////////////////////////////////////
|
|
////////////////////////////////////////
|
|
|
|
|
|
// logpar.log1 = (int16)(_IQtoIQ15(uz1));
|
|
// logpar.log2 = (int16)(_IQtoIQ15(fz1));
|
|
// logpar.log3 = (int16)(_IQtoIQ15(Ud));
|
|
// logpar.log4 = (int16)(_IQtoIQ15(Uq));
|
|
// logpar.log5 = (int16)(_IQtoIQ15(svgen_dq_1.Ualpha));
|
|
// logpar.log6 = (int16)(_IQtoIQ15(svgen_dq_1.Ubeta));
|
|
// logpar.log7 = (int16)(_IQtoIQ15(svgen_dq_1.Ta));
|
|
// logpar.log8 = (int16)(_IQtoIQ15(svgen_dq_1.Tb));
|
|
// logpar.log9 = (int16)(_IQtoIQ15(svgen_dq_1.Tc));
|
|
// logpar.log10 = (int16)(_IQtoIQ12(analog.tetta));
|
|
// logpar.log11 = (int16)(svgen_pwm24_1.Ta_0.Ti);
|
|
// logpar.log12 = (int16)((svgen_pwm24_1.Ta_1.Ti));
|
|
// logpar.log13 = (int16)(svgen_pwm24_1.Tb_0.Ti);
|
|
// logpar.log14 = (int16)((svgen_pwm24_1.Tb_1.Ti));
|
|
// logpar.log15 = (int16)(svgen_pwm24_1.Tc_0.Ti);
|
|
// logpar.log16 = (int16)((svgen_pwm24_1.Tc_1.Ti));
|
|
|
|
|
|
// svgen_pwm24_1.calc(&svgen_pwm24_1);
|
|
// svgen_pwm24_2.calc(&svgen_pwm24_2);
|
|
|
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
// set_predel_dshim24_simple0(&svgen_pwm24_1.Ta_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|
// set_predel_dshim24_simple1(&svgen_pwm24_1.Ta_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|
//
|
|
// set_predel_dshim24_simple0(&svgen_pwm24_1.Tb_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|
// set_predel_dshim24_simple1(&svgen_pwm24_1.Tb_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|
//
|
|
// set_predel_dshim24_simple0(&svgen_pwm24_1.Tc_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|
// set_predel_dshim24_simple1(&svgen_pwm24_1.Tc_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|
//
|
|
// set_predel_dshim24_simple0(&svgen_pwm24_2.Ta_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|
// set_predel_dshim24_simple1(&svgen_pwm24_2.Ta_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|
//
|
|
// set_predel_dshim24_simple0(&svgen_pwm24_2.Tb_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|
// set_predel_dshim24_simple1(&svgen_pwm24_2.Tb_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|
//
|
|
// set_predel_dshim24_simple0(&svgen_pwm24_2.Tc_0,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|
// set_predel_dshim24_simple1(&svgen_pwm24_2.Tc_1,VAR_PERIOD_MIN_XTICS,VAR_FREQ_PWM_XTICS);
|
|
|
|
|
|
*Uzad_out = Uq;
|
|
|
|
if (master==MODE_MASTER)
|
|
*tetta_out = uf_alg.tetta + add_tetta; // åùå ñäâèãàåìñÿ, ò.ê. â slave ïðèäåò ñ çàäåðæêîé íà îäèí òàêò øèìà èëè íà äâà?
|
|
else
|
|
*tetta_out = uf_alg.tetta;
|
|
|
|
*Kplus_out = Kplus;
|
|
|
|
}
|
|
|
|
#pragma CODE_SECTION(test_calc_vect_dq_pwm24_Ing,".v_24pwm_run");
|
|
void test_calc_vect_dq_pwm24_Ing(_iq Theta_zad,_iq Ud_zad, _iq Uq_zad,
|
|
unsigned int disable_alg_u_disbalance, _iq kplus_u_disbalance, _iq k_u_disbalance,
|
|
_iq U_1, _iq U_2, unsigned int flag_km_0,
|
|
_iq Uzad_max,
|
|
unsigned int master,
|
|
unsigned int n_bs,
|
|
_iq *Kplus_out,
|
|
_iq *Uzad_out )
|
|
{
|
|
_iq Kplus;
|
|
_iq Ud = 0;
|
|
_iq Uq = 0;
|
|
_iq Umod = 0;
|
|
_iq pwm_t;
|
|
|
|
DQ_TO_ALPHABETA dq_to_ab = DQ_TO_ALPHABETA_DEFAULTS;
|
|
|
|
static _iq max_Km = _IQ(MAX_ZADANIE_K_M);
|
|
static _iq max_Km_square = _IQ(MAX_ZADANIE_K_M * MAX_ZADANIE_K_M);
|
|
|
|
////////////////////////////////////////
|
|
Umod = _IQsqrt(_IQmpy(Ud_zad, Ud_zad) + _IQmpy(Uq_zad, Uq_zad));
|
|
if (Umod > max_Km) {
|
|
Uq = _IQsqrt(max_Km_square - _IQmpy(Ud_zad, Ud_zad));
|
|
}
|
|
uf_disbalance_uzpt(Umod, disable_alg_u_disbalance, kplus_u_disbalance,
|
|
k_u_disbalance, U_1, U_2, Uzad_max, &Kplus);
|
|
*Kplus_out = Kplus;
|
|
*Uzad_out = Umod;
|
|
////////////////////////////////////////
|
|
////////////////////////////////////////
|
|
if (master == MODE_MASTER)
|
|
{
|
|
// ìû master
|
|
uf_alg.tetta = Theta_zad;
|
|
Ud = Ud_zad;
|
|
Uq = Uq_zad; //_IQsat(Uzad_uf1,Uzad_max,0);
|
|
}
|
|
else if (master == MODE_SLAVE)
|
|
{
|
|
// ìû slave
|
|
uf_alg.tetta = Theta_zad;
|
|
Ud = Ud_zad;
|
|
Uq = Uq_zad; //_IQsat(master_Uzad_uf1,Uzad_max,0);
|
|
}
|
|
else
|
|
{
|
|
// ìû íåïîíÿòíî êòî!
|
|
Ud = 0;
|
|
Uq = 0;
|
|
uf_alg.tetta = 0;
|
|
}
|
|
////////////////////////////////////////
|
|
////////////////////////////////////////
|
|
|
|
uf_alg.Ud = Ud;
|
|
uf_alg.Uq = Uq;
|
|
|
|
if (uf_alg.tetta > CONST_IQ_2PI)
|
|
{
|
|
uf_alg.tetta -= CONST_IQ_2PI;
|
|
}
|
|
|
|
if (uf_alg.tetta < 0)
|
|
{
|
|
uf_alg.tetta += CONST_IQ_2PI;
|
|
}
|
|
|
|
if (n_bs == 0)
|
|
uf_alg.tetta_bs = uf_alg.tetta + uf_alg.winding_displacement_bs1;
|
|
else
|
|
uf_alg.tetta_bs = uf_alg.tetta + uf_alg.winding_displacement_bs2;
|
|
|
|
dq_to_ab.Tetta = uf_alg.tetta_bs;
|
|
dq_to_ab.Ud = Ud;
|
|
dq_to_ab.Uq = Uq;
|
|
dq_to_ab.calc2(&dq_to_ab);
|
|
|
|
svgen_dq_1.Ualpha = dq_to_ab.Ualpha;
|
|
svgen_dq_1.Ubeta = dq_to_ab.Ubeta;
|
|
////////////////////////////////////////
|
|
|
|
uf_alg.Ualpha = dq_to_ab.Ualpha;
|
|
uf_alg.Ubeta = dq_to_ab.Ubeta;
|
|
|
|
svgen_dq_1.calc(&svgen_dq_1);
|
|
|
|
uf_alg.svgen_dq_Ta = svgen_dq_1.Ta;
|
|
uf_alg.svgen_dq_Tb = svgen_dq_1.Tb;
|
|
uf_alg.svgen_dq_Tc = svgen_dq_1.Tc;
|
|
|
|
// 1
|
|
// a
|
|
pwm_t = correct_balance_uzpt_pwm24(svgen_dq_1.Ta, Kplus);
|
|
recalc_time_pwm_minimal_2_xilinx_pwm24(&svgen_pwm24_1, &svgen_pwm24_1.Ta_0,
|
|
&svgen_pwm24_1.Ta_1,
|
|
&svgen_pwm24_1.Ta_imp, pwm_t);
|
|
// b
|
|
pwm_t = correct_balance_uzpt_pwm24(svgen_dq_1.Tb, Kplus);
|
|
recalc_time_pwm_minimal_2_xilinx_pwm24(&svgen_pwm24_1, &svgen_pwm24_1.Tb_0,
|
|
&svgen_pwm24_1.Tb_1,
|
|
&svgen_pwm24_1.Tb_imp, pwm_t);
|
|
// c
|
|
pwm_t = correct_balance_uzpt_pwm24(svgen_dq_1.Tc, Kplus);
|
|
recalc_time_pwm_minimal_2_xilinx_pwm24(&svgen_pwm24_1, &svgen_pwm24_1.Tc_0,
|
|
&svgen_pwm24_1.Tc_1,
|
|
&svgen_pwm24_1.Tc_imp, pwm_t);
|
|
|
|
// 2 àíàëîãè÷íî 1 ò.ê. òóò ïàðàë. ðàáîòà â Ingeteam
|
|
|
|
svgen_pwm24_2.Ta_0 = svgen_pwm24_1.Ta_0;
|
|
svgen_pwm24_2.Ta_1 = svgen_pwm24_1.Ta_1;
|
|
svgen_pwm24_2.Tb_0 = svgen_pwm24_1.Tb_0;
|
|
svgen_pwm24_2.Tb_1 = svgen_pwm24_1.Tb_1;
|
|
svgen_pwm24_2.Tc_0 = svgen_pwm24_1.Tc_0;
|
|
svgen_pwm24_2.Tc_1 = svgen_pwm24_1.Tc_1;
|
|
|
|
|
|
|
|
//// a
|
|
// pwm_t = correct_balance_uzpt_pwm24(svgen_dq_1.Ta, Kplus);
|
|
// recalc_time_pwm_minimal_2_xilinx_pwm24(&svgen_pwm24_2, &svgen_pwm24_2.Ta_0,
|
|
// &svgen_pwm24_2.Ta_1,
|
|
// &svgen_pwm24_2.Ta_imp, pwm_t);
|
|
//// b
|
|
// pwm_t = correct_balance_uzpt_pwm24(svgen_dq_1.Tb, Kplus);
|
|
// recalc_time_pwm_minimal_2_xilinx_pwm24(&svgen_pwm24_2, &svgen_pwm24_2.Tb_0,
|
|
// &svgen_pwm24_2.Tb_1,
|
|
// &svgen_pwm24_2.Tb_imp, pwm_t);
|
|
//// c2
|
|
// pwm_t = correct_balance_uzpt_pwm24(svgen_dq_1.Tc, Kplus);
|
|
// recalc_time_pwm_minimal_2_xilinx_pwm24(&svgen_pwm24_2, &svgen_pwm24_2.Tc_0,
|
|
// &svgen_pwm24_2.Tc_1,
|
|
// &svgen_pwm24_2.Tc_imp, pwm_t);
|
|
|
|
////////////////////////////////////////
|
|
////////////////////////////////////////
|
|
|
|
|
|
}
|
|
|
|
|
|
|