Pārlūkot izejas kodu

feat:启动调试

1.采样电阻R100待修改为R250
2.需要对应修改放大倍数
3.配置页面格式调整
Comment.Vivre 1 gadu atpakaļ
vecāks
revīzija
4c8722dd22

+ 218 - 207
User/Include/Customer.h

@@ -11,33 +11,79 @@
 /**
 ---------------------------------------------------------------------------------------------------------------------------------------------
 	@brief 驱动参数
+---------------------------------------------------------------------------------------------------------------------------------------------
 */
-#define PWM_FREQUENCY                  (16.0)                                   ///< (kHz) 载波频率
-#define PWM_DEADTIME                   (1.2)                                    ///< (us) 死区时间
-#define MIN_WIND_TIME                  (2.6)                     ///< (us) 单电阻最小采样窗口,建议值死区时间+0.9us
-#define DLL_TIME                       (PWM_DEADTIME + 0.3)                     ///< (us) 双电阻最小脉宽设置, 建议值为死区时间值+0.2us以上
+#define PWM_FREQUENCY					(16.0)					// (kHz) 载波频率
+#define PWM_DEADTIME					(1.2)					// (us) 死区时间
+#define MIN_WIND_TIME					(2.6)					// (us) 单电阻最小采样窗口,建议值死区时间+0.9us
+#define DLL_TIME						(PWM_DEADTIME + 0.3)	// (us) 双电阻最小脉宽设置, 建议值为死区时间值+0.2us以上
+
+/* ---------------- 启动参数非必要勿动---------------- */
+
+/**
+ * 开环启动模式选择
+ * @param (Open_Start)          开环强拖启动
+ * @param (Omega_Start)         Omega启动
+ */
+#define Open_Start_Mode					(Omega_Start)			// 开环启动模式选择
+// OMEGA启动参数
+#define MOTOR_OMEGA_RAMP_ACC			(10)					// omega启动的增量(每个载波递增值) 
+#define MOTOR_OMEGA_RAMP_MIN			S_Value(200.0)			// (RPM) omega启动的最小切换转速
+#define MOTOR_OMEGA_RAMP_END			S_Value(400.0)			// (RPM) omega启动的限制转速
+
+#define MOTOR_SPEED_SMOMIN_RPM			(20.0)					// (RPM) SMO运行最小转速影响启动
+#define SPD_BW							(20.0)					// 速度带宽的滤波值,经典值为5.0-40.0
+#define MOTOR_LOOP_RPM					S_Value(500.0)			// (RPM) 启动后电流环切入外部环路转速阈值
+
+// D轴参数设置
+#define DOUTMAX							_Q15(0.99)				// D轴电压最大限幅值,单位:输出占空比
+#define DOUTMIN							_Q15(-0.99)				// D轴电压最小限幅值,单位:输出占空比
+// Q轴参数设置
+#define QOUTMAX							_Q15(0.99)				// Q轴电压最大限幅值,单位:输出占空比
+#define QOUTMIN							_Q15(-0.99)				// Q轴电压最小限幅值,单位:输出占空比
+
+/**
+ * 估算器模式选择
+ * @param (SMO)			滑膜估算
+ * @param (PLL)			锁相环
+ * @param (AO)			自适应
+ */
+#define EstimateAlgorithm				(AO)					///< 估算器模式选择
 
 /**
 ---------------------------------------------------------------------------------------------------------------------------------------------
 	@brief 电机参数
+---------------------------------------------------------------------------------------------------------------------------------------------
 */
-#define Pole_Pairs                      (4.0)				///< 极对数
-#define LD                              (0.11405)			///< (H) D轴电感
-#define LQ                              (0.11405)			///< (H) Q轴电感
-#define RS                              (36.45)             ///< (Ω) 相电阻
-#define Ke                              (69.20)				///< (V/KRPM) 反电动势常数,选择AO观测器不需要Ke
-#define MOTOR_SPEED_BASE                (5000.0)			///< (RPM) 速度基准
+
+#define Pole_Pairs                      (4.0)					// 极对数
+#define LD                              (0.11405)				// (H) D轴电感
+#define LQ                              (0.11405)				// (H) Q轴电感
+#define RS                              (36.45)					// (Ω) 相电阻
+#define Ke                              (69.20)					// (V/KRPM) 反电动势常数,选择AO观测器不需要Ke
+#define MOTOR_SPEED_BASE				(4500.0)				// (RPM) 速度基准
+#define FR_MODE							(CW)					// 转向设置 
 
 // 若选择AO自适应观测器 则无需填写Ke
-// #define KeVpp                          (1.832)			///< (V)      反电动势测量的峰峰值
-// #define KeT                            (68.40)			///< (ms)     反电动势测量的周期
-// #define Ke                             (Pole_Pairs * KeVpp * KeT / 207.84)     ///< (V/KRPM) 反电动势常数
+#define KeVpp							(0.000)					// (V) 反电动势测量的峰峰值
+#define KeT								(0.000)					// (ms) 反电动势测量的周期
+// #define Ke                              (Pole_Pairs * KeVpp * KeT / 207.84) // (V/KRPM) 反电动势常数
+
+// 电机运行时最大最小转速
+#define MOTOR_SPEED_MIN_RPM				S_Value(500.0)			// (RPM) 运行最小转速
+#define MOTOR_SPEED_MAX_RPM				S_Value(3000.0)			// (RPM) 运行最大转速
+#define MOTOR_SPEED_STOP_RPM			S_Value(250.0)			// (RPM) 关闭最小转速
 
 /**
 ---------------------------------------------------------------------------------------------------------------------------------------------
-	@brief 驱动板采样参数
+	@brief 驱动板配置
+---------------------------------------------------------------------------------------------------------------------------------------------
 */
 
+#define HW_RSHUNT                       (0.1)				///< (Ω)  采样电阻                               
+#define RV1                             (1020.0)			///< (kΩ) 母线电压分压电阻1
+#define RV2                             (10.0)				///< (kΩ) 母线电压分压电阻2
+
 /**
  * @breaf  运放模式选择
  * @param (AMP_NOMAL)       外部放大
@@ -45,11 +91,6 @@
  */
 #define HW_AMP_MODE                     (AMP_PGA_DUAL)		///< 运放模式选择
 
