1. SG90舵机工作原理与PWM控制基础
第一次接触舵机时,我完全被它精准的角度控制能力惊艳到了。这种小玩意儿内部其实藏着精密的直流电机、减速齿轮组和反馈电路,通过PWM信号就能精确控制旋转角度。SG90作为最常见的9克微型舵机,价格亲民但性能足够应付大多数DIY项目。
SG90的控制原理其实很简单:给它一个周期20ms的PWM信号,通过调节高电平的持续时间(0.5ms-2.5ms)就能对应0°-180°的旋转角度。这个关系我用实际测试数据验证过:
- 0.5ms高电平 → 0°位置
- 1.0ms高电平 → 45°位置
- 1.5ms高电平 → 90°中立位置
- 2.0ms高电平 → 135°位置
- 2.5ms高电平 → 180°位置
这里有个新手容易忽略的细节:虽然理论上占空比范围是2.5%-12.5%,但实际使用时发现有些舵机会有±0.1ms的误差。建议先用示波器观察实际输出波形,我在调试机械臂项目时就遇到过不同批次舵机响应不一致的情况。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. STM32硬件连接与供电方案
拿到SG90的第一件事就是正确接线。这个看似简单的步骤其实藏着不少坑,我的第一个舵机就是接错电源烧掉的。SG90标准三线接口中:
- 红色线:电源正极(必须接5V!)
- 棕色线:接地
- 黄色线:PWM信号输入
重点说说供电问题:STM32开发板的3.3V输出根本带不动舵机,强行使用会导致舵机抖动甚至损坏MCU。我的解决方案有两种:
- 使用外部5V电源(如USB充电头)单独给舵机供电
- 在开发板5V输出端加装470μF电容消除电压波动
实测发现,当多个舵机同时工作时,电源噪声会导致角度漂移。有次做四足机器人时,舵机会随机抽搐,后来在每组电源线上并联0.1μF陶瓷电容才解决问题。
3. STM32定时器PWM配置详解
以最常用的TIM2为例,我们需要配置时基单元和输出比较通道。CubeMX的设置我摸索了很久才搞明白关键参数:
c复制// TIM2初始化代码片段
htim2.Instance = TIM2;
htim2.Init.Prescaler = 71; // 72MHz/(71+1)=1MHz
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init
