#3 алгоритм запускается и даже что-то считает но пока не формирует шим. Просто считает время включения ключей
This commit is contained in:
parent
adf0437341
commit
e93242da70
@ -113,9 +113,9 @@ enum {
|
|||||||
CMD_RS232_LAST
|
CMD_RS232_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
//enum {
|
||||||
false = 0, true
|
// false = 0, true
|
||||||
};
|
// };
|
||||||
|
|
||||||
#define RS_LEN_CMD CMD_RS232_LAST
|
#define RS_LEN_CMD CMD_RS232_LAST
|
||||||
|
|
||||||
@ -131,7 +131,7 @@ void resetup_rs_on_timeout_lost(int rsp);
|
|||||||
void resetup_rs(RS_DATA_STRUCT *rs_arr);
|
void resetup_rs(RS_DATA_STRUCT *rs_arr);
|
||||||
void resetup_mpu_rs(RS_DATA_STRUCT *rs_arr);
|
void resetup_mpu_rs(RS_DATA_STRUCT *rs_arr);
|
||||||
int test_rs_live(RS_DATA_STRUCT *rs_arr);
|
int test_rs_live(RS_DATA_STRUCT *rs_arr);
|
||||||
void RS_SetControllerLeading(RS_DATA_STRUCT *RS232_Arr,int bool);
|
void RS_SetControllerLeading(RS_DATA_STRUCT *RS232_Arr,int boool);
|
||||||
void RS_SetAdrAnswerController(RS_DATA_STRUCT *RS232_Arr,int set_addr_answer);
|
void RS_SetAdrAnswerController(RS_DATA_STRUCT *RS232_Arr,int set_addr_answer);
|
||||||
void SetCntrlAddr (int cntrl_addr,int cntrl_addr_for_all);
|
void SetCntrlAddr (int cntrl_addr,int cntrl_addr_for_all);
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
#include "DSP2833x_Device.h"
|
#include "DSP2833x_Device.h"
|
||||||
//#define int16 int
|
//#define int16 int
|
||||||
|
#define interrupt
|
@ -8,7 +8,6 @@
|
|||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#include "def.h"
|
|
||||||
#include "init28335.h"
|
#include "init28335.h"
|
||||||
|
|
||||||
#define FREQ_TIMER_3 (FREQ_PWM*2)
|
#define FREQ_TIMER_3 (FREQ_PWM*2)
|
||||||
@ -20,6 +19,7 @@ void init28335(void) {
|
|||||||
edrk_init_variables_matlab();
|
edrk_init_variables_matlab();
|
||||||
init_global_time_struct(FREQ_TIMER_3);
|
init_global_time_struct(FREQ_TIMER_3);
|
||||||
|
|
||||||
|
Init_Adc_Variables();
|
||||||
|
|
||||||
} //void init28335(void)
|
} //void init28335(void)
|
||||||
|
|
||||||
@ -45,6 +45,44 @@ void edrk_init_variables_matlab(void)
|
|||||||
|
|
||||||
init_ramp_all_zadanie();
|
init_ramp_all_zadanie();
|
||||||
init_all_limit_koeffs();
|
init_all_limit_koeffs();
|
||||||
|
|
||||||
|
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_SET_IZAD] = NOMINAL_SET_IZAD;
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_SET_KM] = 0;
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_SET_U_ZARYAD] = NOMINAL_U_ZARYAD;
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_SET_K_U_DISBALANCE] = NOMINAL_SET_K_U_DISBALANCE;
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_SET_K_PLUS_U_DISBALANCE] = 0;
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_SET_LIMIT_POWER] = NOMINAL_SET_LIMIT_POWER;
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_UFCONST_VECTOR] = 1;
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_SCALAR_FOC] = 0;
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_ENABLE_ON_CHARGE] = 0;
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_GO] = 1;
|
||||||
|
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_DISABLE_ON_PUMP] = 0;
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_ENABLE_ON_CHARGE] = 0;
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_DISABLE_ON_QTV] = 0;
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_DISABLE_ON_UMP] = 0;
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_MANUAL_DISCHARGE] = 0;
|
||||||
|
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_ROTOR_POWER] = 0;
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_DISABLE_INTERRUPT_SYNC] = 0;
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_DISABLE_INTERRUPT_TIMER2] = 0;
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_STOP_LOGS] = 0;
|
||||||
|
|
||||||
|
control_station.array_cmd[CONTROL_STATION_INGETEAM_PULT_RS485][CONTROL_STATION_CMD_SET_U_ZARYAD] = NOMINAL_U_ZARYAD;
|
||||||
|
control_station.array_cmd[CONTROL_STATION_MPU_SVU_CAN][CONTROL_STATION_CMD_SET_U_ZARYAD] = NOMINAL_U_ZARYAD;
|
||||||
|
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][CONTROL_STATION_CMD_WDOG_OFF] = 0;
|
||||||
|
|
||||||
|
|
||||||
|
for (int i = 0; i < CONTROL_STATION_CMD_LAST; i++)
|
||||||
|
control_station.array_cmd[CONTROL_STATION_TERMINAL_CAN][i] = control_station.array_cmd[CONTROL_STATION_TERMINAL_RS232][i];
|
||||||
|
|
||||||
|
|
||||||
|
ramp_all_zadanie(2);
|
||||||
|
|
||||||
|
set_zadanie_u_charge_matlab();
|
||||||
|
init_Uin_rms();
|
||||||
}
|
}
|
||||||
|
|
||||||
void edrk_init_matlab(void)
|
void edrk_init_matlab(void)
|
||||||
@ -65,3 +103,45 @@ void edrk_init_matlab(void)
|
|||||||
|
|
||||||
control_station.setup_time_detect_active[CONTROL_STATION_TERMINAL_RS232] = 50;
|
control_station.setup_time_detect_active[CONTROL_STATION_TERMINAL_RS232] = 50;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_zadanie_u_charge_matlab(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
// edrk.ZadanieU_Charge = edrk.ZadanieU_Charge_RS;
|
||||||
|
|
||||||
|
// edrk.iq_ZadanieU_Charge = _IQ(edrk.ZadanieU_Charge/NORMA_ACP);
|
||||||
|
|
||||||
|
if (edrk.zadanie.ZadanieU_Charge <= 100)
|
||||||
|
{
|
||||||
|
edrk.iqMIN_U_ZPT = _IQ(-50.0 / NORMA_ACP);
|
||||||
|
edrk.iqMIN_U_IN = _IQ(-50.0 / NORMA_ACP);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
edrk.iqMIN_U_ZPT = _IQ(edrk.zadanie.ZadanieU_Charge * MIN_U_PROC / NORMA_ACP);
|
||||||
|
edrk.iqMIN_U_IN = _IQ(edrk.zadanie.ZadanieU_Charge * MIN_U_PROC / NORMA_ACP);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (edrk.zadanie.ZadanieU_Charge < LEVEL_DETECT_U_SMALL)
|
||||||
|
{
|
||||||
|
edrk.iqMAX_U_ZPT_Predzaryad = _IQ(edrk.zadanie.ZadanieU_Charge * MAX_U_PROC_SMALL / NORMA_ACP);
|
||||||
|
edrk.iqMAX_U_ZPT_Global = edrk.iqMAX_U_ZPT_Predzaryad + _IQ(ADD_U_MAX_GLOBAL_SMALL / NORMA_ACP); // +500V
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
edrk.iqMAX_U_ZPT_Predzaryad = _IQ(edrk.zadanie.ZadanieU_Charge * MAX_U_PROC / NORMA_ACP);
|
||||||
|
edrk.iqMAX_U_ZPT_Global = edrk.iqMAX_U_ZPT_Predzaryad + _IQ(ADD_U_MAX_GLOBAL / NORMA_ACP); // +200V
|
||||||
|
|
||||||
|
if (edrk.iqMAX_U_ZPT_Global > U_D_MAX_ERROR_GLOBAL)
|
||||||
|
edrk.iqMAX_U_ZPT_Global = U_D_MAX_ERROR_GLOBAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
edrk.iqMAX_U_ZPT = edrk.iqMAX_U_ZPT_Global;//_IQ(edrk.zadanie.ZadanieU_Charge*MAX_U_PROC/NORMA_ACP);
|
||||||
|
edrk.iqMAX_U_IN = _IQ(edrk.zadanie.ZadanieU_Charge * MAX_U_PROC / NORMA_ACP);
|
||||||
|
|
||||||
|
edrk.zadanie.iq_set_break_level = _IQ(NOMINAL_U_BREAK_LEVEL / NORMA_ACP);
|
||||||
|
|
||||||
|
}
|
@ -7,4 +7,6 @@ void init28335(void);
|
|||||||
|
|
||||||
void edrk_init_matlab(void);
|
void edrk_init_matlab(void);
|
||||||
void edrk_init_variables_matlab(void);
|
void edrk_init_variables_matlab(void);
|
||||||
|
void set_zadanie_u_charge_matlab(void);
|
||||||
|
void init_Uin_rms(void);
|
||||||
#endif //INIT28335
|
#endif //INIT28335
|
||||||
|
@ -1,15 +1,16 @@
|
|||||||
#include "DSP281x_Device.h"
|
#include "controller.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"
|
||||||
|
|
||||||
#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"
|
|
||||||
|
|
||||||
T_project project = {0};
|
T_project project = {0};
|
||||||
|
|
||||||
@ -20,6 +21,71 @@ FLAG f = FLAG_DEFAULTS;
|
|||||||
|
|
||||||
WRotorValues WRotor = WRotorValues_DEFAULTS;
|
WRotorValues WRotor = WRotorValues_DEFAULTS;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void mcu_simulate_step(void)
|
||||||
|
{
|
||||||
|
int ff = 0;
|
||||||
|
static _iq Uzad1 = 0, Fzad = 0, Uzad2 = 0, Izad_out = 0, Uzad_from_master = 0;
|
||||||
|
_iq wd;
|
||||||
|
|
||||||
|
if (edrk.flag_second_PCH == 0) {
|
||||||
|
wd = uf_alg.winding_displacement_bs1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
wd = uf_alg.winding_displacement_bs2;
|
||||||
|
}
|
||||||
|
|
||||||
|
//parse_parameters_from_all_control_station();
|
||||||
|
|
||||||
|
//ff = control_station.active_array_cmd[CONTROL_STATION_CMD_SET_ROTOR];
|
||||||
|
//control_station.array_cmd[CONTROL_STATION_INGETEAM_PULT_RS485][CONTROL_STATION_CMD_SET_ROTOR] = ff;
|
||||||
|
//control_station.array_cmd[CONTROL_STATION_VPU_CAN][CONTROL_STATION_CMD_SET_ROTOR] = ff;
|
||||||
|
//control_station.array_cmd[CONTROL_STATION_ZADATCHIK_CAN][CONTROL_STATION_CMD_SET_ROTOR] = ff;
|
||||||
|
|
||||||
|
//ff = control_station.active_array_cmd[CONTROL_STATION_CMD_SET_POWER];
|
||||||
|
//control_station.array_cmd[CONTROL_STATION_INGETEAM_PULT_RS485][CONTROL_STATION_CMD_SET_POWER] = ff;
|
||||||
|
|
||||||
|
|
||||||
|
//if (control_station.active_array_cmd[CONTROL_STATION_CMD_ROTOR_POWER])
|
||||||
|
//{
|
||||||
|
// control_station.array_cmd[CONTROL_STATION_ZADATCHIK_CAN][CONTROL_STATION_CMD_SET_ROTOR] = 0;
|
||||||
|
// control_station.array_cmd[CONTROL_STATION_VPU_CAN][CONTROL_STATION_CMD_SET_ROTOR] = 0;
|
||||||
|
//}
|
||||||
|
//parse_analog_data_from_active_control_station_to_alg();
|
||||||
|
|
||||||
|
calc_norm_ADC_0(0);
|
||||||
|
|
||||||
|
vectorControlConstId(edrk.zadanie.iq_power_zad_rmp, edrk.zadanie.iq_oborots_zad_hz_rmp,
|
||||||
|
WRotor.RotorDirectionSlow, WRotor.iqWRotorSumFilter,
|
||||||
|
edrk.Mode_ScalarVectorUFConst,
|
||||||
|
edrk.MasterSlave, edrk.zadanie.iq_Izad, wd,
|
||||||
|
edrk.master_theta, edrk.master_Iq, edrk.iq_power_kw_another_bs,
|
||||||
|
&edrk.tetta_to_slave, &edrk.Iq_to_slave, &edrk.P_to_master,
|
||||||
|
0, 0);
|
||||||
|
|
||||||
|
test_calc_vect_dq_pwm24_Ing(vect_control.iqTheta, vect_control.iqUdKm, vect_control.iqUqKm,
|
||||||
|
edrk.disable_alg_u_disbalance,
|
||||||
|
edrk.zadanie.iq_kplus_u_disbalance_rmp, edrk.zadanie.iq_k_u_disbalance_rmp,
|
||||||
|
filter.iqU_1_fast, filter.iqU_2_fast,
|
||||||
|
0,
|
||||||
|
edrk.Uzad_max,
|
||||||
|
edrk.MasterSlave,
|
||||||
|
edrk.flag_second_PCH,
|
||||||
|
&edrk.Kplus, &edrk.Uzad_to_slave);
|
||||||
|
analog.PowerFOC = edrk.P_to_master;
|
||||||
|
Fzad = vect_control.iqFstator;
|
||||||
|
Izad_out = edrk.Iq_to_slave;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void project_read_all_pbus2()
|
void project_read_all_pbus2()
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -130,7 +196,9 @@ void WriteMemory(unsigned long addr, unsigned int data)
|
|||||||
//(*(volatile int *)( addr )) = data;
|
//(*(volatile int *)( addr )) = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void func_unpack_answer_from_Ingeteam(unsigned int a) {}
|
||||||
|
void unpack_answer_from_MPU_SVU_CAN(unsigned int a) {}
|
||||||
|
int get_real_in_mbox(int a, int b) {}
|
||||||
|
|
||||||
void start_pwm(void)
|
void start_pwm(void)
|
||||||
{
|
{
|
||||||
|
@ -4,9 +4,8 @@
|
|||||||
#include "edrk_main.h"
|
#include "edrk_main.h"
|
||||||
|
|
||||||
|
|
||||||
|
void mcu_simulate_step(void);
|
||||||
void init_flag_a(void);
|
void init_flag_a(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
53
Inu/Src/main_matlab/param.c
Normal file
53
Inu/Src/main_matlab/param.c
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
Description: Ôóíêöèè äëÿ ïðè¸ìà è âûäà÷è ïàðàìåòðîâ.
|
||||||
|
|
||||||
|
Àâòîð: Óëèòîâñêèé Ä.È.
|
||||||
|
Äàòà ïîñëåäíåãî îáíîâëåíèÿ: 2021.11.08
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#include "param.h"
|
||||||
|
|
||||||
|
int Unites[UNIT_QUA_UNITS][UNIT_LEN];
|
||||||
|
int CAN_timeout[UNIT_QUA];
|
||||||
|
RS_DATA_STRUCT rs_a = RS_DATA_STRUCT_DEFAULT, rs_b = RS_DATA_STRUCT_DEFAULT;
|
||||||
|
|
||||||
|
// Èçìåíÿåò çíà÷åíèå ïàðàìåòðà
|
||||||
|
void readInputParameters(const real_T *u) {
|
||||||
|
int nn = 0;
|
||||||
|
|
||||||
|
iq_norm_ADC[0][0] = _IQ(u[nn++]/NORMA_ACP);
|
||||||
|
iq_norm_ADC[0][1] = _IQ(u[nn++]/NORMA_ACP);
|
||||||
|
iq_norm_ADC[0][2] = _IQ(u[nn++]/NORMA_ACP);
|
||||||
|
iq_norm_ADC[0][3] = _IQ(u[nn++]/NORMA_ACP);
|
||||||
|
iq_norm_ADC[0][4] = _IQ(u[nn++]/NORMA_ACP);
|
||||||
|
iq_norm_ADC[0][5] = _IQ(u[nn++]/NORMA_ACP);
|
||||||
|
iq_norm_ADC[0][6] = _IQ(u[nn++]/NORMA_ACP);
|
||||||
|
iq_norm_ADC[0][7] = _IQ(u[nn++]/NORMA_ACP);
|
||||||
|
|
||||||
|
WRotor.iqWRotorSumFilter = _IQ(u[nn++] / PI2 / NORMA_FROTOR);
|
||||||
|
|
||||||
|
u[nn++];
|
||||||
|
|
||||||
|
edrk.Go = u[nn++];
|
||||||
|
|
||||||
|
u[nn++];
|
||||||
|
|
||||||
|
edrk.Mode_ScalarVectorUFConst = ALG_MODE_FOC_OBOROTS;
|
||||||
|
|
||||||
|
edrk.zadanie.iq_power_zad_rmp = _IQ(u[nn++]);
|
||||||
|
edrk.zadanie.iq_oborots_zad_hz_rmp = _IQ(u[nn++]);
|
||||||
|
|
||||||
|
edrk.MasterSlave = MODE_MASTER;
|
||||||
|
edrk.master_theta;
|
||||||
|
edrk.master_Iq;
|
||||||
|
edrk.iq_power_kw_another_bs;
|
||||||
|
edrk.tetta_to_slave;
|
||||||
|
edrk.Iq_to_slave;
|
||||||
|
edrk.P_to_master;
|
||||||
|
|
||||||
|
uf_alg.winding_displacement_bs1;
|
||||||
|
} //void input_param(unsigned short num, unsigned short val)
|
||||||
|
|
||||||
|
|
||||||
|
void writeOutputParameters(real_T* xD) {
|
||||||
|
}
|
16
Inu/Src/main_matlab/param.h
Normal file
16
Inu/Src/main_matlab/param.h
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#include "simstruc.h"
|
||||||
|
#include "controller.h"
|
||||||
|
|
||||||
|
#ifndef PARAM
|
||||||
|
#define PARAM
|
||||||
|
|
||||||
|
|
||||||
|
void readInputParameters(const real_T* u);
|
||||||
|
|
||||||
|
extern int Unites[UNIT_QUA_UNITS][UNIT_LEN];
|
||||||
|
extern int CAN_timeout[UNIT_QUA];
|
||||||
|
extern RS_DATA_STRUCT rs_a;
|
||||||
|
extern RS_DATA_STRUCT rs_b;
|
||||||
|
extern _iq iq_norm_ADC[COUNT_ARR_ADC_BUF][16];
|
||||||
|
#endif //PARAM
|
||||||
|
|
315
Inu/controller.c
315
Inu/controller.c
@ -12,6 +12,7 @@
|
|||||||
#include "simstruc.h"
|
#include "simstruc.h"
|
||||||
#include "controller.h"
|
#include "controller.h"
|
||||||
#include "init28335.h"
|
#include "init28335.h"
|
||||||
|
#include "param.h"
|
||||||
|
|
||||||
|
|
||||||
extern UMotorMeasure motor;
|
extern UMotorMeasure motor;
|
||||||
@ -54,68 +55,15 @@ int timers_pwm = 0;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void readInputParameters(const real_T *u) {
|
|
||||||
// int t;
|
|
||||||
//// ÂÕÎÄÛ (begin)
|
|
||||||
//nn = 0;
|
|
||||||
//// àíàëîãîâûå âåëè÷èíû
|
|
||||||
//motor.udc1_ml = u[nn++];//Â
|
|
||||||
//motor.udc2_ml = u[nn++];//Â
|
|
||||||
|
|
||||||
//motor.ia1_ml = u[nn++];//À
|
|
||||||
//motor.ib1_ml = u[nn++];//À
|
|
||||||
//motor.ic1_ml = u[nn++];//À
|
|
||||||
//motor.ia2_ml = u[nn++];//À
|
|
||||||
//motor.ib2_ml = u[nn++];//À
|
|
||||||
//motor.ic2_ml = u[nn++];//À
|
|
||||||
//motor.wm_ml = u[nn++];//ðàä/ñ
|
|
||||||
|
|
||||||
//// óïðàâëåíèå (íàïðèìåð, ñ ÂÓ)
|
|
||||||
//mst.faultReset = (unsigned short)u[nn++];
|
|
||||||
//mst.start = (unsigned short)u[nn++];
|
|
||||||
//mst.pzMode = (unsigned short)u[nn++];
|
|
||||||
//mst.wmZz = u[nn++];//o.e. (îò N_BAZ)
|
|
||||||
//mst.pmZz = u[nn++]*(P_NOM/S_BAZ);//o.e. (îò S_BAZ)
|
|
||||||
//mst.wmLim = u[nn++];//o.e. (îò N_BAZ)
|
|
||||||
//mst.pmLim = u[nn++]*(P_NOM/S_BAZ);//o.e. (îò S_BAZ)
|
|
||||||
//mst.pIncrMaxTy = u[nn++]*TY*DECIM_PSI_WM_PM*(P_NOM/S_BAZ);//o.e. (îò S_BAZ)
|
|
||||||
//mst.pDecrMaxTy = u[nn++]*TY*DECIM_PSI_WM_PM*(P_NOM/S_BAZ);//o.e. (îò S_BAZ)
|
|
||||||
|
|
||||||
////
|
|
||||||
//mst.off_curr_pi = (unsigned short)u[nn++];
|
|
||||||
//mst.only_one_km = (unsigned short)u[nn++];
|
|
||||||
//mst.enable_compens_iq1_iq2 = (unsigned short)u[nn++];
|
|
||||||
//mst.pi_iq_ki = u[nn++];
|
|
||||||
//mst.pi_id_ki = u[nn++];
|
|
||||||
//t = (unsigned short)u[nn++];
|
|
||||||
//t = (unsigned short)u[nn++];
|
|
||||||
//t = (unsigned short)u[nn++];
|
|
||||||
//t = (unsigned short)u[nn++];
|
|
||||||
//t = (unsigned short)u[nn++];
|
|
||||||
|
|
||||||
|
|
||||||
//// ïàðàìåòðû (íàïðèìåð, ñ ÏÓ)
|
|
||||||
//paramNo = FIRST_WRITE_PAR_NUM;
|
|
||||||
//paramNew[paramNo++] = (unsigned short)u[nn++];
|
|
||||||
//paramNew[paramNo++] = (unsigned short)u[nn++];
|
|
||||||
|
|
||||||
|
|
||||||
//// ÂÕÎÄÛ (end)
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void processSFunctionIfChanged(SimStruct *S, int_T *iW) {
|
void processSFunctionIfChanged(SimStruct *S, int_T *iW) {
|
||||||
|
|
||||||
// îáðàáàòûâàåì ïàðàìåòðû S-Function êàæäûé ðàç, êîãäà îíè èçìåíèëèñü
|
// îáðàáàòûâàåì ïàðàìåòðû S-Function êàæäûé ðàç, êîãäà îíè èçìåíèëèñü
|
||||||
if ( iW[0] == 1 ) {
|
if ( iW[0] == 1 ) {
|
||||||
iW[0] = 0;
|
iW[0] = 0;
|
||||||
kkk = 0;
|
int kkk = 0;
|
||||||
for ( lll = 0; lll < NPARAMS; lll++ ) {
|
for (int lll = 0; lll < NPARAMS; lll++ ) {
|
||||||
// îïðåäåëÿåì êîë-âî ýëåìåíòîâ â ïàðàìåòðå
|
// îïðåäåëÿåì êîë-âî ýëåìåíòîâ â ïàðàìåòðå
|
||||||
dimen = mxGetNumberOfElements(ssGetSFcnParam(S,lll));
|
int dimen = mxGetNumberOfElements(ssGetSFcnParam(S,lll));
|
||||||
// îáðàáàòûâàåì ïàðàìåòð â çàâèñèìîñòè îò åãî ðàçìåðà
|
// îáðàáàòûâàåì ïàðàìåòð â çàâèñèìîñòè îò åãî ðàçìåðà
|
||||||
if ( dimen > LEN_PARAM_MATR*2 ) {
|
if ( dimen > LEN_PARAM_MATR*2 ) {
|
||||||
ssSetErrorStatus(S,"Â ïàðàìåòðå-ìàññèâå ñëèøêîì ìíîãî ýëåìåíòîâ");
|
ssSetErrorStatus(S,"Â ïàðàìåòðå-ìàññèâå ñëèøêîì ìíîãî ýëåìåíòîâ");
|
||||||
@ -125,7 +73,7 @@ void processSFunctionIfChanged(SimStruct *S, int_T *iW) {
|
|||||||
// çàïîìèíàåì êîë-âî ýëåìåíòîâ ïàðàìåòðà-ìàòðèöû
|
// çàïîìèíàåì êîë-âî ýëåìåíòîâ ïàðàìåòðà-ìàòðèöû
|
||||||
paramMatrDimen = dimen;
|
paramMatrDimen = dimen;
|
||||||
// çàïîìèíàåì çíà÷åíèÿ ýëåìåíòîâ ïàðàìåòðà-ìàòðèöû
|
// çàïîìèíàåì çíà÷åíèÿ ýëåìåíòîâ ïàðàìåòðà-ìàòðèöû
|
||||||
for ( mmm = 0; mmm < dimen; mmm++ )
|
for (int mmm = 0; mmm < dimen; mmm++ )
|
||||||
paramMatr[mmm] = mxGetPr(ssGetSFcnParam(S,lll))[mmm];
|
paramMatr[mmm] = mxGetPr(ssGetSFcnParam(S,lll))[mmm];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -134,8 +82,8 @@ void processSFunctionIfChanged(SimStruct *S, int_T *iW) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ÏÀÐÀÌÅÒÐÛ (begin)
|
// ÏÀÐÀÌÅÒÐÛ (begin)
|
||||||
nn = 0;
|
int nn = 0;
|
||||||
dt = paramScal[nn++];//øàã äèñêðåòèçàöèè (âñåãäà äîëæåí ïåðåäàâàòüñÿ â S-function ïîñëåäíèì!)
|
double dt = paramScal[nn++];//øàã äèñêðåòèçàöèè (âñåãäà äîëæåí ïåðåäàâàòüñÿ â S-function ïîñëåäíèì!)
|
||||||
// ÏÀÐÀÌÅÒÐÛ (end)
|
// ÏÀÐÀÌÅÒÐÛ (end)
|
||||||
} //if ( iW[0] == 1 )
|
} //if ( iW[0] == 1 )
|
||||||
|
|
||||||
@ -970,229 +918,10 @@ void simulateTripZoneSubmodule(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void writeOutputParameters(real_T *xD) {
|
|
||||||
|
|
||||||
// // ÂÛÕÎÄÛ (begin)
|
|
||||||
// nn = 0;
|
|
||||||
// // Óïðàâëåíèå
|
|
||||||
// // ... INU1
|
|
||||||
// xD[nn++] = ci1A_DT;
|
|
||||||
// xD[nn++] = ci2A_DT;
|
|
||||||
// xD[nn++] = ci1B_DT;
|
|
||||||
// xD[nn++] = ci2B_DT;
|
|
||||||
//
|
|
||||||
// xD[nn++] = ci3A_DT;
|
|
||||||
// xD[nn++] = ci4A_DT;
|
|
||||||
// xD[nn++] = ci3B_DT;
|
|
||||||
// xD[nn++] = ci4B_DT;
|
|
||||||
//
|
|
||||||
// xD[nn++] = ci5A_DT;
|
|
||||||
// xD[nn++] = ci6A_DT;
|
|
||||||
// xD[nn++] = ci5B_DT;
|
|
||||||
// xD[nn++] = ci6B_DT;
|
|
||||||
// // ... INU2
|
|
||||||
// xD[nn++] = ci7A_DT;
|
|
||||||
// xD[nn++] = ci8A_DT;
|
|
||||||
// xD[nn++] = ci7B_DT;
|
|
||||||
// xD[nn++] = ci8B_DT;
|
|
||||||
//
|
|
||||||
// xD[nn++] = ci9A_DT;
|
|
||||||
// xD[nn++] = ci10A_DT;
|
|
||||||
// xD[nn++] = ci9B_DT;
|
|
||||||
// xD[nn++] = ci10B_DT;
|
|
||||||
//
|
|
||||||
// xD[nn++] = ci11A_DT;
|
|
||||||
// xD[nn++] = ci12A_DT;
|
|
||||||
// xD[nn++] = ci11B_DT;
|
|
||||||
// xD[nn++] = ci12B_DT;
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//// âûõîäû àöï äëÿ êîíòðîëÿ
|
|
||||||
// xD[nn++] = udc1_ml;
|
|
||||||
// xD[nn++] = udc2_ml;
|
|
||||||
// xD[nn++] = udc3_ml;
|
|
||||||
// xD[nn++] = udc4_ml;
|
|
||||||
//
|
|
||||||
// xD[nn++] = idc1_ml;
|
|
||||||
// xD[nn++] = idc2_ml;
|
|
||||||
// xD[nn++] = idc3_ml;
|
|
||||||
// xD[nn++] = idc4_ml;
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(analog.iqIa1_1) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(analog.iqIb1_1) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(analog.iqIc1_1) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(analog.iqIa2_1) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(analog.iqIb2_1) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(analog.iqIc2_1) * NORMA_ACP;
|
|
||||||
//
|
|
||||||
//// timers out
|
|
||||||
//
|
|
||||||
// xD[nn++] = timers_adc;
|
|
||||||
// xD[nn++] = timers_pwm;
|
|
||||||
// xD[nn++] = Tadc;
|
|
||||||
// xD[nn++] = dt;
|
|
||||||
//
|
|
||||||
// // Òîëüêî äëÿ ïðîñìîòðà
|
|
||||||
// xD[nn++] = _IQtoF(rp.pmZ);
|
|
||||||
// xD[nn++] = _IQtoF(rs.wmZ);
|
|
||||||
//
|
|
||||||
// xD[nn++] = mst.start;
|
|
||||||
// xD[nn++] = inuWork;
|
|
||||||
// xD[nn++] = mst.pzMode;
|
|
||||||
//
|
|
||||||
// xD[nn++] = psi;
|
|
||||||
// xD[nn++] = rf.psiZ;
|
|
||||||
//
|
|
||||||
// xD[nn++] = wm;
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.koeff_correct_Id);//rs.wmZ;
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.iqFrot) * NORMA_FROTOR * 60.0 / N_BAZ;//csp.wmLimZi;
|
|
||||||
//
|
|
||||||
// xD[nn++] = pm*S_BAZ;///P_NOM;
|
|
||||||
// xD[nn++] = rp.pmZ*S_BAZ;///P_NOM;
|
|
||||||
// xD[nn++] = csp.pmLimZi*S_BAZ;///P_NOM;
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(analog.iqId1)* NORMA_ACP;//_IQtoF(vect_control.iqPzad);
|
|
||||||
// xD[nn++] = _IQtoF(analog.iqIq1)* NORMA_ACP;// * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(analog.iqId2)* NORMA_ACP;//_IQtoF(vect_control.iqUqCompensation1);//
|
|
||||||
// xD[nn++] = _IQtoF(analog.iqIq2)* NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.iqId_zad)* NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.iqIq_zad)* NORMA_ACP;//iqZ;
|
|
||||||
//
|
|
||||||
// xD[nn++] = me*M_BAZ/M_NOM;
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.iqPzad) * NORMA_ACP * NORMA_ACP / 1000.0;;
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.iqPizm) * NORMA_ACP * NORMA_ACP / 1000.0;;
|
|
||||||
// // xD[nn++] = sqrt(idZ*idZ + iqZ*iqZ);
|
|
||||||
// // xD[nn++] = IzLim;
|
|
||||||
//
|
|
||||||
// // xD[nn++] = EPwm2Regs.CMPA.half.CMPA;//xpwm_time.Ta0_0;//cc.yd1;
|
|
||||||
// // xD[nn++] = xpwm_time.Ta0_0;
|
|
||||||
// // xD[nn++] = xpwm_time.Ta0_1;
|
|
||||||
// // xD[nn++] = _IQtoF(cos_fi.cos_fi_nom);//cc.yd1;
|
|
||||||
// // xD[nn++] = _IQtoF(cos_fi.cos_fi_nom_squared);//cc.yq1;
|
|
||||||
// // xD[nn++] = _IQtoF(tetta_calc.k_t);
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.iqUzad1);//cc.yd1;
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.iqUzad2);//cc.yd1;
|
|
||||||
//// xD[nn++] = _IQtoF(vect_control.iqUdKm1Out);//cc.yq1;
|
|
||||||
//// xD[nn++] = _IQtoF(vect_control.iqUqKm1Out);
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.iqUdKm1);//sqrt(cc.yd1*cc.yd1 + cc.yq1*cc.yq1);
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.iqUqKm1);//sqrt(cc.yd2*cc.yd2 + cc.yq2*cc.yq2);
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.iqUdKm2);//Y_LIM;
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.iqUqKm2);//Y_LIM;
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.iqUdKm1Out);//sqrt(cc.yd1*cc.yd1 + cc.yq1*cc.yq1);
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.iqUqKm1Out);//sqrt(cc.yd2*cc.yd2 + cc.yq2*cc.yq2);
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.iqUdKm2Out);//Y_LIM;
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.iqUqKm2Out);//Y_LIM;
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.k_modul_max);//Y_LIM;
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.k_modul_max_def);
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.maxUq1);
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.maxUq2);
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.Uq1Out);
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.Uq2Out);
|
|
||||||
//// xD[nn++] = _IQtoF(vect_control.K_MODUL_MAX);
|
|
||||||
//// xD[nn++] = _IQtoF(vect_control.K_MODUL_MAX);
|
|
||||||
//// xD[nn++] = _IQtoF(vect_control.K_MODUL_MAX);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// // xD[nn++] = sqrt(cc.yd1*cc.yd1 + cc.yq1*cc.yq1);
|
|
||||||
// // xD[nn++] = sqrt(cc.yd2*cc.yd2 + cc.yq2*cc.yq2);
|
|
||||||
// // xD[nn++] = Y_LIM;
|
|
||||||
// // ÂÛÕÎÄÛ (end)
|
|
||||||
//
|
|
||||||
//
|
|
||||||
///////////////// new
|
|
||||||
// xD[nn++] = _IQtoF(f.iq_mzz_zad) * NORMA_ACP;//
|
|
||||||
// xD[nn++] = _IQtoF(pidPvect.OutMax) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(pidPvect.OutMin) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(pidPvect.Out) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.mzz_zad_int) * NORMA_ACP ;
|
|
||||||
// xD[nn++] = _IQtoF(filter.iqIm_1) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(filter.iqIm_2) * NORMA_ACP;
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.Pzad_rmp) * NORMA_ACP * NORMA_ACP / 1000.0;
|
|
||||||
// xD[nn++] = _IQtoF(f.iq_p_rampa) * NORMA_ACP * NORMA_ACP / 1000.0;
|
|
||||||
// xD[nn++] = _IQtoF(analog.iqPvsi1) * NORMA_ACP * NORMA_ACP / 1000.0;
|
|
||||||
// xD[nn++] = _IQtoF(analog.iqPvsi1) * NORMA_ACP * NORMA_ACP / 1000.0;
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(analog.iqW1) * NORMA_ACP * NORMA_ACP / 1000.0;
|
|
||||||
// xD[nn++] = _IQtoF(analog.iqW2) * NORMA_ACP * NORMA_ACP / 1000.0;
|
|
||||||
// xD[nn++] = _IQtoF(analog.iqW) * NORMA_ACP * NORMA_ACP / 1000.0;
|
|
||||||
// xD[nn++] = _IQtoF(filter.iqW1) * NORMA_ACP * NORMA_ACP / 1000.0;
|
|
||||||
// xD[nn++] = _IQtoF(filter.iqW2) * NORMA_ACP * NORMA_ACP / 1000.0;
|
|
||||||
// xD[nn++] = _IQtoF(filter.iqW) * NORMA_ACP * NORMA_ACP / 1000.0;
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.iqFrot) * NORMA_FROTOR * 60.0;
|
|
||||||
// xD[nn++] = vect_control.flag_reverse;//_IQtoF(0);
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.koeff_correct_Id);
|
|
||||||
// xD[nn++] = _IQtoF(cos_fi.cos_fi_nom);
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(filter.Fsl) * NORMA_FROTOR;
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(filter.iqIa1_1) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(filter.iqIb1_1) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(filter.iqIc1_1) * NORMA_ACP;
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(filter.iqIa2_1) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(filter.iqIb2_1) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(filter.iqIc2_1) * NORMA_ACP;
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(tetta_calc.Imds);
|
|
||||||
// xD[nn++] = _IQtoF(tetta_calc.tetta);
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.Is) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.Ids) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.Id_ref_fw) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.Id_ref_1) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.Is_max) * NORMA_ACP;
|
|
||||||
//
|
|
||||||
// xD[nn++] = vect_control.flag_fw;
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.ws_Iq1) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.ws_Id_filter1) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.ws_Id_filter2) * NORMA_ACP;
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(vect_control.ws_ws_t1) * NORMA_FROTOR;
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(analog.Fsl) * NORMA_FROTOR;
|
|
||||||
// xD[nn++] = _IQtoF(filter.Fsl) * NORMA_FROTOR;
|
|
||||||
//
|
|
||||||
// xD[nn++] = vect_control.tmp1;
|
|
||||||
// xD[nn++] = vect_control.tmp2;
|
|
||||||
// xD[nn++] = vect_control.tmp3;
|
|
||||||
// //xD[nn++] = _IQtoF(0) * NORMA_ACP;
|
|
||||||
// //xD[nn++] = _IQtoF(0) * NORMA_ACP;
|
|
||||||
// xD[nn++] = _IQtoF(0) * NORMA_ACP;
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(svgen_dq_1.Ta)*1000.0;
|
|
||||||
// xD[nn++] = _IQtoF(svgen_dq_1.Tb)*1000.0;
|
|
||||||
// xD[nn++] = _IQtoF(svgen_dq_1.Tc)*1000.0;
|
|
||||||
//
|
|
||||||
// xD[nn++] = _IQtoF(svgen_dq_2.Ta)*1000.0;
|
|
||||||
// xD[nn++] = _IQtoF(svgen_dq_2.Tb)*1000.0;
|
|
||||||
// xD[nn++] = _IQtoF(svgen_dq_2.Tc)*1000.0;
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void controller(SimStruct *S, const real_T *u, real_T *xD, real_T *rW, int_T *iW) {
|
void controller(SimStruct *S, const real_T *u, real_T *xD, real_T *rW, int_T *iW) {
|
||||||
|
|
||||||
static _iq Uzad1 = 0, Fzad = 0, Uzad2 = 0, Izad_out = 0, Uzad_from_master = 0;
|
|
||||||
_iq wd;
|
|
||||||
|
|
||||||
readInputParameters(u);
|
readInputParameters(u);
|
||||||
processSFunctionIfChanged(S, iW);
|
processSFunctionIfChanged(S, iW);
|
||||||
@ -1213,33 +942,5 @@ void controller(SimStruct *S, const real_T *u, real_T *xD, real_T *rW, int_T *iW
|
|||||||
|
|
||||||
writeOutputParameters(xD);
|
writeOutputParameters(xD);
|
||||||
|
|
||||||
if (edrk.flag_second_PCH == 0) {
|
mcu_simulate_step();
|
||||||
wd = uf_alg.winding_displacement_bs1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
wd = uf_alg.winding_displacement_bs2;
|
|
||||||
}
|
|
||||||
|
|
||||||
vectorControlConstId(edrk.zadanie.iq_power_zad_rmp, edrk.zadanie.iq_oborots_zad_hz_rmp,
|
|
||||||
WRotor.RotorDirectionSlow, WRotor.iqWRotorSumFilter,
|
|
||||||
edrk.Mode_ScalarVectorUFConst,
|
|
||||||
edrk.MasterSlave, edrk.zadanie.iq_Izad, wd,
|
|
||||||
edrk.master_theta, edrk.master_Iq, edrk.iq_power_kw_another_bs,
|
|
||||||
&edrk.tetta_to_slave, &edrk.Iq_to_slave, &edrk.P_to_master,
|
|
||||||
0, 1);
|
|
||||||
|
|
||||||
test_calc_vect_dq_pwm24_Ing(vect_control.iqTheta, vect_control.iqUdKm, vect_control.iqUqKm,
|
|
||||||
edrk.disable_alg_u_disbalance,
|
|
||||||
edrk.zadanie.iq_kplus_u_disbalance_rmp, edrk.zadanie.iq_k_u_disbalance_rmp,
|
|
||||||
filter.iqU_1_fast, filter.iqU_2_fast,
|
|
||||||
0,
|
|
||||||
edrk.Uzad_max,
|
|
||||||
edrk.MasterSlave,
|
|
||||||
edrk.flag_second_PCH,
|
|
||||||
&edrk.Kplus, &edrk.Uzad_to_slave);
|
|
||||||
analog.PowerFOC = edrk.P_to_master;
|
|
||||||
Fzad = vect_control.iqFstator;
|
|
||||||
Izad_out = edrk.Iq_to_slave;
|
|
||||||
|
|
||||||
|
|
||||||
} //void controller(SimStruct ...
|
} //void controller(SimStruct ...
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#include "DSP281x_Device.h"
|
||||||
|
|
||||||
#include "wrapper_inu.h"
|
#include "wrapper_inu.h"
|
||||||
#include "def.h"
|
#include "def.h"
|
||||||
#include "edrk_main.h"
|
#include "edrk_main.h"
|
||||||
@ -9,6 +11,10 @@
|
|||||||
#include "v_rotor_22220.h"
|
#include "v_rotor_22220.h"
|
||||||
#include "v_pwm24_v2.h"
|
#include "v_pwm24_v2.h"
|
||||||
#include "control_station.h"
|
#include "control_station.h"
|
||||||
|
#include "control_station_project.h"
|
||||||
|
#include "CAN_Setup.h"
|
||||||
|
#include "RS_Functions.h"
|
||||||
|
#include "master_slave.h"
|
||||||
|
|
||||||
#include <params.h>
|
#include <params.h>
|
||||||
#include <params_alg.h>
|
#include <params_alg.h>
|
||||||
@ -28,15 +34,6 @@ double paramScal[NPARAMS];
|
|||||||
double paramMatr[LEN_PARAM_MATR*2];
|
double paramMatr[LEN_PARAM_MATR*2];
|
||||||
int paramMatrDimen;
|
int paramMatrDimen;
|
||||||
|
|
||||||
// Индекс входного и выходного массива, а также массива параметров
|
|
||||||
int nn;
|
|
||||||
// Шаг интегрирования
|
|
||||||
double dt;
|
|
||||||
// Для обработки параметров
|
|
||||||
int kkk, lll, mmm, dimen;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Ïåðåìåííûå, êîòîðûå îïðåäåëåíû â controller.c (begin)
|
// Ïåðåìåííûå, êîòîðûå îïðåäåëåíû â controller.c (begin)
|
||||||
//#########################################################################
|
//#########################################################################
|
||||||
// Ïàðàìåòðû
|
// Ïàðàìåòðû
|
||||||
|
426
Inu/param.c
426
Inu/param.c
@ -1,426 +0,0 @@
|
|||||||
/**************************************************************************
|
|
||||||
Description: Ôóíêöèè äëÿ ïðè¸ìà è âûäà÷è ïàðàìåòðîâ.
|
|
||||||
|
|
||||||
Àâòîð: Óëèòîâñêèé Ä.È.
|
|
||||||
Äàòà ïîñëåäíåãî îáíîâëåíèÿ: 2021.11.08
|
|
||||||
**************************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
#include "def.h"
|
|
||||||
#include "param.h"
|
|
||||||
|
|
||||||
|
|
||||||
#pragma CODE_SECTION(input_param, "ramfuncs");
|
|
||||||
#pragma CODE_SECTION(output_param, "ramfuncs");
|
|
||||||
|
|
||||||
|
|
||||||
extern short test_param(void);
|
|
||||||
extern void process_sgm_parameters(void);
|
|
||||||
|
|
||||||
|
|
||||||
// Èçìåíÿåò çíà÷åíèå ïàðàìåòðà
|
|
||||||
void input_param(unsigned short num, unsigned short val) {
|
|
||||||
switch ( num ) {
|
|
||||||
case 180://rf.PsiZ, %*10 îò PSI_BAZ
|
|
||||||
if ( (val <= 2000) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
rf.PsiZ = (float)val*0.001;//%*10 -> o.e.
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 200://offset.Ia1, åä. ÀÖÏ
|
|
||||||
if ( (val >= 1748) && (val <= 4096) && (val != param[num]) ) {
|
|
||||||
offset.Ia1 = param[num] = val;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 201://offset.Ib1, åä. ÀÖÏ
|
|
||||||
if ( (val >= 1748) && (val <= 4096) && (val != param[num]) ) {
|
|
||||||
offset.Ib1 = param[num] = val;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 202://offset.Ic1, åä. ÀÖÏ
|
|
||||||
if ( (val >= 1748) && (val <= 4096) && (val != param[num]) ) {
|
|
||||||
offset.Ic1 = param[num] = val;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 203://offset.Udc1, åä. ÀÖÏ
|
|
||||||
if ( (val >= 1748) && (val <= 4096) && (val != param[num]) ) {
|
|
||||||
offset.Udc1 = param[num] = val;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 206://offset.Ia2, åä. ÀÖÏ
|
|
||||||
if ( (val >= 1748) && (val <= 4096) && (val != param[num]) ) {
|
|
||||||
offset.Ia2 = param[num] = val;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 207://offset.Ib2, åä. ÀÖÏ
|
|
||||||
if ( (val >= 1748) && (val <= 4096) && (val != param[num]) ) {
|
|
||||||
offset.Ib2 = param[num] = val;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 208://offset.Ic2, åä. ÀÖÏ
|
|
||||||
if ( (val >= 1748) && (val <= 4096) && (val != param[num]) ) {
|
|
||||||
offset.Ic2 = param[num] = val;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 209://offset.Udc2, åä. ÀÖÏ
|
|
||||||
if ( (val >= 1748) && (val <= 4096) && (val != param[num]) ) {
|
|
||||||
offset.Udc2 = param[num] = val;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 210://cc.Kp, %
|
|
||||||
if ( (val <= 5000) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
cc.Kp = (float)val*cc.KpOrig;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 211://cc.Ki, %
|
|
||||||
if ( (val <= 5000) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
cc.Ki = (float)val*cc.KiOrig;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 212://cf.Kp, %
|
|
||||||
if ( (val <= 5000) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
cf.Kp = (float)val*cf.KpOrig;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 213://cf.Ki, %
|
|
||||||
if ( (val <= 5000) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
cf.Ki = (float)val*cf.KiOrig;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 214://csp.Kp, %
|
|
||||||
if ( (val <= 5000) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
csp.Kp = (float)val*csp.KpOrig;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 215://csp.Ki, %
|
|
||||||
if ( (val <= 5000) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
csp.Ki = (float)val*csp.KiOrig;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 220://protect.IacMax, % îò IAC_SENS_MAX
|
|
||||||
if ( (val <= 99) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
protect.IacMax = (short)(2047.*(float)val*0.01);//% -> åä. ÀÖÏ
|
|
||||||
protect.IacMin = -protect.IacMax;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 221://protect.UdcMax, % îò U_NOM
|
|
||||||
if ( (val <= 136) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
protect.UdcMax = (float)val*0.01;//% -> o.e.
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 222://IzLim, % îò I_BAZ
|
|
||||||
if ( (val <= 200) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
IzLim = (float)val*0.01;//% -> o.e.
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 223://cf.IdLim, % îò I_BAZ
|
|
||||||
if ( (val <= 200) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
cf.IdLim = (float)val*0.01;//% -> o.e.
|
|
||||||
cf.IdLimNeg = cf.IdLim*(-0.4);
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 224://csp.IqLim, % îò I_BAZ
|
|
||||||
if ( (val <= 200) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
csp.IqLim = (float)val*0.01;//% -> o.e.
|
|
||||||
csp.IqLimNeg = -csp.IqLim;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 225://protect.UdcMin, % îò U_NOM
|
|
||||||
if ( (val <= 110) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
protect.UdcMin = (float)val*0.01;//% -> o.e.
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 226://protect.WmMax, % îò N_NOM
|
|
||||||
if ( (val <= 200) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
protect.WmMax = (float)val*0.01;//% -> o.e.
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 228://rf.WmNomPsi, % îò N_NOM
|
|
||||||
if ( (val <= 200) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
rf.WmNomPsi = (float)val*0.01;//% -> o.e.
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 229://rf.YlimPsi, % îò Y_LIM
|
|
||||||
if ( (val <= 101) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
rf.YlimPsi = (float)val*0.01*Y_LIM;//% -> åä. ñ÷¸ò÷èêà òàéìåðà
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 231://protect.TudcMin, ìñ
|
|
||||||
if ( (val >= 1) && (val <= 8500) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
protect.TudcMin = (unsigned short)((float)val*0.001/TY);
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 233://protect.TwmMax, ìñ
|
|
||||||
if ( (val >= 1) && (val <= 8500) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
protect.TwmMax = (unsigned short)((float)val*0.001/TY);
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 244://rs.WlimIncr, ìñ
|
|
||||||
if ( (val >= 1) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
// èçì. íà 1.0 çà ñòîëüêî-òî ìñ
|
|
||||||
rs.WlimIncr = 1.0*TY*DECIM_PSI_WM_PM/((float)val*0.001);
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 245://csp.IlimIncr, ìñ
|
|
||||||
if ( (val >= 1) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
// èçì. íà I_BAZ çà ñòîëüêî-òî ìñ
|
|
||||||
csp.IlimIncr = 1.0*TY*DECIM_PSI_WM_PM/((float)val*0.001);
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 248://rp.PlimIncr, ìñ
|
|
||||||
if ( (val >= 1) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
// èçì. íà 1.0 çà ñòîëüêî-òî ìñ
|
|
||||||
rp.PlimIncr = 1.0*TY*DECIM_PSI_WM_PM/((float)val*0.001);
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 269://KmeCorr, %*100
|
|
||||||
if ( (val >= 5000) && (val <= 20000) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
KmeCorr = (float)val*0.0001;//%*100 -> o.e.
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 285://Kudc, ìñ*10
|
|
||||||
if ( (val >= 1) && (val <= 20000) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
Kudc = (TY*10000.)/(float)val;
|
|
||||||
if ( Kudc > 1.0 )
|
|
||||||
Kudc = 1.0;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 286://Kwm, ìñ*10
|
|
||||||
if ( (val >= 1) && (val <= 20000) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
Kwm = (TY*10000.)/(float)val;
|
|
||||||
if ( Kwm > 1.0 )
|
|
||||||
Kwm = 1.0;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 288://rs.Kwmz, ìñ
|
|
||||||
if ( (val >= 1) && (val <= 20000) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
rs.Kwmz = (TY*DECIM_PSI_WM_PM*1000.)/(float)val;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 289://rf.Kpsiz, ìñ
|
|
||||||
if ( (val >= 1) && (val <= 20000) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
rf.Kpsiz = (TY*DECIM_PSI_WM_PM*1000.)/(float)val;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 290://Kme, ìñ
|
|
||||||
if ( (val >= 1) && (val <= 20000) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
Kme = (TY*1000.)/(float)val;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 292://rp.Kpmz, ìñ
|
|
||||||
if ( (val >= 1) && (val <= 20000) && (val != param[num]) ) {
|
|
||||||
param[num] = val;
|
|
||||||
rp.Kpmz = (TY*DECIM_PSI_WM_PM*1000.)/(float)val;
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 303://sgmPar.Rs, ìêÎì
|
|
||||||
if ( val != param[num] ) {
|
|
||||||
param[num] = val;
|
|
||||||
sgmPar.Rs = (float)val*1e-6;//ìêÎì -> Îì
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 304://sgmPar.Lls, ìêÃí*10
|
|
||||||
if ( val != param[num] ) {
|
|
||||||
param[num] = val;
|
|
||||||
sgmPar.Lls = (float)val*1e-7;//ìêÃí*10 -> Ãí
|
|
||||||
process_sgm_parameters();
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 305://sgmPar.Rr, ìêÎì
|
|
||||||
if ( val != param[num] ) {
|
|
||||||
param[num] = val;
|
|
||||||
sgmPar.Rr = (float)val*1e-6;//ìêÎì -> Îì
|
|
||||||
process_sgm_parameters();
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 306://sgmPar.Llr, ìêÃí*10
|
|
||||||
if ( val != param[num] ) {
|
|
||||||
param[num] = val;
|
|
||||||
sgmPar.Llr = (float)val*1e-7;//ìêÃí*10 -> Ãí
|
|
||||||
process_sgm_parameters();
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 307://sgmPar.Lm, ìêÃí
|
|
||||||
if ( val != param[num] ) {
|
|
||||||
param[num] = val;
|
|
||||||
sgmPar.Lm = (float)val*1e-6;//ìêÃí -> Ãí
|
|
||||||
process_sgm_parameters();
|
|
||||||
eprom.writeRequestNumber += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if ( num < PAR_NUMBER ) {
|
|
||||||
param[num] = val;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
} //switch ( num )
|
|
||||||
} //void input_param(unsigned short num, unsigned short val)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Âûäà¸ò çíà÷åíèå ïàðàìåòðà
|
|
||||||
unsigned short output_param(unsigned short num) {
|
|
||||||
static unsigned short output;
|
|
||||||
|
|
||||||
switch ( num ) {
|
|
||||||
case 1: //udc1, o.e. -> o.e.*CONTROLLER_GAIN
|
|
||||||
if ( state == STATE_SHUTDOWN ) {
|
|
||||||
output = (unsigned short)(emerg.udc1*CONTROLLER_GAIN);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
output = (unsigned short)(out.udc1*CONTROLLER_GAIN);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 2: //udc2, o.e. -> o.e.*CONTROLLER_GAIN
|
|
||||||
if ( state == STATE_SHUTDOWN ) {
|
|
||||||
output = (unsigned short)(emerg.udc2*CONTROLLER_GAIN);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
output = (unsigned short)(out.udc2*CONTROLLER_GAIN);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 5: //iac1, o.e. -> o.e.*CONTROLLER_GAIN
|
|
||||||
if ( state == STATE_SHUTDOWN ) {
|
|
||||||
output = (unsigned short)(emerg.iac1*CONTROLLER_GAIN);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
output = (unsigned short)(out.iac1*CONTROLLER_GAIN);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 6: //iac2, o.e. -> o.e.*CONTROLLER_GAIN
|
|
||||||
if ( state == STATE_SHUTDOWN ) {
|
|
||||||
output = (unsigned short)(emerg.iac2*CONTROLLER_GAIN);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
output = (unsigned short)(out.iac2*CONTROLLER_GAIN);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 7: //me, o.e. -> (o.e. + CONTROLLER_BIAS)*CONTROLLER_GAIN
|
|
||||||
if ( state == STATE_SHUTDOWN ) {
|
|
||||||
if ( emerg.me > CONTROLLER_BIAS )
|
|
||||||
output = (unsigned short)((CONTROLLER_BIAS + CONTROLLER_BIAS)*CONTROLLER_GAIN);
|
|
||||||
else if ( emerg.me > -CONTROLLER_BIAS )
|
|
||||||
output = (unsigned short)((emerg.me + CONTROLLER_BIAS)*CONTROLLER_GAIN);
|
|
||||||
else
|
|
||||||
output = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if ( out.me > CONTROLLER_BIAS )
|
|
||||||
output = (unsigned short)((CONTROLLER_BIAS + CONTROLLER_BIAS)*CONTROLLER_GAIN);
|
|
||||||
else if ( out.me > -CONTROLLER_BIAS )
|
|
||||||
output = (unsigned short)((out.me + CONTROLLER_BIAS)*CONTROLLER_GAIN);
|
|
||||||
else
|
|
||||||
output = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 8: //nm, o.e. -> (o.e. + CONTROLLER_BIAS)*CONTROLLER_GAIN
|
|
||||||
if ( state == STATE_SHUTDOWN ) {
|
|
||||||
if ( emerg.wm > CONTROLLER_BIAS )
|
|
||||||
output = (unsigned short)((CONTROLLER_BIAS + CONTROLLER_BIAS)*CONTROLLER_GAIN);
|
|
||||||
else if ( emerg.wm > -CONTROLLER_BIAS )
|
|
||||||
output = (unsigned short)((emerg.wm + CONTROLLER_BIAS)*CONTROLLER_GAIN);
|
|
||||||
else
|
|
||||||
output = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if ( out.wm > CONTROLLER_BIAS )
|
|
||||||
output = (unsigned short)((CONTROLLER_BIAS + CONTROLLER_BIAS)*CONTROLLER_GAIN);
|
|
||||||
else if ( out.wm > -CONTROLLER_BIAS )
|
|
||||||
output = (unsigned short)((out.wm + CONTROLLER_BIAS)*CONTROLLER_GAIN);
|
|
||||||
else
|
|
||||||
output = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 9: //pm, o.e. -> (o.e. + CONTROLLER_BIAS)*CONTROLLER_GAIN
|
|
||||||
if ( state == STATE_SHUTDOWN ) {
|
|
||||||
if ( emerg.pm > CONTROLLER_BIAS )
|
|
||||||
output = (unsigned short)((CONTROLLER_BIAS + CONTROLLER_BIAS)*CONTROLLER_GAIN);
|
|
||||||
else if ( emerg.pm > -CONTROLLER_BIAS )
|
|
||||||
output = (unsigned short)((emerg.pm + CONTROLLER_BIAS)*CONTROLLER_GAIN);
|
|
||||||
else
|
|
||||||
output = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if ( out.pm > CONTROLLER_BIAS )
|
|
||||||
output = (unsigned short)((CONTROLLER_BIAS + CONTROLLER_BIAS)*CONTROLLER_GAIN);
|
|
||||||
else if ( out.pm > -CONTROLLER_BIAS )
|
|
||||||
output = (unsigned short)((out.pm + CONTROLLER_BIAS)*CONTROLLER_GAIN);
|
|
||||||
else
|
|
||||||
output = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 10: //compound
|
|
||||||
output = faultNo + (inuWork<<7);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
output = param[num];
|
|
||||||
break;
|
|
||||||
} //switch ( num )
|
|
||||||
return output;
|
|
||||||
} //unsigned short output_param(unsigned short num)
|
|
41
Inu/param.h
41
Inu/param.h
@ -1,41 +0,0 @@
|
|||||||
#ifndef PARAM
|
|
||||||
#define PARAM
|
|
||||||
|
|
||||||
// Ïåðåìåííûå, êîòîðûå îïðåäåëåíû â param.c (begin)
|
|
||||||
//#########################################################################
|
|
||||||
unsigned short param[PAR_NUMBER];
|
|
||||||
//#########################################################################
|
|
||||||
// Ïåðåìåííûå, êîòîðûå îïðåäåëåíû â param.c (end)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Ïåðåìåííûå, êîòîðûå îáúÿâëåíû â param.c (begin)
|
|
||||||
//#########################################################################
|
|
||||||
extern volatile short state;
|
|
||||||
extern volatile short faultNo;
|
|
||||||
extern short onceFaultReset;
|
|
||||||
extern struct SgmPar sgmPar;
|
|
||||||
extern struct Offset offset;
|
|
||||||
extern float Kudc;
|
|
||||||
extern float Kwm;
|
|
||||||
extern short testParamFaultNo;
|
|
||||||
extern float IzLim;
|
|
||||||
extern float Kme;
|
|
||||||
extern struct Protect protect;
|
|
||||||
extern float KmeCorr;
|
|
||||||
extern volatile struct Out out;
|
|
||||||
extern volatile struct Emerg emerg;
|
|
||||||
extern struct Rf rf;
|
|
||||||
extern struct Rs rs;
|
|
||||||
extern struct Rp rp;
|
|
||||||
extern struct Cf cf;
|
|
||||||
extern struct Csp csp;
|
|
||||||
extern struct Cc cc;
|
|
||||||
// äëÿ ïåðåäà÷è íà ÂÓ
|
|
||||||
extern volatile short inuWork;
|
|
||||||
// äëÿ ðàáîòû ñ EEPROM
|
|
||||||
extern struct Eprom eprom;
|
|
||||||
//#########################################################################
|
|
||||||
// Ïåðåìåííûå, êîòîðûå îáúÿâëåíû â param.c (end)
|
|
||||||
#endif //PARAM
|
|
Binary file not shown.
@ -22,6 +22,7 @@ set params_o=-outdir "."
|
|||||||
|
|
||||||
set params_wrapper_c=.\Inu\controller.c^
|
set params_wrapper_c=.\Inu\controller.c^
|
||||||
.\Inu\Src\main_matlab\init28335.c^
|
.\Inu\Src\main_matlab\init28335.c^
|
||||||
|
.\Inu\Src\main_matlab\param.c^
|
||||||
.\Inu\Src\main_matlab\main_matlab.c^
|
.\Inu\Src\main_matlab\main_matlab.c^
|
||||||
.\Inu\Src\main_matlab\IQmathLib_matlab.c
|
.\Inu\Src\main_matlab\IQmathLib_matlab.c
|
||||||
|
|
||||||
@ -52,6 +53,9 @@ set params_libs_c=.\Inu\Src\N12_Libs\mathlib.c^
|
|||||||
.\Inu\Src\main\limit_power.c^
|
.\Inu\Src\main\limit_power.c^
|
||||||
.\Inu\Src\main\limit_lib.c^
|
.\Inu\Src\main\limit_lib.c^
|
||||||
.\Inu\Src\main\pll_tools.c^
|
.\Inu\Src\main\pll_tools.c^
|
||||||
|
.\Inu\Src\main\calc_rms_vals.c^
|
||||||
|
.\Inu\Src\main\alg_simple_scalar.c^
|
||||||
|
.\Inu\Src\main\control_station_project.c^
|
||||||
.\Inu\Src\main\ramp_zadanie_tools.c
|
.\Inu\Src\main\ramp_zadanie_tools.c
|
||||||
|
|
||||||
set params_obj=..\device_support_ml\source\C28x_FPU_FastRTS.obj ..\device_support_ml\source\DSP2833x_GlobalVariableDefs.obj
|
set params_obj=..\device_support_ml\source\C28x_FPU_FastRTS.obj ..\device_support_ml\source\DSP2833x_GlobalVariableDefs.obj
|
||||||
|
Loading…
Reference in New Issue
Block a user