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