STM32 控制sg90舵机
时间: 2025-05-26 10:30:49 浏览: 19
### STM32 控制 SG90 舵机的实现方法
#### 1. 硬件连接
为了使用 STM32 控制 SG90 舵机,需将舵机信号线与 STM32 的 GPIO 引脚相连。通常情况下,SG90 舵机的工作电压为 5V,而 STM32 输出电平一般为 3.3V。因此,在实际应用中可能需要通过逻辑电平转换电路来匹配两者之间的电压差[^1]。
#### 2. PWM 波形配置
SG90 舵机接受标准的 PWM 信号作为输入控制其转动角度。PWM 周期固定为 20ms (即频率为 50Hz),占空比范围决定了舵机的角度位置:
- 占空比约为 **5%** 对应于 0°;
- 占空比约为 **7.5%** 对应于 90°;
- 占空比约为 **10%** 对应于 180°。
在 STM32 中可以通过设置定时器(Timer)模块生成所需的 PWM 波形。以下是具体参数设定过程中的关键点[^2]:
- 使用 `TIM_OCInitStructure` 结构体定义定时器的相关属性。
- 设置工作模式为 `TIM_OCMode_PWM1` 或者其他合适的模式。
- 极性选择可以依据需求决定,默认推荐低有效 (`TIM_OCPolarity_Low`) 方便理解和调试。
#### 3. 初始化代码示例
下面提供了一个基于 STM32F103 的简单初始化和运行循环的例子,用于演示如何利用软件调整舵机的位置[^3]。
```c
#include "stm32f10x.h"
#include "pwm.h"
#include "delay.h"
int main(void) {
delay_init(); // 延时函数初始化
// 初始化定时器并配置成产生周期为20ms、分辨率为200刻度的PWM波形
PWMInit(7200, 200);
while (1) {
delay_ms(1000); // 延迟一秒
// 将比较寄存器设为5,则对应约0°角
TIM_SetCompare1(TIM2, 5);
delay_ms(1000);
// 设定比较值为15,此时大约指向中间位置90°
TIM_SetCompare1(TIM2, 15);
delay_ms(1000);
// 当前值变为25,接近最大偏转量180°
TIM_SetCompare1(TIM2, 25);
}
}
```
此段代码展示了基本的操作流程:先完成必要的硬件资源启动准备;接着不断改变指定通道上的计数值从而达到连续调节目的效果。
---
###
阅读全文
相关推荐



















