motor_sim_helper.cpp 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #include "motor_sim_helper.h"
  2. PmsmSimUtModelClass::P_PmsmSimUt_T MotorSimHelper::DefaultParameter;
  3. void MotorSimHelper::StoreDefaultParam()
  4. {
  5. DefaultParameter = PmsmSimUtModelClass::PmsmSimUt_P;
  6. }
  7. void MotorSimHelper::RestoreDefaultParam(PmsmSimUtModelClass *sys)
  8. {
  9. sys->PmsmSimUt_P = DefaultParameter;
  10. }
  11. void MotorSimHelper::TransitModelOutput(PmsmSimUtModelClass *sys, McStatus *status)
  12. {
  13. McPuBase *b = status->Base;
  14. McStatusNamed *n = &status->Named;
  15. McStatusPu *p = &status->Pu;
  16. p->swIa = (s16)((sys->PmsmSimUt_Y.Out.Iabc[0] * 100 * 16384) / b->uwIbAp);
  17. p->swIb = (s16)((sys->PmsmSimUt_Y.Out.Iabc[1] * 100 * 16384) / b->uwIbAp);
  18. p->swIc = (s16)((sys->PmsmSimUt_Y.Out.Iabc[2] * 100 * 16384) / b->uwIbAp);
  19. double ialpha = 0.6667 * (sys->PmsmSimUt_Y.Out.Iabc[0] - 0.5 * sys->PmsmSimUt_Y.Out.Iabc[1] - 0.5 * sys->PmsmSimUt_Y.Out.Iabc[2]);
  20. double ibeta = 0.57735 * (sys->PmsmSimUt_Y.Out.Iabc[1] - sys->PmsmSimUt_Y.Out.Iabc[2]);
  21. p->swIalpha = (s16)((ialpha * 100 * 16384) / b->uwIbAp);
  22. p->swIalpha = (s16)((ibeta * 100 * 16384) / b->uwIbAp);
  23. p->swIzero = 0;
  24. p->swId = (s16)((sys->PmsmSimUt_Y.Out.Idq[0] * 100 * 16384) / b->uwIbAp);
  25. p->swIq = (s16)((sys->PmsmSimUt_Y.Out.Idq[1] * 100 * 16384) / b->uwIbAp);
  26. p->swI0 = 0;
  27. p->swUa = (s16)((sys->PmsmSimUt_Y.Out.Uabc[0] * 10 * 16384) / b->uwUbVt);
  28. p->swUb = (s16)((sys->PmsmSimUt_Y.Out.Uabc[1] * 10 * 16384) / b->uwUbVt);
  29. p->swUc = (s16)((sys->PmsmSimUt_Y.Out.Uabc[2] * 10 * 16384) / b->uwUbVt);
  30. double ualpha = 0.6667 * (sys->PmsmSimUt_Y.Out.Uabc[0] - 0.5 * sys->PmsmSimUt_Y.Out.Uabc[1] - 0.5 * sys->PmsmSimUt_Y.Out.Uabc[2]);
  31. double ubeta = 0.57735 * (sys->PmsmSimUt_Y.Out.Uabc[1] - sys->PmsmSimUt_Y.Out.Uabc[2]);
  32. p->swUalpha = (s16)((ualpha * 10 * 16384) / b->uwUbVt);
  33. p->swUbeta = (s16)((ubeta * 10 * 16384) / b->uwUbVt);
  34. p->swUzero = 0;
  35. p->swElecAngle = (s16)(sys->PmsmSimUt_Y.Out.Theta / 2 / 3.1415926 * 32768);
  36. p->swElecOmega = (s16)((sys->PmsmSimUt_Y.Out.We * 10 * 32768) / b->uwWeb);
  37. p->swUac = (s16)(((s32)5400 << 14) / b->uwUbVt);
  38. p->swUdc = (s16)(((s32)5400 << 14) / b->uwUbVt);
  39. }
  40. void MotorSimHelper::SetModelICmdPu(PmsmSimUtModelClass *sys, double id_pu, double iq_pu, McPuBase *base)
  41. {
  42. sys->PmsmSimUt_U.CtrlIn.IdCmd = (double)id_pu / (double)(1 << 14) * (double)base->uwIbAp / 100.0;
  43. sys->PmsmSimUt_U.CtrlIn.IqCmd = (double)iq_pu / (double)(1 << 14) * (double)base->uwIbAp / 100.0;
  44. }
  45. void MotorSimHelper::SetModelUCmdPu(PmsmSimUtModelClass *sys, double ud_pu, double uq_pu, McPuBase *base)
  46. {
  47. sys->PmsmSimUt_U.ICtrlIn.UdCtrl = (double)ud_pu / (double)(1 << 14) * ((double)base->uwUbVt / 10.0);
  48. sys->PmsmSimUt_U.ICtrlIn.UqCtrl = (double)uq_pu / (double)(1 << 14) * ((double)base->uwUbVt / 10.0);
  49. }