|
|
@@ -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);
|