-#define HW_RSHUNT                       (0.1)				///< (Ω)  采样电阻                               
-
-#define RV1                             (1020.0)			///< (kΩ) 母线电压分压电阻1
-#define RV2                             (10.0)				///< (kΩ) 母线电压分压电阻2
-
 /**
  * 放大倍数设置
  * @param (AMP2x)       内部PGA放大2倍
@@ -58,29 +99,29 @@
  * @param (AMP16x)      内部PGA放大16倍
  * @param (xxxxxx)      外部放大模式填写相应倍数
  */
-#define HW_AMPGAIN                      (AMP8x)         ///< 放大倍数设置                       
+#define HW_AMPGAIN                      (AMP16x)         ///< 放大倍数设置                       
 
 /**
  * 参考电压设置
- * @param (VREF3_0)       参考电压设置为3.0V
- * @param (VREF4_0)       参考电压设置为4.0V
- * @param (VREF4_5)       参考电压设置为4.5V
- * @param (VREF5_0)       参考电压设置为5.0V
+ * @param (VREF3_0)				参考电压设置为3.0V
+ * @param (VREF4_0)				参考电压设置为4.0V
+ * @param (VREF4_5)				参考电压设置为4.5V
+ * @param (VREF5_0)				参考电压设置为5.0V
  */
-#define HW_ADC_VREF                    (VREF5_0)        ///< (V)  ADC参考电压
+#define HW_ADC_VREF					(VREF5_0)        ///< (V)  ADC参考电压
 
 /**
  * 电流采样模式选择
- * @param (Single_Resistor)       单电阻电流采样模式
- * @param (Double_Resistor)       双电阻电流采样模式
- * @param (Three_Resistor)        三电阻电流采样模式
+ * @param (Single_Resistor)		单电阻电流采样模式
+ * @param (Double_Resistor)		双电阻电流采样模式
+ * @param (Three_Resistor)		三电阻电流采样模式
  */
-#define Shunt_Resistor_Mode            (Single_Resistor)    ///< 电流采样模式选择
+#define Shunt_Resistor_Mode			(Single_Resistor)    ///< 电流采样模式选择
 
 /**
  * 基准电压VREF对外输出使能
- * @param (Disable)      禁止
- * @param (Enable)       使能
+ * @param (Disable)		禁止
+ * @param (Enable)		使能
  */
 #define VREF_OUT_EN                     (Disable)         ///< 基准电压VREF对外输出使能
 
@@ -100,105 +141,53 @@
  */
 #define VHALF_EN                        (Enable)        ///< VHALF输出使能
 
-/**
- * 预充电使能
- * @param (Disable)       禁止
- * @param (Enable)        使能
- */
-#define CHARGE_EN                      (Enable)          ///< 预充电使能
-#define CHARGE_DUTY                    (0.98)            ///< (%)  预充电下桥Duty
-#define CHARGE_TIME                    (150)             ///< (ms) 预充电时间
-
-
-/**
- * 预定位模式选择
- * @param (ALIGN_DSIABLE)       禁止
- * @param (ALIGN_NOMAL)         正常预定位
- * @param (ALIGN_TEST)          测试模式,可用于手动测试电机极对数
- */
-#define ALIGN_MOME                     (ALIGN_NOMAL)  ///< 预定位模式选择
-#define Align_Angle                    (0.0)          ///< (°) 预定位角度
-#define Align_Time                     (1)              ///< (ms) 预定位时间 
-
-/* 预定位的Kp、Ki */
-#define DQKP_Alignment                 _Q12(1.0)        ///< 预定位的KP
-#define DQKI_Alignment                 _Q15(0.01)       ///< 预定位的KI
-#define ID_Align_CURRENT               I_Value(0.0)     ///< (A) D轴定位电流
-#define IQ_Align_CURRENT               I_Value(0.3)     ///< (A) Q轴定位电流
-
 
+#define TestDefine						value					// 测试定义
 
 /**
 ---------------------------------------------------------------------------------------------------------------------------------------------
 	@brief 启动配置
+---------------------------------------------------------------------------------------------------------------------------------------------
 */
 
-/**
- * 开环启动模式选择
- * @param (Open_Start)          开环强拖启动
- * @param (Omega_Start)         Omega启动
- */
-#define Open_Start_Mode                (Omega_Start)    ///< 开环启动模式选择
-
-/* 启动电流 */
-#define ID_Start_CURRENT               I_Value(0.0)     ///< (A) D轴启动电流
-#define IQ_Start_CURRENT               I_Value(0.2)    ///< (A) Q轴启动电流
-
-/* 顺风启动切入闭环电流  */
-#define ID_RUN_CURRENT                 I_Value(0.0)     ///< (A) D轴运行电流
-#define IQ_RUN_CURRENT                 I_Value(0.1)     ///< (A) Q轴运行电流
+// 启动电流
+#define ID_Start_CURRENT				I_Value(0.0)			// (A) D轴启动电流
+#define IQ_Start_CURRENT				I_Value(0.3)			// (A) Q轴启动电流
 
-/* 启动ATO参数 */
-#define ATO_BW_START                   (0.0)            ///< 观测器带宽的滤波值,经典值为1.0-200.0 
-#define ATO_BW_RUN1                    (20.0) 
-#define ATO_BW_RUN2                    (40.0) 
-#define ATO_BW_RUN3                    (80.0) 
-#define ATO_BW_RUN4                    (120.0) 
+// 顺风启动切入闭环电流
+#define ID_RUN_CURRENT					I_Value(0.0)			// (A) D轴运行电流
+#define IQ_RUN_CURRENT					I_Value(0.1)			// (A) Q轴运行电流
 
