STM32CubeMX使用SG90舵机角度0-180°

1. 配置步骤

1.1 硬件连接

  • 舵机信号线 → STM32的PWM输出引脚(如 PA2,对应定时器 TIM2_CH3)。

  • 电源和地 → 外接5V电源(确保共地)。

1.2 定时器配置(以TIM2为例)

  1. 在STM32CubeMX中:
    选择定时器(如 TIM2)的PWM模式。

设置预分频器(PSC)和自动重载值(ARR),生成 50Hz PWM

使能TIM2和配置对应引脚(如 PA2)。

参数计算
  1. 主频为 72MHz(STM32F1系列):
    • 预分频器 PSC:根据主频调整,例如 72-1,使得分频后频率为 1MHz(每计数1次 = 1us)。

    • 自动重载值 ARR:决定PWM周期,例如 20000-1(对应20ms)。

    • 定时器时钟分频后频率:72MHz / (PSC + 1)

    • 目标频率:50Hz → 周期 20ms = 20,000us


2. 代码实现

2.1 定时器初始化

 在 main.c 中添加
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_3);//PA2

2.2 设置舵机角度

 舵机控制基础

标准舵机通过PWM信号控制,一般要求:

  • 周期为20ms (50Hz)
  • 脉冲宽度0.5ms-2.5ms对应0°-180°
    • 0.5ms脉宽 → 0°
    • 1.5ms脉宽 → 90°
    • 2.5ms脉宽 → 180°
代码实现步骤
  1. 角度限制:确保输入角度在0-180度范围内
  2. 脉宽计算:将角度转换为对应的脉冲宽度(微秒)
    • pulse_width = 500 + (angle / 180.0) * 2000
    • 当angle=0时,脉宽=500μs
    • 当angle=180时,脉宽=2500μs
  3. 占空比计算:将脉宽转换为定时器的比较值
    • ccr = (pulse_width / 20000.0) * (htim->Instance->ARR + 1)
    • 其中ARR是定时器的自动重装载值,决定PWM周期
  4. 设置比较值:通过HAL库函数设置定时器的比较寄存器值 
/**
 * @description: 
 * @param {float} angle:0-180
 * @return {*}
 */
void Servo_SetAngle(float angle)
{
    // 角度限制
    if (angle < 0)
        angle = 0;
    if (angle > 180)
        angle = 180;
    // 计算脉冲宽度(0.5ms–2.5ms)
    float pulse_width = 500 + (angle / 180.0) * 2000; // 单位:us
    // 计算占空比(ARR=19999对应20ms周期)
    uint32_t ccr = (pulse_width / 20000.0) * (Servo_SetAngle_TIM->ARR + 1);
    // 写入比较寄存器
    Servo_SetAngle_TIM_CCR = ccr;
}
/* 舵机============================================================================ */
#define Servo_SetAngle_htim htim2          // 定义舵机定时器句柄
#define Servo_SetAngle_TIM TIM2            // 定义舵机定时器
#define Servo_SetAngle_TIM_CCR TIM2->CCR3  // 定义舵机定时器通道TIMx-ch3
void Servo_SetAngle(float angle);          // 舵机角度设置函数0-180度

2.3 主函数调用

  while (1)
  {
    Servo_SetAngle(0);
    HAL_Delay(1000);
    Servo_SetAngle(90);
    HAL_Delay(1000);
    Servo_SetAngle(180);
    HAL_Delay(1000);
  }

 


4. 注意事项

  1. 频率校准
    如果舵机抖动,检查PWM频率是否为 50Hz(示波器测量信号周期)。

  2. 电压匹配
    舵机供电需稳定(5V),避免直接从STM32的3.3V取电。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值