第21章 舵机实验
第二十一章 舵机实验
1. 舵机简介
舵机是一种位置(角度) 伺服的驱动器, 适用那些需要角度不断变化并可以保持的控制系统。 舵机只是一种通俗的叫法, 其实质是一个伺服马达。 舵机主要分为模拟舵机和数字舵机。 模拟舵机: 需要不断的发送目的地 PWM 信号, 才能旋转到指定位置。 例如: 我现在让它旋转 90 度, 我就需要不断的发送 90 度的 PWM信号直到到达指定位置才能停止。 数字舵机: 只需给一个目的地 PWM 信号, 即可旋转到指定位置。 例如: 我现在让它旋转 90 度, 我只需要发送一次 90 度的 PWM信号, 它就可以旋转到 90 度。
SG90 模拟舵机在市面上十分常见, 价格也比较便宜。 常用于航模, 机器人或
智能小车等。 如下图所示:
一个舵机有三条线: 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 功能产生这样的方波。 波形如下所示:
高电平在一个周期(20ms) 的持续时间对应的舵机角度, 如下图所示:
2. 硬件设计
本实验使用到硬件资源如下:
-
SG90舵机模块
-
ESP32 GPIO
舵机接口电路如下:
从上图可知, 板载 4 路舵机接口均连接到指定 IO。本章实验使用 ESP32 的 IO17 引脚, 接线如下所示:
3. 软件设计
3.1 MicroPython函数使用
MicroPython 固件库内并没有集成 SG90 模块, 因此需要我们自己实现, 对于不了解 SG90 工作原理的用户来说, 要编写出驱动是困难的。 MicroPython 拥有着庞大的用户群, 自然 SG90 模块也有开源的代码, 直接拿过来使用即可, 这就是使用 MicroPython 开发的高效之处, 市面上常见的模块在网上几乎都可以找到相应的模块代码
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 第一次修订,后期不再维护
本文作者:hazy1k
本文链接:https://www.cnblogs.com/hazy1k/p/18375220
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。