FOCTailDect.c 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /**
  2. * @copyright None
  3. * @file FOCTailDect.c
  4. * @author Comment Vivre
  5. * @date 2024-08-26
  6. * @brief None
  7. */
  8. #include <MyProject.h>
  9. /**
  10. * @function FocDetectInit
  11. * @brief 顺逆风参数初始化
  12. * @param[in] None
  13. * @return None
  14. * @date 2024-08-26
  15. */
  16. void FocDetectInit(void)
  17. {
  18. MOE = 0;
  19. FOC_Init(); // FOC的初始化
  20. FOC_DKP = DQKP_TailWind; // 顺逆风的电流环KP
  21. FOC_DKI = DQKI_TailWind; // 顺逆风的电流环KI
  22. FOC_QKP = DQKP_TailWind; // 顺逆风的电流环KP
  23. FOC_QKI = DQKI_TailWind; // 顺逆风的电流环KI
  24. FOC_EKP = OBSW_KP_GAIN_WIND; // 顺逆风速度估算的KP
  25. FOC_EKI = OBSW_KI_GAIN_WIND; // 顺逆风速度估算的KI
  26. FOC_OMEKLPF = SPEED_KLPF_WIND; // 顺逆风下的速度滤波系数
  27. SetBit(FOC_CR1, ANGM); // 估算模式
  28. FOC_IDREF = 0; // D轴输出
  29. FOC_IQREF = 0;
  30. MOE = 1; // 打开MOE
  31. }
  32. /**
  33. * @function FOCCloseLoopStart
  34. * @brief 顺风启动
  35. * @param[in] None
  36. * @return None
  37. * @date 2024-08-26
  38. */
  39. void FOCCloseLoopStart(void)
  40. {
  41. // 配置启动的参数,Omega模式
  42. FOC_EFREQACC = MOTOR_OMEGA_RAMP_ACC;
  43. FOC_EFREQMIN = MOTOR_OMEGA_RAMP_MIN;
  44. FOC_EFREQHOLD = MOTOR_OMEGA_RAMP_END;
  45. SetBit(FOC_CR1, EFAE); // 估算器强制输出
  46. ClrBit(FOC_CR1, RFAE); // 禁止强拉
  47. SetBit(FOC_CR1, ANGM); // 估算模式
  48. // 电流环的PI和输出限赋值
  49. FOC_DKP = DKP;
  50. FOC_DKI = DKI;
  51. FOC_QKP = QKP;
  52. FOC_QKI = QKI;
  53. FOC_DMAX = DOUTMAX;
  54. FOC_DMIN = DOUTMIN;
  55. FOC_QMAX = QOUTMAX;
  56. FOC_QMIN = QOUTMIN;
  57. /*********PLL或SMO**********/
  58. #if (EstimateAlgorithm == SMO)
  59. {
  60. //根据不同转速确启动的ATO_BW值
  61. FOC_EKP = OBSW_KP_GAIN_RUN3;
  62. FOC_EKI = OBSW_KI_GAIN_RUN3;
  63. mcFocCtrl.IqRef = IQ_Start_CURRENT;
  64. mcFocCtrl.State_Count = 800;
  65. }
  66. #elif (EstimateAlgorithm == PLL)
  67. mcFocCtrl.IqRef = IQ_RUN_CURRENT;
  68. #endif
  69. FOC_OMEKLPF = SPEED_KLPF;
  70. FOC_IDREF = ID_RUN_CURRENT; // D轴启动电流
  71. FOC_IQREF = mcFocCtrl.IqRef; // Q轴启动电流
  72. PI3_UKH = mcFocCtrl.IqRef;
  73. mcState = mcRun;
  74. mcFocCtrl.CtrlMode = 0;
  75. }
  76. /**
  77. * @function FOC_TailWindDealwith
  78. * @brief None
  79. * @param[in] None
  80. * @return None
  81. * @date 2024-08-26
  82. */
  83. void FOC_TailWindDealwith(void)
  84. {
  85. if (mcFocCtrl.SpeedFlt < S_Value(500))
  86. {
  87. MOE = 0;
  88. ClrBit(DRV_CR, FOCEN); //关闭FOC
  89. McStaSet.SetFlag.PosiCheckSetFlag = 0;
  90. mcFocCtrl.mcPosCheckAngle = 0; // 角度赋初值
  91. }
  92. }