mcFiledWeaken.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /* --------------------------- (C) COPYRIGHT 2021 Fortiortech ShenZhen -----------------------------
  2. File Name : MotorFiledWeaken.c
  3. Author : Fortiortech Appliction Team
  4. Version : V1.0
  5. Date : 2021-12-08
  6. Description : This file contains motor filed weaken function used for Motor Control.
  7. ----------------------------------------------------------------------------------------------------
  8. All Rights Reserved
  9. ------------------------------------------------------------------------------------------------- */
  10. #include <FU68xx_2.h>
  11. #include <Myproject.h>
  12. FieldWeakeningTypeDef xdata mcFiledWeaken;
  13. /* -------------------------------------------------------------------------------------------------
  14. Function Name : FiledWeakenInit
  15. Description : 弱磁函数初始化
  16. Date : 2021-12-08
  17. Parameter : None
  18. ------------------------------------------------------------------------------------------------- */
  19. void FiledWeakenInit(void)
  20. {
  21. PI3_EK = 0;
  22. PI3_EK1 = 0;
  23. PI3_KP = MotorFiledWeakenKp;
  24. PI3_KI = MotorFiledWeakenKi;
  25. PI3_UKH = 0;
  26. PI3_UKL = 0;
  27. PI3_UKMAX = 0;
  28. PI3_UKMIN = _Q15(-45.0/180.0);
  29. mcFiledWeaken.WeakenUsRef = MotorFiledWeakenUs >> 1;
  30. }
  31. /* -------------------------------------------------------------------------------------------------
  32. Function Name : FiledSqrtUdUq
  33. Description : 弱磁的时候计算Ud和Uq平方和开方Us
  34. Date : 2021-12-08
  35. Parameter : ud: [输入/出]
  36. ** uq: [输入/出]
  37. ------------------------------------------------------------------------------------------------- */
  38. uint16 FiledSqrtUdUq(int16 ud, int16 uq)
  39. {
  40. SCAT1_COS = ud; //mcFiledWeaken.WeakenRunUd;
  41. SCAT1_SIN = uq; //mcFiledWeaken.WeakenRunUq
  42. SMDU_RunBlock(1, ATAN);
  43. return SCAT1_RES1;
  44. }
  45. /* -------------------------------------------------------------------------------------------------
  46. Function Name : GetFiledWeakenTheta
  47. Description : 通过PI运算获取弱磁的角度
  48. Date : 2021-12-08
  49. Parameter : None
  50. ------------------------------------------------------------------------------------------------- */
  51. int16 GetFiledWeakenTheta(void)
  52. {
  53. PI3_EK = mcFiledWeaken.WeakenUsRef - mcFiledWeaken.WeakenUsFed; //填入EK
  54. SMDU_RunBlock(3, PI);
  55. return PI3_UKH;
  56. }
  57. /* -------------------------------------------------------------------------------------------------
  58. Function Name : GetFiledWeakenIqId
  59. Description : 通过弱磁角度得到Iq和Id的参考值
  60. Date : 2021-12-08
  61. Parameter : Theta: [输入/出]
  62. ** Is: [输入/出]
  63. ------------------------------------------------------------------------------------------------- */
  64. void GetFiledWeakenIqId(int16 Theta, int16 Is)
  65. {
  66. SCAT1_SIN = 0;
  67. SCAT1_COS = Is;
  68. SCAT1_THE = Theta;
  69. SMDU_RunBlock(1, SIN_COS);
  70. mcFiledWeaken.IqRef = SCAT1_RES1;
  71. mcFiledWeaken.IdRef = SCAT1_RES2;
  72. }
  73. /* -------------------------------------------------------------------------------------------------
  74. Function Name : FileWeakenControl
  75. Description : 弱磁控制
  76. Date : 2021-12-08
  77. Parameter : None
  78. ------------------------------------------------------------------------------------------------- */
  79. void FileWeakenControl(void)
  80. {
  81. mcFiledWeaken.WeakenRunUd = LPFFunction(FOC__UD, mcFiledWeaken.WeakenRunUd, 10);
  82. mcFiledWeaken.WeakenRunUq = LPFFunction(FOC__UQ, mcFiledWeaken.WeakenRunUq, 10);
  83. mcFiledWeaken.WeakenUsFed = FiledSqrtUdUq((mcFiledWeaken.WeakenRunUd >> 1), (mcFiledWeaken.WeakenRunUq >> 1));
  84. mcFiledWeaken.WeakenTheta = GetFiledWeakenTheta();
  85. mcFiledWeaken.mcIsref = mcFocCtrl.IqRef;
  86. GetFiledWeakenIqId(mcFiledWeaken.WeakenTheta, mcFiledWeaken.mcIsref);
  87. FOC_IQREF = mcFiledWeaken.IqRef;
  88. FOC_IDREF = mcFiledWeaken.IdRef;
  89. }