#3 Добавлена поддержка двойного прерывания
ReadMemory(ADR_SAW_VALUE) возвращает текущее значение пилы PWM и алгоритм может определить уровень прерывания detect_level_interrupt()
This commit is contained in:
parent
affe05dc54
commit
2163dad313
276
Inu/def.h
276
Inu/def.h
@ -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
|
||||
|
@ -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) {}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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 */
|
||||
|
@ -86,12 +86,12 @@ typedef struct {
|
||||
int idMCUThread; ///< id потока МК (unused)
|
||||
// Flags
|
||||
unsigned fMCU_Stop : 1; ///< флаг для выхода из потока программы МК
|
||||
double SimSampleTime; ///< sample time of simulation
|
||||
double SimSampleTime; ///< sample time of simulation
|
||||
|
||||
double SystemClockDouble; ///< Счетчик в формате double для точной симуляции системных тиков С промежуточными значений
|
||||
long SystemClock; ///< Счетчик тактов для симуляции системных тиков (в целочисленном формате)
|
||||
double SystemClock_step; ///< Шаг тиков для их симуляции, в формате double
|
||||
double SimTime;
|
||||
double SimTime; ///< Текущее время симуляции
|
||||
}SIM__MCUHandleTypeDef;
|
||||
extern SIM__MCUHandleTypeDef hmcu; // extern для видимости переменной во всех файлах
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user