From 324c42f82386e6cd6c354b1a4cf5882f4f1cc211 Mon Sep 17 00:00:00 2001
From: Razvalyaev <wot890089@mail.ru>
Date: Fri, 17 Jan 2025 12:50:59 +0300
Subject: [PATCH] =?UTF-8?q?#4=20=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD?=
 =?UTF-8?q?=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8C=20=D0=A8=D0=98=D0=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Теперь он имеет отдельные структуры для таймеров (TimerSimHandle) и структуры для управления каждой фазой (PWMPhaseSimHandle)

Поддерживает режимы формирвоания ШИМ:
- для каждого таймера отдельно (PWM_SIMULATION_MODE_REGULAR_PWM)
- через линии ТК для всей фазы разом (PWM_SIMULATION_MODE_TK_LINES).
За основу взяты из функции улитковского

В целом картина трехфазноого напряжения похожая, но ТК режим работает чуть ровнее и синхронее
---
 Inu/app_wrapper/app_init.h   |   2 +-
 Inu/app_wrapper/app_io.c     |  48 ++---
 Inu/app_wrapper/app_io.h     |   2 +-
 Inu/mcu_wrapper.c            |   4 +-
 Inu/xilinx_wrapper/pwm_sim.c | 330 ++++++++++++++++++-----------------
 Inu/xilinx_wrapper/pwm_sim.h |  85 ++++++---
 inu_23550.slx                | Bin 86559 -> 85670 bytes
 7 files changed, 258 insertions(+), 213 deletions(-)

diff --git a/Inu/app_wrapper/app_init.h b/Inu/app_wrapper/app_init.h
index 1100fa0..92f7b46 100644
--- a/Inu/app_wrapper/app_init.h
+++ b/Inu/app_wrapper/app_init.h
@@ -1,7 +1,7 @@
 #ifndef INIT28335
 #define INIT28335
 
-#include "mcu_wrapper_conf.h"
+#include "app_includes.h"
 
 void app_init(void);
 
