Эх сурвалжийг харах

1. 锁电机,改为开下管,50% duty 无法锁电机
2. 动态修改ladrc参数,封装函数,用宏定义设置空转的ladrc参数,后期需要改为通过设置

Signed-off-by: huhui <huhui@sharkgulf.com>

huhui 3 жил өмнө
parent
commit
8b133a2c0c

+ 1 - 1
Applications/app/app.c

@@ -138,7 +138,7 @@ static u32 _app_report_task(void *p) {
 		//sys_debug("_>%f, %f, %f\n", ladrc_observer_get()->ld, ladrc_observer_get()->lq, ladrc_observer_get()->poles);
 		//encoder_log();
 		motor_debug();
-		//sample_log();
+		sample_log();
 		PMSM_FOC_LogDebug();
 		//F_debug();
 		//eCtrl_debug_log();

+ 15 - 8
Applications/foc/core/PMSM_FOC_Core.c

@@ -643,10 +643,8 @@ static __INLINE void PMSM_FOC_VelCtrl_Decide(void) {
 			if (change_cnt >= 500) {
 				gFoc_Ctrl.out.empty_load = false;
 #ifdef CONFIG_SPEED_LADRC
-				ladrc_change_b0(&gFoc_Ctrl.vel_lim_adrc, nv_get_foc_params()->f_adrc_vel_lim_B0);
-				ladrc_change_K(&gFoc_Ctrl.vel_lim_adrc, nv_get_foc_params()->f_adrc_vel_lim_Wcv);
-				ladrc_change_b0(&gFoc_Ctrl.vel_adrc, nv_get_foc_params()->f_adrc_vel_B0);
-				ladrc_change_K(&gFoc_Ctrl.vel_adrc, nv_get_foc_params()->f_adrc_vel_Wcv);
+				PMSM_FOC_Change_TrqLoop_Params(nv_get_foc_params()->f_adrc_vel_lim_Wcv, nv_get_foc_params()->f_adrc_vel_lim_B0);
+				PMSM_FOC_Change_VelLoop_Params(nv_get_foc_params()->f_adrc_vel_Wcv, nv_get_foc_params()->f_adrc_vel_B0);
 #endif
 			}
 		}
@@ -677,10 +675,8 @@ static __INLINE void PMSM_FOC_VelCtrl_Decide(void) {
 		change_cnt = 0;
 		gFoc_Ctrl.out.empty_load = change_done;
 #ifdef CONFIG_SPEED_LADRC
-		ladrc_change_b0(&gFoc_Ctrl.vel_lim_adrc, 2500.0f);
-		ladrc_change_K(&gFoc_Ctrl.vel_lim_adrc, 3);
-		ladrc_change_b0(&gFoc_Ctrl.vel_adrc, 2500.0f);
-		ladrc_change_K(&gFoc_Ctrl.vel_adrc, 3);
+		PMSM_FOC_Change_TrqLoop_Params(CONFIG_LADRC_NOLOAD_Wcv, CONFIG_LADRC_NOLOAD_B0);
+		PMSM_FOC_Change_VelLoop_Params(CONFIG_LADRC_NOLOAD_Wcv, CONFIG_LADRC_NOLOAD_B0);
 #endif
 	}else if (!change_done && (change_cnt <= -200)) {
 		change_done = true;
@@ -849,6 +845,17 @@ void PMSM_FOC_Slow_Task(void) {
 	PMSM_FOC_idqCalc();
 }
 
+void PMSM_FOC_Change_VelLoop_Params(float wcv, float b0) {
+	ladrc_change_b0(&gFoc_Ctrl.vel_adrc, b0);
+	ladrc_change_K(&gFoc_Ctrl.vel_adrc, wcv);
+}
+
+void PMSM_FOC_Change_TrqLoop_Params(float wcv, float b0) {
+	ladrc_change_b0(&gFoc_Ctrl.vel_lim_adrc, b0);
+	ladrc_change_K(&gFoc_Ctrl.vel_lim_adrc, wcv);
+}
+
+
 float PMSM_FOC_Get_Real_dqVector(void) {
 	if (gFoc_Ctrl.out.s_RealCurrentFiltered == 0) {
 		gFoc_Ctrl.out.s_RealCurrentFiltered = sqrtf(SQ(gFoc_Ctrl.out.s_FilterIdq.d) + SQ(gFoc_Ctrl.out.s_FilterIdq.q));

+ 2 - 0
Applications/foc/core/PMSM_FOC_Core.h

@@ -306,6 +306,8 @@ bool PMSM_FOC_iDC_is_Limited(void);
 bool PMSM_FOC_Torque_is_Limited(void);
 bool PMSM_FOC_PauseCruise(void);
 bool PMSM_FOC_ResumeCruise(void);
+void PMSM_FOC_Change_VelLoop_Params(float wcv, float b0);
+void PMSM_FOC_Change_TrqLoop_Params(float wcv, float b0);
 
 #endif /* _PMSM_FOC_Core_H__ */
 

+ 5 - 1
Applications/foc/foc_config.h

@@ -68,7 +68,11 @@
 #ifdef CONFIG_SPEED_LADRC
 	#define CONFIG_LADRC_Wo  200.0F
 	#define CONFIG_LADRC_Wcv 5.0F
-	#define CONFIG_LADRC_B0  2500.0F 
+	#define CONFIG_LADRC_B0  2500.0F
+
+	#define CONFIG_LADRC_NOLOAD_Wcv 3.0F
+	#define CONFIG_LADRC_NOLOAD_B0  2500.0F
+
 #endif
 #ifdef CONFIG_SMO_OBSERVER
 	#define CONFIG_SMO_MIN_SPEED    1000 //RPM

+ 1 - 1
Applications/foc/motor/motor.c

@@ -782,7 +782,7 @@ bool mc_lock_motor(bool lock) {
 	motor.b_lock_motor = lock;
 	if (lock) {
 		pwm_start();
-		pwm_update_duty(FOC_PWM_Half_Period/2, FOC_PWM_Half_Period/2, FOC_PWM_Half_Period/2);
+		pwm_update_duty(0, 0, 0);
 		pwm_enable_channel();
 	}else {
 		pwm_stop();