当前位置: 首页 > news >正文

MicroPython for ESP32 舵机控制详解

一、什么是舵机

舵机其实是一种伺服马达,是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。

在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。

目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。

我们常见的舵机有180度及360度舵机,两种舵机的驱动略有不同。

二、180度舵机与360度舵机的核心区别

一)、转动范围与功能定位

  1. 180度舵机

    • 角度控制‌:可精确旋转到 ‌0°~180°‌ 范围内任意指定角度,通过 PWM 脉宽直接映射目标位置。
    • 应用场景‌:适用于需要精准定位的场景(如机械臂关节、摄像头云台)。
  2. 360度舵机

    • 连续旋转‌:支持 ‌无限制全周旋转‌,通过 PWM 信号控制 ‌旋转方向与速度‌,而非固定角度。
    • 应用场景‌:适合需持续运动的场景(如轮式机器人驱动、传送带控制)

二)、 控制信号与响应逻辑

参数180舵机360舵机
PWM脉宽范围0.5ms - 2.5ms0.5ms - 2.5ms
线性对应0°  - 180°0.5ms 正转最大速度
1.5ms停止
2.5ms反转最大速度
信号持续需求需持续发送PWM信号以维持角度仅需单次信号即可维持运动状态

三)、硬件设计与控制特性

  1. 闭环控制机制

    • 180度舵机‌:内置电位器反馈,形成角度闭环控制,确保位置精度。
    • 360度舵机‌:通过编码器或电流检测实现速度闭环,稳定转速但无法定位。
  2. 机械结构差异

    • 限位设计‌:180度舵机内置机械限位防止超范围转动,360度舵机无物理限位。
    • 扭矩特性‌:180度舵机通常扭矩更大(如 SG90 约 1.8kg·cm),适合负载定位;360度舵机更注重转速调节

 三、舵机工作原理与控制方法

接下来我们以SG90 180度舵机为例讲解舵机工作原理与控制方法。

一)、工作原理

  1. 基准电压与信号调制

    • SG90舵机内部设有基准电压,当外部PWM信号输入后,控制电路将信号与基准电压比较,生成直流偏置电压。
    • 电压差通过电机驱动芯片驱动电机正转或反转,同时带动电位器旋转,直至电压差归零,电机停止转动,形成闭环反馈控制。
  2. PWM信号的作用

    • 舵机通过接收周期为20ms(频率50Hz)的PWM信号控制角度。
    • 脉冲宽度在0.5ms~2.5ms范围内变化,对应舵机输出轴0°~180°的旋转角度。
  3. 核心组件协作

    • 电位器‌:实时检测舵机位置并反馈至控制电路。
    • 减速齿轮组‌:降低电机转速并提升扭矩,确保角度控制的精准性

二)、引脚定义‌

  • 接线颜色与功能‌:
    • 红色‌:电源正极(VCC,4.8~6V)
    • 棕色‌:地线(GND)
    • 橙色/黄色‌:PWM 信号输入(SIG)
  • 线长‌:32cm(标准 JR 插头)
     

 三)、与ESP32C3连接方法:

SG90ESP32
红色5V VCC
棕色GND
橙色/黄色GPIO2

四)、控制方法‌

  1. PWM信号参数要求

    参数数值/范围
    周期20ms(50Hz)
    有效脉宽0.5ms~2.5ms
    角度分辨率约0.9°~1.0°/μs
  2. 典型角度与脉宽对应关系

    角度        脉宽(ms)
    0.5
    90°1.5
    180°2.5

四、控制代码

 通过前面的讲解,如何控制SG90舵机,相信大家都非常清楚了,直接上代码:

from machine import Pin,PWM
import timeservo = PWM(Pin(2),freq=50)def set_angle(angle):min_duty = 36max_duty = 140duty = int(min_duty + (max_duty - min_duty) *(angle / 180))servo.duty(duty)while True:for angle in range(0,181,10):set_angle(0)time.sleep_ms(200)for angle in range(180,-1,-10):set_angle(180)time.sleep_ms(200)

五、校准舵机的角度

运行上面的代码,舵机确实转动起来了,但很多时候,我们会发现,舵机的角度不对,这就需要我们校正舵机的角度。

舵机角度的校正,很多时候需要重复多次进行,需要一点点耐心。

1. ‌硬件基础检查‌

  • 确保舵机接线正确(信号线→GPIO、电源线→5V、地线→GND),避免因接触不良或供电不足导致角度偏移。

2. ‌校准参数调整‌

舵机角度校准需通过调整 ‌PWM占空比范围‌ 实现,关键参数为 min_duty(对应0°)和 max_duty(对应180°):

  • 默认参数‌:
    min_duty = 40 # 0.5ms脉冲(对应0°) max_duty = 115 # 2.5ms脉冲(对应180°) 
    若实际角度与设定角度偏差较大,需逐步调整这两个值:
  • 手动测试‌:编写循环代码,逐步增大/减小占空比,观察舵机实际停止位置16。
  • 公式修正‌:根据测试结果重新计算占空比范围,例如:
    1. duty = min_duty + (max_duty - min_duty) * (angle / 180)

  • 多次验证‌:重复测试0°和180°的极限位置,确保舵机不卡顿或抖动

3. 扩展校准技巧‌

  • 电源干扰处理‌:若舵机抖动,需外接独立电源并确保GND共地。
  • 机械限位调整‌:部分舵机可通过物理螺丝微调初始位置

4.校准代码

def calibrate(min_val,max_val):servo.duty(min_val)time.sleep(5)servo.duty(max_val)time.sleep(5)calibrate(36,140)

相关文章:

  • 【学习笔记】软件测试流程-测试设计阶段
  • 全地形车市场
  • FPGA-DDS信号发生器
  • watch 监视器
  • 【大语言模型开发】BPE算法(Byte-Pair)
  • 可调用对象(5)-bind函数适配器
  • 卫星互联网安全:机遇、挑战与未来方向
  • vite创建vue3项目并进行配置
  • 【二分查找】寻找峰值(medium)
  • 【记录一下】RagFlow 本地安装详细步骤(Windows + Linux)
  • SQLMesh CLI 实战教程: 构建和维护数据转换管道的快速指南
  • 后端[特殊字符][特殊字符]看前端之Row与Col
  • 第二部分:网页的妆容 —— CSS(下)
  • 树莓派学习专题<12>:使用x264库实施H264编码--Linux和Windows上的部署
  • 【C++】线程池
  • VASP 教程:VASP 结合 phonopy 计算硅的声子谱
  • UDP 报文结构与注意事项总结
  • 打造即插即用的企业级云原生平台——KubeSphere 4.1 扩展组件在生产环境的价值全解
  • Vue 生命周期钩子总结
  • 第9讲:坐标轴美学深度优化——刻度线、网格线与边框控制
  • 五月院线片单:就看五一档表现了
  • 日本希望再次租借大熊猫,外交部:双方就相关合作保持密切沟通
  • 深圳宝安区一宗涉宅用地中止出让,起始总价86.27亿元
  • 诗词文赋俱当歌,听一听古诗词中的音乐性
  • 传智教育连续3个交易日跌停:去年净利润由盈转亏
  • 格力电器去年净利增长一成:消费电器营收下滑4%,一季度净利增长26%