-/* 启动ATO爬坡时间控制 */
-#define ATO_START_HOLDTIME             (10)               ///< (ms)观测器带宽的滤波值,启动第一拍ATO持续时间
-#define ATO_RAMP_PERIOD                (20)               ///< (ms)观测器带宽的滤波值,ATO爬坡递增 间隔时间
-
-
-/* OMEGA启动参数 */
-#define MOTOR_OMEGA_RAMP_ACC           (10)               ///< omega启动的增量(每个载波递增值) 
-#define MOTOR_OMEGA_RAMP_MIN           S_Value(200.0)      ///< (RPM) omega启动的最小切换转速
-#define MOTOR_OMEGA_RAMP_END           S_Value(400.0)     ///< (RPM) omega启动的限制转速
-
-#define MOTOR_SPEED_SMOMIN_RPM         (20.0)            ///< (RPM) SMO运行最小转速影响启动
-#define SPD_BW                         (20.0)             ///< 速度带宽的滤波值,经典值为5.0-40.0
-#define MOTOR_LOOP_RPM                 S_Value(500.0)     ///< (RPM) 启动后电流环切入外部环路转速阈值
-
-/* 电机运行时最大最小转速 */
-#define MOTOR_SPEED_MIN_RPM            S_Value(300.0)        ///< (RPM) 运行最小转速
-#define MOTOR_SPEED_MAX_RPM            S_Value(2000.0)       ///< (RPM) 运行最大转速
-#define MOTOR_SPEED_STOP_RPM           S_Value(250.0)       ///< (RPM) 运行最小转速
+// 启动ATO参数
+// 观测器带宽的滤波值,经典值为1.0-200.0
+#define ATO_BW_START					(0.0)
+#define ATO_BW_RUN1						(20.0) 
+#define ATO_BW_RUN2						(40.0) 
+#define ATO_BW_RUN3						(80.0) 
+#define ATO_BW_RUN4						(150.0) 
 
+// 启动ATO爬坡时间控制
+#define ATO_START_HOLDTIME				(10)					// (ms)观测器带宽的滤波值,启动第一拍ATO持续时间
+#define ATO_RAMP_PERIOD					(20)					// (ms)观测器带宽的滤波值,ATO爬坡递增 间隔时间
 
 /**
 ---------------------------------------------------------------------------------------------------------------------------------------------
-	@brief 电流环参数设置值
-*/
-#define DKP_Start                      _Q12(2.5)        ///< 启动DQ轴电流环KP
-#define DKI_Start                      _Q15(0.02)       ///< 启动DQ轴电流环KI
-#define QKP_Start                      _Q12(2.5)        ///< 启动DQ轴电流环KP
-#define QKI_Start                      _Q15(0.02)       ///< 启动DQ轴电流环KI
-
-#define DKP                            _Q12(2.5)        ///< 运行DQ轴电流环KP
-#define DKI                            _Q15(0.05)       ///< 运行DQ轴电流环KI
-#define QKP                            _Q12(2.5)        ///< 运行DQ轴电流环KP
-#define QKI                            _Q15(0.05)       ///< 运行DQ轴电流环KI
-/* D轴参数设置 */
-#define DOUTMAX                        _Q15(0.99)        ///< D轴电压最大限幅值,单位:输出占空比
-#define DOUTMIN                        _Q15(-0.99)       ///< D轴电压最小限幅值,单位:输出占空比
-/* Q轴参数设置 */
-#define QOUTMAX                        _Q15(0.99)       ///< Q轴电压最大限幅值,单位:输出占空比
-#define QOUTMIN                        _Q15(-0.99)      ///< Q轴电压最小限幅值,单位:输出占空比
-
-/**
+	@brief 环路以及基本控制配置
 ---------------------------------------------------------------------------------------------------------------------------------------------
-	@brief 环路参数
 */
+
+// 电流环DQ轴启动KPKI配置
+#define DKP_Start						_Q12(2.5)				// 启动DQ轴电流环KP
+#define DKI_Start						_Q15(0.02)				// 启动DQ轴电流环KI
+#define QKP_Start						_Q12(2.5)				// 启动DQ轴电流环KP
+#define QKI_Start						_Q15(0.02)				// 启动DQ轴电流环KI
+
+// 电流环DQ轴运行KPKI配置
+#define DKP								_Q12(2.5)				// 运行DQ轴电流环KP
+#define DKI								_Q15(0.05)				// 运行DQ轴电流环KI
+#define QKP								_Q12(2.5)				// 运行DQ轴电流环KP
+#define QKI								_Q15(0.05)				// 运行DQ轴电流环KI
+
 /**
  * 闭环方式选择
  * @param (CURRENT_LOOP_CONTROL)       电流环
@@ -206,141 +195,163 @@
  * @param (POWER_LOOP_CONTROL)         功率环
  * @param (UQ_LOOP_CONTROL)            UQ环
  */
-#define MOTOR_CTRL_MODE                (SPEED_LOOP_CONTROL) ///< 闭环方式选择
+#define MOTOR_CTRL_MODE					(SPEED_LOOP_CONTROL)	// 闭环方式选择
+#define LOOP_TIME						(2)						// (ms) 外环环调节周期,默认为 1ms
 
-#define LOOP_TIME                       (2)                 ///< (ms) 外环环调节周期,默认为 1ms
+#define SKP								_Q12(0.5)				// 外环KP     
+#define SKI								_Q15(0.002)				// 外环KI
+#define SKD								_Q12(0.0)				// 外环KD
 
-#define SKP                            _Q12(0.5)            ///< 外环KP     
-#define SKI                            _Q15(0.01)          ///< 外环KI
-#define SKD                            _Q12(0.0)            ///< 外环KD
+#define SOUTMAX							I_Value(0.9)			// (A) 外环电流最大限幅值
+#define SOUTMIN							I_Value(0.0)			// (A) 外环电流最小限幅值
 
-#define SOUTMAX                        I_Value(0.9)         ///< (A) 外环电流最大限幅值
-#define SOUTMIN                        I_Value(0.0)         ///< (A) 外环电流最小限幅值
+#define RAMP_INC						S_Value(1)				// (RPS) 每秒爬坡递增量
+#define RAMP_DEC						S_Value(1)				// (RPS) 每秒爬坡递减量
 
-#define RAMP_INC                       S_Value(1)         ///< (RPS) 每秒爬坡递增量
-#define RAMP_DEC                       S_Value(1)         ///< (RPS) 每秒爬坡递减量
 
 /**
- * 五段式七段式切换
- * @param (Disable)       禁止
- * @param (Enable)        使能
+ * 闭环方式选择
+ * @param (PWMMODE)       PWM调速
+ * @param (SREFMODE)      模拟调速
+ * @param (NONEMODE)      直接给定值,不调速
+ * @param (KEYSCANMODE)   按键控制模式
+ * @param (ONOFFTEST)     启停测试工具
  */
-#define SVPWM_5_Segment_Run_Enale (Disable) // 0:不开启五段式子 1:开启五段式
+#define SPEED_MODE						(NONEMODE)				// 闭环方式选择  
 
