#3 Добавлена поддержка двойного прерывания

ReadMemory(ADR_SAW_VALUE) возвращает текущее значение пилы PWM и алгоритм может определить уровень прерывания detect_level_interrupt()
This commit is contained in:
Razvalyaev 2025-01-15 12:35:47 +03:00
parent affe05dc54
commit 2163dad313
5 changed files with 22 additions and 293 deletions

276
Inu/def.h
View File

@ -211,280 +211,4 @@
#include "math.h"
#include "C28x_FPU_FastRTS.h"
// ñòðóêòóðà äëÿ ðåãóëÿòîðîâ òîêà (ñì. control_current())
struct Cc {
short once;
float KpOrig;
float KiOrig;
float Kp;
float Ki;
float K1;
float K2;
float K3;
float Xyff;
float yffAux2;
float yffAux3;
float del;
float kYlim;
float yd1P;
float yd1I;
float yd1FF;
float yd1;
float yq1P;
float yq1I;
float yq1FF;
float yq1;
float y1;
float yd2P;
float yd2I;
float yd2FF;
float yd2;
float yq2P;
float yq2I;
float yq2FF;
float yq2;
float y2;
short y1LimFlag;
short y2LimFlag;
}; //Cc
// ñòðóêòóðà äëÿ ðåãóëÿòîðà ïîòîêà (ñì. control_flux())
struct Cf {
short once;
float KpOrig;
float KiOrig;
float Kp;
float Ki;
float IdLim;
float IdLimNeg;
float del;
float idP;
float idI;
float idFF;
short idLimFlag;
}; //Cf
// ñòðóêòóðà äëÿ ðåãóëÿòîðîâ ñêîðîñòè è ìîùíîñòè (ñì. control_speed_power())
struct Csp {
short once;
float KpOrig;
float KiOrig;
float Kp;
float Ki;
float kMeNom;
float del;
float iqP;
float iqI;
float iqFF;
float IlimIncr;
float iqLimAux;
float iqLimZi;
float IqLim;
float IqLimNeg;
float iqLim;
float iqLimNeg;
float delWmAbs;
float KizIncr;
float pmZiRampDown;
float wmLimZi;
float pmLimZi;
short iqLimFlag;
}; //Csp
// ñòðóêòóðà äëÿ çàïèñè â EEPROM âñÿêîãî
struct Eprom {
short writeRequestNumber;
short readFaultNo;
}; //Eprom
// ñòðóêòóðà äëÿ çàïîìèíàíèÿ âåëè÷èí â ìîìåíò ñðàáàòûâàíèÿ çàùèòû
struct Emerg {
float udc1;
float udc2;
float iac1;
float iac2;
float me;
float wm;
float pm;
}; //Emerg
// ñòðóêòóðà äëÿ inverse park (ñì. ipark())
struct Ip {
float yx1Aux;
float yy1Aux;
float yx2Aux;
float yy2Aux;
float theta;
float sinTheta;
float cosTheta;
float yx1;
float yy1;
float yx2;
float yy2;
}; //Ip
// ñòðóêòóðà äëÿ indirect vector control (ñì. indirect_vector_control())
struct Ivc {
short once;
float im;
float wr;
float wsNf;
float ws;
float sinTheta;
float cosTheta;
float id1;
float iq1;
float psi;
float id2;
float iq2;
}; //Ivc
// ñòðóêòóðà äëÿ äàííûõ, ïîëó÷åííûõ ñ ÂÓ
struct Mst {
short pzMode;
short faultReset;
short start;
float wmZz;
float pmZz;
float wmLim;
float pmLim;
float pIncrMaxTy;
float pDecrMaxTy;
}; //Mst
// ñòðóêòóðà äëÿ ñìåùåíèé íóëÿ äàò÷èêîâ
struct Offset {
short Udc1;
short Udc2;
short Ic1;
short Ic2;
short Ia1;
short Ia2;
short Ib1;
short Ib2;
}; //Offset
// ñòðóêòóðà äëÿ âûâîäà
struct Out {
float K;
float udc1;
float udc2;
float iac1;
float iac2;
float me;
float wm;
float pm;
}; //Out
// ñòðóêòóðà äëÿ çàùèò
struct Protect {
short IacMax;
short IacMin;
unsigned short Tdi24VSource;
volatile unsigned short tDI24VSource;
unsigned short TudcMin;
volatile unsigned short tUdc1Min;
volatile unsigned short tUdc2Min;
unsigned short TwmMax;
volatile unsigned short tWmMax;
float UdcMin;
float UdcMax;
float WmMax;
}; //Protect
// ñòðóêòóðà äëÿ ðåçóëüòàòîâ ÀÖÏ
struct Result {
short udc1;
short udc2;
short ic1;
short ic2;
short ia1;
short ia2;
short ib1;
short ib2;
}; //Result
// ñòðóêòóðà äëÿ çàäàííîãî ïîòîêà (ñì. reference_flux())
struct Rf {
short once;
float PsiZ;
float PsizIncr;
float psiZi;
float psiZCorr;
float psiSub;
float psiZCorr2;
float psiZ;
float KpsiSub;
float Kpsiz;
float WmNomPsi;
float YlimPsi;
float pPsiZ;
float psiZPrev1;
float psiZPrev2;
float psiZPrev3;
}; //Rf
// ñòðóêòóðà äëÿ çàäàííîé ìîùíîñòè (ñì. reference_power())
struct Rp {
short once;
float pmZz;
float pmZi;
float pmZ;
float Kpmz;
float PlimIncr;
float KpIncrDecr;
volatile float pmEqv;
}; //Rp
// ñòðóêòóðà äëÿ çàäàííîé ñêîðîñòè (ñì. reference_speed())
struct Rs {
short once;
float wmZz;
float wmZi;
float wmZ;
float Kwmz;
float WlimIncr;
float wzIncrNf;
float wzIncr;
float pWmZ;
float wmZPrev1;
float wmZPrev2;
float wmZPrev3;
short tPwmZ;
}; //Rs
// ñòðóêòóðà äëÿ ïàðàìåòðîâ ÃÝÄ
struct SgmPar {
float Rs;
float Lls;
float Rr;
float Llr;
float Lm;
float Ls;
float Lr;
float SigmaLs;
float LmInv;
float LrInv;
float Tr;
float TrInv;
float Kl;
float KlInv;
}; //SgmPar
#endif //DEF

