首页 > 行业资讯 >舵机
TECHNICAL SUPPORT

舵机接STM32怎么连,接线方法、PWM配置和常见问题一次讲清

发布时间: 2026-09-18

舵机和STM32连接的核心在于三根导线, 外加一组脉宽调制的参数。

信号线接入定时器所对应的脉宽调制输出引脚, 电源的正极要连接到五伏电压, 公共的接地端一定要和stm32单片机保持共地状态, 只要这些硬件连接就绪, 还需要配合频率为五十赫兹、周期为二十毫秒的脉宽调制波形去驱动它, 这样就能让舵机在零度到一百八十度的角度区间内做到非常精准的旋转动作。

接下来的内容会把接线是怎么接的, 参数要怎么设置, 具体的代码如何编写, 以及大家容易踩过的坑点全部都一次性讲得清清楚楚, 只要你完整读完了这篇文章, 马上就可以动手操作并顺利完成调试任务了。

01硬件接线:三根线就够

以生活中常见的微型舵机来做例子, 就说SG90系列, 再说那个MG等级别的舵机, 就提一嘴, 这些器件它们的接口定义都是一样的, 总共有三条线要接, 也就是三线制。

线色 功能 接法
橙色/棕色 信号线() 接STM32某定时器的PWM输出引脚,如(PA0)
红色 电源正极(VCC) 接5V外部电源(不是STM32板上的5V引脚,见下文说明)
棕色/黑色 地(GND) 接STM32板上的GND,共地

关键提醒(最常见的接线错误):

那个信号线, 它是接在了MCU的GPIO引脚上面的, 既不是模拟输入, 也不是常规的输出, 还是那些跟硬件PWM通道相关的脚才行, 不然的话, 就没有办法弄出标准的那种50赫兹的波形来。

微型舵机也就是那个 SG90, 它在供电的时候, 电流峰值大概是 500mA, 如果直接把它接到 STM32 开发板上面的 5V 引脚上去的话, 由于这个 5V 引脚通常是由 USB 或者是稳压芯片来提供的, 所以这样很容易就会导致板载电源出现波动的情况, 具体的表现就是舵机会发生抖动, 并且会导致 MCU 被复位, 所以建议你要单独地使用一个 5V 电源来给舵机进行供电, 然后要注意把 GND 和 MCU 共地。

对于像这样的MG级舵机来说, 堵转电流可以达到2A。, 在电源使用上, 搭配一个输出电压为5V、输出电流至少在2A以上的独立电源来进行供电。这里绝对不能依赖MCU板上的板载供电功能。

02PWM参数:50Hz,脉宽0.5ms~2.5ms

舵机控制协议是行业通用的标准, 这一点是不依赖于任何特定的品牌的。

载波频率:50 Hz,周期 T = 20 ms

高电平脉宽(duty)决定目标角度:

脉宽 对应角度 说明
0.5 ms 0° 最小
1.0 ms 45°
1.5 ms 90° 中位
2.0 ms 135°
2.5 ms 180° 最大

计算示例(以TIM2为例):

stm32控制舵机_舵机与stm32连接_sts3215舵机

假设系统时钟是72兆赫兹, APB1的频率是36兆赫兹, PCLK2的频率也是72兆赫兹:

我们把预分频器的数值定为 PSC, 结果算出是 72 000 000 除以 50 再乘以 1000, 然后减去 1, 得到 1439,所以在实际操作中, 我们直接取了 PSC 为 1439。 接下来计算自动重装载寄存器的值, 它是 1000 减去 1, 等于 999。这样设置的话, 1000 个计数就会对应一个为期 20ms 的周期。

则每1个计数 = 100 μs

0.5 ms 对应 CCR = 5

1.5 ms 对应 CCR = 15

2.5 ms 对应 CCR = 25

如果你的主频是168 MHz, 也就是F4系列的情况, 那么你需要重新去计算PSC和ARR这两个值。不过, 计算的时候要遵守一个固定的原则, 就是控制周期的时间精准地等于20 ms。因为如果不满足这个精确度的要求, 舵机就会出现抖动, 或者产生报警的现象。

03STM32代码实现(HAL库)

这是一套可以直接拿来用的最小可行逻辑, 具体案例以把PA0这个引脚用来输出PWM信号为例进行说明。

// 1. 时钟与GPIO初始化(生成)
// TIM2时钟使能、PA0复用为
// 2. PWM参数(72MHz主频,PSC=1439,ARR=999)
void (void) {
    LOAD(&htim2, 999);   // 周期 20ms
    E(&htim2, , 15); // 1.5ms → 90°
    (&htim2);
}
// 3. 角度→脉宽换算(角度范围0~180°)
void ( angle) {
    if (angle > 180) angle = 180;
    // 0°→0.5ms, 180°→2.5ms  线性映射
     pulse = 5 + ()(angle * 20 / 180); // 5~25
    E(&htim2, , pulse);
}