-#define Motor_F5SEG_Speed S_Value(1200) // 速度大于这个后切换成五段式
-#define Motor_F7SEG_Speed S_Value(1000) // 速度低于这个值,切换成七段式,主要是起动的时候
+/**
+ * PWM调速 PWM极性选择
+ * @param (PosiPWMDUTY)       正逻辑
+ * @param (NegaPWMDUTY)       反逻辑
+ */
+#define PWMDUTY_POLARITY				(PosiPWMDUTY)			// PWM调速 PWM极性选择
 
+/* 开关机Duty设置 */
+#define OFFPWMDuty						_Q15(0.07)				// 关机PWM占空比,小于该占空比关机
+#define OFFPWMDutyHigh					_Q15(1.0)				// 关机PWM占空比,大于该占空比关机
+#define ONPWMDuty						_Q15(0.08)				// 开机PWM占空比,大于该占空比时开机
+#define MINPWMDuty						_Q15(0.10)				// 速度曲线上最小PWM占空比
+#define MAXPWMDuty						_Q15(0.90)				// 速度曲线上最大PWM占空比
 
 /**
- * 弱磁设置
+ * 停机刹车选择
+ * @param (Disable)       禁止
+ * @param (Enable)        使能
+ */
+#define StopBrakeFlag					(Disable)
+#define StopWaitTime					(550)					// (ms) 刹车等待时间
+#define Stop_MOTOR_SPEED_RPM            S_Value(300)			// (RPM) 小于该转速刹车
+
+/**
+ * NTC采集
  * @param (Disable)       禁止
  * @param (Enable)        使能
  */
-#define MotorFiledWeakenEn            (Disable)                  ///<  弱磁使能位
-#define MotorFiledWeakenUs            _Q15(0.90)                ///<  弱磁能到的最大饱和电压(弱磁转速上不去的时候可以调小该值)
-#define MotorFiledWeakenKp            _Q12(0.2)                 ///<  弱磁控制的Kp
-#define MotorFiledWeakenKi            _Q15(0.003)               ///<  弱磁控制的Ki
+#define NTCSignalENABLE					(Disable)				// NTC信号采集,1:复用LED端口采集NTC信号  0:不使能LED端口复用,没有NTC的可直接关掉
 
 
 /**
- * 电压补偿
- * @param (Disable)      禁止
- * @param (Enable)       使能
+---------------------------------------------------------------------------------------------------------------------------------------------
+	@brief 功能配置
+---------------------------------------------------------------------------------------------------------------------------------------------
+*/
+
+/**
+ * 预充电使能
+ * @param (Disable)			禁止
+ * @param (Enable)			使能
  */
-#define VoltageCompensationEn           (Disable)
-#define VoltageCompensationDelayCnt     (800)                              ///< 进入速度环后延迟1S进入电压补偿
-#define LinearCompensationAngel          _Q15(0.0 / 180.0)               ///< 根据电压降低到AC210V时开始给补偿角度
-#define LinearCompensationAngel_MAX      _Q15(30.0 / 180.0)              ///< 电压降低时最大补偿角度
-#define LinearCompensationAngel_MIN      _Q15(-30.0 / 180.0)             ///< 电压降低时最小补偿角度
+#define CHARGE_EN						(Enable)				// 预充电使能
+#define CHARGE_DUTY						(0.98)					// (%)  预充电下桥Duty
+#define CHARGE_TIME						(150)					// (ms) 预充电时间
 
 /**
- * 闭环方式选择
- * @param (PWMMODE)       PWM调速
- * @param (SREFMODE)      模拟调速
- * @param (NONEMODE)      直接给定值,不调速
- * @param (KEYSCANMODE)   按键控制模式
- * @param (ONOFFTEST)     启停测试工具
+ * 预定位模式选择
+ * @param (ALIGN_DSIABLE)	禁止
+ * @param (ALIGN_NOMAL)		正常预定位
+ * @param (ALIGN_TEST)		测试模式,可用于手动测试电机极对数
  */
-#define SPEED_MODE                     (NONEMODE)           ///< 闭环方式选择  
+#define ALIGN_MOME						(ALIGN_DSIABLE)			// 预定位模式选择
+#define Align_Angle						(0.0)					// (°) 预定位角度
+#define Align_Time						(1)						// (ms) 预定位时间 
+
+#define DQKP_Alignment					_Q12(1.0)				// 预定位的KP
+#define DQKI_Alignment					_Q15(0.01)				// 预定位的KI
+#define ID_Align_CURRENT				I_Value(0.0)			// (A) D轴定位电流
+#define IQ_Align_CURRENT				I_Value(0.3)			// (A) Q轴定位电流
 
-/* ----------------------------------------------------------------------------------------------------------------------------
-                                          6. 顺逆风参数                                                   
----------------------------------------------------------------------------------------------------------------------------- */
 /**
  * 顺逆风检测方式
- * @param (NoTailWind)      无逆风顺风判断
- * @param (RSDMethod)       RSD比较器方法
- * @param (BEMFMethod)      BEMF比较器方法
- * @param (FOCMethod)       FOC计算方法
+ * @param (NoTailWind)		无逆风顺风判断
+ * @param (RSDMethod)		RSD比较器方法
+ * @param (BEMFMethod)		BEMF比较器方法
+ * @param (FOCMethod)		FOC计算方法
  */
-#define TAILWIND_MODE                  (NoTailWind)     ///< 顺逆风检测方式
-/* 逆风顺风电流环KP、KI */
-#define DQKP_TailWind                  _Q12(0.3)        ///< FOC计算顺逆风检测电流环KP
-#define DQKI_TailWind                  _Q15(0.005)        ///< FOC计算顺逆风检测电流环KI
-#define TAILWIND_TIME                  (500)           ///< (ms) 顺逆风检测时间 
-#define ATO_BW_WIND                    (80)            ///< 逆风判断观测器带宽的滤波值,经典值为8.0-100.0 
-#define SPD_BW_WIND                    (20.0)           ///< 逆风判断速度带宽的滤波值,经典值为5.0-40.0 
+#define TAILWIND_MODE					(FOCMethod)				// 顺逆风检测方式
+#define DQKP_TailWind					_Q12(3.0)				// FOC计算顺逆风检测电流环KP
+#define DQKI_TailWind					_Q15(0.3)				// FOC计算顺逆风检测电流环KI
+#define TAILWIND_TIME					(500)					// (ms) 顺逆风检测时间 
+#define ATO_BW_WIND						(80)					// 逆风判断观测器带宽的滤波值,经典值为8.0-100.0 
+#define SPD_BW_WIND						(20.0)					// 逆风判断速度带宽的滤波值,经典值为5.0-40.0 
 
 /**
- * 估算器模式选择
- * @param (SMO)       滑膜估算
- * @param (PLL)       锁相环
- * @param (AO)        自适应
+ * 电压补偿
+ * @param (Disable)			禁止
+ * @param (Enable)			使能
  */
