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

上报速度,需要判断是否无感,无感是否稳定

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 2 жил өмнө
parent
commit
bd2fd8c21b

+ 1 - 0
Applications/app/nv_storage.c

@@ -537,6 +537,7 @@ void nv_storage_init(void) {
 #if CONFIG_MOT_TYPE==MOTOR_BLUESHARK_ZD_100
 	m_params.offset = 0.0f; //编码器做了零位置校准
 	m_params.est_pll_band = 200;
+	m_params.flux_linkage = MOTOR_Flux;
 #endif
 #if CONFIG_MOT_TYPE==MOTOR_BLUESHARK_A1
 	m_params.offset = 0.0f; //编码器做了零位置校准

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

@@ -1145,7 +1145,7 @@ static bool mc_process_force_running(void) {
 
 static void mc_process_brake_light(void) {
 	bool can_lighting = false;
-	if (motor.b_break || motor.b_auto_hold || eCtrl_is_eBrk_Running() || (motor.b_start && !PMSM_FOC_Is_Start() && motor_encoder_get_speed() > CONFIG_ZERO_SPEED_RPM)) {
+	if (motor.b_break || motor.b_auto_hold || eCtrl_is_eBrk_Running() || ((!mc_critical_can_not_run()) && motor_encoder_get_speed() > 2000)) {
 		can_lighting = true;
 	}
 	gpio_brk_light_enable(can_lighting);

+ 3 - 3
Applications/foc/motor/motor_param.h

@@ -49,12 +49,12 @@ float motor_get_ebreak_toruqe(float rpm);
 #define MOTOR_R   0.011f  //5N -> 0.0164/2
 #define MOTOR_Ld (0.000140F*0.5f) //5N -> 0.000048
 #define MOTOR_Lq (0.000356f*0.5f) //5N -> 0.0001335
-#define MOTOR_Flux (0.013f)
+#define MOTOR_Flux (0.019f)
 #else
 #define MOTOR_R   0.009f
 #define MOTOR_Ld (0.000100F*0.5f) //5N -> 0.000048
 #define MOTOR_Lq (0.000240f*0.5f) //5N -> 0.0001335
-#define MOTOR_Flux (0.011f)
+#define MOTOR_Flux (0.0158f)
 #endif
 
 #define MOTOR_POLES  4
@@ -102,7 +102,7 @@ float motor_get_ebreak_toruqe(float rpm);
 #define MOTOR_Lq (0.000125f*0.5f)
 #define MOTOR_Ld (0.000091f*0.5f)
 #define MOTOR_POLES  5
-#define MOTOR_Flux (0.023f)
+#define MOTOR_Flux (0.019f)
 #define MOTOR_ENC_OFFSET 0.0F
 #define CONFIG_MAX_MOTOR_TORQUE 200.0F
 

+ 18 - 3
Applications/prot/can_foc_msg.c

@@ -5,6 +5,21 @@
 #include "foc/samples.h"
 #include "foc/motor/motor.h"
 #include "foc/core/PMSM_FOC_Core.h"
+#include "foc/core/foc_observer.h"
+
+static float can_get_speed(void) {
+	float speed = PMSM_FOC_GetSpeed();
+	if (!PMSM_FOC_Is_Start() || foc_observer_is_encoder()) {
+		speed = motor_encoder_get_speed();
+	}else {
+		if (foc_observer_sensorless_stable()) {
+			speed = foc_observer_sensorless_speed();
+		}else {
+			speed = 0;
+		}
+	}
+	return speed;
+}
 
 void can_report_speed(u8 can, s16 rpm) {
 	u8 data[6];
@@ -15,7 +30,7 @@ void can_report_speed(u8 can, s16 rpm) {
 
 void can_report_power(u8 can) {
 	u8 data[8];
-	s16 rpm = (s16)PMSM_FOC_GetSpeed();
+	s16 rpm = (s16)can_get_speed();
 	float vDC = get_vbus_float();
 	float iDC = PMSM_FOC_GetVbusCurrent();	
 	s16 v = S16Q5(vDC);
@@ -96,7 +111,7 @@ void can_report_foc_status(u8 can) {
 void can_mcast_foc_status2(void) {
 	u8 data[8];
 	encode_u16(data, mc_get_running_status2());
-	encode_u16(data + 2, ABS((s16)(PMSM_FOC_GetSpeed())));
+	encode_u16(data + 2, ABS((s16)(can_get_speed())));
 	float vDC = get_vbus_float();
 	encode_s16(data + 4, (s16)(vDC*10));
 	float iDC = PMSM_FOC_GetVbusCurrent();
@@ -127,7 +142,7 @@ void can_report_ext_status(u8 can) {
 	data[1] = mc_is_start()?0:1;
 	data[1] |= (mc_is_cruise_enabled()?1:0) << 3;
 	data[1] |= mc_get_gear() << 6;
-	encode_s16(data + 2, ABS((s16)(PMSM_FOC_GetSpeed()/4.0f)));
+	encode_s16(data + 2, ABS((s16)(can_get_speed()/4.0f)));
 	float vDC = get_vbus_float();
 	encode_s16(data + 4, (s16)(vDC*10));
 	float iDC = PMSM_FOC_GetVbusCurrent();