第21章 舵机实验

第二十一章 舵机实验

1. 舵机简介

舵机是一种位置(角度) 伺服的驱动器, 适用那些需要角度不断变化并可以保持的控制系统。 舵机只是一种通俗的叫法, 其实质是一个伺服马达。 舵机主要分为模拟舵机和数字舵机。 模拟舵机: 需要不断的发送目的地 PWM 信号, 才能旋转到指定位置。 例如: 我现在让它旋转 90 度, 我就需要不断的发送 90 度的 PWM信号直到到达指定位置才能停止。 数字舵机: 只需给一个目的地 PWM 信号, 即可旋转到指定位置。 例如: 我现在让它旋转 90 度, 我只需要发送一次 90 度的 PWM信号, 它就可以旋转到 90 度。

SG90 模拟舵机在市面上十分常见, 价格也比较便宜。 常用于航模, 机器人或

智能小车等。 如下图所示:

屏幕截图 2024 08 14 100305

一个舵机有三条线: VCC(红线) 、 GND(棕色线) 和信号线(橙色线) 。 只要通过信号线给予规定的控制信号即可实现舵机码盘的转动。

1.1 模块主要电气参数

  • 使用电压: 4.8V-6V

  • 尺寸: 221.5mmX11.8mmX22.7mm

  • 重量: 9g

  • 角度范围: 0-180°

1.2 工作原理

舵机内部有一个基准电压, 微处理器产生的 PWM 信号通过信号线进入舵机产生直流偏置电压, 与舵机内部的基准电压作比较, 获得电压差输出。 电压差的正负输出到电机驱动芯片上, 从而决定正反转。 当舵机开始旋转的时候, 舵机内部通过级联减速齿轮带动电位器旋转, 使得电压差为零, 电机停止转动。

我们无需了解其内部构造, 只需知道如何通过 PWM 控制其转动即可。

①我们需要使用 PWM 产生周期为 20ms, 高电平 t 等于 0.5ms-2.5ms 之间的这样一个方波。 可以使用 ESP32 的 PWM 功能产生这样的方波。 波形如下所示:

屏幕截图 2024 08 14 100503

高电平在一个周期(20ms) 的持续时间对应的舵机角度, 如下图所示:

屏幕截图 2024 08 14 100530

2. 硬件设计

本实验使用到硬件资源如下:

  • SG90舵机模块

  • ESP32 GPIO

舵机接口电路如下:

屏幕截图 2024 08 14 100757

从上图可知, 板载 4 路舵机接口均连接到指定 IO。本章实验使用 ESP32 的 IO17 引脚, 接线如下所示:

屏幕截图 2024 08 14 105243

3. 软件设计

3.1 MicroPython函数使用

MicroPython 固件库内并没有集成 SG90 模块, 因此需要我们自己实现, 对于不了解 SG90 工作原理的用户来说, 要编写出驱动是困难的。 MicroPython 拥有着庞大的用户群, 自然 SG90 模块也有开源的代码, 直接拿过来使用即可, 这就是使用 MicroPython 开发的高效之处, 市面上常见的模块在网上几乎都可以找到相应的模块代码

屏幕截图 2024 08 14 105401

3.2 代码分析

#导入Pin模块
from machine import Pin
import time
from servo import Servo

#定义SG90舵机控制对象
my_servo = Servo(Pin(17))

#程序入口
if __name__=="__main__":

    while True:
        my_servo.write_angle(0)  #角度0°
        time.sleep(0.5)
        my_servo.write_angle(45)  #角度45°
        time.sleep(0.5)
        my_servo.write_angle(90)  #角度90°
        time.sleep(0.5)
        my_servo.write_angle(135)  #角度135°
        time.sleep(0.5)
        my_servo.write_angle(180)  #角度180°
        time.sleep(0.5)

2024.8.23 第一次修订,后期不再维护

posted @ 2024-08-23 09:14  hazy1k  阅读(15)  评论(0编辑  收藏  举报