-#define EstimateAlgorithm              (AO)                 ///< 估算器模式选择
+#define VoltageCompensationEn			(Disable)
+#define VoltageCompensationDelayCnt     (800)					// 进入速度环后延迟1S进入电压补偿
+#define LinearCompensationAngel			_Q15(0.0 / 180.0)		// 根据电压降低到AC210V时开始给补偿角度
+#define LinearCompensationAngel_MAX		_Q15(30.0 / 180.0)		// 电压降低时最大补偿角度
+#define LinearCompensationAngel_MIN		_Q15(-30.0 / 180.0)		// 电压降低时最小补偿角度
+
 /**
- * 过调制
- * @param (Disable)      禁止
- * @param (Enable)       使能
+ * 弱磁设置
+ * @param (Disable)			禁止
+ * @param (Enable)			使能
  */
-#define OverModulation                 (Disable)             ///< 开启过调制UD,UQ会被放大1.15倍,但极限状态可能导致电流畸变                                  
-#define FR_MODE                        (CW)                 ///< 转向设置 
+#define MotorFiledWeakenEn				(Disable)				// 弱磁使能位
+#define MotorFiledWeakenUs				_Q15(0.90)				// 弱磁能到的最大饱和电压(弱磁转速上不去的时候可以调小该值)
+#define MotorFiledWeakenKp				_Q12(0.2)				// 弱磁控制的Kp
+#define MotorFiledWeakenKi				_Q15(0.003)				// 弱磁控制的Ki
 
 /**
- * PWM调速 PWM极性选择
- * @param (PosiPWMDUTY)       正逻辑
- * @param (NegaPWMDUTY)       反逻辑
+ * 过调制
+ * @param (Disable)			禁止
+ * @param (Enable)			使能
  */
-#define PWMDUTY_POLARITY               (PosiPWMDUTY)        ///< PWM调速 PWM极性选择   
+#define OverModulation					(Disable)				// 开启过调制UD,UQ会被放大1.15倍,但极限状态可能导致电流畸变                                  
 
-/* 开关机Duty设置 */
-#define OFFPWMDuty                     _Q15(0.07)           ///< 关机PWM占空比,小于该占空比关机
-#define OFFPWMDutyHigh                 _Q15(1.0)            ///< 关机PWM占空比,大于该占空比关机
-#define ONPWMDuty                      _Q15(0.08)           ///< 开机PWM占空比,大于该占空比时开机
-#define MINPWMDuty                     _Q15(0.10)           ///< 速度曲线上最小PWM占空比
-#define MAXPWMDuty                     _Q15(0.90)           ///< 速度曲线上最大PWM占空比
+/**
+ * 五段式七段式切换
+ * @param (Disable)			禁止
+ * @param (Enable)			使能
+ */
+#define SVPWM_5_Segment_Run_Enale		(Disable)				// 五段式使能位
+#define Motor_F5SEG_Speed				S_Value(1200)			// 速度大于这个后切换成五段式
+#define Motor_F7SEG_Speed				S_Value(1000)			// 速度低于这个值,切换成七段式,主要是起动的时候
 
+/**
+---------------------------------------------------------------------------------------------------------------------------------------------
+	@brief 测试相关
+---------------------------------------------------------------------------------------------------------------------------------------------
+*/
 
 /**
  * IPM测试模式
- * @param (Disable)       禁止
- * @param (Enable)        使能
+ * @param (Disable)			禁止
+ * @param (Enable)			使能
  */
- #define IPMTEST                       (Disable)
-
-/* -----启停测试参数配置----- */
-#define ONOFFTEST_REF                  S_Value(1000)        ///< 测试给定,注意闭环方式不同给定值需要更改
-#define ONOFFTEST_ON_TIME              (3000)               ///< (ms) 启动运行时间
-#define ONOFFTEST_OFF_TIME             (3000)               ///< (ms) 停止时间
-
-/* -----停机刹车选择----- */
-#define StopBrakeFlag                  (0)
-#define StopWaitTime                   (550)                ///< (ms) 刹车等待时间
-#define Stop_MOTOR_SPEED_RPM            S_Value(300)        ///< (RPM) 小于该转速刹车
+ #define IPMTEST						(Disable)
 
 /**
- * NTC采集
- * @param (Disable)       禁止
- * @param (Enable)        使能
+ * @brief 启停测试参数配置
  */
- #define NTCSignalENABLE            (Disable)               ///<NTC信号采集,1:复用LED端口采集NTC信号  0:不使能LED端口复用,没有NTC的可直接关掉                                                    
-
+#define ONOFFTEST_REF					S_Value(1000)			// 测试给定,注意闭环方式不同给定值需要更改
+#define ONOFFTEST_ON_TIME				(3000)					// (ms) 启动运行时间
+#define ONOFFTEST_OFF_TIME				(3000)					// (ms) 停止时间
 
-/**
----------------------------------------------------------------------------------------------------------------------------------------------
-	@brief 到此结束
-*/
-#endif
+#endif // File End
 
 																														   
        																														

+ 7 - 7
User/Include/Protect.h

@@ -17,24 +17,24 @@
 #define GetCurrentOffsetEnable              (1)                                     // 偏置电压保护,0,不使能;1,使能
 
 /*  保护重启参数设置  */
-#define OC_RecoveryTimes                    (200)                                  // 重启次数,设定值<255 达到重启次数后不再重启,设定值>=255,一直重启
+#define OC_RecoveryTimes                    (0)                                  // 重启次数,设定值<255 达到重启次数后不再重启,设定值>=255,一直重启
 #define OC_RecoveryDelayTime                (3000)                               // (ms)重启延迟时间
 
-#define OV_RecoveryTimes                    (255)                                   // 重启次数,设定值<255 达到重启次数后不再重启,设定值>=255,一直重启
+#define OV_RecoveryTimes                    (0)                                   // 重启次数,设定值<255 达到重启次数后不再重启,设定值>=255,一直重启
 #define OV_RecoveryDelayTime                (1200)                                // (ms)欠过压保护恢复时间
 #define OV_RecoveryDelayTime1               (200)                                ///< (5ms) 欠过压保护恢复时间,过零判断用于快速插拔电开关机
 #define OV_RecoveryDelayTime2               (1000)                               ///< (5ms) 过压保护恢复时间
 
