Przeglądaj źródła

上报广播7F, foc observer 还是使用编码器的速度

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 2 lat temu
rodzic
commit
53e6bc88da

+ 2 - 1
Applications/app/app.c

@@ -120,6 +120,7 @@ static u32 _app_report_task(void *p) {
 	static u32 loop = 0;
 
 	can_report_ext_status(0x43);
+	can_mcast_foc_status2();
 	if (!can_is_connect_pc()) {
 		return 200;
 	}
@@ -156,7 +157,7 @@ static u32 _app_report_task(void *p) {
 }
 int plot_type = 0;
 static void plot_smo_angle(void) {
-#if 0
+#if 1
 	float smo_angle = foc_observer_sensorless_angle();
 	float delta = smo_angle - PMSM_FOC_Get()->in.s_motAngle;
 	float s, c;

+ 2 - 2
Applications/app/nv_storage.c

@@ -68,8 +68,8 @@ static void nv_default_motor_params(void) {
 #else
 	m_params.flux_linkage = 0;
 #endif
-	m_params.offset = MOTOR_ENC_OFFSET;//180;//(69.0f);
-	m_params.est_pll_band = 50;
+	m_params.offset = MOTOR_ENC_OFFSET;
+	m_params.est_pll_band = 200;
 	m_params.epm_pll_band = 400;
 	m_params.pos_lock_pll_band = 500;
 	m_params.velocity_weight = 190;

+ 4 - 3
Applications/foc/core/foc_observer.c

@@ -4,7 +4,9 @@
 #include "foc/core/smo_observer.h"
 #include "foc/motor/motor.h"
 
-static foc_observer_t foc_obser;
+static foc_observer_t foc_obser = {
+	.enc_err_cnt = 0,
+};
 void foc_observer_init(void) {
 	foc_obser.is_sensorless_enable = false;
 	foc_obser.is_sensorless_running = false;
@@ -14,7 +16,6 @@ void foc_observer_init(void) {
 	foc_obser.sensorless_angle = INVALID_ANGLE;
 	foc_obser.sensorless_est_angle = INVALID_ANGLE;
 	foc_obser.sensorless_speed = 0;
-	foc_obser.enc_err_cnt = 0;
 #ifdef CONFIG_SMO_OBSERVER
 	smo_observer_init(CONFIG_SMO_PLL_BANDWITH, CONFIG_SMO_LFP_WC, CONFIG_SMO_GAIN_K, CONFIG_SMO_SIGMOID_MAX);
 	foc_obser.is_sensorless_enable = true;
@@ -46,7 +47,7 @@ bool foc_observer_diagnostic(float enc_angle, float enc_vel) {
 		return true;
 	}
 	if (!foc_obser.is_sensorless_running) {
-		float est_diff = RPM_2_degree(foc_obser.sensorless_speed);
+		float est_diff = RPM_2_degree(foc_obser.enc_speed);
 		float enc_angle_est = est_diff + foc_obser.enc_angle;
 		rand_angle(enc_angle_est);
 		float real_est_diff = enc_angle - enc_angle_est;

+ 2 - 2
Applications/prot/can_foc_msg.c

@@ -93,7 +93,7 @@ void can_report_foc_status(u8 can) {
 }
 
 /* 采用组播方式上报,目的7E */
-void can_mcast_foc_status2(u8 can) {
+void can_mcast_foc_status2(void) {
 	u8 data[8];
 	encode_u16(data, mc_get_running_status2());
 	encode_u16(data + 2, ABS((s16)(motor_encoder_get_speed())));
@@ -104,7 +104,7 @@ void can_mcast_foc_status2(u8 can) {
 		iDC = 0;
 	}
 	encode_s16(data + 6, (s16)(iDC*10));
-	shark_can0_send_ext_message(get_indicator_can_id(0x7E), data, sizeof(data));
+	shark_can0_send_message(get_indicator_can_id(0x7F), data, sizeof(data));
 }
 
 void can_report_mpta_values(u8 can) {

+ 1 - 0
Applications/prot/can_foc_msg.h

@@ -14,6 +14,7 @@ void can_report_mpta_values(u8 can);
 void can_report_ext_status(u8 can);
 void can_report_plot_values(u8 can);
 void can_response_vols(u8 can, u8 key);
+void can_mcast_foc_status2(void);
 void can_plot1(s16 v1);
 void can_plot2(s16 v1, s16 v2);
 void can_plot3(s16 v1, s16 v2, s16 v3);