Преглед изворни кода

1. 加入母线的示波器显示
2. pi controller更新
3. 单独调试pid参数的命令不限制是否在运行

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

kevin пре 2 година
родитељ
комит
98f2cf41c4

+ 3 - 1
Applications/app/app.c

@@ -154,7 +154,7 @@ static u32 app_report_task(void *p) {
 	}
 	return 200;
 }
-int plot_type = 0;
+int plot_type = 1;
 static void plot_smo_angle(void) {
 	u32 mask = cpu_enter_critical();
 	float smo_angle = foc_observer_sensorless_angle();
@@ -201,6 +201,8 @@ static u32 app_plot_task(void * args) {
 		s16 duty = (s16)(motor.controller.duty_raw * 100);
 		s16 duty_filterd = (s16)(motor.controller.duty_filterd * 100);
 		can_plot2(duty, duty_filterd);
+	}else if (plot_type == 11) {
+		can_plot2((s16)motor.controller.dc_curr_filted, (s16)motor.controller.dc_curr_calc);
 	}
 	return 20;
 }

+ 1 - 1
Applications/foc/commands.c

@@ -136,7 +136,7 @@ static void process_ext_command(foc_cmd_body_t *command) {
 	
 }
 
-static u8 ignore_with_speed[] = {Foc_Set_Adrc_Params, Foc_Set_Gear_Limit, Foc_Conf_Pid, Foc_Set_Throttle_throld, Foc_Set_Config, Foc_Set_eBrake_Throld, Foc_Set_Limiter_Config, Foc_Write_Config, Foc_SN_Write};
+static u8 ignore_with_speed[] = {Foc_Set_Adrc_Params, Foc_Set_Gear_Limit, Foc_Set_Throttle_throld, Foc_Set_Config, Foc_Set_eBrake_Throld, Foc_Set_Limiter_Config, Foc_Write_Config, Foc_SN_Write};
 
 static bool _can_process_with_speed(u8 cmd) {
 	int size = ARRAY_SIZE(ignore_with_speed);

+ 1 - 1
Applications/foc/commands.h

@@ -18,7 +18,7 @@ typedef enum {
 	Foc_Set_Open_Dq_Vol,		//u32, u32, 114d000000000a000000, 114d0000000000000000
 	Foc_Set_EPM_Mode,
 	Foc_Start_EPM_Move,
-	Foc_Conf_Pid,
+	Foc_Conf_Pid,  //设置pid参数,但是不保存,需要保存的话需要用Foc_Write_Config命令
 	Foc_Start_DQ_Calibrate,
 	Foc_Set_IS_Curr_Angle,  //设置DQ电流矢量和超前角
 	Foc_Set_Plot_Type,

+ 14 - 4
Applications/foc/core/PI_Controller.h

@@ -35,15 +35,21 @@ static __INLINE float PI_Controller_Run(PI_Controller *pi, float err) {
 	float kp_err = (err) * pi->kp;
 	float ki_err = (err) * pi->ki;
 	float integral = ki_err * pi->ts;
-	pi->ui = fclamp(pi->ui + integral, pi->min, pi->max);
+
+	pi->ui = pi->ui + integral;
 	float out = pi->ui + kp_err;
-	float sat_out = fclamp(out, pi->min, pi->max);
-	if (out != sat_out) {
+	if (out > pi->max) {
+		out = pi->max;
+		pi->ui = out - kp_err;
+		pi->is_sat = true;
+	}else if (out < pi->min) {
+		out = pi->min;
+		pi->ui = out - kp_err;
 		pi->is_sat = true;
 	}else {
 		pi->is_sat = false;
 	}
-	return sat_out;
+	return out;
 }
 
 static __INLINE float PI_Controller_RunVel(PI_Controller *pi, float err) {
@@ -56,9 +62,13 @@ static __INLINE float PI_Controller_RunVel(PI_Controller *pi, float err) {
 	if (out > pi->max) {
 		out = pi->max;
 		pi->ui = out - kp_err;
+		pi->is_sat = true;
 	}else if (out < pi->min) {
 		out = pi->min;
 		pi->ui = out - kp_err;
+		pi->is_sat = true;
+	}else {
+		pi->is_sat = false;
 	}
 	return out;
 }

+ 2 - 2
Applications/foc/motor/motor_param.c

@@ -353,8 +353,8 @@ void motor_mpta_fw_lookup(float rpm, float torque, dq_t *dq_out) {
 #endif
 	q = torque;
 #endif
-	step_towards(&dq_out->d, d, 10.0f);
-	step_towards(&dq_out->q, q, 5.0f);
+ 	step_towards(&dq_out->d, d, 10.0f);
+	step_towards(&dq_out->q, q, 6.0f);
 }
 
 #endif