完成点击转动

This commit is contained in:
MQjehovah 2020-10-21 19:17:15 +08:00
parent 33c7200dde
commit 9dfeaf23bb
3 changed files with 26 additions and 23 deletions

View File

@ -9,6 +9,7 @@
*******************************************************************************/ *******************************************************************************/
/* Includes ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/
#include "motor.h" #include "motor.h"
#include "GPIO.h"
/* Definition ----------------------------------------------------------------*/ /* Definition ----------------------------------------------------------------*/
motor_t motor_info; motor_t motor_info;
/* Functions -----------------------------------------------------------------*/ /* Functions -----------------------------------------------------------------*/
@ -21,9 +22,6 @@ motor_t motor_info;
void motor_start(void) void motor_start(void)
{ {
motor_info.state = 1; motor_info.state = 1;
TIM1->CCR1 = 0;
TIM1->CCR2 = 0;
TIM1->CCR3 = 0;
//TODO:开启霍尔捕捉中断 //TODO:开启霍尔捕捉中断
motor_info.hall_position = get_hall_position(); motor_info.hall_position = get_hall_position();
motor_step(); motor_step();
@ -62,17 +60,7 @@ void motor_step(void)
u8 step = motor_info.hall_position; u8 step = motor_info.hall_position;
switch (step) switch (step)
{ {
case 0x01: //第一步 A+ B- case 0x03: //第二步 C+ 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-
TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1); TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable); TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
TIM_CCxCmd(TIM1, TIM_Channel_2, 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_2, TIM_CCxN_Enable);
TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable); TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);
break; break;
case 0x03: //第三步 C+ A- case 0x01: //第三步 C+ A-
TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1); TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable); TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
TIM_CCxCmd(TIM1, TIM_Channel_2, 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_2, TIM_CCxN_Disable);
TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable); TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);
break; break;
case 0x04: //第四步 B+ A- case 0x05: //第四步 B+ A-
TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1); TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable); TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable); 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_2, TIM_CCxN_Disable);
TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable); TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);
break; break;
case 0x05: //第五步 B+ C- case 0x04: //第五步 B+ C-
TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1); TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable); TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable); 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_2, TIM_CCxN_Disable);
TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Enable); TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Enable);
break; 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: default:
motor_stop(); // GPIO_WritePin(&PB5, HIGH);
GPIO_WritePin(&PB5, LOW);
//motor_stop();
break; break;
} }
TIM_GenerateEvent(TIM1, TIM_EventSource_COM); TIM_GenerateEvent(TIM1, TIM_EventSource_COM);

View File

@ -62,8 +62,8 @@ void PWM_Config(void)
TIM_OCInitStructure.TIM_Pulse = 700; TIM_OCInitStructure.TIM_Pulse = 700;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity = 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_OCIdleState = TIM_OCIdleState_Reset; //TIM_OCIdleState_Set;TIM_OCIdleState_Reset
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Set; TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
TIM_OC1Init(TIM1, &TIM_OCInitStructure); TIM_OC1Init(TIM1, &TIM_OCInitStructure);
TIM_OCInitStructure.TIM_Pulse = 700; TIM_OCInitStructure.TIM_Pulse = 700;

View File

@ -61,11 +61,12 @@ int main(void)
HALL_Config(); HALL_Config();
PWM_Config(); PWM_Config();
motor_start(); motor_start();
while (1) while (1)
{ {
GPIO_WritePin(&PB5, HIGH); // GPIO_WritePin(&PB5, HIGH);
delay_ms(500); // delay_ms(500);
GPIO_WritePin(&PB5, LOW); // GPIO_WritePin(&PB5, LOW);
delay_ms(500); delay_ms(500);
} }
} }