STM32 固件库 PWM 控制舵机教程 - 详细步骤和代码示例
以下是使用 STM32 固件库控制舵机的步骤:
- 初始化 TIM 定时器,配置 PWM 输出模式,设置 PWM 频率和占空比。
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
// 使能 TIM 时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
// 配置 TIM 引脚
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_1);
// 设置 TIM 基本参数
TIM_TimeBaseStructure.TIM_Period = 19999;
TIM_TimeBaseStructure.TIM_Prescaler = 3;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
// 配置 PWM 输出模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 1500;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
// 使能 TIM3
TIM_Cmd(TIM3, ENABLE);
- 设置舵机转动角度。
// 设置舵机转动角度
int angle = 90; // 舵机转动到 90 度位置
int pulse = angle / 180.0 * 2000 + 500; // 转换为 PWM 占空比
TIM_SetCompare1(TIM3, pulse);
- 在主函数中循环设置舵机角度。
int main(void) {
// 初始化 TIM 定时器和 GPIO 引脚
// ...
while (1) {
// 设置舵机角度
int angle = 0;
for (int i = 0; i < 180; i++) {
angle = i;
int pulse = angle / 180.0 * 2000 + 500;
TIM_SetCompare1(TIM3, pulse);
delay_ms(10);
}
}
}
其中,delay_ms() 函数是自定义的延时函数,可用 HAL_Delay() 代替。
原文地址: https://www.cveoy.top/t/topic/otPN 著作权归作者所有。请勿转载和采集!