diff --git a/Inu/app_wrapper/app_io.c b/Inu/app_wrapper/app_io.c
index 75b5f29..1a12795 100644
--- a/Inu/app_wrapper/app_io.c
+++ b/Inu/app_wrapper/app_io.c
@@ -68,36 +68,36 @@ void writeOutputParameters(real_T* xD) {
 	//xD[nn++] = t5sim.ciA;
 	//xD[nn++] = t6sim.ciA;
 
-	xD[nn++] = t1sim.ciA;
-	xD[nn++] = t2sim.ciA;
-	xD[nn++] = t1sim.ciB;
-	xD[nn++] = t2sim.ciB;
+	xD[nn++] = PWMPhaseA1.pwmOut.ci1A;
+	xD[nn++] = PWMPhaseA1.pwmOut.ci2A;
+	xD[nn++] = PWMPhaseA1.pwmOut.ci1B;
+	xD[nn++] = PWMPhaseA1.pwmOut.ci2B;
 
-	xD[nn++] = t3sim.ciA;
-	xD[nn++] = t4sim.ciA;
-	xD[nn++] = t3sim.ciB;
-	xD[nn++] = t4sim.ciB;
+	xD[nn++] = PWMPhaseB1.pwmOut.ci1A;
+	xD[nn++] = PWMPhaseB1.pwmOut.ci2A;
+	xD[nn++] = PWMPhaseB1.pwmOut.ci1B;
+	xD[nn++] = PWMPhaseB1.pwmOut.ci2B;
 
-	xD[nn++] = t5sim.ciA;
-	xD[nn++] = t6sim.ciA;
-	xD[nn++] = t5sim.ciB;
-	xD[nn++] = t6sim.ciB;
+	xD[nn++] = PWMPhaseC1.pwmOut.ci1A;
+	xD[nn++] = PWMPhaseC1.pwmOut.ci2A;
+	xD[nn++] = PWMPhaseC1.pwmOut.ci1B;
+	xD[nn++] = PWMPhaseC1.pwmOut.ci2B;
 
 
-	xD[nn++] = t7sim.ciA;
-	xD[nn++] = t8sim.ciA;
-	xD[nn++] = t7sim.ciB;
-	xD[nn++] = t8sim.ciB;
+	xD[nn++] = PWMPhaseA2.pwmOut.ci1A;
+	xD[nn++] = PWMPhaseA2.pwmOut.ci2A;
+	xD[nn++] = PWMPhaseA2.pwmOut.ci1B;
+	xD[nn++] = PWMPhaseA2.pwmOut.ci2B;
 
-	xD[nn++] = t9sim.ciA;
-	xD[nn++] = t10sim.ciA;
-	xD[nn++] = t9sim.ciB;
-	xD[nn++] = t10sim.ciB;
+	xD[nn++] = PWMPhaseB2.pwmOut.ci1A;
+	xD[nn++] = PWMPhaseB2.pwmOut.ci2A;
+	xD[nn++] = PWMPhaseB2.pwmOut.ci1B;
+	xD[nn++] = PWMPhaseB2.pwmOut.ci2B;
 
-	xD[nn++] = t11sim.ciA;
-	xD[nn++] = t12sim.ciA;
-	xD[nn++] = t11sim.ciB;
-	xD[nn++] = t12sim.ciB;
+	xD[nn++] = PWMPhaseC2.pwmOut.ci1A;
+	xD[nn++] = PWMPhaseC2.pwmOut.ci2A;
+	xD[nn++] = PWMPhaseC2.pwmOut.ci1B;
+	xD[nn++] = PWMPhaseC2.pwmOut.ci2B;
 
 	// ������ ��� ���������
 	xD[nn++] = xpwm_time.Ta0_0;
diff --git a/Inu/app_wrapper/app_io.h b/Inu/app_wrapper/app_io.h
index d99f8e4..60bcabb 100644
--- a/Inu/app_wrapper/app_io.h
+++ b/Inu/app_wrapper/app_io.h
@@ -1,5 +1,5 @@
 #include "simstruc.h"
-#include "mcu_wrapper_conf.h"
+#include "app_includes.h"
 
 #ifndef PARAM
 #define PARAM
diff --git a/Inu/mcu_wrapper.c b/Inu/mcu_wrapper.c
index e3ffe1a..994f0a8 100644
--- a/Inu/mcu_wrapper.c
+++ b/Inu/mcu_wrapper.c
@@ -79,7 +79,7 @@ void MCU_Step_Simulation(SimStruct* S, time_T time)
   */
 void MCU_Periph_Simulation(void)
 {
-    Simulate_Timers();
+    Simulate_PWM();
 }
 
 /* READ INPUTS S-FUNCTION TO MCU REGS */
@@ -130,7 +130,7 @@ void SIM_Initialize_Simulation(void)
 #endif //RUN_APP_MAIN_FUNC_THREAD
 
     /* user initialization */
-    Init_Timers();
+    Init_PWM_Simulation();
     app_init();
 
     /* clock step initialization */
diff --git a/Inu/xilinx_wrapper/pwm_sim.c b/Inu/xilinx_wrapper/pwm_sim.c
index 8cb6d13..5cf73c4 100644
--- a/Inu/xilinx_wrapper/pwm_sim.c
+++ b/Inu/xilinx_wrapper/pwm_sim.c
@@ -13,88 +13,83 @@ TimerSimHandle t10sim;
 TimerSimHandle t11sim;
 TimerSimHandle t12sim;
 
-#ifdef SIMULATION_MODE_XILINX
-XilinkTkPhaseSimHandle XilinxTkPhaseA1;
-XilinkTkPhaseSimHandle XilinxTkPhaseB1;
-XilinkTkPhaseSimHandle XilinxTkPhaseC1;
-XilinkTkPhaseSimHandle XilinxTkPhaseA2;
-XilinkTkPhaseSimHandle XilinxTkPhaseB2;
-XilinkTkPhaseSimHandle XilinxTkPhaseC2;
+PWMPhaseSimHandle PWMPhaseA1;
+PWMPhaseSimHandle PWMPhaseB1;
+PWMPhaseSimHandle PWMPhaseC1;
+PWMPhaseSimHandle PWMPhaseA2;
+PWMPhaseSimHandle PWMPhaseB2;
+PWMPhaseSimHandle PWMPhaseC2;
+
+void Simulate_PWM(void)
+{
+	Simulate_PWMPhase(&PWMPhaseA1, xpwm_time.Ta0_1, xpwm_time.Ta0_0);
+	Simulate_PWMPhase(&PWMPhaseB1, xpwm_time.Tb0_1, xpwm_time.Tb0_0);
+	Simulate_PWMPhase(&PWMPhaseC1, xpwm_time.Tc0_1, xpwm_time.Tc0_0);
+	Simulate_PWMPhase(&PWMPhaseA2, xpwm_time.Ta1_1, xpwm_time.Ta1_0);
+	Simulate_PWMPhase(&PWMPhaseB2, xpwm_time.Tb1_1, xpwm_time.Tb1_0);
+	Simulate_PWMPhase(&PWMPhaseC2, xpwm_time.Tc1_1, xpwm_time.Tc1_0);
+}
+
+void Init_PWM_Simulation(void)
+{
+	Init_PWMPhase_Simulation(&PWMPhaseA1, &t1sim, &t2sim,
+		PWM_PERIOD, PWM_TICK_STEP);
+
+	Init_PWMPhase_Simulation(&PWMPhaseB1, &t3sim, &t4sim,
+		PWM_PERIOD, PWM_TICK_STEP);
+
+	Init_PWMPhase_Simulation(&PWMPhaseC1, &t5sim, &t6sim,
+		PWM_PERIOD, PWM_TICK_STEP);
+
+	Init_PWMPhase_Simulation(&PWMPhaseA2, &t7sim, &t8sim,
+		PWM_PERIOD, PWM_TICK_STEP);
+
+	Init_PWMPhase_Simulation(&PWMPhaseB2, &t9sim, &t10sim,
+		PWM_PERIOD, PWM_TICK_STEP);
+
+	Init_PWMPhase_Simulation(&PWMPhaseC2, &t11sim, &t12sim,
+		PWM_PERIOD, PWM_TICK_STEP);
+
+
+	t1sim.simulatePwm = (void (*)())Simulate_MainTIM;
+}
+
+
+
+void Simulate_PWMPhase(PWMPhaseSimHandle* tksim, int T1, int T0)
+{
+	tksim->tsim1->simulatePwm(tksim->tsim1, T1);
+	tksim->tsim2->simulatePwm(tksim->tsim2, T0);
+
+#ifdef PWM_SIMULATION_MODE_TK_LINES
+	convertSVGenTimesToTkLines(tksim);
+	xilinxPwm3LevelSimulation(tksim);
 #endif
 
-void Simulate_Timers(void)
-{
-	SimulateMainPWM(&t1sim, xpwm_time.Ta0_1);
-	SimulateSimplePWM(&t2sim, xpwm_time.Ta0_0);
-	SimulateSimplePWM(&t3sim, xpwm_time.Tb0_1);
-	SimulateSimplePWM(&t4sim, xpwm_time.Tb0_0);
-	SimulateSimplePWM(&t5sim, xpwm_time.Tc0_1);
-	SimulateSimplePWM(&t6sim, xpwm_time.Tc0_0);
-	SimulateSimplePWM(&t7sim, xpwm_time.Ta1_1);
-	SimulateSimplePWM(&t8sim, xpwm_time.Ta1_0);
-	SimulateSimplePWM(&t9sim, xpwm_time.Tb1_1);
-	SimulateSimplePWM(&t10sim, xpwm_time.Tb1_0);
-	SimulateSimplePWM(&t11sim, xpwm_time.Tc1_1);
-	SimulateSimplePWM(&t12sim, xpwm_time.Tc1_0);
+#ifdef PWM_SIMULATION_MODE_REGULAR_PWM
+	simulateActionActionQualifierSubmodule(tksim->tsim1);
+	simulateDeadBendSubmodule(tksim->tsim1, &tksim->pwmOut.ci1A, &tksim->pwmOut.ci1B);
+	simulateTripZoneSubmodule(tksim->tsim1);
+
+	simulateActionActionQualifierSubmodule(tksim->tsim2);
+	simulateDeadBendSubmodule(tksim->tsim2, &tksim->pwmOut.ci2A, &tksim->pwmOut.ci2B);
+	simulateTripZoneSubmodule(tksim->tsim2);
+#endif
 }
 
-void Init_Timers(void)
+void Simulate_MainTIM(TimerSimHandle* tsim, int compare)
 {
-	initSimulateTim(&t1sim, FREQ_INTERNAL_GENERATOR_XILINX_TMS / FREQ_PWM, FREQ_INTERNAL_GENERATOR_XILINX_TMS * hmcu.sSimSampleTime);
-	initSimulateTim(&t2sim, FREQ_INTERNAL_GENERATOR_XILINX_TMS / FREQ_PWM, FREQ_INTERNAL_GENERATOR_XILINX_TMS * hmcu.sSimSampleTime);
-	initSimulateTim(&t3sim, FREQ_INTERNAL_GENERATOR_XILINX_TMS / FREQ_PWM, FREQ_INTERNAL_GENERATOR_XILINX_TMS * hmcu.sSimSampleTime);
-	initSimulateTim(&t4sim, FREQ_INTERNAL_GENERATOR_XILINX_TMS / FREQ_PWM, FREQ_INTERNAL_GENERATOR_XILINX_TMS * hmcu.sSimSampleTime);
-	initSimulateTim(&t5sim, FREQ_INTERNAL_GENERATOR_XILINX_TMS / FREQ_PWM, FREQ_INTERNAL_GENERATOR_XILINX_TMS * hmcu.sSimSampleTime);
-	initSimulateTim(&t6sim, FREQ_INTERNAL_GENERATOR_XILINX_TMS / FREQ_PWM, FREQ_INTERNAL_GENERATOR_XILINX_TMS * hmcu.sSimSampleTime);
-	initSimulateTim(&t7sim, FREQ_INTERNAL_GENERATOR_XILINX_TMS / FREQ_PWM, FREQ_INTERNAL_GENERATOR_XILINX_TMS * hmcu.sSimSampleTime);
-	initSimulateTim(&t8sim, FREQ_INTERNAL_GENERATOR_XILINX_TMS / FREQ_PWM, FREQ_INTERNAL_GENERATOR_XILINX_TMS * hmcu.sSimSampleTime);
-	initSimulateTim(&t9sim, FREQ_INTERNAL_GENERATOR_XILINX_TMS / FREQ_PWM, FREQ_INTERNAL_GENERATOR_XILINX_TMS * hmcu.sSimSampleTime);
-	initSimulateTim(&t10sim, FREQ_INTERNAL_GENERATOR_XILINX_TMS / FREQ_PWM, FREQ_INTERNAL_GENERATOR_XILINX_TMS * hmcu.sSimSampleTime);
-	initSimulateTim(&t11sim, FREQ_INTERNAL_GENERATOR_XILINX_TMS / FREQ_PWM, FREQ_INTERNAL_GENERATOR_XILINX_TMS * hmcu.sSimSampleTime);
-	initSimulateTim(&t12sim, FREQ_INTERNAL_GENERATOR_XILINX_TMS / FREQ_PWM, FREQ_INTERNAL_GENERATOR_XILINX_TMS * hmcu.sSimSampleTime);
-}
-
-
-void Init_Xilinx(XilinkTkPhaseSimHandle tksim)
-{
-	initSimulateTim(&t1sim, FREQ_INTERNAL_GENERATOR_XILINX_TMS / FREQ_PWM, FREQ_INTERNAL_GENERATOR_XILINX_TMS * hmcu.sSimSampleTime);
-	initSimulateTim(&t2sim, FREQ_INTERNAL_GENERATOR_XILINX_TMS / FREQ_PWM, FREQ_INTERNAL_GENERATOR_XILINX_TMS * hmcu.sSimSampleTime);
-}
-
-void initSimulateTim(TimerSimHandle* tsim, int period, double step)
-{
-	tsim->dtsim.stateDt = 1;
-	tsim->TPr = period;
-	tsim->TxCntPlus = step * 2;
-	tsim->dtsim.DtCntPeriod = (int)(DT / hmcu.sSimSampleTime);
-}
-
-void SimulateMainPWM(TimerSimHandle* tsim, int compare)
-{
-#ifdef UNITED_COUNTER
+#ifdef ENABLE_UNITED_COUNTER_FOR_ALL_PWM
 	tsim->tcntAuxPrev = tsim->tcntAux;
 	tsim->tcntAux += tsim->TxCntPlus;
 #endif
 	if (simulateTimAndGetCompare(tsim, compare))
 		mcu_simulate_step();
-
-#ifdef SIMULATION_MODE_REGULAR_PWM
-	simulateActionActionQualifierSubmodule(tsim);
-	simulateDeadBendSubmodule(tsim);
-	simulateTripZoneSubmodule(tsim);
-#endif
 }
 
-void SimulateSimplePWM(TimerSimHandle* tsim, int compare)
+void Simulate_SimpleTIM(TimerSimHandle* tsim, int compare)
 {
-	simulateTimAndGetCompare(tsim, compare, 0);
-	simulateActionActionQualifierSubmodule(tsim);
-
-#ifdef SIMULATION_MODE_REGULAR_PWM
-	simulateActionActionQualifierSubmodule(tsim);
-	simulateDeadBendSubmodule(tsim);
-	simulateTripZoneSubmodule(tsim);
-#endif
+	simulateTimAndGetCompare(tsim, compare);
 }
 
 
@@ -102,7 +97,7 @@ int simulateTimAndGetCompare(TimerSimHandle* tsim, int compare)
 {
 	int interruptflag = 0;
 
-#ifdef UNITED_COUNTER
+#ifdef ENABLE_UNITED_COUNTER_FOR_ALL_PWM
 	tsim->tcntAuxPrev = t1sim.tcntAuxPrev;
 	tsim->tcntAux = t1sim.tcntAux;
 #else
@@ -110,8 +105,8 @@ int simulateTimAndGetCompare(TimerSimHandle* tsim, int compare)
 	tsim->tcntAux += tsim->TxCntPlus;
 #endif
 
-	if (tsim->tcntAux > tsim->TPr) {
-		tsim->tcntAux -= tsim->TPr * 2.;
+	if (tsim->tcntAux > tsim->TxPeriod) {
+		tsim->tcntAux -= tsim->TxPeriod * 2.;
 		tsim->cmpA = compare;
 		interruptflag = 1;
 	}
@@ -124,146 +119,142 @@ int simulateTimAndGetCompare(TimerSimHandle* tsim, int compare)
 }
 
 
-
-
-
-
-
-void convertSVGenTimesToTkLines(XilinkTkPhaseSimHandle *tksim) {
+void convertSVGenTimesToTkLines(PWMPhaseSimHandle *tksim) {
 	TimerSimHandle* tsim1 = tksim->tsim1;
 	TimerSimHandle* tsim2 = tksim->tsim2;
 	//Phase Uni
 	if ((tsim1->cmpA < tsim1->tcnt) && (tsim2->cmpA < tsim2->tcnt)) {
-		tsim1->tkLine = 0;
-		tsim2->tkLine = 1;
+		tksim->tkLineA = 0;
+		tksim->tkLineB = 1;
 	}
 	else if ((tsim1->cmpA > tsim1->tcnt) && (tsim2->cmpA > tsim2->tcnt)) {
-		tsim1->tkLine = 1;
-		tsim2->tkLine = 0;
+		tksim->tkLineA = 1;
+		tksim->tkLineB = 0;
 	}
 	else if ((tsim1->cmpA < tsim1->tcnt) && (tsim2->cmpA > tsim2->tcnt)) {
 		//������. ������� �� �������� ������� � ������ ������ ������������. ���������.
-		tsim1->tkLine = 1;
-		tsim2->tkLine = 1;
+		tksim->tkLineA = 1;
+		tksim->tkLineB = 1;
 	}
 	else {
-		tsim1->tkLine = 0;
-		tsim2->tkLine = 1;
+		tksim->tkLineA = 0;
+		tksim->tkLineB = 0;
 	}
 
 }
 
 
-void xilinxPwm3LevelSimulation(XilinkTkPhaseSimHandle *tksim) {
-	TimerSimHandle* tsim1 = tksim->tsim1;
-	TimerSimHandle* tsim2 = tksim->tsim2;
+void xilinxPwm3LevelSimulation(PWMPhaseSimHandle *tksim) {
+	TimerSimHandle* tsim1		= tksim->tsim1;
+	TimerSimHandle* tsim2		= tksim->tsim2;
+	DeadTimeSimHandle* deadtime = &tksim->deadtime;
+	PWMPhaseOutput* pwmOut		= &tksim->pwmOut;
 
 	//����������� ��������� ����� �� � ������� ���������� �������
 	//PhaseA Uni1
-	if (tsim1->tkLine == 0 && tsim2->tkLine == 1) {
-		if ((tsim1->ciA == 0 || tsim1->ciB == 0) && tksim->dtsim.stateDt == stateDtReady) {
-			tsim2->ciA = 0;
-			tsim2->ciB = 0;
-			tksim->dtsim.dtcnt = tksim->dtsim.DtCntPeriod;
-			tksim->dtsim.stateDt = stateDtWait;
+	if (tksim->tkLineB == 0 && tksim->tkLineA == 1) {
+		if ((pwmOut->ci1A == 0 || pwmOut->ci2A == 0) && deadtime->stateDt == stateDtReady) {
+			pwmOut->ci1B = 0;
+			pwmOut->ci2B = 0;
+			deadtime->dtcnt = deadtime->DtPeriod;
+			deadtime->stateDt = stateDtWait;
 		}
-		if (tksim->dtsim.stateDt == stateDtWait) {
-			if (tksim->dtsim.dtcnt > 0)
-				tksim->dtsim.dtcnt--;
+		if (deadtime->stateDt == stateDtWait) {
+			if (deadtime->dtcnt > 0)
+				deadtime->dtcnt--;
 			else
-				tksim->dtsim.stateDt = stateDtReady;
+				deadtime->stateDt = stateDtReady;
 		}
-		if (tksim->dtsim.stateDt == stateDtReady) {
-			tsim1->ciA = 1;
-			tsim1->ciB = 1;
-			tsim2->ciA = 0;
-			tsim2->ciB = 0;
+		if (deadtime->stateDt == stateDtReady) {
+			pwmOut->ci1A = 1;
+			pwmOut->ci2A = 1;
+			pwmOut->ci1B = 0;
+			pwmOut->ci2B = 0;
 		}
 	}
-	else if (tsim1->tkLine == 1 && tsim2->tkLine == 0) {
-		if ((tsim2->ciA == 0 || tsim2->ciB == 0) && tksim->dtsim.stateDt == stateDtReady) {
-			tsim1->ciA = 0;
-			tsim1->ciB = 0;
-			tksim->dtsim.dtcnt = tksim->dtsim.DtCntPeriod;
-			tksim->dtsim.stateDt = stateDtWait;
+	else if (tksim->tkLineB == 1 && tksim->tkLineA == 0) {
+		if ((pwmOut->ci1B == 0 || pwmOut->ci2B == 0) && deadtime->stateDt == stateDtReady) {
+			pwmOut->ci1A = 0;
+			pwmOut->ci2B = 0;
+			deadtime->dtcnt = deadtime->DtPeriod;
+			deadtime->stateDt = stateDtWait;
 		}
-		if (tksim->dtsim.stateDt == stateDtWait) {
-			if (tksim->dtsim.dtcnt > 0)
-				tksim->dtsim.dtcnt--;
+		if (deadtime->stateDt == stateDtWait) {
+			if (deadtime->dtcnt > 0)
+				deadtime->dtcnt--;
 			else
-				tksim->dtsim.stateDt = stateDtReady;
+				deadtime->stateDt = stateDtReady;
 		}
-		if (tksim->dtsim.stateDt == stateDtReady) {
-			tsim1->ciA = 0;
-			tsim1->ciB = 0;
-			tsim2->ciA = 1;
-			tsim2->ciB = 1;
+		if (deadtime->stateDt == stateDtReady) {
+			pwmOut->ci1A = 0;
+			pwmOut->ci2A = 0;
+			pwmOut->ci1B = 1;
+			pwmOut->ci2B = 1;
 		}
 	}
-	else if (tsim1->tkLine == 0 && tsim2->tkLine == 0) {
-		if ((tsim1->ciB == 0 || tsim2->ciA == 0) && tksim->dtsim.stateDt == stateDtReady) {
-			tsim1->ciA = 0;
-			tsim2->ciB = 0;
-			tksim->dtsim.dtcnt = tksim->dtsim.DtCntPeriod;
-			tksim->dtsim.stateDt = stateDtWait;
+	else if (tksim->tkLineA == 0 && tksim->tkLineB == 0) {
+		if ((pwmOut->ci1B == 0 || pwmOut->ci2A == 0) && deadtime->stateDt == stateDtReady) {
+			pwmOut->ci1A = 0;
+			pwmOut->ci2B = 0;
+			deadtime->dtcnt = deadtime->DtPeriod;
+			deadtime->stateDt = stateDtWait;
 		}
-		if (tksim->dtsim.stateDt == stateDtWait) {
-			if (tksim->dtsim.dtcnt > 0)
-				tksim->dtsim.dtcnt--;
+		if (deadtime->stateDt == stateDtWait) {
+			if (deadtime->dtcnt > 0)
+				deadtime->dtcnt--;
 			else
-				tksim->dtsim.stateDt = stateDtReady;
+				deadtime->stateDt = stateDtReady;
 		}
-		if (tksim->dtsim.stateDt == stateDtReady) {
-			tsim1->ciA = 0;
-			tsim1->ciB = 1;
-			tsim2->ciA = 1;
-			tsim2->ciB = 0;
+		if (deadtime->stateDt == stateDtReady) {
+			pwmOut->ci1A = 0;
+			pwmOut->ci2A = 1;
+			pwmOut->ci1B = 1;
+			pwmOut->ci2B = 0;
 		}
 	}
 	else {
-		tsim1->ciA = 0;
-		tsim1->ciB = 0;
-		tsim2->ciA = 0;
-		tsim2->ciB = 0;
+		pwmOut->ci1A = 0;
+		pwmOut->ci2A = 0;
+		pwmOut->ci1B = 0;
+		pwmOut->ci2B = 0;
 	}
 }
 
-
 void simulateActionActionQualifierSubmodule(TimerSimHandle* tsim)
 {
 	// ���������� Action-Qualifier Submodule
 	if (tsim->cmpA > tsim->tcnt) {
-		tsim->dtsim.pre_ciA = 0;
-		tsim->dtsim.pre_ciB = 1;
+		tsim->deadtime.pre_ciA = 0;
+		tsim->deadtime.pre_ciB = 1;
 	}
 	else if (tsim->cmpA < tsim->tcnt) {
-		tsim->dtsim.pre_ciA = 1;
-		tsim->dtsim.pre_ciB = 0;
+		tsim->deadtime.pre_ciA = 1;
+		tsim->deadtime.pre_ciB = 0;
 	}
 }
 
-void simulateDeadBendSubmodule(TimerSimHandle* tsim)
+void simulateDeadBendSubmodule(TimerSimHandle* tsim, int* ciA, int* ciB)
 {
 	// ���������� Dead-Band Submodule
-	if (tsim->dtsim.stateDt == 1) {
-		tsim->ciA = tsim->dtsim.pre_ciA;
-		tsim->ciB = 0;
-		if (tsim->dtsim.pre_ciA == 1)
-			tsim->dtsim.dtcnt = tsim->dtsim.DtCntPeriod;
-		if (tsim->dtsim.dtcnt > 0)
-			tsim->dtsim.dtcnt--;
+	if (tsim->deadtime.stateDt == 0) {
+		*ciA = tsim->deadtime.pre_ciA;
+		*ciB = 0;
+		if (tsim->deadtime.pre_ciA == 1)
+			tsim->deadtime.dtcnt = tsim->deadtime.DtPeriod;
+		if (tsim->deadtime.dtcnt > 0)
+			tsim->deadtime.dtcnt--;
 		else
-			tsim->dtsim.stateDt = 2;
+			tsim->deadtime.stateDt = 1;
 	}
-	else if (tsim->dtsim.stateDt == 2) {
-		tsim->ciA = 0;
-		tsim->ciB = tsim->dtsim.pre_ciB;
-		if (tsim->dtsim.pre_ciB == 1)
-			tsim->dtsim.dtcnt = tsim->dtsim.DtCntPeriod;
-		if (tsim->dtsim.dtcnt > 0)
-			tsim->dtsim.dtcnt--;
+	else if (tsim->deadtime.stateDt == 1) {
+		*ciA = 0;
+		*ciB = tsim->deadtime.pre_ciB;
+		if (tsim->deadtime.pre_ciB == 1)
+			tsim->deadtime.dtcnt = tsim->deadtime.DtPeriod;
+		if (tsim->deadtime.dtcnt > 0)
+			tsim->deadtime.dtcnt--;
 		else
-			tsim->dtsim.stateDt = 1;
+			tsim->deadtime.stateDt = 0;
 	}
 }
 
@@ -278,4 +269,23 @@ void simulateTripZoneSubmodule(TimerSimHandle* tsim)
 	//}	// ... forces a one-shot trip event
 	//if (EPwm1Regs.TZFRC.all == 0x0004)
 	//	ci1A_DT = ci1B_DT = 0;
+}
+
+
+void Init_PWMPhase_Simulation(PWMPhaseSimHandle* tksim, TimerSimHandle* tsim1, TimerSimHandle* tsim2, int period, double step)
+{
+	tksim->tsim1 = tsim1;
+	tksim->tsim2 = tsim2;
+
+	Init_TIM_Simulation(tksim->tsim1, period, step);
+	Init_TIM_Simulation(tksim->tsim2, period, step);
+}
+
+void Init_TIM_Simulation(TimerSimHandle* tsim, int period, double step)
+{
+	tsim->deadtime.stateDt = stateDtWait;
+	tsim->TxPeriod = period;
+	tsim->TxCntPlus = step * 2;
+	tsim->deadtime.DtPeriod = (int)(DT / hmcu.sSimSampleTime);
+	tsim->simulatePwm = (void (*)())Simulate_SimpleTIM;
 }
\ No newline at end of file
diff --git a/Inu/xilinx_wrapper/pwm_sim.h b/Inu/xilinx_wrapper/pwm_sim.h
index f3b3329..9c814c5 100644
--- a/Inu/xilinx_wrapper/pwm_sim.h
+++ b/Inu/xilinx_wrapper/pwm_sim.h
@@ -5,53 +5,71 @@
 
 
 
-#define UNITED_COUNTER
+#define ENABLE_UNITED_COUNTER_FOR_ALL_PWM
 
 
-#define SIMULATION_MODE_XILINX
-//#define SIMULATION_MODE_REGULAR_PWM
+#define PWM_SIMULATION_MODE_TK_LINES
+//#define PWM_SIMULATION_MODE_REGULAR_PWM
 
-// Для моделирования Event Manager
-// ... Dead-Band Submodule
+#define PWM_PERIOD			(FREQ_INTERNAL_GENERATOR_XILINX_TMS / FREQ_PWM)
+#define PWM_TICK_STEP		(FREQ_INTERNAL_GENERATOR_XILINX_TMS * hmcu.sSimSampleTime)
+
+// Для моделирования ШИМ
+/**
+*	@brief 3lvl PWM One Phase Simulation handle
+*/
 typedef struct
 {
-	int DtCntPeriod;
+	int ci1A;
+	int ci1B;
+	int ci2A;
+	int ci2B;
+
+}PWMPhaseOutput;
+/**
+*	@brief DeadTime Simulation Handle
+*/ 
+typedef struct
+{
+	int DtPeriod;
 	int stateDt;
 	int dtcnt;
 	int pre_ciA;
 	int pre_ciB;
-}DeadBandSimHandle;
+}DeadTimeSimHandle;
 enum StateDeadTime {
 	stateDtWait = 0,
 	stateDtReady
 };
-// ... Time-Base Submodule, Counter-Compare Submodule и Event-Trigger Submodule
+/**
+*	@brief Tim Simulation Handle
+*/	
 typedef struct
 {
-
 	double TxCntPlus;
-	double TPr;
+	double TxPeriod;
 	double tcntAux;
 	double tcntAuxPrev;
 	double tcnt;
 	double cmpA;
 	double cmpB;
-	int ciA;
-	int ciB;
-	DeadBandSimHandle dtsim;
-	int tkLine;
+	DeadTimeSimHandle deadtime;
 
-	void *simulatePwm()
+	void (*simulatePwm)();
 }TimerSimHandle;
 
-
-// ... Time-Base Submodule, Counter-Compare Submodule и Event-Trigger Submodule
+/**
+*	@brief PWM Phase Simulation Handle
+*/
 typedef struct
 {
+	PWMPhaseOutput	pwmOut;
 	TimerSimHandle* tsim1;
 	TimerSimHandle* tsim2;
-	DeadBandSimHandle dtsim;
-}XilinkTkPhaseSimHandle;
+	int tkLineA;
+	int tkLineB;
+	DeadTimeSimHandle deadtime;
+}PWMPhaseSimHandle;
 
 extern TimerSimHandle t1sim;
 extern TimerSimHandle t2sim;
@@ -66,16 +84,33 @@ extern TimerSimHandle t10sim;
 extern TimerSimHandle t11sim;
 extern TimerSimHandle t12sim;
 
+extern PWMPhaseSimHandle PWMPhaseA1;
+extern PWMPhaseSimHandle PWMPhaseB1;
+extern PWMPhaseSimHandle PWMPhaseC1;
+extern PWMPhaseSimHandle PWMPhaseA2;
+extern PWMPhaseSimHandle PWMPhaseB2;
+extern PWMPhaseSimHandle PWMPhaseC2;
 
-void Simulate_Timers(void);
-void Init_Timers(void);
+void Simulate_PWM(void);
+void Init_PWM_Simulation(void);
 
+void Simulate_PWMPhase(PWMPhaseSimHandle* tksim, int T1, int T0);
+
+void Simulate_MainTIM(TimerSimHandle* tsim, int compare);
+void Simulate_SimpleTIM(TimerSimHandle* tsim, int compare);
 
-void initSimulateTim(TimerSimHandle* tsim, int period, double step);
-void SimulateMainPWM(TimerSimHandle* tsim, int compare);
-void SimulateSimplePWM(TimerSimHandle* tsim, int compare);
 int simulateTimAndGetCompare(TimerSimHandle* tsim, int compare);
 void simulateActionActionQualifierSubmodule(TimerSimHandle* tsim);
-void simulateDeadBendSubmodule(TimerSimHandle* tsim);
+void simulateDeadBendSubmodule(TimerSimHandle* tsim, int* ciA, int* ciB);
 void simulateTripZoneSubmodule(TimerSimHandle* tsim);
+
+
+void Init_TIM_Simulation(TimerSimHandle* tsim, int period, double step);
+void Init_PWMPhase_Simulation(PWMPhaseSimHandle* tksim, TimerSimHandle* tsim1, TimerSimHandle* tsim2, int period, double step);
+void convertSVGenTimesToTkLines(PWMPhaseSimHandle* tksim);
+void xilinxPwm3LevelSimulation(PWMPhaseSimHandle* tksim);
+
+#if defined(PWM_SIMULATION_MODE_REGULAR_PWM) && defined(PWM_SIMULATION_MODE_TK_LINES)
+#error Choose only one PWM simulation mode!
+#endif
 #endif //PWM_SIM
diff --git a/inu_23550.slx b/inu_23550.slx
index 29739dea5e7bf4343612242a116e7b815795f4f8..fc1bc58cd84d8fbcb012e970cf960c3857f97604 100644
GIT binary patch
delta 17508
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

delta 18369
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
Txs9!I1WNP+On2P&+-%(69$yiT