当前位置: 首页 > news >正文

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取电。

相关文章:

  • TIP-2021《SRGAT: Single Image Super-Resolution With Graph Attention Network》
  • 逻辑复制环境删除订阅报错 replication slot does not exist
  • 记录一次vue项目页面内嵌iframe页面实现跨域上传和下载附件的功能
  • 如何为直播平台集成美颜SDK?美颜与美型功能的开发指南
  • 二叉树子树判断:从递归到迭代的全方位解析
  • 向量和矩阵范数
  • 对置式光电传感器市场报告:预计2031年全球市场销售额将攀升至 5.68 亿美元
  • querySelectorAll 和 getElementByClassName 的区别是啥
  • 数据预处理-数据清洗(缺失值、重复值、异常值)
  • MySQL——十一、主从复制
  • Unity 批量将图片从默认类型改为Sprite类型
  • 【Linux网络】详解应用层http协议
  • 基于大数据的租房信息可视化系统的设计与实现【源码+文档+部署】
  • 深度学习中的归一化:提升模型性能的关键因素
  • 城市综合管廊监测与维护一体化解决方案
  • C++运算符重载练习
  • 【python编程从入门到到实践】第十章 文件和异常
  • 遥感图像非法采矿矿区识别分割数据集labelme格式1818张3类别
  • 人脸表情识别检测数据集VOC+YOLO格式9400张8类别
  • linux环境下 安装svn并且创建svn版本库详细教程
  • AI赋能科学红毯,机器人与科学家在虚实之间叩问“科学精神”
  • 国家统计局公布2024年城镇单位就业人员年平均工资情况
  • 大陆非遗项目打铁花、英歌舞将在台演出
  • 铁路端午假期运输火车票今日开售,12306提升应对超大规模并发访问需求能力
  • 商务部:中方敦促美方尽快停止232关税措施
  • 腾讯一季度净利增14%:AI直接拉动广告收入增长,王者荣耀流水创新高