我们通过TIM3 输出PWM 去驱动 SG90电机
配置如下
1.GPIO结构体
2.配置通用定时器结构体
3.配置定时去输出PWM结构体
4.打开时钟 —> GPIO时钟,TIM定时器时钟,部分重映射时钟
5.配置PWM比较值
一 我们使用定时器3 通道2 重映射之后为PB5
GPIO_InitTypeDef GPIO_motorstruct;
GPIO_motorstruct.GPIO_Mode =GPIO_Mode_AF_PP;
GPIO_motorstruct.GPIO_Pin = GPIO_Pin_5;
GPIO_motorstruct.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_Init( GPIOB, &GPIO_motorstruct);
二
TIM_TimeBaseInitTypeDef TIM_motostruct ;
TIM_motostruct.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_motostruct.TIM_CounterMode =TIM_CounterMode_Up
TIM_motostruct.TIM_Period = 200-1;
TIM_motostruct.TIM_Prescaler = 7200-1;
TIM_TimeBaseInit( TIM3, &TIM_motostruct);
三
TIM_OCInitTypeDef PWM_Motorstruct;
PWM_Motorstruct.TIM_OCMode = TIM_OCMode_PWM1;
PWM_Motorstruct.TIM_OutputState = TIM_OutputState_Enable;
PWM_Motorstruct.TIM_OCPolarity =TIM_OCPolarity_Low;
TIM_OC2Init( TIM3, &PWM_Motorstruct);
IM_OC2PreloadConfig( TIM3, TIM_OCPreload_Enable);
TIM_Cmd( TIM3, ENABLE);
四
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABL);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig( GPIO_PartialRemap_TIM3,ENABLE );
五
uint16_t pwmval=155;
motor_config();
while(1)
{
for(pwmval=195;pwmval>=175;pwmval-=5)
{
TIM_SetCompare2( TIM3,pwmval);
delay(500);
}
}
}
最后 SG90 就会按照我们设定的那样去转啦