diff --git a/Inu/app_wrapper/app_configs.h b/Inu/app_wrapper/app_configs.h new file mode 100644 index 0000000..048f358 --- /dev/null +++ b/Inu/app_wrapper/app_configs.h @@ -0,0 +1,23 @@ +/************************************************************************** + Description: . + + : .. + : 2021.11.08 +**************************************************************************/ + +#ifndef DEF +#define DEF + +// , (30 .) +#define SHIFT + +#define SIMULINK_SEQUENCE V_PWM24_PHASE_SEQ_NORMAL_ABC +/* V_PWM24_PHASE_SEQ_NORMAL_ABC, - , + V_PWM24_PHASE_SEQ_NORMAL_BCA, - + V_PWM24_PHASE_SEQ_NORMAL_CAB, - + V_PWM24_PHASE_SEQ_REVERS_ACB, - + V_PWM24_PHASE_SEQ_REVERS_CBA, - + V_PWM24_PHASE_SEQ_REVERS_BAC - + */ + +#endif //DEF diff --git a/Inu/app_wrapper/app_includes.h b/Inu/app_wrapper/app_includes.h index 41ad936..02ece35 100644 --- a/Inu/app_wrapper/app_includes.h +++ b/Inu/app_wrapper/app_includes.h @@ -6,10 +6,12 @@ #ifndef _APP_INCLUDES_H_ #define _APP_INCLUDES_H_ +#include "app_configs.h" // Includes #include "DSP281x_Device.h" +#include "math.h" +#include "C28x_FPU_FastRTS.h" -#include "def.h" #include "edrk_main.h" #include "vector.h" diff --git a/Inu/app_wrapper/app_io.c b/Inu/app_wrapper/app_io.c index 1a12795..901fc28 100644 --- a/Inu/app_wrapper/app_io.c +++ b/Inu/app_wrapper/app_io.c @@ -25,7 +25,7 @@ void readInputParameters(const real_T* u) { iq_norm_ADC[0][6] = _IQ(u[nn++] / NORMA_ACP); iq_norm_ADC[0][7] = _IQ(u[nn++] / NORMA_ACP); - WRotor.iqWRotorCalcBeforeRegul1 = _IQ(u[nn++] / PI2 / NORMA_FROTOR); + WRotor.iqWRotorCalcBeforeRegul1 = _IQ(u[nn++] / (PI*2) / NORMA_FROTOR); u[nn++]; diff --git a/Inu/app_wrapper/app_wrapper.c b/Inu/app_wrapper/app_wrapper.c index dacf093..3c59e79 100644 --- a/Inu/app_wrapper/app_wrapper.c +++ b/Inu/app_wrapper/app_wrapper.c @@ -1,15 +1,5 @@ #include "mcu_wrapper_conf.h" #include "pwm_sim.h" -//#include "edrk_main.h" -//#include "vector.h" -//#include "vector_control.h" -// -//#include "xp_project.h" -//#include "xp_write_xpwm_time.h" -//#include "edrk_main.h" -//#include "vector.h" -//#include "vector_control.h" -//#include "v_rotor.h" @@ -52,7 +42,7 @@ void mcu_simulate_step(void) } - ramp_all_zadanie(0); // + ramp_all_zadanie(0); // ��� ��� �� �������� calc_norm_ADC(0); diff --git a/Inu/app_wrapper/def.h b/Inu/app_wrapper/def.h deleted file mode 100644 index ae10217..0000000 --- a/Inu/app_wrapper/def.h +++ /dev/null @@ -1,214 +0,0 @@ -/************************************************************************** - Description: . - - : .. - : 2021.11.08 -**************************************************************************/ - -#ifndef DEF -#define DEF - -// , (30 .) -#define SHIFT - -#define SIMULINK_SEQUENCE V_PWM24_PHASE_SEQ_NORMAL_ABC -/* V_PWM24_PHASE_SEQ_NORMAL_ABC, - , - V_PWM24_PHASE_SEQ_NORMAL_BCA, - - V_PWM24_PHASE_SEQ_NORMAL_CAB, - - V_PWM24_PHASE_SEQ_REVERS_ACB, - - V_PWM24_PHASE_SEQ_REVERS_CBA, - - V_PWM24_PHASE_SEQ_REVERS_BAC - - */ - -// ( state) -#define STATE_SHUTDOWN 0 // -#define STATE_STOP 1 // -#define STATE_WORK 2 // - - -// , -#define FSYSCLKOUT 200e6 //150e6 // -// prescaled version of the system clock and is used by -// all submodules within the ePWM, -// (. EPwmxRegs.TBCTL.bit.CLKDIV EPwmxRegs.TBCTL.bit.HSPCLKDIV) -#define FTBCLK (FSYSCLKOUT*0.5*0.5) -//#define FTBCLK (FSYSCLKOUT*0.5*0.5*0.5*0.5) -// , c -#define T_PWM 2220e-6 //F_PWM = 450 -//#define T_PWM 6000e-6 //F_PWM = 166.7 -// , -#define TY (T_PWM*0.5) -// " ", -#define DT 30e-6 -//#define DT 60e-6 -// Time-Base Period Register, . -#define T1_PRD (FTBCLK*T_PWM*0.5) -// , -// 10 , . -#define Y_LIM (T1_PRD - (DT + 10e-6)*FTBCLK) - - -// -#define PI2 6.283185307179586476925286766559 //pi*2 -#define SQRT2 1.4142135623730950488016887242097 //sqrt(2) -#define SQRT3 1.7320508075688772935274463415059 //sqrt(3) -#define ISQRT3 0.57735026918962576450914878050196 //1./sqrt(3) - -// -// ... , -#define P_NOM (6300e3.) -// ... , (ampl) -#define U_NOM (3300.*SQRT2) -// ... , / -#define N_NOM 180. -// ... -#define PP 6. -// ... -#define COS_FI 0.89 -// ... -#define EFF 0.968 -// ... , *^2 -#define J (87e3*0.50) -// ... , -#define S_NOM (P_NOM/(COS_FI*EFF)) -// ... , / -#define WM_NOM (N_NOM/60.*PI2) -// ... , * -#define M_NOM (P_NOM/WM_NOM) - - -// -// ... , BA -#define S_BAZ S_NOM -// ... , (ampl) -#define U_BAZ U_NOM -// ... , (ampl) -#define I_BAZ (S_BAZ*2./(U_BAZ*SQRT3)*0.5) //0.5 - .. -// ... , / -#define N_BAZ N_NOM -// ... , / -#define WM_BAZ (N_BAZ/60.*PI2) -// ... , / -#define WE_BAZ (WM_BAZ*PP) -// ... , * -#define M_BAZ (S_BAZ/WM_BAZ) -// ... , -#define PSI_BAZ (U_BAZ/(WE_BAZ*SQRT3)) -// ... , -#define L_BAZ (PSI_BAZ/I_BAZ) -// ... , -#define R_BAZ (U_BAZ/(I_BAZ*SQRT3)) - - -// -#define U_2_Y (T1_PRD*SQRT3/U_BAZ) - -// . , . 2048, -#define UDC_SENS_MAX (U_BAZ*1.15*1.3) -// , . 2048, (ampl) -#define IAC_SENS_MAX (I_BAZ*1.5) -// number of pulses per rev. (from tacho, Hall, optical sensor...etc) -#define NOP 1024. -// QEP TY . . WM_BAZ -#define QEP_CNT_DEL_NOM (NOP*4.*TY*WM_BAZ/PI2) - - -// o.e. -#define GAIN_UDC (UDC_SENS_MAX/(2048.*U_BAZ)) -#define GAIN_IAC (IAC_SENS_MAX/(2048.*I_BAZ)) -#define GAIN_WM (1.0/QEP_CNT_DEL_NOM) - - -// , o.e. -#define WM_MIN 0.03 //0.003 //? -// , -#define DECIM_PSI_WM_PM 2. //1. //5. //? - - -// for specify the PLL -#define PLLSTS_DIVSEL 2 -#define PLLCR_DIV 10 - -// -#define CONTROLLER_BIAS 3.2 -#define CONTROLLER_GAIN 2500. - -// -#define PAR_NUMBER 400 -// -#define FIRST_WRITE_PAR_NUM 150 - - - -// / (begin) -//------------------------------------------------------------------------- -// -// ---------------------------- -#define DI_24V_SOURCE_FAULT GpioDataRegs.GPBDAT.bit.GPIO50 - -// -// ---------------------------- -// ... -#define DO_GPIO00_SET GpioDataRegs.GPASET.bit.GPIO0 = 1 -#define DO_GPIO00_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO0 = 1 -#define DO_GPIO01_SET GpioDataRegs.GPASET.bit.GPIO1 = 1 -#define DO_GPIO01_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO1 = 1 -#define DO_GPIO02_SET GpioDataRegs.GPASET.bit.GPIO2 = 1 -#define DO_GPIO02_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO2 = 1 -#define DO_GPIO03_SET GpioDataRegs.GPASET.bit.GPIO3 = 1 -#define DO_GPIO03_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO3 = 1 -#define DO_GPIO04_SET GpioDataRegs.GPASET.bit.GPIO4 = 1 -#define DO_GPIO04_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO4 = 1 -#define DO_GPIO05_SET GpioDataRegs.GPASET.bit.GPIO5 = 1 -#define DO_GPIO05_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO5 = 1 -#define DO_GPIO06_SET GpioDataRegs.GPASET.bit.GPIO6 = 1 -#define DO_GPIO06_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO6 = 1 -#define DO_GPIO07_SET GpioDataRegs.GPASET.bit.GPIO7 = 1 -#define DO_GPIO07_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO7 = 1 -#define DO_GPIO08_SET GpioDataRegs.GPASET.bit.GPIO8 = 1 -#define DO_GPIO08_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO8 = 1 -#define DO_GPIO09_SET GpioDataRegs.GPASET.bit.GPIO9 = 1 -#define DO_GPIO09_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO9 = 1 -#define DO_GPIO10_SET GpioDataRegs.GPASET.bit.GPIO10 = 1 -#define DO_GPIO10_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO10 = 1 -#define DO_GPIO11_SET GpioDataRegs.GPASET.bit.GPIO11 = 1 -#define DO_GPIO11_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO11 = 1 -// ... -#define DO_GPIO019_SET GpioDataRegs.GPASET.bit.GPIO19 = 1 -#define DO_GPIO019_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO19 = 1 -#define DO_GPIO020_SET GpioDataRegs.GPASET.bit.GPIO20 = 1 -#define DO_GPIO020_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO20 = 1 -#define DO_GPIO022_SET GpioDataRegs.GPASET.bit.GPIO22 = 1 -#define DO_GPIO022_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO22 = 1 -#define DO_GPIO48_SET GpioDataRegs.GPBSET.bit.GPIO48 = 1 -#define DO_GPIO48_CLEAR GpioDataRegs.GPBCLEAR.bit.GPIO48 = 1 -#define DO_GPIO49_SET GpioDataRegs.GPBSET.bit.GPIO49 = 1 -#define DO_GPIO49_CLEAR GpioDataRegs.GPBCLEAR.bit.GPIO49 = 1 -// ... CS EEPROM -#define CS_SET GpioDataRegs.GPBSET.bit.GPIO57 = 1 -#define CS_CLEAR GpioDataRegs.GPBCLEAR.bit.GPIO57 = 1 -// ... -// ( "") -#define LED_GREEN1_ON GpioDataRegs.GPBCLEAR.bit.GPIO59 = 1 -#define LED_GREEN1_OFF GpioDataRegs.GPBSET.bit.GPIO59 = 1 -#define LED_GREEN1_TOGGLE GpioDataRegs.GPBTOGGLE.bit.GPIO59 = 1 -// ( "") -#define LED_GREEN2_ON GpioDataRegs.GPBCLEAR.bit.GPIO60 = 1 -#define LED_GREEN2_OFF GpioDataRegs.GPBSET.bit.GPIO60 = 1 -#define LED_GREEN2_TOGGLE GpioDataRegs.GPBTOGGLE.bit.GPIO60 = 1 -// ( "") -#define LED_RED_ON GpioDataRegs.GPBCLEAR.bit.GPIO61 = 1 -#define LED_RED_OFF GpioDataRegs.GPBSET.bit.GPIO61 = 1 -#define LED_RED_TOGGLE GpioDataRegs.GPBTOGGLE.bit.GPIO61 = 1 -// ... -#define DO_GPIO63_SET GpioDataRegs.GPBSET.bit.GPIO63 = 1 -#define DO_GPIO63_CLEAR GpioDataRegs.GPBCLEAR.bit.GPIO63 = 1 -//------------------------------------------------------------------------- -// / (end) - - -#include "DSP281x_Device.h" -#include "math.h" -#include "C28x_FPU_FastRTS.h" - -#endif //DEF diff --git a/Inu/run_mex.bat b/Inu/run_mex.bat index afc0064..02a7494 100644 --- a/Inu/run_mex.bat +++ b/Inu/run_mex.bat @@ -36,7 +36,6 @@ set params_libs_c=.\Inu\Src\N12_Libs\mathlib.c^ .\Inu\Src\N12_Libs\svgen_dq_v2.c^ .\Inu\Src\N12_Libs\control_station.c^ .\Inu\Src\N12_Libs\global_time.c^ - .\Inu\Src\N12_Libs\modbus_table_v2.c^ .\Inu\Src\N12_Xilinx\xp_write_xpwm_time.c diff --git a/Inu/xilinx_wrapper/pwm_sim.h b/Inu/xilinx_wrapper/pwm_sim.h index 9c814c5..3eaacdb 100644 --- a/Inu/xilinx_wrapper/pwm_sim.h +++ b/Inu/xilinx_wrapper/pwm_sim.h @@ -14,6 +14,23 @@ #define PWM_PERIOD (FREQ_INTERNAL_GENERATOR_XILINX_TMS / FREQ_PWM) #define PWM_TICK_STEP (FREQ_INTERNAL_GENERATOR_XILINX_TMS * hmcu.sSimSampleTime) + +/* ОТ УЛИТКОВСКОГО (не используется) */ +// период ШИМ, c +#define T_PWM 2220e-6 //F_PWM = 450 Гц +//#define T_PWM 6000e-6 //F_PWM = 166.7 Гц +// период вызова основной программы, с +#define TY (T_PWM*0.5) +// "мертвое время", с +#define DT 30e-6 +//#define DT 60e-6 +// Time-Base Period Register, ед. счётчика таймера +#define T1_PRD (FTBCLK*T_PWM*0.5) +// максимальное значение амплитуды напряжения управления устанавливаем так, +// чтобы минимальная ширина импульса была 10 мкс, ед. счётчика таймера +#define Y_LIM (T1_PRD - (DT + 10e-6)*FTBCLK) + + // Для моделирования ШИМ /** * @brief 3lvl PWM One Phase Simulation handle diff --git a/README.md b/README.md index b1134bb..e434ce2 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ S-Function работает особым образом: на шаге `n` он - `OUT_PORT_WIDTH` - размерность выходного вектора S-Function - `OUT_PORT_NUMB` - количество выходных векторов S-Function -_Note: дефайн `RUN_APP_MAIN_FUNC_THREAD` пока выключен и поток для main() не используется)_ +_Note: дефайн `RUN_APP_MAIN_FUNC_THREAD` пока выключен и поток для main() не используется_ _Note for future: разные вектора можно использовать для разных плат_ @@ -60,7 +60,7 @@ _Note for future: разные вектора можно использоват Оболочка для программы позволяет имитировать реальный алгоритм программы. Она инициализирует её, запускает необходимые для её работы функции и связывает её с входами/выходами S-Function Ниже приведен перечень всех файлов и краткое описание зачем они нужны: -- ***app_includes.h***     - Содержит ARM дефайны для компиляции в MSVC. +- ***app_includes.h***     - включает все необходимые для симуляции заголовочные файлы программы - ***app_init.c/.h***      - инициализация программы - ***app_io.c/.h***        - запись/считывание входов/выходов S-Function в программу - ***app_wrapper.c/.h***      - вызов функций из программы и создание заглушек для ненужных функций @@ -80,8 +80,8 @@ _Note for future: разные вектора можно использоват ###### pwm_sim ***pwm_sim.c/.h*** - симуляция ШИМ Поддерживает два режимы формирования ШИМ: -- для каждого таймера отдельно (PWM_SIMULATION_MODE_REGULAR_PWM) -- через линии ТК для всей фазы разом (PWM_SIMULATION_MODE_TK_LINES). +- `PWM_SIMULATION_MODE_REGULAR_PWM` - формирование ШИМ для каждого таймера отдельно +- `PWM_SIMULATION_MODE_TK_LINES` - через линии ТК для всей фазы разом ## Инструкция