-#define LP_RecoveryTimes                    (200)                                   // 重启次数,设定值<255 达到重启次数后不再重启,设定值>=255,一直重启
+#define LP_RecoveryTimes                    (0)                                   // 重启次数,设定值<255 达到重启次数后不再重启,设定值>=255,一直重启
 #define LP_RecoveryDelayTime                (500)                                // (ms)重启延迟时间
 
-#define OT_RecoveryTimes                    (200)                                   // 重启次数,设定值<255 达到重启次数后不再重启,设定值>=255,一直重启
+#define OT_RecoveryTimes                    (0)                                   // 重启次数,设定值<255 达到重启次数后不再重启,设定值>=255,一直重启
 #define OT_RecoveryDelayTime                (500)                                // (ms)重启延迟时间
 
-#define Stall_RecoveryTimes                 (200)                                   // 重启次数,设定值<255 达到重启次数后不再重启,设定值>=255,一直重启
+#define Stall_RecoveryTimes                 (0)                                   // 重启次数,设定值<255 达到重启次数后不再重启,设定值>=255,一直重启
 #define Stall_RecoveryDelayTime             (500)                                // (ms)重启延迟时间
 
-#define OP_RecoveryTimes                    (200)                                   // 重启次数,设定值<255 达到重启次数后不再重启,设定值>=255,一直重启
+#define OP_RecoveryTimes                    (0)                                   // 重启次数,设定值<255 达到重启次数后不再重启,设定值>=255,一直重启
 #define OP_RecoveryDelayTime                (500)                                // (ms)重启延迟时间
 
 #define HW_OC_FO_MODE                       (1)                                     ///< 硬件FO过流保护使能,适用于IPM有FO保护的场合
@@ -71,7 +71,7 @@
 #define UNDER_VOLTAGE_RECOVER               UDC_Value(120)                         ///< (V) 直流母线电压欠压保护恢复值
 
 /* 堵转保护参数设置值 */
-#define STALL_SPEED_MAX                     S_Value(2000)
+#define STALL_SPEED_MAX                     S_Value(3200)
 #define STALL_SPEED_MIN                     S_Value(300)
 
 #define EsThresholdValueL                   (800.0)

+ 39 - 74
User/Source/AddFunction.c

@@ -256,7 +256,7 @@ void Speed_response(void)
         {
             case 0:
             {
-                if (mcFocCtrl.SpeedFlt > MOTOR_LOOP_RPM) //>=MOTOR_LOOP_RPM
+                if (mcFocCtrl.SpeedFlt > MOTOR_LOOP_RPM)
                 {
                     mcFocCtrl.Mode0HoldCnt++;
                     
@@ -266,21 +266,15 @@ void Speed_response(void)
                         FOC_QKI = QKI;
                         FOC_DKP = DKP;
                         FOC_DKI = DKI;
-                        //                    FOC_THECOMP = _Q15(-25.0 / 180.0); // SMO 估算补偿角
+                        // FOC_THECOMP = _Q15(-25.0 / 180.0); // SMO 估算补偿角
                         // 启动电流环与外环给定衔接
                         #if (MOTOR_CTRL_MODE == SPEED_LOOP_CONTROL)
-                        {
-                            mcRefRamp.OutValue_float = mcFocCtrl.SpeedFlt;
-                        }
-                        #elif (MOTOR_CTRL_MODE == POWER_LOOP_CONTROL)
-                        {
-                            mcRefRamp.OutValue_float = mcFocCtrl.PowerFlt;
-                        }
-                        #elif (MOTOR_CTRL_MODE == UQ_LOOP_CONTROL)
-                        {
-                            mcRefRamp.OutValue_float = mcFocCtrl.UqFlt;
-                        }
-                        #endif
+						mcRefRamp.OutValue_float = mcFocCtrl.SpeedFlt;
+						#elif (MOTOR_CTRL_MODE == POWER_LOOP_CONTROL)
+                        mcRefRamp.OutValue_float = mcFocCtrl.PowerFlt;
+						#elif (MOTOR_CTRL_MODE == UQ_LOOP_CONTROL)
+						mcRefRamp.OutValue_float = mcFocCtrl.UqFlt;
+						#endif
                         mcFocCtrl.LoopTime = LOOP_TIME;
                         mcRefRamp.IncValue = RAMP_INC;
                         mcRefRamp.DecValue = RAMP_DEC;
@@ -303,11 +297,9 @@ void Speed_response(void)
                     }
                 }
                 else
-                {
-                    mcFocCtrl.Mode0HoldCnt = 0;
-                }
+                { mcFocCtrl.Mode0HoldCnt = 0; }
+				break;
             }
-            break;
             
             case 1:
             {
@@ -333,19 +325,13 @@ void Speed_response(void)
                             mcFocCtrl.IqRef -= mcFocCtrl.ExtDec;
                         }
                         else
-                        {
-                            mcFocCtrl.IqRef = mcFocCtrl.IqSpeedRef;
-                        }
+                        { mcFocCtrl.IqRef = mcFocCtrl.IqSpeedRef; }
                     
                         #if (MotorFiledWeakenEn)
-                        {
-                            FileWeakenControl();
-                        }
-                        #else
-                        {
-                            FOC_IQREF = mcFocCtrl.IqRef;
-                        }
-                        #endif
+						FileWeakenControl();
+						#else 
+						FOC_IQREF = mcFocCtrl.IqRef;
+						#endif
                     }
                     #elif (MOTOR_CTRL_MODE == POWER_LOOP_CONTROL)
                     {
@@ -365,18 +351,14 @@ void Speed_response(void)
                 
                 #if (SVPWM_5_Segment_Run_Enale == 1) // 开启五段式
                 {
-                    if (mcFocCtrl.SpeedFlt > Motor_F5SEG_Speed) // S_Value(73500)
-                    {
-                        SetBit(FOC_CR2, F5SEG);
-                    }
-                    else if (mcFocCtrl.SpeedFlt < Motor_F7SEG_Speed) // S_Value(71500)
-                    {
-                        ClrBit(FOC_CR2, F5SEG);
-                    }
+                    if (mcFocCtrl.SpeedFlt > Motor_F5SEG_Speed)
+                    { SetBit(FOC_CR2, F5SEG); }
+                    else if (mcFocCtrl.SpeedFlt < Motor_F7SEG_Speed)
+                    { ClrBit(FOC_CR2, F5SEG); }
                 }
                 #endif
+				break;
             }
