matlab_23550/Inu/Src2/main/PWMTools.c
2024-12-27 10:50:32 +03:00

720 lines
19 KiB
C

#include <math.h>
#include <stdlib.h>
//#include "project.h"
#include "IQmathLib.h"
//#include "f281xpwm.h"
//
////#include "SpaceVectorPWM.h"
//#include "MemoryFunctions.h"
//#include "PWMTools.h"
//#include "pwm_vector_regul.h"
//#include "PWMTMSHandle.h"
//#include "TuneUpPlane.h"
//#include "RS_Functions.h"
//#include "CAN_setup.h"
//#include "global_time.h"
#include "params.h"
#include "vector.h"
//#include "rmp_cntl_my1.h"
//#include "vhzprof.h"
//#include "adc_tools.h"
//#include "v_pwm24.h"
//#include "break_regul.h"
//#include "break_tools.h"
//#include "detect_phase.h"
//#include "mathlib.h"
//#include "project.h"
//#include "log_to_memory.h"
//#include "rotation_speed.h"
//#include "detect_overload.h"
//#include "xp_write_xpwm_time.h"
//#include "errors.h"
//#include "sync_tools.h"
//#include "optical_bus.h"
//#include "IQmathLib.h"
#define DEF_FREQ_PWM_XTICS (3750000 / FREQ_PWM / 2)
#define DEF_PERIOD_MIN_XTICS 400 //375 ~ 100mks //315 ~ 84 mks //460//(3750000 * mks / 1000000)
#define DEF_PERIOD_MIN_BR_XTICS 165
#define DEF_FREQ_PWM_XTICS_MIN = 4261
#define DEF_FREQ_PWM_XTICS_MAX = 4687
#define STOP_ROTOR_LIMIT 27962 //2 rpm
#define STOP_ROTOR_MIN_CURRENT 4194304 //750A //3355443 //600A
#define K_MODUL_MAX 15770583 //13421772 //80% //10066329 //60% //5033164 //30% 15099494 ~ 90% //15435038 ~ 0.92%
//15770583 ~ 0.94%
#define MIN_Fsl_WHEN_STOPED 41943 //0.05 //67108 //0.08Hz
#define PWM_ONE_INTERRUPT_RUN 1
#define PWM_TWICE_INTERRUPT_RUN 0
//4464
// ×àñòîòà ØÈÌ â xilinx òèêàõ (60000000 / 16 / FREQ_PWM = 3750000 / FREQ_PWM)
#pragma DATA_SECTION(VAR_FREQ_PWM_XTICS,".fast_vars1");
int VAR_FREQ_PWM_XTICS = DEF_FREQ_PWM_XTICS;
// Ìèíèìàëüíîå çíà÷åíèå ØÈÌà â xilinx òèêàõ
#pragma DATA_SECTION(VAR_PERIOD_MAX_XTICS,".fast_vars1");
int VAR_PERIOD_MAX_XTICS = DEF_FREQ_PWM_XTICS - DEF_PERIOD_MIN_XTICS;
// Ìèíèìàëüíîå çíà÷åíèå ØÈÌà â xilinx òèêàõ (mintime+deadtime) (Fïèëû * Tìèí.êëþ÷à.ñåê = (60 / 16 / 2) * Tìêñ = (60 * Tìêñ / 16 / 2))
#pragma DATA_SECTION(VAR_PERIOD_MIN_XTICS,".fast_vars1");
int VAR_PERIOD_MIN_XTICS = DEF_PERIOD_MIN_XTICS;//
// Ìèíèìàëüíîå çíà÷åíèå ØÈÌà â xilinx òèêàõ äëÿ òîðìîçíûõ êëþ÷åé (mintime) (Fïèëû * Tìèí.êëþ÷à.ñåê = (60 / 16 / 2) * Tìêñ = (60 * Tìêñ / 16 / 2))
#pragma DATA_SECTION(VAR_PERIOD_MIN_BR_XTICS,".fast_vars1");
int VAR_PERIOD_MIN_BR_XTICS = DEF_PERIOD_MIN_BR_XTICS;//
#pragma DATA_SECTION(freq1,".fast_vars1");
_iq freq1;
#pragma DATA_SECTION(k1,".fast_vars1");
_iq k1 = 0;
RMP_MY1 rmp_freq = RMP_MY1_DEFAULTS;
//VHZPROF vhz1 = VHZPROF_DEFAULTS;
// WINDING a;
// FLAG f;
#define COUNT_SAVE_LOG_OFF 100 //Ñêîëüêî òàêòîâ ØÈÌ ñîõðàíÿåòñÿ ïîñëå îñòàíîâêè
#define COUNT_START_IMP 2
int i = 0;
/*void InitPWM()
{
WriteMemory(ADR_PWM_MODE_0, 0x0000); //Âûáèðàåì â êà÷åñòâå èñòî÷íèêà ØÈÌ TMS
}*/
static void write_swgen_pwm_times();
void write_swgen_pwm_times_split_eages(unsigned int mode_reload);
void fix_pwm_freq_synchro_ain();
void detect_level_interrupt(void);
void detect_current_saw_val(void);
void InitXPWM(void)
{
#ifdef XPWMGEN
/* Start of PWM Generator initialization*/
for(i = 0; i < 16; i++) // Îáíóëÿåì
{
WriteMemory(ADR_PWM_KEY_NUMBER, i);
WriteMemory(ADR_PWM_TIMING, 0);
}
WriteMemory(ADR_PWM_DIRECT, 0xffff);
WriteMemory(ADR_PWM_DRIVE_MODE, 0); //Choose PWM sourse PWMGenerator on Spartan 200e
WriteMemory(ADR_PWM_DEAD_TIME, 360); //Dead time in tics. 1 tic = 16.67 nsec
#ifndef _test_without_power
// OFF WDOG
WriteMemory(ADR_PWM_WDOG, 0x8005); //TODO turn on
#else
// ON WDOG
WriteMemory(ADR_PWM_WDOG, 0x0005); //TODO turn on
#endif
WriteMemory(ADR_PWM_PERIOD, VAR_FREQ_PWM_XTICS); // Saw period in tics. 1 tic = 16.67 nsec
WriteMemory(ADR_PWM_SAW_DIRECT, 0x0555);
WriteMemory(ADR_TK_MASK_0, 0);
WriteMemory(ADR_TK_MASK_1, 0xffff); //Turn off additional 16 tk lines
#if C_PROJECT_TYPE == PROJECT_BALZAM
WriteMemory(ADR_PWM_IT_TYPE, 1); //1 interrupt per PWM period
#else
WriteMemory(ADR_PWM_IT_TYPE, 0); //interrupt on each counter twist
#endif
// WriteMemory(ADR_PWM_WDOG, 0x8008);//ðàçðåøåíèå îøèáêè ïî PWM
#endif
#ifdef TMSPWMGEN
WriteMemory(ADR_PWM_MODE_0, 0x0000); //Âûáèðàåì â êà÷åñòâå èñòî÷íèêà ØÈÌ TMS
#endif
/* End îf PWM Gen init */
}
void initPWM_Variables(void)
{
//Äëÿ ïåðâîé ïèëû çàêðûòî, êîãäà âûøå çàäàííîãî óðîâíÿ, äëÿ âòîðîé íèæå
// xpwm_time.Tclosed_0 = 0;
// xpwm_time.Tclosed_1 = VAR_FREQ_PWM_XTICS + 1;
// xpwm_time.pwm_tics = VAR_FREQ_PWM_XTICS;
// xpwm_time.saw_direct.all = 0;//0x0555;
// xpwm_time.one_or_two_interrupts_run = PWM_TWICE_INTERRUPT_RUN;
init_alpha_pwm24(VAR_FREQ_PWM_XTICS);
InitVariablesSvgen(VAR_FREQ_PWM_XTICS);
init_DQ_pid();
break_resistor_managment_init();
rmp_freq.RampLowLimit = _IQ(-4); //0
rmp_freq.RampHighLimit = _IQ(4);
rmp_freq.RampPlus = _IQ(0.00005); //_IQ(0.0002);_IQ(0.000005);
rmp_freq.RampMinus = _IQ(-0.00005); //_IQ(-0.000005);
rmp_freq.DesiredInput = 0;
rmp_freq.Out = 0;
a.k = 0;
a.k1 = 0;
a.k2 = 0;
k1 = 0;
freq1 = 0;
}
#pragma CODE_SECTION(start_PWM24,".fast_run2")
void start_PWM24(int O1, int O2)
{
if ((O1 == 1) && (O2 == 1))
{
start_pwm();
}
else
{
if ((O1 == 0) && (O2 == 1))
{
start_pwm_b();
}
if ((O1 == 1) && (O2 == 0))
{
start_pwm_a();
}
}
}
inline void init_regulators()
{
if(f.Mode != 0)
{
pwm_vector_model_titov(f.iq_p_zad, f.iq_fzad, rotor.direct_rotor,
rotor.iqFout, f.Mode, 1, 1);
}
}
#define select_working_channels(go_a, go_b) go_a = !f.Obmotka1; \
go_b = !f.Obmotka2;
void PWM_interrupt()
{
static unsigned int pwm_run = 0;
static _iq Uzad1, Fzad, Uzad2;
static int count_step=0;
static int count_step_ram_off = 0;
static int count_start_impuls = 0;
static int flag_record_log = 0;
static int log_saved_to_const_mem = 0;
static int prevGo = -1;
static volatile unsigned int go_a = 0;
static volatile unsigned int go_b = 0;
static int stop_rotor_counter = 0;
static int prev_go_a = 1;
static int prev_go_b = 1;
int pwm_enable_calc_main = 0;
int start_int_xtics = 0, end_int_xtics = 0;
// i_led1_on_off(1);
if (pwm_run == 1)
{
// stop_pwm();
// errors.slow_stop.bit.PWM_interrupt_to_long |= 1;
return;
}
pwm_run = 1;
// detect_level_interrupt();
// start_int_xtics = xpwm_time.current_period;
if (xpwm_time.where_interrupt == PWM_LOW_LEVEL_INTERRUPT
|| xpwm_time.one_or_two_interrupts_run == PWM_ONE_INTERRUPT_RUN)
{
pwm_enable_calc_main = 1;
if (f.flag_second_PCH) {
fix_pwm_freq_synchro_ain();
}
}
else {
// i_sync_pin_on();
pwm_enable_calc_main = 0;
}
// project.cds_in[0].read_pbus(&project.cds_in[0]); //read direction
// project.read_all_pbus();
// optical_bus_read();
update_rot_sensors();
global_time.calc(&global_time);
//
inc_RS_timeout_cicle();
inc_CAN_timeout_cicle();
detect_I_M_overload();
DetectI_Out_BreakFase();
Rotor_measure();
if ((f.Go == 1) && (f.Stop == 0)
&& (f.rotor_stopped == 0)
// && (faults.faults5.bit.rotor_stopped == 0)
/* && (f.Ready2 == 1)*/)
{
if (f.Ready2) {f.flag_turn_On_Pump = 1;} //Íà âñ-êèé ñëó÷àé
if (f.Go != prevGo) {
set_start_mem(FAST_LOG);
// clear_mem(FAST_LOG);
// count_start_impuls = 0;
count_step = 0;
count_step_ram_off = COUNT_SAVE_LOG_OFF;
init_regulators();
stop_rotor_counter = 0;
} else {
if (f.Mode == 0) {
rmp_freq.DesiredInput = freq1;
rmp_freq.calc(&rmp_freq);
// Fzad = rmp_freq.Out;
Fzad = freq1;
// if(k1 < 87772)
// { k1 = 87772;}
Uzad1 = k1;
Uzad2 = k1;
}
select_working_channels(go_a, go_b);
if (go_a == 0 && prev_go_a != go_a) {
stop_pwm_a();
}
if (go_a == 1 && prev_go_a != go_a) {
start_pwm_a();
}
if (go_b == 0 && prev_go_b != go_b) {
stop_pwm_b();
}
if (go_b == 1 && prev_go_b != go_b) {
start_pwm_b();
}
prev_go_a = go_a;
prev_go_b = go_b;
if (count_start_impuls < COUNT_START_IMP) {
count_start_impuls++;
Fzad = 0;
rmp_freq.Out = 0;
// set_start_mem(FAST_LOG);
// set_start_mem(SLOW_LOG);
} else {
if (count_start_impuls==2)
{
if (go_a == 1 && go_b == 1) {
// òóò âûñòàâëåíî middle ñîñòîÿíèå êëþ÷åé ïåðåä ðàçðåøåíèåì âûõîäîâ pwm
// start_pwm(); äîëæåí âûçâàòüñÿ îäèí ðàç çà èçìåíåíèå f.Go
start_pwm();
} else if (go_a == 1) {
write_swgen_pwm_times(); //TODO: Check with new PWM
start_pwm_a();
} else if (go_b == 1) {
write_swgen_pwm_times();
start_pwm_b();
}
} // end if (count_start_impuls==1)
count_start_impuls++;
if (count_start_impuls > 2 * COUNT_START_IMP) {
count_start_impuls = 2 * COUNT_START_IMP;
}
}
}
flag_record_log = 1;
log_saved_to_const_mem = 0;
} else {
if (f.Discharge
&& (errors.slow_stop2.bit.Break_Resistor == 0)
&& (errors.plains_and_others.bit.er0_setted == 0)
&& (errors.umu_errors.bit.Voltage380_BSU_Off == 0))
// && !f.Stop)
{
start_break_pwm();
break_resistor_managment_calc();
} else {
//Do not stop, when come for the first time, to write to xilinx times to close keys.
//Otherwise mintime error can occure.
//Also we do not stop pwm wile break_resistor keys working
if (!count_start_impuls) {
// ýòî ïðîèçîéäåò òîëüêî íà âòîðîì òàêòå âûêëþ÷åíèÿ
stop_pwm();
}
break_resistor_set_closed();
}
if (count_step_ram_off > 0) {
count_step_ram_off--;
flag_record_log = 1;
} else {
flag_record_log = 0;
}
pwm_vector_model_titov(f.iq_p_zad, f.iq_fzad, rotor.direct_rotor,
rotor.iqFout, 0, 1, 1);
if (count_start_impuls > 0) {
count_start_impuls -= 1;
} else {
count_start_impuls = 0;
}
Uzad1 = 87772; //0.5%
Uzad2 = 87772;
k1 = Uzad1;
svgen_pwm24_1.Gain = Uzad1;
svgen_pwm24_2.Gain = Uzad1;
svgen_dq_1.Ualpha = 0;
svgen_dq_1.Ubeta = 0;
svgen_dq_2.Ualpha = 0;
svgen_dq_2.Ubeta = 0;
a.iqk = Uzad1;
}
// a.iqk1 = Uzad1;
// a.iqk2 = Uzad2;
// a.iqk = (a.iqk1 + a.iqk2) >> 1;
// a.iqf = Fzad;
prevGo = f.Go;
break_resistor_recup_calc();
break_resistor_managment_update();
if (count_start_impuls >= (2 * COUNT_START_IMP) ) {
if (f.Mode == 0) {
// test_calc_pwm24(Uzad1, Uzad2, Fzad);
if (pwm_enable_calc_main) {
test_calc_simple_dq_pwm24(Uzad1, Uzad2, Fzad, Fzad, K_MODUL_MAX);
}
analog_dq_calc_const();
} else {
if ((_IQabs(rotor.iqFout) < STOP_ROTOR_LIMIT)
&& (_IQabs(analog.iqIq1) > STOP_ROTOR_MIN_CURRENT)) {
if ((stop_rotor_counter >= 2520)) {
stop_rotor_counter = 2520;
// faults.faults5.bit.rotor_stopped |= 1;
f.rotor_stopped |= 1;
} else {
stop_rotor_counter += 1;
}
if (_IQabs(analog.Fsl) < MIN_Fsl_WHEN_STOPED) {
// faults.faults5.bit.rotor_stopped |= 1;
f.rotor_stopped |= 1;
}
} else {
if (stop_rotor_counter > 0) {
stop_rotor_counter -= 1;
} else {
stop_rotor_counter = 0;
}
}
pwm_vector_model_titov(f.iq_p_zad, f.iq_fzad, rotor.direct_rotor,
rotor.iqFout, f.Mode, 0, pwm_enable_calc_main);
}
} else {
// òóò îïÿòü middle ñîñòîÿíèå ïåðåä âûêëþ÷åíèåì êëþ÷åé
if (count_start_impuls)
{
// svgen_set_time_keys_closed(&svgen_pwm24_1);
// svgen_set_time_keys_closed(&svgen_pwm24_2);
svgen_set_time_middle_keys_open(&svgen_pwm24_1);
svgen_set_time_middle_keys_open(&svgen_pwm24_2);
}
else
// à òóò ìû óæå âûêëþ÷èëèñü
{
svgen_set_time_keys_closed(&svgen_pwm24_1);
svgen_set_time_keys_closed(&svgen_pwm24_2);
//Ñíèìàåì çàïðåò ØÈÌà
// if (faults.faults5.bit.rotor_stopped == 1) {
if (f.rotor_stopped == 1) {
if (stop_rotor_counter > 0) {
stop_rotor_counter -= 1;
} else {
// faults.faults5.bit.rotor_stopped = 0;
f.rotor_stopped = 0;
stop_rotor_counter = 0;
}
} else {
stop_rotor_counter = 0;
}
}
}
if (f.Mode) {
a.iqf = analog.iqFstator;
} else {
a.iqf = Fzad;
analog.iqFstator = Fzad;
a.iqk1 = _IQsqrt(_IQmpy(svgen_dq_1.Ualpha, svgen_dq_1.Ualpha) + _IQmpy(svgen_dq_1.Ubeta, svgen_dq_1.Ubeta)); //For output Kmodul to terminal
a.iqk2 = _IQsqrt(_IQmpy(svgen_dq_2.Ualpha, svgen_dq_2.Ualpha) + _IQmpy(svgen_dq_2.Ubeta, svgen_dq_2.Ubeta)); //end counting Uout
}
a.iqk = (a.iqk1 + a.iqk2) / 2;
// write_swgen_pwm_times();
if (xpwm_time.one_or_two_interrupts_run == PWM_ONE_INTERRUPT_RUN)
write_swgen_pwm_times_split_eages(PWM_MODE_RELOAD_FORCE);
else
{
if (f.Go == 1)
{
if (count_start_impuls == (2 * COUNT_START_IMP))
{
if (pwm_enable_calc_main)
write_swgen_pwm_times_split_eages(PWM_MODE_RELOAD_LEVEL_HIGH);
else
write_swgen_pwm_times_split_eages(PWM_MODE_RELOAD_LEVEL_LOW);
}
else
// if (pwm_enable_calc_main)
write_swgen_pwm_times_split_eages(PWM_MODE_RELOAD_FORCE);
}
else
{
if (count_start_impuls == (2 * COUNT_START_IMP) - 1)
{
if (pwm_enable_calc_main)
write_swgen_pwm_times_split_eages(PWM_MODE_RELOAD_LEVEL_HIGH);
else
write_swgen_pwm_times_split_eages(PWM_MODE_RELOAD_LEVEL_LOW);
}
else
write_swgen_pwm_times_split_eages(PWM_MODE_RELOAD_FORCE);
}
// if (pwm_enable_calc_main)
// prev_run_calc_uf = run_calc_uf;
}
// logs recording
// if ((flag_record_log && !f.stop_Log) || f.Startstoplog)
// //if (f.Log1_Log2 == 1)// && f.Go == 1 && (!f.Stop))
// //if(f.Go == 1)
// {
// test_mem_limit(FAST_LOG, !f.Ciclelog);
// count_step++;
//
// if (count_step >= 0) {
// fillADClogs();
//// logpar.log13 = flag_record_log;
//// logpar.log14 = count_start_impuls;
//// logpar.log10 = (int16)_IQtoIQ15(analog.iqIq1_filter);
//// logpar.log11 = (int16)_IQtoIQ15(rotor.iqFrotFromOptica);
// logpar.log15 = (int16) _IQtoIQ15(analog.iqIq2);
// logpar.log16 = (int16) _IQtoIQ15(a.iqk1);
// logpar.log17 = (int16) _IQtoIQ15(analog.iqId1);
// logpar.log18 = (int16) _IQtoIQ15(analog.iqIq1);
//
//// logpar.log24 = (int16) break_result_1;
//// logpar.log25 = (int16) break_result_2;
// logpar.log27 = (int16)(_IQtoIQ15(analog.iqIbtr1_1));
// logpar.log28 = (int16)(_IQtoIQ15(analog.iqIbtr2_1));
//
// getFastLogs(!f.Ciclelog);
// count_step = 0;
// }
// } else {
// if (f.Stop && log_saved_to_const_mem == 0) {
// logpar.copy_log_to_const_memory = 1;
// log_saved_to_const_mem = 1;
// }
// }
// optical_bus_write();
// detect_current_saw_val();
end_int_xtics = xpwm_time.current_period;
f.PWMcounterVal = labs(start_int_xtics - end_int_xtics);
pwm_run = 0;
i_sync_pin_off();
// i_led1_on_off(0);
}
void slow_vector_update()
{
_iq iqKzad = 0;
freq1 = _IQ (f.fzad/F_STATOR_MAX);//f.iqFRotorSetHz;
iqKzad = _IQ(f.kzad);
k1 = zad_intensiv_q(30000, 30000, k1, iqKzad); //20000
}
//#pragma CODE_SECTION(write_swgen_pwm_times,".fast_run");
//void write_swgen_pwm_times()
//{
// xpwm_time.Ta0_0 = (unsigned int) svgen_pwm24_1.Tc_0.Ti;
// xpwm_time.Ta0_1 = (unsigned int) svgen_pwm24_1.Tc_1.Ti;
// xpwm_time.Tb0_0 = (unsigned int) svgen_pwm24_1.Tb_0.Ti;
// xpwm_time.Tb0_1 = (unsigned int) svgen_pwm24_1.Tb_1.Ti;
// xpwm_time.Tc0_0 = (unsigned int) svgen_pwm24_1.Ta_0.Ti;
// xpwm_time.Tc0_1 = (unsigned int) svgen_pwm24_1.Ta_1.Ti;
//
// xpwm_time.Ta1_0 = (unsigned int) svgen_pwm24_2.Tc_0.Ti;
// xpwm_time.Ta1_1 = (unsigned int) svgen_pwm24_2.Tc_1.Ti;
// xpwm_time.Tb1_0 = (unsigned int) svgen_pwm24_2.Tb_0.Ti;
// xpwm_time.Tb1_1 = (unsigned int) svgen_pwm24_2.Tb_1.Ti;
// xpwm_time.Tc1_0 = (unsigned int) svgen_pwm24_2.Ta_0.Ti;
// xpwm_time.Tc1_1 = (unsigned int) svgen_pwm24_2.Ta_1.Ti;
//
// xpwm_time.Tbr0_0 = break_result_1;
// xpwm_time.Tbr0_1 = break_result_2;
// xpwm_time.Tbr1_0 = break_result_3;
// xpwm_time.Tbr1_1 = break_result_4;
//
// xpwm_time.write_1_2_winding_break_times(&xpwm_time);
//
//
//// logpar.log29 = xpwm_time.Ta0_0;
//// logpar.log30 = xpwm_time.Ta0_1;
//// logpar.log10 = xpwm_time.Tb0_0;
//// logpar.log11 = xpwm_time.Tb0_1;
//// logpar.log12 = xpwm_time.Tc0_0;
//// logpar.log13 = xpwm_time.Tc0_1;
//// logpar.log7 = _IQtoIQ12(svgen_pwm24_1.Alpha);
//// logpar.log8 = xpwm_time.Ta0_0 - xpwm_time.Tb0_0;
//// logpar.log9 = xpwm_time.Ta0_1 - xpwm_time.Tb0_1;
//// logpar.log10 = xpwm_time.Tb0_0 - xpwm_time.Tc0_0;
//// logpar.log11 = xpwm_time.Tb0_1 - xpwm_time.Tc0_1;
//// logpar.log12 = xpwm_time.Tc0_0 - xpwm_time.Ta0_0;
//// logpar.log13 = xpwm_time.Tc0_1 - xpwm_time.Ta0_1;
//
//}
//#pragma CODE_SECTION(write_swgen_pwm_times_split_eages,".fast_run2");
//void write_swgen_pwm_times_split_eages(unsigned int mode_reload)
//{
//
// xpwm_time.Ta0_0 = (unsigned int) svgen_pwm24_1.Tc_0.Ti;
// xpwm_time.Ta0_1 = (unsigned int) svgen_pwm24_1.Tc_1.Ti;
// xpwm_time.Tb0_0 = (unsigned int) svgen_pwm24_1.Tb_0.Ti;
// xpwm_time.Tb0_1 = (unsigned int) svgen_pwm24_1.Tb_1.Ti;
// xpwm_time.Tc0_0 = (unsigned int) svgen_pwm24_1.Ta_0.Ti;
// xpwm_time.Tc0_1 = (unsigned int) svgen_pwm24_1.Ta_1.Ti;
//
// xpwm_time.Ta1_0 = (unsigned int) svgen_pwm24_2.Tc_0.Ti;
// xpwm_time.Ta1_1 = (unsigned int) svgen_pwm24_2.Tc_1.Ti;
// xpwm_time.Tb1_0 = (unsigned int) svgen_pwm24_2.Tb_0.Ti;
// xpwm_time.Tb1_1 = (unsigned int) svgen_pwm24_2.Tb_1.Ti;
// xpwm_time.Tc1_0 = (unsigned int) svgen_pwm24_2.Ta_0.Ti;
// xpwm_time.Tc1_1 = (unsigned int) svgen_pwm24_2.Ta_1.Ti;
//
// xpwm_time.Tbr0_0 = break_result_1;
// xpwm_time.Tbr0_1 = break_result_2;
// xpwm_time.Tbr1_0 = break_result_3;
// xpwm_time.Tbr1_1 = break_result_4;
//
// xpwm_time.mode_reload = mode_reload;
//
// xpwm_time.write_1_2_winding_break_times_split(&xpwm_time);
//}
#define CONST_IQ_1 16777216 //1
//#pragma CODE_SECTION(fix_pwm_freq_synchro_ain,".fast_run");
//void fix_pwm_freq_synchro_ain()
//{
//// if (f.Sync_input_or_output == SYNC_INPUT)
// {
// sync_inc_error();
//
// if (f.disable_sync || f.sync_ready == 0)
// {
//
//
// return;
// }
//
// if (f.pwm_freq_plus_minus_zero==1)
// {
//
//
// //Increment xtics
// VAR_FREQ_PWM_XTICS = DEF_FREQ_PWM_XTICS + 1;
// WriteMemory(ADR_PWM_PERIOD, VAR_FREQ_PWM_XTICS); // Saw period in tics. 1 tic = 16.67 nsec
//
// change_freq_pwm(VAR_FREQ_PWM_XTICS);
//
//
// }
//
// if (f.pwm_freq_plus_minus_zero==-1)
// {
// //4464
// //Decrement xtics
// VAR_FREQ_PWM_XTICS = DEF_FREQ_PWM_XTICS - 1;
// WriteMemory(ADR_PWM_PERIOD, VAR_FREQ_PWM_XTICS); // Saw period in tics. 1 tic = 16.67 nsec
//
// change_freq_pwm(VAR_FREQ_PWM_XTICS);
//
// }
//
// if (f.pwm_freq_plus_minus_zero==0)
// {
// VAR_FREQ_PWM_XTICS = DEF_FREQ_PWM_XTICS - 1;
// WriteMemory(ADR_PWM_PERIOD, VAR_FREQ_PWM_XTICS);
// change_freq_pwm(VAR_FREQ_PWM_XTICS);
// }
//
// }
//
//
//
//}
//void detect_level_interrupt(void)
//{
//
// WriteMemory(ADR_SAW_REQUEST, 0x8000);
// xpwm_time.current_period = ReadMemory(ADR_SAW_VALUE);
//
// if (xpwm_time.current_period<xpwm_time.pwm_tics/2)
// xpwm_time.where_interrupt = PWM_LOW_LEVEL_INTERRUPT;
//
// if (xpwm_time.current_period>xpwm_time.pwm_tics/2)
// xpwm_time.where_interrupt = PWM_HIGH_LEVEL_INTERRUPT;
//
//}
//
//void detect_current_saw_val(void)
//{
// WriteMemory(ADR_SAW_REQUEST, 0x8000);
// xpwm_time.current_period = ReadMemory(ADR_SAW_VALUE);
//}