From 82e38738a4d532cc3d56cbf80c1a4093f23cdd6a Mon Sep 17 00:00:00 2001 From: tao_z <tzj0429@163.com> Date: Wed, 14 Jul 2021 07:01:42 +0800 Subject: [PATCH] 调整时钟64MHz。 RTT任务增加马达开启和关闭功能 --- USR/SRC/Motor.c | 375 +++++++++++++++++++++++++++++++++-------------------- 1 files changed, 231 insertions(+), 144 deletions(-) diff --git a/USR/SRC/Motor.c b/USR/SRC/Motor.c index 64b2163..13f4768 100644 --- a/USR/SRC/Motor.c +++ b/USR/SRC/Motor.c @@ -1,7 +1,28 @@ #include "gpio.h" #include "motor.h" #include "gd32e23x_exti.h" -static motor_rotate_t motor_drive = {0}; +#include "gd32e23x_timer.h" +#include "bldc_ctrl.h" +#include "pwm.h" +#include "string.h" +#include "SEGGER_RTT_Conf.h" +#include "SEGGER_RTT.h" +static volatile motor_rotate_t motor_drive = {0}; +static uint32_t motor_pluse = 1500; +static volatile uint8_t motor_step = 0; +static void motor_phasechange(void); +static void update_speed_dir(uint8_t dir_in); + +extern void Motor_Init(void) +{ + motor_drive.timeout = 0; + motor_drive.speed = 0; + motor_drive.enable_flag = 0; + motor_pluse = 0; + memset(motor_drive.speed_group, 0, SPEED_FILTER_NUM); + + // hall_enable(); +}; /** * @brief ʹ�ܻ��������� * @param �� @@ -13,12 +34,8 @@ exti_interrupt_enable(HALL_A_EXTI); exti_interrupt_enable(HALL_B_EXTI); exti_interrupt_enable(HALL_C_EXTI); - - // HAL_TIMEx_HallSensor_Start(&htimx_hall); - - // LED1_OFF; - - // HAL_TIM_TriggerCallback(&htimx_hall); // ִ��һ�λ��� + StartSpeedTime(); //start speed timer + motor_phasechange(); // ִ��һ�λ��� motor_drive.enable_flag = 1; } @@ -35,6 +52,7 @@ exti_interrupt_disable(HALL_B_EXTI); exti_interrupt_disable(HALL_C_EXTI); // HAL_TIMEx_HallSensor_Stop(&htimx_hall); + StopSpeedTime(); //stop speed timer motor_drive.enable_flag = 0; motor_drive.speed = 0; } @@ -42,28 +60,23 @@ uint8_t get_hall_state(void) { uint8_t state = 0; - -#if 1 /* ��ȡ���������� U ��״̬ */ if (Get_HallSensorA_State()) { - state |= 0x01U << 0; + state |= (0x01U << 0); } /* ��ȡ���������� V ��״̬ */ if (Get_HallSensorB_State()) { - state |= 0x01U << 1; + state |= (0x01U << 1); } /* ��ȡ���������� W ��״̬ */ if (Get_HallSensorC_State()) { - state |= 0x01U << 2; + state |= (0x01U << 2); } -#else - state = (GPIOH->IDR >> 10) & 7; // �� 3 ��������������״̬ -#endif return state; // ���ش�����״̬ } @@ -75,15 +88,16 @@ float f = 0; /* �����ٶȣ� - ���ÿתһȦ����12�����壬(1.0/(48000000.0/128.0)Ϊ�����������ڣ�(1.0/(48000000.0/128.0) * time)Ϊʱ�䳤�� + ���ÿתһȦ����12�����壬(1.0/(64000000.0/6400)Ϊ�����������ڣ�(1.0/(64000000.0/6400) * time)Ϊʱ�䳤�� */ if (time == 0) motor_drive.speed_group[count++] = 0; else { - f = (1.0f / (48000000.0f / HALL_PRESCALER_COUNT) * time); - f = (1.0f / 12.0f) / (f / 60.0f); + // f = (1.0f / (64000000.0f / SPEED_PRESCALER_COUNT) * time); + // f = (1.0f / 12.0f) / (f / 60.0f); + f = time; motor_drive.speed_group[count++] = f; } update_speed_dir(dir_in); @@ -193,160 +207,233 @@ */ void HAL_HallExti_TriggerCallback(void) { - /* ��ȡ��������������״̬,��Ϊ��������� */ uint8_t step = 0; - step = get_hall_state(); - + motor_step = get_hall_state(); + // /* ��ȡ��������������״̬,��Ϊ��������� */ if (exti_interrupt_flag_get(HALL_A_EXTI | HALL_B_EXTI | HALL_C_EXTI)) // �ж��Ƿ��ɴ����жϲ��� { - // update_motor_speed(step, __HAL_TIM_GET_COMPARE(htim, TIM_CHANNEL_1));//TODO ����ʱ������ü���ʱ�� + // update_motor_speed(motor_step, 300u * GetSpeedTimerOutcnt() + timer_counter_read(TIMER2)); + SEGGER_RTT_printf(0, "motor speed is:%d,%d!\n", GetSpeedTimerOutcnt(), timer_counter_read(TIMER2)); + timer_counter_value_config(TIMER2, 0); motor_drive.timeout = 0; - exti_interrupt_flag_clear(HALL_A_EXTI | HALL_B_EXTI | HALL_C_EXTI); } + motor_phasechange(); + // HAL_TIM_GenerateEvent(&htimx_bldcm, TIM_EVENTSOURCE_COM); // ������������¼�����ʱ�Ž�����д�� +} +static void motor_phasechange(void) +{ + uint8_t step = 0; + step = get_hall_state(); if (get_bldcm_direction() == MOTOR_FWD) { - switch (step) - { - case 1: /* U+ W- */ - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_2, 0); // ͨ�� 2 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM2_GPIO_PORT, MOTOR_OCNPWM2_PIN, GPIO_PIN_RESET); // �ر����ű� + step = 7u - step; + } + switch (step) + { + /* next step: step 3 configuration .W-U` breakover---------------------------- */ + case 1: + /* channel U configuration */ - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_3, 0); // ͨ�� 3 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM1_GPIO_PORT, MOTOR_OCNPWM1_PIN, GPIO_PIN_RESET); // �ر����ű� + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_U, TIMER_CCX_DISABLE); + SetPwmDuty(MOTOR_OUT_CH_U, 0); + MOTOR_U_L_ENABLE; + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_U, TIMER_CCXN_DISABLE); - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_1, bldcm_pulse); // ͨ�� 1 ���õ�ռ�ձ� - HAL_GPIO_WritePin(MOTOR_OCNPWM3_GPIO_PORT, MOTOR_OCNPWM3_PIN, GPIO_PIN_SET); // �������ű� - break; + /* channel V configuration */ + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_V, TIMER_CCX_DISABLE); + SetPwmDuty(MOTOR_OUT_CH_V, 0); + MOTOR_V_L_DISABLE; + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_V, TIMER_CCXN_DISABLE); - case 2: /* V+ U- */ - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_3, 0); // ͨ�� 3 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM3_GPIO_PORT, MOTOR_OCNPWM3_PIN, GPIO_PIN_RESET); // �ر����ű� + /* channel W configuration */ + // timer_channel_output_mode_config(TIMER0, MOTOR_OUT_CH_W, TIMER_OC_MODE_PWM0); + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_W, TIMER_CCX_ENABLE); + SetPwmDuty(MOTOR_OUT_CH_W, motor_pluse); + MOTOR_W_L_DISABLE; + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_W, TIMER_CCXN_ENABLE); - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_1, 0); // ͨ�� 1 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM2_GPIO_PORT, MOTOR_OCNPWM2_PIN, GPIO_PIN_RESET); // �ر����ű� + break; - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_2, bldcm_pulse); // ͨ�� 2 ���õ�ռ�ձ� - HAL_GPIO_WritePin(MOTOR_OCNPWM1_GPIO_PORT, MOTOR_OCNPWM1_PIN, GPIO_PIN_SET); // �������ű� + /* next step: step 6 configuration .u-v` breakover---------------------------- */ + case 2: + /* channel U configuration */ + // timer_channel_output_mode_config(TIMER0, MOTOR_OUT_CH_U, TIMER_OC_MODE_PWM0); + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_U, TIMER_CCX_ENABLE); + SetPwmDuty(MOTOR_OUT_CH_U, motor_pluse); + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_U, TIMER_CCXN_DISABLE); + MOTOR_U_L_DISABLE; - break; + /* channel V configuration */ + // timer_channel_output_mode_config(TIMER0, MOTOR_OUT_CH_V, TIMER_OC_MODE_PWM0); + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_V, TIMER_CCX_DISABLE); + SetPwmDuty(MOTOR_OUT_CH_V, 0); + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_V, TIMER_CCXN_DISABLE); + MOTOR_V_L_ENABLE; - case 3: /* V+ W- */ - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_1, 0); // ͨ�� 1 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM1_GPIO_PORT, MOTOR_OCNPWM1_PIN, GPIO_PIN_RESET); // �ر����ű� + /* channel W configuration */ + // timer_channel_output_mode_config(TIMER0, MOTOR_OUT_CH_W, TIMER_OC_MODE_PWM0); + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_W, TIMER_CCX_DISABLE); + SetPwmDuty(MOTOR_OUT_CH_W, 0); + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_W, TIMER_CCXN_ENABLE); + MOTOR_W_L_DISABLE; - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_3, 0); // ͨ�� 3 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM2_GPIO_PORT, MOTOR_OCNPWM2_PIN, GPIO_PIN_RESET); // �ر����ű� + break; - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_2, bldcm_pulse); // ͨ�� 2 ���õ�ռ�ձ� - HAL_GPIO_WritePin(MOTOR_OCNPWM3_GPIO_PORT, MOTOR_OCNPWM3_PIN, GPIO_PIN_SET); // �������ű� - break; + /* next step: step 2 configuration .W-V` breakover---------------------------- */ + case 3: + /* channel U configuration */ + // timer_channel_output_mode_config(TIMER0, MOTOR_OUT_CH_U, TIMER_OC_MODE_PWM0); + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_U, TIMER_CCX_DISABLE); + SetPwmDuty(MOTOR_OUT_CH_U, 0); + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_U, TIMER_CCXN_ENABLE); + MOTOR_U_L_DISABLE; - case 4: /* W+ V- */ - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_1, 0); // ͨ�� 1 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM1_GPIO_PORT, MOTOR_OCNPWM1_PIN, GPIO_PIN_RESET); // �ر����ű� + /* channel V configuration */ + // timer_channel_output_mode_config(TIMER0, MOTOR_OUT_CH_V, TIMER_OC_MODE_PWM0); + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_V, TIMER_CCX_DISABLE); + SetPwmDuty(MOTOR_OUT_CH_V, 0); + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_V, TIMER_CCXN_DISABLE); + MOTOR_V_L_ENABLE; - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_2, 0); // ͨ�� 2 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM3_GPIO_PORT, MOTOR_OCNPWM3_PIN, GPIO_PIN_RESET); // �ر����ű� + /* channel W configuration */ + // timer_channel_output_mode_config(TIMER0, MOTOR_OUT_CH_W, TIMER_OC_MODE_PWM0); + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_W, TIMER_CCX_ENABLE); + SetPwmDuty(MOTOR_OUT_CH_W, motor_pluse); + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_W, TIMER_CCXN_DISABLE); + MOTOR_W_L_DISABLE; - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_3, bldcm_pulse); // ͨ�� 3 ���õ�ռ�ձ� - HAL_GPIO_WritePin(MOTOR_OCNPWM2_GPIO_PORT, MOTOR_OCNPWM2_PIN, GPIO_PIN_SET); // �������ű� - break; + break; - case 5: /* U+ V -*/ - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_3, 0); // ͨ�� 3 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM3_GPIO_PORT, MOTOR_OCNPWM3_PIN, GPIO_PIN_RESET); // �ر����ű� + /* next step: step 5 configuration .V-W` breakover---------------------------- */ + case 4: + /* channel U configuration */ + // timer_channel_output_mode_config(TIMER0, MOTOR_OUT_CH_U, TIMER_OC_MODE_PWM0); + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_U, TIMER_CCX_DISABLE); + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_U, TIMER_CCXN_ENABLE); + SetPwmDuty(MOTOR_OUT_CH_U, 0); + MOTOR_U_L_DISABLE; - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_2, 0); // ͨ�� 2 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM1_GPIO_PORT, MOTOR_OCNPWM1_PIN, GPIO_PIN_RESET); // �ر����ű� + /* channel V configuration */ + // timer_channel_output_mode_config(TIMER0, MOTOR_OUT_CH_V, TIMER_OC_MODE_PWM0); + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_V, TIMER_CCXN_ENABLE); + SetPwmDuty(MOTOR_OUT_CH_V, motor_pluse); + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_V, TIMER_CCXN_DISABLE); + MOTOR_V_L_DISABLE; - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_1, bldcm_pulse); // ͨ�� 1 ���õ�ռ�ձ� - HAL_GPIO_WritePin(MOTOR_OCNPWM2_GPIO_PORT, MOTOR_OCNPWM2_PIN, GPIO_PIN_SET); // �������ű� - break; + /* channel W configuration */ + // timer_channel_output_mode_config(TIMER0, MOTOR_OUT_CH_W, TIMER_OC_MODE_PWM0); + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_W, TIMER_CCXN_DISABLE); + SetPwmDuty(MOTOR_OUT_CH_W, 0); + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_W, TIMER_CCXN_DISABLE); + MOTOR_W_L_ENABLE; - case 6: /* W+ U- */ - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_2, 0); // ͨ�� 2 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM2_GPIO_PORT, MOTOR_OCNPWM2_PIN, GPIO_PIN_RESET); // �ر����ű� + break; - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_1, 0); // ͨ�� 1 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM3_GPIO_PORT, MOTOR_OCNPWM3_PIN, GPIO_PIN_RESET); // �ر����ű� + /* next step: step 1 configuration .V-U` breakover---------------------------- */ + case 5: + /* channel U configuration */ + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_U, TIMER_CCX_DISABLE); + SetPwmDuty(MOTOR_OUT_CH_U, 0); + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_U, TIMER_CCXN_DISABLE); + MOTOR_U_L_ENABLE; - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_3, bldcm_pulse); // ͨ�� 3 ���õ�ռ�ձ� - HAL_GPIO_WritePin(MOTOR_OCNPWM1_GPIO_PORT, MOTOR_OCNPWM1_PIN, GPIO_PIN_SET); // �������ű� - break; - } + /* channel V configuration */ + // timer_channel_output_mode_config(TIMER0, MOTOR_OUT_CH_V, TIMER_OC_MODE_PWM0); + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_V, TIMER_CCXN_ENABLE); + SetPwmDuty(MOTOR_OUT_CH_V, motor_pluse); + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_V, TIMER_CCXN_ENABLE); + MOTOR_V_L_DISABLE; + + /* channel W configuration */ + // timer_channel_output_mode_config(TIMER0, MOTOR_OUT_CH_W, TIMER_OC_MODE_PWM0); + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_W, TIMER_CCXN_DISABLE); + SetPwmDuty(MOTOR_OUT_CH_W, 0); + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_W, TIMER_CCXN_DISABLE); + MOTOR_W_L_DISABLE; + break; + + /* next step: step 4 configuration .U-W` breakover---------------------------- */ + case 6: + /* channel U configuration */ + // timer_channel_output_mode_config(TIMER0, MOTOR_OUT_CH_U, TIMER_OC_MODE_PWM0); + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_U, TIMER_CCX_ENABLE); + SetPwmDuty(MOTOR_OUT_CH_U, motor_pluse); + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_U, TIMER_CCXN_DISABLE); + MOTOR_U_L_DISABLE; + + /* channel V configuration */ + // timer_channel_output_mode_config(TIMER0, MOTOR_OUT_CH_V, TIMER_OC_MODE_PWM0); + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_V, TIMER_CCX_DISABLE); + SetPwmDuty(MOTOR_OUT_CH_V, 0); + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_V, TIMER_CCXN_ENABLE); + MOTOR_V_L_DISABLE; + + /* channel W configuration */ + // timer_channel_output_state_config(TIMER0, MOTOR_OUT_CH_W, TIMER_CCX_DISABLE); + SetPwmDuty(MOTOR_OUT_CH_W, 0); + // timer_channel_complementary_output_state_config(TIMER0, MOTOR_OUT_CH_W, TIMER_CCXN_DISABLE); + MOTOR_W_L_ENABLE; + + break; + } +} + +/** + * @brief ֹͣpwm��� + * @param �� + * @retval �� + */ +extern void stop_pwm_output(void) +{ + // timer_channel_output_state_config(TIMER0, TIMER_CH_0, TIMER_CCX_DISABLE); + // timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_0, TIMER_CCXN_DISABLE); + // timer_channel_output_state_config(TIMER0, TIMER_CH_1, TIMER_CCX_DISABLE); + // timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_1, TIMER_CCXN_DISABLE); + // timer_channel_output_state_config(TIMER0, TIMER_CH_2, TIMER_CCX_DISABLE); + // timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_2, TIMER_CCXN_DISABLE); + SetPwmDuty(MOTOR_OUT_CH_U, 0); + SetPwmDuty(MOTOR_OUT_CH_V, 0); + SetPwmDuty(MOTOR_OUT_CH_W, 0); + MOTOR_W_L_DISABLE; + MOTOR_V_L_DISABLE; + MOTOR_U_L_DISABLE; +} + +/** + * @brief ����pwm�����ռ�ձ� + * @param pulse:Ҫ���õ�ռ�ձ� + * @retval �� + */ +void set_pwm_pulse(uint16_t pulse) +{ + /* ���ö�ʱ��ͨ����� PWM ��ռ�ձ� */ + motor_pluse = pulse; + // SetPwmDuty(TIMER_CH_0, motor_pluse); + // SetPwmDuty(TIMER_CH_1, motor_pluse); + // SetPwmDuty(TIMER_CH_2, motor_pluse); + + if (motor_drive.enable_flag) + { + motor_phasechange(); + } +} + +extern void BLDC_SpeedAndPID(void) +{ + if (motor_drive.timeout++ > 100) // ��һ���ڲ��������ж�ǰ����������û�в���ֵ + { + // printf("��ת��ʱ\r\n"); + motor_drive.timeout = 0; + + /* ��ת��ʱֹͣ PWM ��� */ + hall_disable(); // ���û����������ӿ� + stop_pwm_output(); // ֹͣ PWM ��� + set_bldcm_disable(); + motor_drive.speed = 0; } else { - switch (step) - { - case 1: /* W+ U- */ - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_2, 0); // ͨ�� 2 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM2_GPIO_PORT, MOTOR_OCNPWM2_PIN, GPIO_PIN_RESET); // �ر����ű� - - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_1, 0); // ͨ�� 1 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM3_GPIO_PORT, MOTOR_OCNPWM3_PIN, GPIO_PIN_RESET); // �ر����ű� - - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_3, bldcm_pulse); // ͨ�� 3 ���õ�ռ�ձ� - HAL_GPIO_WritePin(MOTOR_OCNPWM1_GPIO_PORT, MOTOR_OCNPWM1_PIN, GPIO_PIN_SET); // �������ű� - break; - - case 2: /* U+ V -*/ - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_3, 0); // ͨ�� 3 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM3_GPIO_PORT, MOTOR_OCNPWM3_PIN, GPIO_PIN_RESET); // �ر����ű� - - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_2, 0); // ͨ�� 2 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM1_GPIO_PORT, MOTOR_OCNPWM1_PIN, GPIO_PIN_RESET); // �ر����ű� - - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_1, bldcm_pulse); // ͨ�� 1 ���õ�ռ�ձ� - HAL_GPIO_WritePin(MOTOR_OCNPWM2_GPIO_PORT, MOTOR_OCNPWM2_PIN, GPIO_PIN_SET); // �������ű� - break; - - case 3: /* W+ V- */ - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_1, 0); // ͨ�� 1 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM1_GPIO_PORT, MOTOR_OCNPWM1_PIN, GPIO_PIN_RESET); // �ر����ű� - - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_2, 0); // ͨ�� 2 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM3_GPIO_PORT, MOTOR_OCNPWM3_PIN, GPIO_PIN_RESET); // �ر����ű� - - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_3, bldcm_pulse); // ͨ�� 3 ���õ�ռ�ձ� - HAL_GPIO_WritePin(MOTOR_OCNPWM2_GPIO_PORT, MOTOR_OCNPWM2_PIN, GPIO_PIN_SET); // �������ű� - - break; - - case 4: /* V+ W- */ - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_1, 0); // ͨ�� 1 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM1_GPIO_PORT, MOTOR_OCNPWM1_PIN, GPIO_PIN_RESET); // �ر����ű� - - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_3, 0); // ͨ�� 3 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM2_GPIO_PORT, MOTOR_OCNPWM2_PIN, GPIO_PIN_RESET); // �ر����ű� - - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_2, bldcm_pulse); // ͨ�� 2 ���õ�ռ�ձ� - HAL_GPIO_WritePin(MOTOR_OCNPWM3_GPIO_PORT, MOTOR_OCNPWM3_PIN, GPIO_PIN_SET); // �������ű� - break; - - case 5: /* V+ U- */ - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_3, 0); // ͨ�� 3 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM3_GPIO_PORT, MOTOR_OCNPWM3_PIN, GPIO_PIN_RESET); // �ر����ű� - - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_1, 0); // ͨ�� 1 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM2_GPIO_PORT, MOTOR_OCNPWM2_PIN, GPIO_PIN_RESET); // �ر����ű� - - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_2, bldcm_pulse); // ͨ�� 2 ���õ�ռ�ձ� - HAL_GPIO_WritePin(MOTOR_OCNPWM1_GPIO_PORT, MOTOR_OCNPWM1_PIN, GPIO_PIN_SET); // �������ű� - break; - - case 6: /* U+ W- */ - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_2, 0); // ͨ�� 2 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM2_GPIO_PORT, MOTOR_OCNPWM2_PIN, GPIO_PIN_RESET); // �ر����ű� - - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_3, 0); // ͨ�� 3 ����Ϊ 0 - HAL_GPIO_WritePin(MOTOR_OCNPWM1_GPIO_PORT, MOTOR_OCNPWM1_PIN, GPIO_PIN_RESET); // �ر����ű� - - __HAL_TIM_SET_COMPARE(&htimx_bldcm, TIM_CHANNEL_1, bldcm_pulse); // ͨ�� 1 ���õ�ռ�ձ� - HAL_GPIO_WritePin(MOTOR_OCNPWM3_GPIO_PORT, MOTOR_OCNPWM3_PIN, GPIO_PIN_SET); // �������ű� - break; - } + bldcm_pid_control(); } - HAL_TIM_GenerateEvent(&htimx_bldcm, TIM_EVENTSOURCE_COM); // ������������¼�����ʱ�Ž�����д�� } \ No newline at end of file -- Gitblit v1.8.0