bldc/firmware/src/Driver/motor.c

131 lines
5.7 KiB
C
Raw Normal View History

2020-10-20 14:43:40 +00:00
/*******************************************************************************
* @file motor.c
* @author: MQjehovah mail:MQjehovah@hotmail.com
* @version 1.0.0
* @date 2020.10.20
* @brief
******************************************************************************
* @attention
*******************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "motor.h"
/* Definition ----------------------------------------------------------------*/
motor_t motor_info;
/* Functions -----------------------------------------------------------------*/
2020-10-20 16:30:52 +00:00
/*******************************************************************************
* @brief
* @param None
* @retval None
* @note
*******************************************************************************/
void motor_start()
{
motor_info.state = 1;
TIM1->CCR1 = 0;
TIM1->CCR2 = 0;
TIM1->CCR3 = 0;
//TODO:开启霍尔捕捉中断
motor_step(motor_info.hall_position);
}
2020-10-20 14:43:40 +00:00
/*******************************************************************************
* @brief
* @param None
* @retval None
* @note None
*******************************************************************************/
void motor_stop()
{
motor_info.state = MOTOR_STATE_STOP;
TIM1->CCR1 = 0;
TIM1->CCR2 = 0;
TIM1->CCR3 = 0;
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable);
TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);
TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);
}
/*******************************************************************************
* @brief 6
* @param None
* @retval None
2020-10-20 16:30:52 +00:00
* @note H-PWM, L-ON
* PWM总是出现在A+B+C+,
2020-10-20 14:43:40 +00:00
*******************************************************************************/
void motor_step()
{
2020-10-20 16:30:52 +00:00
u8 step = 0;
switch (step)
2020-10-20 14:43:40 +00:00
{
2020-10-20 16:30:52 +00:00
case 0x00: //第一步 A+ B-
TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable);
2020-10-20 14:43:40 +00:00
TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
2020-10-20 16:30:52 +00:00
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);
2020-10-20 14:43:40 +00:00
TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);
2020-10-20 16:30:52 +00:00
break;
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);
2020-10-20 14:43:40 +00:00
TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable);
2020-10-20 16:30:52 +00:00
TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Enable);
TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);
break;
case 0x02: //第三步 A+ B-
TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable);
2020-10-20 14:43:40 +00:00
TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
2020-10-20 16:30:52 +00:00
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);
2020-10-20 14:43:40 +00:00
TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);
2020-10-20 16:30:52 +00:00
break;
case 0x03: //第四步 A+ B-
2020-10-20 14:43:40 +00:00
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);
2020-10-20 16:30:52 +00:00
TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
2020-10-20 14:43:40 +00:00
TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_ForcedAction_Active);
2020-10-20 16:30:52 +00:00
TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable);
2020-10-20 14:43:40 +00:00
TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Enable);
2020-10-20 16:30:52 +00:00
TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);
break;
case 0x04: //第五步 A+ B-
TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable);
2020-10-20 14:43:40 +00:00
TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
2020-10-20 16:30:52 +00:00
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 0x05: //第六步 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);
2020-10-20 14:43:40 +00:00
TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
2020-10-20 16:30:52 +00:00
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();
break;
2020-10-20 14:43:40 +00:00
}
}
/*********************************END OF FILE**********************************/