调用方式是这样的, 先调用函数 () 来对上电做一次初始化;之后就可以随时调用 (45), 让舵机转到45度。

如果你的项目使用了寄存器库, 或者你的项目使用了实时操作系统, 那么脉冲宽度调制配置逻辑是完全相同的, 仅仅是应用程序接口不一样而已, 其核心部分依然是由定时器发生器来生成五十赫兹的频率信号, 并且需要调整脉宽的范围保持在零点五毫秒到二点五毫秒之间。

04常见故障与排查

现象 最可能原因 处理
上电舵机"咔咔"报警响 PWM频率不是50Hz,或上电时CCR=0(脉宽为0,超出0.5ms下限) 确认ARR/PSC;上电默认值设为15(90°中位)
舵机只到一个角度就不动了 信号线接错通道伟创动力舵机,或对应GPIO未配置为复用推挽 核对数据手册引脚复用表
转动到极限位置有摩擦声 脉宽超出0.5~2.5ms范围 限制CCR在5~25之间
供电不稳,MCU随机复位 舵机电流大,板载5V扛不住 独立5V电源,GND共地;电源走线尽量短
用示波器看不到PWM 引脚没开时钟 / 定时器没使能 / 通道没配置为PWM模式 用重新生成伟创动力,检查RCC和GPIO

05进阶注意事项

sts3215舵机_stm32控制舵机_舵机与stm32连接

多路舵机这种情况, 当需要多路脉冲宽度调制信号的时候, 大家通常采用用同一个定时器不同通道的做法, 比如定时器2本身就有4路的通道可以利用, 或者是去启用多路其他的定时器, 其核心目的就是保证所有通道的频率都是一致的。

实现平滑转动的效果。千万不要一步就跳到目标角度。应该在循环过程中, 每次增加或者减少一摄氏度。这大约对应零点零八三毫秒的脉宽变化。中间间隔三十六到五十毫秒的时间。这样做的目的就是为了避免产生机械冲击的情况发生。

程序初始化后出现的情况是, 如果这个时候舵机并没有处在中间的位置上, 那么当电源断电并且再次接通的时候, 可能会因为脉冲宽度的突然变化而引起报警提示。 正确的操作方法是, 在设备刚刚上电的时候要先输出一个时间为 1. 也就是对应着 90 度的信号, 并且要持续保持这个状态 300 毫秒以上的时间了之后才发送后续的新指令出来。

共地这条铁律得严格遵守, 不管那个电源到底独不独立, GND这个地方绝对不能少, 它跟MCU这个微控制器连到一块儿去, 要是这一环节没搞好, 信号线电平基准就肯定会因为对不上而不一致, 最终导致舵机完全无法做出任何响应。

06行动清单

完成以下五步,即可让舵机稳定受控:

1. 请按照信号线连接至PWM引脚、红线连接至5V电源、棕线连接至GND地线的接线规范, 先将这三根线全部接妥当, 切记在接线过程中不要让设备通电。

2. 使用万能表或者示波器来确认信号引脚在没有工作的时候处于低电平的状态, 同时要确保五伏电源里面的纹波小于五十毫伏。

3. 在软件当中, 你要把定时器TIM2设置为PWM1的工作模式, 然后根据设备主频去计算预分压数值和自动重装载数值, 以此来凑出20毫秒的时间周期, 之后先把默认的捕获比较值设定为数字15。

4. 接通电源, 然后查看那个舵机是否在九十度左右的位置上安静地停着, 如果出现了报警的情况, 就要去检查一下频率以及默认值的具体状况。

5. 分别调用 () 这个函数, 把角度设置成零度、九十度和一百八十度, 这样就能确认整个运行过程中没有出现卡顿或者是滞住的情况。

我们要再把核心的结论强调一下, 舵机连接到STM32上去, 这其实就是一桩事情由三部分组成, 也就是50Hz的PWM信号加上一共有零点五毫秒到两点半毫秒这么长的脉宽, 还要共用一个接地来进行供电, 这三件事缺一不可。

你要是能把接线的地方接对, 把频率设置得准确, 再把脉冲的宽度调整得合适, 那么这个舵机就会听从你的调遣。

你需要把这三个重点牢牢地记在脑子里边, 这样一来, 不管你是面对哪一个生产出来的型号的控制器来说, 也不管是针对那一个系列的芯片去使用, 只要是把它连接到一个舵机的上面, 所使用的那个通用的方法是一样的道理。

为所有产品提供动力单元

联系伟创动力产品专家,为你的产品推荐合适的驱动系统所需部件。

发送邮件
在线留言
WhatsApp
+86 0769 8399 3238
 
kpowerMap