#3 алгоритм запускается и даже что-то считает но пока не формирует шим. Просто считает время включения ключей

This commit is contained in:
Razvalyaev 2025-01-13 16:58:59 +03:00
parent adf0437341
commit e93242da70
14 changed files with 255 additions and 801 deletions

View File

@ -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);

View File

@ -1,3 +1,4 @@
#include "DSP2833x_Device.h" #include "DSP2833x_Device.h"
//#define int16 int //#define int16 int
#define interrupt

View File

@ -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)
@ -64,4 +102,46 @@ void edrk_init_matlab(void)
edrk.zadanie.iq_set_break_level = _IQ(NOMINAL_U_BREAK_LEVEL / NORMA_ACP); edrk.zadanie.iq_set_break_level = _IQ(NOMINAL_U_BREAK_LEVEL / NORMA_ACP);
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);
} }

View File

@ -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

View File

@ -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)
{ {

View File

@ -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);

View 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) {
}

View 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

View File

@ -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 ...

View File

@ -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)
//######################################################################### //#########################################################################
// Ïàðàìåòðû // Ïàðàìåòðû

View File

@ -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)

View File

@ -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.

View File

@ -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