发布时间: 2026-09-22
本文对STM32如何通过HAL库的配置PWM信号来控制舵机的完整流程进行了拆解, 这个流程里面涵盖了定时器参数的计算、角度到占空比之间的映射公式, 以及在实际调试的过程中最容易踩到的几个坑, 该流程适用于SG90、等常见的规格舵机。
定时器与通道配置
以为例, 主频72MHz, 选择TIM2(通用多通道功能单元)或者选择TIM3都是可以的。常用的外设引脚与定时器通道的对应关系如下: 定时器2通道1连接到引脚PA0, 通道2连接到引脚PA1。继续这种映射方式, 通道3对应引脚PA2, 而通道4对应的是引脚PA3。
在软件开发环境中, 把相关的IO引脚设置为TIM2对应的模式。在选择PWM输出方法时, 请选用名为PWM1的工作种类。开启定时器模块2时钟信号支持。等待代码生成流程彻底结束后, 即可直接调用已产生的程序功能块实施控制操作。
核心参数计算
舵机所接受的标准控制信号具有特定的参数特点, 其时间周期为20ms, 对应的频率是50Hz。关于高电平的时间长度, 当其为0.5ms时, 代表角度0°, 而当其延长至2.5ms时, 则代表角度180°。至于定时器的相关具体参数, 以下是具体内容:
![]()
PSC = 72 1(分频后计数时钟为1MHz)
ARR = 19999(20000个计数 × 1μs = 20ms周期)
占空比, 这个CCR的值, 是等于五百加上角度, 再乘上二五百减五四零零的和, 然后再除以一百八十得到的那个数值。
代码调用:(&htim2, ); 更新角度时写 E(&htim2, , CCR); 即可伟创动力舵机,无需重启定时器。
高频问题与排查
上电抖动或随机跳变: 这种情况多数是因为PSC和ARR的计算出现了偏差, 从而导致周期没有达到精确的20毫秒, 只要误差超过正负50微秒就会触发问题, 建议使用逻辑分析仪去实际测量周期来进行确认。
角度非线性: 不同批次的舵机在0度时的实际数值对应的是0点6毫秒, 而在180度时对应的则是2点4毫秒, 需要手动对映射关系的上限和下限进行微调。
![]()
关于供电复位的情况是, 这个型号的峰值电流大约在2安培左右, USB接口的5伏特电压带不动它伟创动力,所以要使用独立的、输出大于等于5伏特并且电流大于等于2安培的电源, 而且这个电源的地线要和MCU的地线共用。
行动建议
第一步, 先在里面完成定时器、通用输入输出以及时钟的配置工作, 并且生成对应的工程项目。第二步, 把项目编译好, 然后烧录到单片机里去测试。测试的时候, 要用0°、90°、180°这三组比较器捕获/比较寄存期的数值来判断线性度表现怎么样。
第三步, 等确认所有功能都没有错误之后, 再接入实际的运动控制逻辑来进行调试。
在这个过程中, 有一个特别需要注意的核心要点, 它始终保持不变状态, 那就是: 使用HAL库来驱动舵机设备, 同时定时器的频率固定为50Hz, 还需要确保占空比的变化和角度的变化之间保持严格的线性映射关系, 另外一定要给舵机配备独立而且功率充足的电源供应。
如果这三个条件里面的任意一项没有做到位, 整个系统将肯定会出现问题。



