Bladeren bron

工厂测试加入三相驱动设置

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 3 jaren geleden
bovenliggende
commit
c9f25e0f5d
4 gewijzigde bestanden met toevoegingen van 38 en 35 verwijderingen
  1. 3 1
      Applications/app/app.c
  2. 23 2
      Applications/app/factory.c
  3. 12 11
      Applications/bsp/pwm.c
  4. 0 21
      Applications/prot/can_pc_message.c

+ 3 - 1
Applications/app/app.c

@@ -116,7 +116,7 @@ static u32 _app_report_task(void *p) {
 	}
 	return 200;
 }
-static int plot_type = 5;
+static int plot_type = 6;
 static void plot_smo_angle(void) {
 	float smo_angle = foc_observer_smo_angle();
 	float delta = smo_angle - PMSM_FOC_Get()->in.s_hallAngle;
@@ -142,6 +142,8 @@ static u32 _app_plot_task(void * args) {
 #ifdef CONFIG_DQ_STEP_RESPONSE
 		can_plot2((s16)(target_d), (s16)(PMSM_FOC_Get()->out.s_RealIdq.d));
 #endif
+	}else if (plot_type == 6) {
+		can_plot2((s16)(PMSM_FOC_Get()->in.s_iABC[0]), (s16)(PMSM_FOC_Get()->in.s_iABC[1]));
 	}
 	
 	return 20;

+ 23 - 2
Applications/app/factory.c

@@ -1,10 +1,12 @@
 #include "factory.h"
 #include "bsp/bsp.h"
 #include "prot/can_message.h"
-#include "bsp/fmc_flash.h"
-#include "bsp/gd32_bkp.h"
+#include "libs/utils.h"
 #include "libs/logger.h"
 #include "os/os_task.h"
+#include "bsp/pwm.h"
+
+static u8 factory_mode = 0;
 
 void can_process_factory_message(can_message_t *can_message){
 	uint8_t response[8];
@@ -14,7 +16,23 @@ void can_process_factory_message(can_message_t *can_message){
 	rsplen = 3;
 	switch(can_message->key) {
 		case BUILD_CMD_KEY(0xE0):
+			factory_mode = decode_u8(can_message->data);
+			break;
+		case BUILD_CMD_KEY(0xE1):
+		{
+			u8 item = decode_u8(can_message->data);
+			u8 mode = decode_u8((u8 *)can_message->data +1);
+			if (item == 1) {
+				if (mode == 0) {
+					pwm_3phase_sides(false, false);
+				}else if (mode == 1) {
+					pwm_3phase_sides(false, true);
+				}else if (mode == 2) {
+					pwm_3phase_sides(true, false);
+				}
+			}
 			break;
+		}
 		default:
 			rsplen = 0;
 			break;
@@ -24,4 +42,7 @@ void can_process_factory_message(can_message_t *can_message){
 	}
 }
 
+u8 factory_get_mode(void) {
+	return factory_mode;
+}
 

+ 12 - 11
Applications/bsp/pwm.c

@@ -17,7 +17,7 @@ DMA0 ch4 -> timer0 update event
     ch1 -> timer1 update event,需要更新CCR
 */
 
-static void _init_pwm_timer(void);
+static void _init_pwm_timer(bool);
 static void _pwm_gpio_config(void);
 #ifndef PWM_BRAKE_GROUP
 static void _gpio_brakein_irq_enable(void);
@@ -39,7 +39,7 @@ static rcu_periph_enum _rcu_clk(u32 timer) {
 
 void pwm_3phase_init(void){
 	_pwm_gpio_config();
-    _init_pwm_timer();
+    _init_pwm_timer(true);
 }
 
 void pwm_3phase_sides(bool hon, bool lon) {
@@ -58,14 +58,11 @@ void pwm_3phase_sides(bool hon, bool lon) {
 
 	/* 开上桥或者下桥之前先关闭下桥或者上桥 */
 	if (hon) {
-		gpio_bit_write(PWM_U_N_GROUP, PWM_U_N_PIN, RESET);
-		gpio_bit_write(PWM_V_N_GROUP, PWM_V_N_PIN, RESET);
-		gpio_bit_write(PWM_W_N_GROUP, PWM_W_N_PIN, RESET);
-
+		_pwm_gpio_config();
+		_init_pwm_timer(false);
 		delay_us(10);
-		gpio_bit_write(PWM_U_P_GROUP, PWM_U_P_PIN, SET);
-		gpio_bit_write(PWM_V_P_GROUP, PWM_V_P_PIN, SET);
-		gpio_bit_write(PWM_W_P_GROUP, PWM_W_P_PIN, SET);
+		pwm_start();
+		pwm_update_duty(FOC_PWM_Half_Period-200, FOC_PWM_Half_Period-200, FOC_PWM_Half_Period-200);
 	}else if (lon) {
 		gpio_bit_write(PWM_U_P_GROUP, PWM_U_P_PIN, RESET);
 		gpio_bit_write(PWM_V_P_GROUP, PWM_V_P_PIN, RESET);
@@ -76,6 +73,7 @@ void pwm_3phase_sides(bool hon, bool lon) {
 		gpio_bit_write(PWM_V_N_GROUP, PWM_V_N_PIN, SET);
 		gpio_bit_write(PWM_W_N_GROUP, PWM_W_N_PIN, SET);
 	}else {
+#if 0		
 		gpio_bit_write(PWM_U_P_GROUP, PWM_U_P_PIN, RESET);
 		gpio_bit_write(PWM_V_P_GROUP, PWM_V_P_PIN, RESET);
 		gpio_bit_write(PWM_W_P_GROUP, PWM_W_P_PIN, RESET);
@@ -83,6 +81,9 @@ void pwm_3phase_sides(bool hon, bool lon) {
 		gpio_bit_write(PWM_U_N_GROUP, PWM_U_N_PIN, RESET);
 		gpio_bit_write(PWM_V_N_GROUP, PWM_V_N_PIN, RESET);
 		gpio_bit_write(PWM_W_N_GROUP, PWM_W_N_PIN, RESET);
+#else
+		pwm_3phase_init();
+#endif
 	}
 }
 
@@ -129,7 +130,7 @@ static u8 _dead_time(u16 t) {
 	}
 }
 
-static void _init_pwm_timer(void) {
+static void _init_pwm_timer(bool enable_brk) {
 	timer_oc_parameter_struct timer_ocintpara;
 	timer_parameter_struct timer_initpara;
 	
@@ -194,7 +195,7 @@ static void _init_pwm_timer(void) {
     timer_breakpara.ideloffstate       = TIMER_ROS_STATE_DISABLE;
     timer_breakpara.protectmode        = TIMER_CCHP_PROT_OFF; 
     timer_breakpara.deadtime           = _dead_time(NS_2_TCLK(PWM_DEAD_TIME_NS));
-    timer_breakpara.breakstate         = TIMER_BREAK_ENABLE;
+    timer_breakpara.breakstate         = enable_brk?TIMER_BREAK_ENABLE:TIMER_BREAK_DISABLE;
     timer_breakpara.breakpolarity      = TIMER_BREAK_POLARITY_LOW;
     timer_breakpara.outputautostate    = TIMER_OUTAUTO_DISABLE;
     timer_break_config(timer,&timer_breakpara);

+ 0 - 21
Applications/prot/can_pc_message.c

@@ -5,27 +5,6 @@
 #include "libs/logger.h"
 #include "os/os_task.h"
 #include "foc/motor/motor.h"
-static void can_send_backtrace(void){
-	set_log_level(MOD_SYSTEM, L_error);
-	
-	sys_error("src %x \n",gd32_get_reset_source());	
-	if (gd32_bkp_btrace_valid()){
-		uint32_t bt[16];
-		uint32_t bt_over;
-		uint32_t bt_dep;
-		uint16_t line;
-		gd32_bkp_get_backtrace(bt, &bt_over, &bt_dep, &line);
-		sys_error("system backtrace:\n");
-		sys_error("stack overflow %d, stack dep = %d, line = %d\n", bt_over, bt_dep, line);
-		for(bt_over = 0; bt_over < bt_dep; bt_over++){
-			sys_error("0x%x ", bt[bt_over]);
-		}
-		sys_error("system backtrace end!\n");
-	}else{
-		sys_error("no backtrace\n");
-	}
-
-}
 
 bool can_process_iap_message(can_message_t *can_message) {
 	uint8_t response[8];