View File

@ -1,4 +1,5 @@
#include "mcu_wrapper_conf.h"
#include "pwm_sim.h"
//#include "edrk_main.h"
//#include "vector.h"
//#include "vector_control.h"
@ -91,6 +92,20 @@ void mcu_simulate_step(void)
unsigned int ReadMemory(unsigned long addr)
{
unsigned int returnval = 0;
if (addr == ADR_SAW_VALUE)
returnval = t1sim.tcnt;
//return (*(volatile int *)(addr));
return returnval;
}
void WriteMemory(unsigned long addr, unsigned int data)
{
//(*(volatile int *)( addr )) = data;
}
void project_read_all_pbus2()
@ -191,17 +206,6 @@ void pause_1000(void)
int xerror(unsigned int er_ID, void* CallBackRef)
{
};
unsigned int ReadMemory(unsigned long addr)
{
//return (*(volatile int *)(addr));
return 0;
}
void WriteMemory(unsigned long addr, unsigned int data)
{
//(*(volatile int *)( addr )) = data;
}
void func_unpack_answer_from_Ingeteam(unsigned int a) {}
void unpack_answer_from_MPU_SVU_CAN(unsigned int a) {}

View File

@ -51,7 +51,7 @@ void Init_Timers(void)
void initSimulateTim(TimerSimHandle* tsim, int period, double step)
{
tsim->dtsim.stateDt = 1;
tsim->TPr = period/2;
tsim->TPr = period;
tsim->TxCntPlus = step;
tsim->dtsim.DtCntPeriod = (int)(DT / hmcu.SimSampleTime);
}

View File

@ -86,7 +86,7 @@ void MCU_Periph_Simulation(void)
/**
* @brief Считывание входов S-Function в порты ввода-вывода.
* @param S - указатель на структуру S-Function из "simstruc.h"
* @details Пользовательский код, который записывает порты ввода-вывода из входов S-Function.
* @details Пользовательский код, который записывает входы МК из входов S-Function.
*/
void MCU_readInputs(SimStruct* S)
{
@ -124,15 +124,16 @@ void MCU_writeOutputs(SimStruct* S)
*/
void SIM_Initialize_Simulation(void)
{
// инициализация потока, который будет выполнять код МК
#ifdef RUN_APP_THRREAD
// инициализация потока, который будет выполнять код МК
hmcu.hMCUThread = (HANDLE)CreateThread(NULL, 0, MCU_App_Thread, 0, CREATE_SUSPENDED, &hmcu.idMCUThread);
#endif //RUN_APP_THRREAD
/* user initialization */
Init_Timers();
init28335();
/* wrapper initialization */
/* clock step initialization */
hmcu.SystemClock_step = MCU_CORE_CLOCK * hmcu.SimSampleTime; // set system clock step
}
/* MCU WRAPPER DEINITIALIZATION */

View File

@ -91,7 +91,7 @@ typedef struct {
double SystemClockDouble; ///< Счетчик в формате double для точной симуляции системных тиков С промежуточными значений
long SystemClock; ///< Счетчик тактов для симуляции системных тиков (в целочисленном формате)
double SystemClock_step; ///< Шаг тиков для их симуляции, в формате double
double SimTime;
double SimTime; ///< Текущее время симуляции
}SIM__MCUHandleTypeDef;
extern SIM__MCUHandleTypeDef hmcu; // extern для видимости переменной во всех файлах