mc_status.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include "mc_status.h"
  2. #include "string.h"
  3. void McStatusInit(McStatus *s, McPuBase *base)
  4. {
  5. s->Base = base;
  6. memset(&s->Named, 0, sizeof(McStatusNamed));
  7. memset(&s->Pu, 0, sizeof(McStatusPu));
  8. }
  9. void McStatusSyncNamed(McStatus *s)
  10. {
  11. McPuBase *b = s->Base;
  12. McStatusNamed *n = &s->Named;
  13. McStatusPu *p = &s->Pu;
  14. n->Ia = (s16)((p->swIa * b->uwIbAp) >> 14);
  15. n->Ib = (s16)((p->swIb * b->uwIbAp) >> 14);
  16. n->Ic = (s16)((p->swIc * b->uwIbAp) >> 14);
  17. n->IpeakAbs = (s16)((p->swIpeakAbs * b->uwIbAp) >> 14);
  18. n->Ialpha = (s16)((p->swIalpha * b->uwIbAp) >> 14);
  19. n->Ibeta = (s16)((p->swIbeta * b->uwIbAp) >> 14);
  20. n->Izero = (s16)((p->swIzero * b->uwIbAp) >> 14);
  21. n->Id = (s16)(((s32)p->swId * b->uwIbAp) >> 14);
  22. n->Iq = (s16)(((s32)p->swIq * b->uwIbAp) >> 14);
  23. n->I0 = (s16)(((s32)p->swI0 * b->uwIbAp) >> 14);
  24. n->Ua = (s16)(((s32)p->swUa * b->uwUbVt) >> 14);
  25. n->Ub = (s16)(((s32)p->swUb * b->uwUbVt) >> 14);
  26. n->Uc = (s16)(((s32)p->swUc * b->uwUbVt) >> 14);
  27. n->Ualpha = (s16)(((s32)p->swUalpha * b->uwUbVt) >> 14);
  28. n->Ubeta = (s16)(((s32)p->swUbeta * b->uwUbVt) >> 14);
  29. n->Uzero = (s16)(((s32)p->swUzero * b->uwUbVt) >> 14);
  30. n->ElecAngle = (s16)(((s32)p->swElecAngle * 360) >> 15);
  31. n->ElecOmega = (s16)(((s32)p->swElecOmega * b->uwWeb) >> 15);
  32. n->MechAngle = (s16)(((s32)p->swMechAngle * 360) >> 15);
  33. n->MechOmega = (s16)(((s32)p->swMechOmega * b->uwWeb) >> 15);
  34. n->ElecFreq = (s16)(((s32)p->swElecFreq * b->uwFbHz) >> 15);
  35. n->Uac = (s16)(((s32)p->swUac * b->uwUbVt) >> 14);
  36. n->Udc = (s16)(((s32)p->swUdc * b->uwUbVt) >> 14);
  37. n->TempIgbt = p->swTempIgbt;
  38. n->TempMotor = p->swTempMotor;
  39. n->TempInv = p->swTempInv;
  40. }
  41. void McStatusSyncPu(McStatus *s)
  42. {
  43. McPuBase *b = s->Base;
  44. McStatusNamed *n = &s->Named;
  45. McStatusPu *p = &s->Pu;
  46. p->swIa = (s16)(((s32)n->Ia << 14) / b->uwIbAp);
  47. p->swIb = (s16)(((s32)n->Ib << 14) / b->uwIbAp);
  48. p->swIc = (s16)(((s32)n->Ic << 14) / b->uwIbAp);
  49. p->swIpeakAbs = (s16)(((s32)n->IpeakAbs << 14) / b->uwIbAp);
  50. p->swIalpha = (s16)(((s32)n->Ialpha << 14) / b->uwIbAp);
  51. p->swIalpha = (s16)(((s32)n->Ibeta << 14) / b->uwIbAp);
  52. p->swIzero = (s16)(((s32)n->Izero << 14) / b->uwIbAp);
  53. p->swId = (s16)(((s32)n->Id << 14) / b->uwIbAp);
  54. p->swIq = (s16)(((s32)n->Iq << 14) / b->uwIbAp);
  55. p->swI0 = (s16)(((s32)n->I0 << 14) / b->uwIbAp);
  56. p->swUa = (s16)(((s32)n->Ua << 14) / b->uwUbVt);
  57. p->swUb = (s16)(((s32)n->Ub << 14) / b->uwUbVt);
  58. p->swUc = (s16)(((s32)n->Uc << 14) / b->uwUbVt);
  59. p->swUalpha = (s16)(((s32)n->Ualpha << 14) / b->uwUbVt);
  60. p->swUbeta = (s16)(((s32)n->Ubeta << 14) / b->uwUbVt);
  61. p->swUzero = (s16)(((s32)n->Uzero << 14) / b->uwUbVt);
  62. p->swElecAngle = (s16)((s32)(n->ElecAngle << 15) / 360);
  63. p->swElecOmega = (s16)((s32)(n->ElecOmega << 15) / b->uwWeb / 10);
  64. p->swMechAngle = (s16)((s32)(n->MechAngle << 15) / 360);
  65. p->swMechOmega = (s16)((s32)(n->MechOmega << 15) / b->uwWeb / 10);
  66. p->swElecFreq = (s16)(((s32)n->ElecFreq << 15) / b->uwFbHz / 10);
  67. p->swUac = (s16)(((s32)n->Uac << 14) / b->uwUbVt);
  68. p->swUdc = (s16)(((s32)n->Udc << 14) / b->uwUbVt);
  69. p->swTempIgbt = n->TempIgbt;
  70. p->swTempMotor = n->TempMotor;
  71. p->swTempInv = n->TempInv;
  72. }