| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- /**
- * @copyright None
- * @file FOCTailDect.c
- * @author Comment Vivre
- * @date 2024-08-26
- * @brief None
- */
- #include <MyProject.h>
- /**
- * @function FocDetectInit
- * @brief 顺逆风参数初始化
- * @param[in] None
- * @return None
- * @date 2024-08-26
- */
- void FocDetectInit(void)
- {
- MOE = 0;
- FOC_Init(); // FOC的初始化
- FOC_DKP = DQKP_TailWind; // 顺逆风的电流环KP
- FOC_DKI = DQKI_TailWind; // 顺逆风的电流环KI
- FOC_QKP = DQKP_TailWind; // 顺逆风的电流环KP
- FOC_QKI = DQKI_TailWind; // 顺逆风的电流环KI
- FOC_EKP = OBSW_KP_GAIN_WIND; // 顺逆风速度估算的KP
- FOC_EKI = OBSW_KI_GAIN_WIND; // 顺逆风速度估算的KI
- FOC_OMEKLPF = SPEED_KLPF_WIND; // 顺逆风下的速度滤波系数
- SetBit(FOC_CR1, ANGM); // 估算模式
- FOC_IDREF = 0; // D轴输出
- FOC_IQREF = 0;
- MOE = 1; // 打开MOE
- }
- /**
- * @function FOCCloseLoopStart
- * @brief 顺风启动
- * @param[in] None
- * @return None
- * @date 2024-08-26
- */
- void FOCCloseLoopStart(void)
- {
- // 配置启动的参数,Omega模式
- FOC_EFREQACC = MOTOR_OMEGA_RAMP_ACC;
- FOC_EFREQMIN = MOTOR_OMEGA_RAMP_MIN;
- FOC_EFREQHOLD = MOTOR_OMEGA_RAMP_END;
- SetBit(FOC_CR1, EFAE); // 估算器强制输出
- ClrBit(FOC_CR1, RFAE); // 禁止强拉
- SetBit(FOC_CR1, ANGM); // 估算模式
- // 电流环的PI和输出限赋值
- FOC_DKP = DKP;
- FOC_DKI = DKI;
- FOC_QKP = QKP;
- FOC_QKI = QKI;
- FOC_DMAX = DOUTMAX;
- FOC_DMIN = DOUTMIN;
- FOC_QMAX = QOUTMAX;
- FOC_QMIN = QOUTMIN;
- /*********PLL或SMO**********/
- #if (EstimateAlgorithm == SMO)
- {
- //根据不同转速确启动的ATO_BW值
- FOC_EKP = OBSW_KP_GAIN_RUN3;
- FOC_EKI = OBSW_KI_GAIN_RUN3;
- mcFocCtrl.IqRef = IQ_Start_CURRENT;
- mcFocCtrl.State_Count = 800;
- }
- #elif (EstimateAlgorithm == PLL)
- mcFocCtrl.IqRef = IQ_RUN_CURRENT;
- #endif
- FOC_OMEKLPF = SPEED_KLPF;
- FOC_IDREF = ID_RUN_CURRENT; // D轴启动电流
- FOC_IQREF = mcFocCtrl.IqRef; // Q轴启动电流
- PI3_UKH = mcFocCtrl.IqRef;
- mcState = mcRun;
- mcFocCtrl.CtrlMode = 0;
- }
- /**
- * @function FOC_TailWindDealwith
- * @brief None
- * @param[in] None
- * @return None
- * @date 2024-08-26
- */
- void FOC_TailWindDealwith(void)
- {
- if (mcFocCtrl.SpeedFlt < S_Value(500))
- {
- MOE = 0;
- ClrBit(DRV_CR, FOCEN); //关闭FOC
- McStaSet.SetFlag.PosiCheckSetFlag = 0;
- mcFocCtrl.mcPosCheckAngle = 0; // 角度赋初值
- }
- }
|