Prechádzať zdrojové kódy

加入3相开关接口,gpio模式

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 3 rokov pred
rodič
commit
810553c18f
2 zmenil súbory, kde vykonal 50 pridanie a 5 odobranie
  1. 49 5
      Applications/bsp/pwm.c
  2. 1 0
      Applications/bsp/pwm.h

+ 49 - 5
Applications/bsp/pwm.c

@@ -24,11 +24,6 @@ static void _gpio_brakein_irq_enable(void);
 #endif
 u16 timer_update_buffer[6] = {0};
 
-void pwm_3phase_init(void){
-	_pwm_gpio_config();
-    _init_pwm_timer();
-}
-
 static rcu_periph_enum _rcu_clk(u32 timer) {
     if (timer == TIMER0) {
         return RCU_TIMER0;
@@ -42,6 +37,55 @@ static rcu_periph_enum _rcu_clk(u32 timer) {
     return RCU_TIMER2;      
 }
 
+void pwm_3phase_init(void){
+	_pwm_gpio_config();
+    _init_pwm_timer();
+}
+
+void pwm_3phase_sides(bool hon, bool lon) {
+	if (hon && lon) {
+		return;
+	}
+	timer_deinit(pwm_timer);
+	rcu_periph_clock_enable(_rcu_clk(pwm_timer));
+    gpio_init(PWM_U_P_GROUP,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,PWM_U_P_PIN);
+    gpio_init(PWM_V_P_GROUP,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,PWM_V_P_PIN);
+    gpio_init(PWM_W_P_GROUP,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,PWM_W_P_PIN);
+
+    gpio_init(PWM_U_N_GROUP,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,PWM_U_N_PIN);
+    gpio_init(PWM_V_N_GROUP,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,PWM_V_N_PIN);
+    gpio_init(PWM_W_N_GROUP,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,PWM_W_N_PIN);
+
+	/* 开上桥或者下桥之前先关闭下桥或者上桥 */
+	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);
+
+		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);
+	}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);
+		gpio_bit_write(PWM_W_P_GROUP, PWM_W_P_PIN, RESET);
+
+		delay_us(10);
+		gpio_bit_write(PWM_U_N_GROUP, PWM_U_N_PIN, SET);
+		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 {
+		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);
+
+		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);
+	}
+}
+
 static void _pwm_gpio_config(void)
 {
     rcu_periph_clock_enable(PWM_U_P_RCU);

+ 1 - 0
Applications/bsp/pwm.h

@@ -84,6 +84,7 @@
 	}while(0)
 
 void pwm_3phase_init(void);
+void pwm_3phase_sides(bool hon, bool lon);
 void pwm_start(void);
 void pwm_stop(void);
 void pwm_turn_on_low_side(void);