139 lines
4.5 KiB
C
139 lines
4.5 KiB
C
|
/*******************************************************************************
|
||
|
* @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;
|
||
|
static const uint8_t BLDC_STEP_FORWARD[8][6] = // Motor step
|
||
|
{
|
||
|
//A+,A-,B+,B-,C+,C-
|
||
|
{0, 0, 0, 0, 0, 0}, //000
|
||
|
{0, 0, 1, 0, 0, 1},
|
||
|
{1, 0, 0, 1, 0, 0},
|
||
|
{1, 0, 0, 0, 0, 1},
|
||
|
{0, 1, 0, 0, 1, 0},
|
||
|
{0, 1, 1, 0, 0, 0},
|
||
|
{0, 0, 0, 1, 1, 0},
|
||
|
{0, 0, 0, 0, 0, 0}, //111
|
||
|
};
|
||
|
/* Functions -----------------------------------------------------------------*/
|
||
|
/*******************************************************************************
|
||
|
* @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
|
||
|
* @note None
|
||
|
*******************************************************************************/
|
||
|
void motor_step()
|
||
|
{
|
||
|
const uint8_t *step = BLDC_STEP_FORWARD[motor_info.hall_position];
|
||
|
if (motor_info.hall_position == 0)
|
||
|
{
|
||
|
//停止处理
|
||
|
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
|
||
|
TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable);
|
||
|
TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
|
||
|
TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);
|
||
|
TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
|
||
|
TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);
|
||
|
return;
|
||
|
}
|
||
|
if (motor_info.hall_position == 7)
|
||
|
{
|
||
|
//刹车处理
|
||
|
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
|
||
|
TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable);
|
||
|
TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
|
||
|
TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);
|
||
|
TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
|
||
|
TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);
|
||
|
return;
|
||
|
}
|
||
|
//换相
|
||
|
if (step[0]) //A+
|
||
|
{
|
||
|
TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);
|
||
|
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
|
||
|
}
|
||
|
if (step[1]) //A-
|
||
|
{
|
||
|
TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_ForcedAction_Active);
|
||
|
TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Enable);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
|
||
|
}
|
||
|
|
||
|
if (step[2]) //B+
|
||
|
{
|
||
|
TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1);
|
||
|
TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
|
||
|
}
|
||
|
if (step[3]) //B-
|
||
|
{
|
||
|
TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_ForcedAction_Active);
|
||
|
TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Enable);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
|
||
|
}
|
||
|
|
||
|
if (step[4]) //C+
|
||
|
{
|
||
|
TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1);
|
||
|
TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Enable);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
|
||
|
}
|
||
|
if (step[5]) //C-
|
||
|
{
|
||
|
TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_ForcedAction_Active);
|
||
|
TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Enable);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*********************************END OF FILE**********************************/
|