PWM驱动180度舵机
PWM周期 20ms
高电平0.5-2.5ms
电平与角度对应关系
0度 | 0.5ms/20ms | ![]() |
90度 | 1.5ms/20ms | ![]() |
180度 | 2.5ms/20ms | ![]() |
PWM设置,Timer Clocks 84MHz
TIM_HandleTypeDef h_TIM2;
void S_TIM2_Init(void)
{
/*TIM2CH1 = PA0*/
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_Init;
GPIO_Init.Pin=GPIO_PIN_0;
GPIO_Init.Mode=GPIO_MODE_AF_PP;
GPIO_Init.Pull=GPIO_NOPULL;
GPIO_Init.Speed=GPIO_SPEED_FREQ_HIGH;
GPIO_Init.Alternate=GPIO_AF1_TIM1;
HAL_GPIO_Init(GPIOA,&GPIO_Init);
__HAL_RCC_TIM2_CLK_ENABLE();
h_TIM2.Instance = TIM2;
h_TIM2.Init.Prescaler = 8400-1;
h_TIM2.Init.CounterMode = TIM_COUNTERMODE_UP;
h_TIM2.Init.Period = 200-1;
h_TIM2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
h_TIM2.Init.RepetitionCounter = 0;
h_TIM2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
HAL_TIM_PWM_Init(&h_TIM2);
TIM_OC_InitTypeDef TIM2_OC_Init;
TIM2_OC_Init.OCMode = TIM_OCMODE_PWM1;
TIM2_OC_Init.Pulse = 5;
TIM2_OC_Init.OCPolarity = TIM_OCPOLARITY_HIGH;
TIM2_OC_Init.OCNPolarity = TIM_OCNPOLARITY_HIGH;
TIM2_OC_Init.OCFastMode =TIM_OCFAST_DISABLE;
TIM2_OC_Init.OCIdleState=TIM_OCIDLESTATE_RESET;
TIM2_OC_Init.OCNIdleState=TIM_OCNIDLESTATE_RESET;
HAL_TIM_PWM_ConfigChannel(&h_TIM2,&TIM2_OC_Init,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&h_TIM2, TIM_CHANNEL_1);
}
舵机测试函数
void servo_Test(void)
{
for(int i=5;i<=25;i++)
{
__HAL_TIM_SetCompare(&h_TIM2, TIM_CHANNEL_1, i);
HAL_Delay(500);
printf("%.1fms=%ddegree",((float)i)/10,(i-5)*(180/20));
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用