From 9dfeaf23bbfb2a721b57fb6f7ebe6c4da75bea19 Mon Sep 17 00:00:00 2001 From: MQjehovah <1421706030@qq.com> Date: Wed, 21 Oct 2020 19:17:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=82=B9=E5=87=BB=E8=BD=AC?= =?UTF-8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- firmware/src/Driver/motor.c | 38 +++++++++++++++++++------------------ firmware/src/Driver/pwm.c | 4 ++-- firmware/src/User/main.c | 7 ++++--- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/firmware/src/Driver/motor.c b/firmware/src/Driver/motor.c index cc89976..b5ac7bc 100644 --- a/firmware/src/Driver/motor.c +++ b/firmware/src/Driver/motor.c @@ -9,6 +9,7 @@ *******************************************************************************/ /* Includes ------------------------------------------------------------------*/ #include "motor.h" +#include "GPIO.h" /* Definition ----------------------------------------------------------------*/ motor_t motor_info; /* Functions -----------------------------------------------------------------*/ @@ -21,9 +22,6 @@ motor_t motor_info; void motor_start(void) { motor_info.state = 1; - TIM1->CCR1 = 0; - TIM1->CCR2 = 0; - TIM1->CCR3 = 0; //TODO:开启霍尔捕捉中断 motor_info.hall_position = get_hall_position(); motor_step(); @@ -62,17 +60,7 @@ void motor_step(void) u8 step = motor_info.hall_position; switch (step) { - case 0x01: //第一步 A+ B- - TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1); - TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable); - TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable); - TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable); - TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_ForcedAction_Active); - TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable); - TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Enable); - TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable); - break; - case 0x02: //第二步 C+ B- + case 0x03: //第二步 C+ B- TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1); TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable); TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable); @@ -82,7 +70,7 @@ void motor_step(void) TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Enable); TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable); break; - case 0x03: //第三步 C+ A- + case 0x01: //第三步 C+ A- TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1); TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable); TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable); @@ -92,7 +80,7 @@ void motor_step(void) TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable); TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable); break; - case 0x04: //第四步 B+ A- + case 0x05: //第四步 B+ A- TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1); TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable); TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable); @@ -102,7 +90,7 @@ void motor_step(void) TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable); TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable); break; - case 0x05: //第五步 B+ C- + case 0x04: //第五步 B+ C- TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1); TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable); TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable); @@ -122,8 +110,22 @@ void motor_step(void) TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable); TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Enable); break; + case 0x02: //第一步 A+ B- + // GPIO_WritePin(&PB5, HIGH); + TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1); + TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable); + TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable); + TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable); + TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_ForcedAction_Active); + TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable); + TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Enable); + TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable); + break; + default: - motor_stop(); + // GPIO_WritePin(&PB5, HIGH); + GPIO_WritePin(&PB5, LOW); + //motor_stop(); break; } TIM_GenerateEvent(TIM1, TIM_EventSource_COM); diff --git a/firmware/src/Driver/pwm.c b/firmware/src/Driver/pwm.c index 76d6dd6..0bbadc8 100644 --- a/firmware/src/Driver/pwm.c +++ b/firmware/src/Driver/pwm.c @@ -62,8 +62,8 @@ void PWM_Config(void) TIM_OCInitStructure.TIM_Pulse = 700; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High; - TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; //TIM_OCIdleState_Set;TIM_OCIdleState_Reset - TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Set; + TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset; //TIM_OCIdleState_Set;TIM_OCIdleState_Reset + TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; TIM_OC1Init(TIM1, &TIM_OCInitStructure); TIM_OCInitStructure.TIM_Pulse = 700; diff --git a/firmware/src/User/main.c b/firmware/src/User/main.c index 06592c5..c742adf 100644 --- a/firmware/src/User/main.c +++ b/firmware/src/User/main.c @@ -61,11 +61,12 @@ int main(void) HALL_Config(); PWM_Config(); motor_start(); + while (1) { - GPIO_WritePin(&PB5, HIGH); - delay_ms(500); - GPIO_WritePin(&PB5, LOW); + // GPIO_WritePin(&PB5, HIGH); + // delay_ms(500); + // GPIO_WritePin(&PB5, LOW); delay_ms(500); } }