FOCTailDect.c 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /* -------------------------- (C) COPYRIGHT 2020 Fortiortech ShenZhen ---------------------------*/
  2. /* File Name : FOCTailDect.c
  3. /* Author : Fortiortech Appliction Team
  4. /* Version : V1.0
  5. /* Date : 2021-11-07
  6. /* Description : This file contains Foc tailwind detection function used for Motor Control.
  7. /* ----------------------------------------------------------------------------------------------*/
  8. /* All Rights Reserved
  9. /* ----------------------------------------------------------------------------------------------*/
  10. #include <MyProject.h>
  11. /* Private typedef ------------------------------------------------------------------------------*/
  12. /* Private define -------------------------------------------------------------------------------*/
  13. /* Private macro --------------------------------------------------------------------------------*/
  14. /* Private variables ----------------------------------------------------------------------------*/
  15. /* Private function prototypes ------------------------------------------------------------------*/
  16. /* Private functions ----------------------------------------------------------------------------*/
  17. /*---------------------------------------------------------------------------*/
  18. /* Name : void FocDetect(void)
  19. /* Input : NO
  20. /* Output : NO
  21. /* Description: 顺逆风参数初始化
  22. /*---------------------------------------------------------------------------*/
  23. void FocDetectInit(void)
  24. {
  25. MOE = 0;
  26. FOC_Init(); // FOC的初始化
  27. FOC_DKP = DQKP_TailWind; // 顺逆风的电流环KP
  28. FOC_DKI = DQKI_TailWind; // 顺逆风的电流环KI
  29. FOC_QKP = DQKP_TailWind; // 顺逆风的电流环KP
  30. FOC_QKI = DQKI_TailWind; // 顺逆风的电流环KI
  31. FOC_EKP = OBSW_KP_GAIN_WIND; // 顺逆风速度估算的KP
  32. FOC_EKI = OBSW_KI_GAIN_WIND; // 顺逆风速度估算的KI
  33. FOC_OMEKLPF = SPEED_KLPF_WIND; // 顺逆风下的速度滤波系数
  34. SetBit(FOC_CR1, ANGM); // 估算模式
  35. FOC_IDREF = 0; // D轴输出
  36. FOC_IQREF = 0;
  37. MOE = 1; // 打开MOE
  38. }
  39. /*---------------------------------------------------------------------------*/
  40. /* Name : void FOCCloseLoopStart(void)
  41. /* Input : NO
  42. /* Output : NO
  43. /* Description: 顺风启动
  44. /*---------------------------------------------------------------------------*/
  45. void FOCCloseLoopStart(void)
  46. {
  47. //配置启动的参数,Omega模式
  48. FOC_EFREQACC = MOTOR_OMEGA_RAMP_ACC;
  49. FOC_EFREQMIN = MOTOR_OMEGA_RAMP_MIN;
  50. FOC_EFREQHOLD = MOTOR_OMEGA_RAMP_END;
  51. SetBit(FOC_CR1, EFAE); // 估算器强制输出
  52. ClrBit(FOC_CR1, RFAE); // 禁止强拉
  53. SetBit(FOC_CR1, ANGM); // 估算模式
  54. //电流环的PI和输出限赋值
  55. FOC_DKP = DKP;
  56. FOC_DKI = DKI;
  57. FOC_QKP = QKP;
  58. FOC_QKI = QKI;
  59. FOC_DMAX = DOUTMAX;
  60. FOC_DMIN = DOUTMIN;
  61. FOC_QMAX = QOUTMAX;
  62. FOC_QMIN = QOUTMIN;
  63. /*********PLL或SMO**********/
  64. #if (EstimateAlgorithm == SMO)
  65. //根据不同转速确启动的ATO_BW值
  66. FOC_EKP = OBSW_KP_GAIN_RUN3;
  67. FOC_EKI = OBSW_KI_GAIN_RUN3;
  68. mcFocCtrl.IqRef = IQ_Start_CURRENT;
  69. mcFocCtrl.State_Count = 800;
  70. #elif (EstimateAlgorithm == PLL)
  71. mcFocCtrl.IqRef = IQ_RUN_CURRENT;
  72. #endif //end EstimateAlgorithm
  73. /*estimate parameter set*/
  74. FOC_OMEKLPF = SPEED_KLPF;
  75. FOC_IDREF = ID_RUN_CURRENT; // D轴启动电流
  76. FOC_IQREF = mcFocCtrl.IqRef; // Q轴启动电流
  77. PI3_UKH = mcFocCtrl.IqRef;
  78. mcState = mcRun;
  79. mcFocCtrl.CtrlMode = 0;
  80. }
  81. void FOC_TailWindDealwith(void)
  82. {
  83. if (mcFocCtrl.SpeedFlt < S_Value(500))
  84. {
  85. MOE = 0;
  86. ClrBit(DRV_CR, FOCEN); //关闭FOC
  87. McStaSet.SetFlag.PosiCheckSetFlag = 0;
  88. mcFocCtrl.mcPosCheckAngle = 0; // 角度赋初值
  89. }
  90. }