完成正反转和调速

This commit is contained in:
MQjehovah 2020-10-22 19:35:40 +08:00
parent 9dfeaf23bb
commit f05dadf536
4 changed files with 143 additions and 98 deletions

View File

@ -36,8 +36,11 @@ typedef struct _motor
/* Exported Functions --------------------------------------------------------*/
extern motor_t motor_info;
void motor_init(void);
void motor_start(void);
void motor_stop(void);
void motor_step(void);
void motor_set_speed(s16 speed);
#endif
/*********************************END OF FILE**********************************/

View File

@ -13,6 +13,23 @@
/* Definition ----------------------------------------------------------------*/
motor_t motor_info;
/* Functions -----------------------------------------------------------------*/
/*******************************************************************************
* @brief
* @param None
* @retval None
* @note None
*******************************************************************************/
void motor_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_WriteBit(GPIOB, GPIO_Pin_12, RESET); //关闭MOS输出
motor_info.dir = MOTOR_DIR_CCW;
}
/*******************************************************************************
* @brief
* @param None
@ -22,6 +39,7 @@ motor_t motor_info;
void motor_start(void)
{
motor_info.state = 1;
GPIO_WriteBit(GPIOB, GPIO_Pin_12, SET);
//TODO:开启霍尔捕捉中断
motor_info.hall_position = get_hall_position();
motor_step();
@ -57,7 +75,7 @@ void motor_stop(void)
*******************************************************************************/
void motor_step(void)
{
u8 step = motor_info.hall_position;
u8 step = motor_info.dir == MOTOR_DIR_CCW ? motor_info.hall_position ^ 0x7 : motor_info.hall_position;
switch (step)
{
case 0x03: //第二步 C+ B-
@ -131,4 +149,17 @@ void motor_step(void)
TIM_GenerateEvent(TIM1, TIM_EventSource_COM);
}
/*******************************************************************************
* @brief
* @param None
* @retval None
* @note None
*******************************************************************************/
void motor_set_speed(s16 speed)
{
TIM1->CCR1 = speed;
TIM1->CCR2 = speed;
TIM1->CCR3 = speed;
}
/*********************************END OF FILE**********************************/

View File

@ -20,7 +20,7 @@
*******************************************************************************/
void PWM_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure; //端口结构体变量定义
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //基本结构体变量定义
TIM_OCInitTypeDef TIM_OCInitStructure; //输出结构体变量定义
TIM_BDTRInitTypeDef TIM_BDTRInitStructure; //死区刹车结构体变量定义
@ -59,23 +59,19 @@ void PWM_Config(void)
TIM_OCInitStructure.TIM_OCMode = TIM_ForcedAction_InActive; //PWM2:递增计数时CNT<CCRx,OC输出无效电平;递减计数时CNT>CCRx,OC输出有效电平 TIM_ForcedAction_InActive
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
TIM_OCInitStructure.TIM_Pulse = 700;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;
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;
TIM_OC2Init(TIM1, &TIM_OCInitStructure);
TIM_OCInitStructure.TIM_Pulse = 700;
TIM_OC3Init(TIM1, &TIM_OCInitStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //TIM输出通道4初始化用来触发AD注入采样
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
TIM_OCInitStructure.TIM_Pulse = 1400;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OC4Init(TIM1, &TIM_OCInitStructure);

View File

@ -55,18 +55,33 @@ int main(void)
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //关闭jtag保留swd。
SysTick_init();
GPIO_Config(&PB5, GPIO_Mode_Out_PP);
GPIO_Config(&PB12, GPIO_Mode_Out_PP);
GPIO_WritePin(&PB12, HIGH);
// USART_Config(USART1, 9600);
HALL_Config();
PWM_Config();
motor_init();
motor_start();
delay_ms(5000);
motor_set_speed(100);
delay_ms(5000);
motor_set_speed(300);
delay_ms(5000);
motor_set_speed(500);
delay_ms(5000);
motor_set_speed(700);
motor_info.dir=MOTOR_DIR_CW;
delay_ms(5000);
motor_set_speed(900);
delay_ms(5000);
motor_set_speed(1200);
delay_ms(5000);
motor_set_speed(1400);
delay_ms(5000);
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);
}
}