-            break;
         }
     }
 }
@@ -458,19 +440,15 @@ void ATORamp(void)
 */
 void TickCycle_1ms(void)
 {
-    uint16 TempKeyValue = 0;
     #if (VoltageCompensationEn == 1)
     {
         if (VoltageComp.cpscnt <= VoltageCompensationDelayCnt)
-        {
-            SetBit(ADC_CR, ADCBSY); // 使能ADC的DCBUS采样
-        }
+        { SetBit(ADC_CR, ADCBSY);}
     }
     #else
-    {
-        SetBit(ADC_CR, ADCBSY); // 使能ADC的DCBUS采样
-    }
-    #endif
+	// 使能ADC的DCBUS采样
+	SetBit(ADC_CR, ADCBSY); 
+	#endif
     
     if ((mcState != mcInit) && (mcState != mcReady))
     {
@@ -493,58 +471,45 @@ void TickCycle_1ms(void)
     /*****DCbus的采样获取值并滤波******/
     #if (VoltageCompensationEn == 1) // 电压补偿开启
     {
-        if (VoltageComp.cpscnt <= VoltageCompensationDelayCnt) // 未进入电压补偿之前在1ms中断里面采集电压,进入之后在载波中断里面采集电压
-        {
-            mcFocCtrl.mcDcbusFlt = LPFFunction(ADC2_DR, mcFocCtrl.mcDcbusFlt, 50); /* -----母线电压值滤波----- */
-        }
+		// 未进入电压补偿之前在1ms中断里面采集电压,进入之后在载波中断里面采集电压
+        if (VoltageComp.cpscnt <= VoltageCompensationDelayCnt)
+        { mcFocCtrl.mcDcbusFlt = LPFFunction(ADC2_DR, mcFocCtrl.mcDcbusFlt, 50); }
         
         if ((mcFocCtrl.CtrlMode == 1) && (mcState == mcRun) && (mcFaultSource == FaultNoSource)) // 进入速度环后进行延时计数
         {
             if (VoltageComp.cpscnt < VoltageCompensationDelayCnt + 10)
-            {
-                VoltageComp.cpscnt++;
-            }
+            { VoltageComp.cpscnt++; }
             else
-            {
-                VoltageComp.cpscnt = VoltageCompensationDelayCnt + 10;
-            }
+            { VoltageComp.cpscnt = VoltageCompensationDelayCnt + 10; }
         }
         else
-        {
-            VoltageComp.cpscnt = 0;
-        }
+        { VoltageComp.cpscnt = 0; }
         
-        /*****母线电压平均值******/
+        // 母线电压平均值
         BusAverageVoltage();
     }
     #else
-    {
-        mcFocCtrl.mcDcbusFlt = LPFFunction(ADC2_DR, mcFocCtrl.mcDcbusFlt, 50); /* -----母线电压值滤波----- */
-    }
+	mcFocCtrl.mcDcbusFlt = LPFFunction(ADC2_DR, mcFocCtrl.mcDcbusFlt, 50); // 母线电压值滤波
     #endif
     mcFocCtrl.NTCValue = ADC7_DR;
     mcFocCtrl.NTCValueFlt = LPFFunction(mcFocCtrl.NTCValue, mcFocCtrl.NTCValueFlt, 60);
     mcFocCtrl.UqFlt = LPFFunction(FOC__UQ, mcFocCtrl.UqFlt, 50);
     mcFocCtrl.UdFlt = LPFFunction(FOC__UD, mcFocCtrl.UdFlt, 50);
-    /* 获取调速信号,不同调速模式(PWMMODE,NONEMODE,SREFMODE,KEYSCANMODE)的目标值修改 */
+    // 获取调速信号,不同调速模式(PWMMODE,NONEMODE,SREFMODE,KEYSCANMODE)的目标值修改
     TargetRef_Process();
-    /* 启动ATO控制,环路响应,如速度环、转矩环、功率环等 */
+    // 启动ATO控制,环路响应,如速度环、转矩环、功率环等
     Speed_response();
-    /* 故障保护函数功能,如过欠压保护、启动保护、缺相、堵转等 */
+    //故障保护函数功能,如过欠压保护、启动保护、缺相、堵转等
     Fault_Detection();
-    /* 电机启动ATO爬坡函数处理  */
+    // 电机启动ATO爬坡函数处理
     ATORamp();
     
-    /* 电机状态机的时序处理 */
+    // 电机状态机的时序处理
     if (mcFocCtrl.State_Count > 0)
-    {
-        mcFocCtrl.State_Count--;
-    }
+    { mcFocCtrl.State_Count--; }
     
     if ((mcState == mcRun) && (User.TPCtrlDealy > 0))
-    {
-        User.TPCtrlDealy--;
-    }
+    { User.TPCtrlDealy--; }
 }
 
 uint16 SqrtUDQ(int16 sqrtUd, int16 sqrtUq)

+ 56 - 59
User/Source/FOCTailDect.c

@@ -1,64 +1,53 @@
-/*  -------------------------- (C) COPYRIGHT 2020 Fortiortech ShenZhen ---------------------------*/
-/*  File Name      : FOCTailDect.c
-    /*  Author         : Fortiortech  Appliction Team
-    /*  Version        : V1.0
-    /*  Date           : 2021-11-07
-    /*  Description    : This file contains Foc tailwind detection function used for Motor Control.
-    /*  ----------------------------------------------------------------------------------------------*/
-/*                                     All Rights Reserved
-    /*  ----------------------------------------------------------------------------------------------*/
-
+/**
+ * @copyright None
+ * @file      FOCTailDect.c
+ * @author    Comment Vivre
+ * @date      2024-08-26
+ * @brief     None
+ */
 #include <MyProject.h>
 
-/* Private typedef ------------------------------------------------------------------------------*/
-/* Private define -------------------------------------------------------------------------------*/
-/* Private macro --------------------------------------------------------------------------------*/
-/* Private variables ----------------------------------------------------------------------------*/
-
-/* Private function prototypes ------------------------------------------------------------------*/
-/* Private functions ----------------------------------------------------------------------------*/
-
-/*---------------------------------------------------------------------------*/
-/*  Name     :   void FocDetect(void)
-    /* Input    :   NO
-    /* Output   :   NO
-    /* Description: 顺逆风参数初始化
-    /*---------------------------------------------------------------------------*/
+/**
+ * @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
+    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
 }
 
-
-
-/*---------------------------------------------------------------------------*/
-/*  Name     :   void FOCCloseLoopStart(void)
-    /* Input    :   NO
-    /* Output   :   NO
-    /* Description: 顺风启动
-    /*---------------------------------------------------------------------------*/
+/**
+ * @function     FOCCloseLoopStart
+ * @brief        顺风启动
+ * @param[in]    None
+ * @return       None
+ * @date         2024-08-26
+*/
 void FOCCloseLoopStart(void)
 {
-    //配置启动的参数,Omega模式
+    // 配置启动的参数,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和输出限赋值
+    // 电流环的PI和输出限赋值
     FOC_DKP         = DKP;
     FOC_DKI         = DKI;
     FOC_QKP         = QKP;
@@ -69,32 +58,40 @@ void FOCCloseLoopStart(void)
     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;
+    {
+        //根据不同转速确启动的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 //end    EstimateAlgorithm
-    /*estimate parameter set*/
+    #endif
     FOC_OMEKLPF = SPEED_KLPF;
-    FOC_IDREF   = ID_RUN_CURRENT;     // D轴启动电流
-    FOC_IQREF   = mcFocCtrl.IqRef;  // Q轴启动电流
-    PI3_UKH     = mcFocCtrl.IqRef;
-    mcState            = mcRun;
+    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
+        ClrBit(DRV_CR, FOCEN);                      //关闭FOC
         McStaSet.SetFlag.PosiCheckSetFlag = 0;
-        mcFocCtrl.mcPosCheckAngle         = 0;         // 角度赋初值
+        mcFocCtrl.mcPosCheckAngle = 0;              // 角度赋初值
     }
 }
 

+ 8 - 9
User/Source/Interrupt.c

@@ -1,11 +1,10 @@
 /**
-	@copyright (C) COPYRIGHT 2022 Fortiortech Shenzhen
-	@file      Interrupt.c
-	@author    Fortiortech  Appliction Team
-	@date      2022-07-13
-	@brief     This file contains interrupt function used for Motor Control.
-*/
-
+ * @copyright None
+ * @file      Interrupt.c
+ * @author    Comment Vivre 
+ * @date      2024-08-26
+ * @brief     中断处理
+ */
 #include <MyProject.h>
 
 extern uint8 data g_1mTick; ///< 1ms滴答信号,每隔1ms在SYSTICK定时器被置1,需在大循环使用处清零
@@ -162,8 +161,8 @@ void TIM2_INT(void) interrupt 4
 	{
 		ClrBit(TIM2_CR1, T2IP);
 	}
-
-	if (ReadBit(TIM2_CR1, T2IF)) // 溢出中断,用于判断静止,时间为349ms。
+	// 溢出中断,用于判断静止,时间为349ms。
+	if (ReadBit(TIM2_CR1, T2IF)) 
 	{
 		ClrBit(TIM2_CR1, T2IF);
 	}

+ 5 - 9
User/Source/MotorControl.c

@@ -3,7 +3,7 @@
  * @file      MotorControl.c
  * @author    Comment Vivre 
  * @date      2024-08-26
- * @brief     None
+ * @brief     电机状态机切换
  */
 #include <MyProject.h>
 
@@ -221,22 +221,18 @@ void MC_Control(void)
         
         case mcFault:
         {
+			// 欠压保护处理函数
             if (mcFaultSource == FaultUnderVoltageDC)
-            {
-                UnderProcess();  // 欠压保护处理函数
-                //            Save_KeyValue(); // 保存按键值
-            }
+            { UnderProcess(); }
             else
             {
                 MOE = 0;
                 ClrBit(DRV_CR, FOCEN); // 关闭FOC
                 
                 if (mcFaultSource == FaultNoSource)
-                {
-                    mcState = mcReady;
-                }
+                { mcState = mcReady; }
             }
-            
+			
             break;
         }
         

+ 5 - 6
User/Source/MotorProtect.c

@@ -112,7 +112,7 @@ void UnderProcess(void)
 {
     if (mcFaultSource == FaultUnderVoltageDC)
     {
-        /*****过欠压停机刹车功能*****/
+        // 过欠压停机刹车功能
         if (fault.Voltage.VoltDetecBraketCount > 0)
         {
             DRV_DR = fault.Voltage.VoltDetecBraketDuty; // 下桥臂10% duty
@@ -120,11 +120,10 @@ void UnderProcess(void)
             if (fault.Voltage.FlagBrakeInit == 1)
             {
                 fault.Voltage.FlagBrakeInit = 2;
-                /*关闭输出*/
-                //              DRV_CMR &= 0xFFC0;
-                ClrBit(DRV_CR, OCS);   // OCS = 0, PWM来源DRV_COMR
-                DRV_CMR = 0x0015;      // UVW相下桥输出
-                SetBit(DRV_CR, DRVEN); /*DRV计数器使能,0-禁止,1-使能*/
+                // DRV_CMR &= 0xFFC0;
+                ClrBit(DRV_CR, OCS);			// OCS = 0, PWM来源DRV_COMR
+                DRV_CMR = 0x0015;				// UVW相下桥输出
+                SetBit(DRV_CR, DRVEN);			// DRV计数器使能,0-禁止,1-使能
                 MOE = 1;
                 DRV_DR = 0.05 * DRV_ARR;
             }

+ 5 - 3
User/Source/RSDDetect.c

@@ -50,9 +50,11 @@ MotStateType RSDStartProcess(void)
             ClrBit(CMP_CR2, CMP0EN);                               // 关闭比较器
             ClrBit(TIM2_CR1, T2CEN);                               // 0,停止计数;1,使能计数
             #if (ALIGN_MOME != ALIGN_DSIABLE)
-            mcFocCtrl.mcPosCheckAngle           = Align_Angle;
-            returnStatus                             = mcAlign;
-            mcFocCtrl.State_Count               = Align_Time;
+            {
+                mcFocCtrl.mcPosCheckAngle = Align_Angle;
+                returnStatus = mcAlign;
+                mcFocCtrl.State_Count = Align_Time;
+            }
             #else
             returnStatus = mcStart;
             #endif