PWM波的频率不能太高,大约50HZ,即周期=1/频率=1/50=0.02s,20ms左右
确定周期/频率
如果周期为20ms,则 PSC=7199,ARR=199
角度控制
0.5ms-------------0度; 2.5% 对应函数中CCRx为5
1.0ms------------45度; 5.0% 对应函数中CCRx为10
1.5ms------------90度; 7.5% 对应函数中CCRx为15
2.0ms-----------135度; 10.0% 对应函数中CCRx为20
2.5ms-----------180度; 12.5% 对应函数中CCRx为25
利用stm32自带的定时器实现输出pwm控制sg90舵机
stm32CubeMX配置timer图:
需求:
每隔1s,转动一个角度:0度 --> 45度 --> 90度 --> 135度 --> 180度 --> 0度
main.c代码:
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM4_Init();
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);//开启timer4第3通道的pwm输出
while (1)
{
HAL_Delay(1000);
__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_3,5);//sg90转动0度
HAL_Delay(1000);
__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_3,10);//sg90转动45度
HAL_Delay(1000);
__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_3,15);//sg90转动90度
HAL_Delay(1000);
__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_3,20);//sg90转动135度
HAL_Delay(1000);
__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_3,25);//sg90转动180度
}