news 2026/5/3 12:31:01

别再傻傻分不清!SG90和MG90S舵机到底怎么选?从原理到实战,用STM32CubeMX快速上手

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再傻傻分不清!SG90和MG90S舵机到底怎么选?从原理到实战,用STM32CubeMX快速上手

SG90与MG90S舵机深度对比:从核心原理到STM32实战指南

1. 舵机基础与选型逻辑

在机器人关节控制、航模舵面调节等场景中,舵机扮演着关键角色。面对市场上琳琅满目的舵机型号,初学者常被SG90和MG90S这两款外形相似但特性迥异的产品所困扰。理解它们的本质差异,需要从底层工作原理切入。

扭矩与转速的博弈是舵机选型的首要考量。SG90标称扭矩约为1.6kg·cm(4.8V供电时),而MG90S金属齿轮版本可达2.5kg·cm。但扭矩提升往往伴随转速降低——SG90的60°转动耗时约0.12秒,MG90S则需要0.14秒。这种参数差异直接决定了它们的适用场景:

  • SG90更适合需要精确角度定位的应用,如机械臂关节、摄像头云台
  • MG90S凭借金属齿轮和更高扭矩,适用于承受较大负载的场合,如越野车转向机构

供电特性也值得关注。两款舵机典型工作电压均为4.8-6V,但瞬时电流差异明显:

参数SG90MG90S
空载电流10mA15mA
堵转电流650mA800mA
工作温度0-55℃0-55℃

实际使用中建议为每个舵机预留1A的电源余量,多舵机系统需特别注意电源功率分配

2. 控制原理的本质差异

2.1 角度舵机(SG90)的脉冲解码

传统180°舵机采用位置伺服控制机制。其核心是一个由电位器、控制板和直流电机组成的闭环系统。当接收到50Hz的PWM信号时:

  1. 控制芯片测量高电平脉宽(典型范围500-2500μs)
  2. 将脉宽映射到目标角度(0-180°线性对应)
  3. 比较电位器反馈的当前角度
  4. 驱动电机旋转直至误差消除

具体脉宽与角度对应关系可通过实验校准:

// SG90角度控制公式(实测校准版) void SetAngle(uint8_t angle) { uint16_t pulse = map(angle, 0, 180, 500, 2500); // 实际应用中需加入死区补偿 pwm_set_pulse_width(pulse); }

2.2 连续旋转舵机(MG90S)的速度控制

MG90S虽然标称360°,实则是无级调速电机。其控制逻辑截然不同:

  • 1.5ms脉宽:电机停转
  • 1.0-0.5ms:顺时针加速
  • 2.0-2.5ms:逆时针加速
# MG90S速度控制示例(Python伪代码) def set_speed(speed): # speed范围:-100到100 if speed == 0: pulse = 1500 elif speed > 0: pulse = 1500 - speed*10 # 正转为1000-1500us else: pulse = 1500 - speed*10 # 反转为1500-2000us pwm.set_pulse_width(pulse)

关键区别:SG90的脉宽对应绝对角度,MG90S的脉宽决定相对转速。这种底层差异导致它们的应用场景和编程方式完全不同

3. STM32CubeMX实战配置

3.1 硬件连接规范

典型接线方案需要注意防干扰设计:

[STM32F103] [舵机] PA8(TIM1_CH1) ----> 信号线(黄色) 5V输出 ----> VCC(红色) GND ----> GND(棕色)

建议在电源正极串联100μF电解电容,并在信号线加220Ω电阻

3.2 CubeMX关键配置步骤

  1. 时钟树配置:确保APB1定时器时钟为72MHz
  2. TIM1设置
    • Prescaler: 71 (产生1MHz计数频率)
    • Counter Period: 19999 (50Hz PWM)
    • Pulse: 初始值1500
  3. GPIO设置:将对应引脚设为AF_PP模式

生成代码后,需要添加的驱动逻辑:

// 角度控制封装函数 void servo_angle_ctrl(TIM_HandleTypeDef *htim, uint32_t Channel, float angle) { uint16_t pulse = (uint16_t)(500 + angle*(2000/180.0)); __HAL_TIM_SET_COMPARE(htim, Channel, pulse); } // 速度控制封装函数 void servo_speed_ctrl(TIM_HandleTypeDef *htim, uint32_t Channel, int8_t speed) { uint16_t pulse = 1500 + speed*5; // speed范围:-100到100 __HAL_TIM_SET_COMPARE(htim, Channel, pulse); }

4. 高级应用与故障排查

4.1 多舵机同步控制

当需要协调多个舵机时,需注意:

  • 使用硬件定时器不同通道可实现同步控制
  • 软件PWM方案可能导致抖动,建议采用DMA方式
  • 共享电源时需防范电压跌落
// 多舵机控制示例 void robotic_arm_move(uint8_t angles[4]) { servo_angle_ctrl(&htim1, TIM_CHANNEL_1, angles[0]); servo_angle_ctrl(&htim1, TIM_CHANNEL_2, angles[1]); HAL_Delay(20); // 避免瞬时电流过大 servo_angle_ctrl(&htim1, TIM_CHANNEL_3, angles[2]); servo_angle_ctrl(&htim1, TIM_CHANNEL_4, angles[3]); }

4.2 常见问题解决方案

舵机抖动

  • 检查电源电压是否稳定
  • 确认PWM信号接地与电源共地
  • 尝试在程序中加入10ms延时

角度偏差

// 校准代码示例 const float calibration[4] = {1.02, 0.98, 1.05, 0.95}; // 各通道校准系数 void calibrated_move(uint8_t ch, float angle) { uint16_t pulse = (uint16_t)(500 + angle*2000/180 * calibration[ch]); __HAL_TIM_SET_COMPARE(&htim1, ch+1, pulse); }

过热保护

  • 金属齿轮舵机连续工作不宜超过15分钟
  • 可增加温度传感器监测
  • 采用间歇工作模式(工作2分钟,停30秒)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 12:21:26

为内部知识库问答机器人集成 Taotoken 多模型能力的实践

为内部知识库问答机器人集成 Taotoken 多模型能力的实践 1. 场景需求与挑战 企业内部知识库问答系统通常需要处理多样化的查询需求,从技术文档检索到业务流程解释,再到产品特性对比。传统单一模型方案往往难以兼顾不同领域的回答质量。我们遇到的核心问…

作者头像 李华