SG90舵机的原理和控制方式

sg90舵机常用于航模、智能小车和云台控制,具有轻量和大扭矩的特点。其工作基于PWM信号,通过改变高电平时间控制转动角度。180°和360°舵机的控制方式有所不同,可通过中断或MCU的PWM功能生成控制信号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

做过机器人、智能车或者玩航模的朋友应该对舵机不会陌生,这种舵机也是很常用的。

舵机只是我们通俗的叫法,它的本质是一个伺服电机,也可以叫做位置(角度)伺服驱动器。一般被应用在那些需要控制角度变化的系统中,可以方便的实现转动任意的角度,实现控制角度的变化。

sg90舵机的图示:

1、sg90舵机的应用场景

(1)航模

在很多的航模中,sg90舵机都被用于两翼的位置控制,从而实现航模的转向,倾斜之类的。因为航模本身的要求,需要尽量的控制航模的自重,而sg90舵机的重量本身就很轻,扭矩也大,所以能很好的满足要求。如下:

(2)智能小车的转向桥

因为sg90舵机的精准角度控制,所以在很多的智能小车类中被用作转向控制。如下的一个简易转向桥:

(3)云台控制

将sg90用于云台控制也是很常见,如下:

2、sg90舵机的参数

(1)sg90舵机的一些重要特性参数:

1)工作扭矩:16KG/CM

2)反应速度:0.12 - 0.13秒/60°

3)温度范围:-30° ~ +60°

4)死区设定:5微妙

5)转动角度:常见0°、90°、180°、360°

6)电压范围:3V - 5V

(2)sg90舵机的接线定义

sg90舵机的接线定义如下:

3、sg90舵机的工作原理

sg90舵机模块内是有控制电路的,控制信号通过信号线输入到内部的控制电路中,调制芯片将输入的信号进行调制,获得直流偏置电压。然后再由内部的基准电路产生周期为20ms,宽度为1.5ms的基准信号,将直流偏置电压和电位器电压进行比较,从而获得输出的电压差。由电压差控制舵机的转动,这个电压差的正负控制舵机正反转。大致原理就是这样!

4、sg90舵机的控制原理

至于如何驱动sg90电机也是比较简单的。

驱动原理:产生一个周期为20ms,高电平宽度为0.5ms-2.5ms的方波就能驱动sg90舵机。

换一种说法就是需要一个50Hz的pwm波,然后通过改变占空比来控制sg90舵机的转动角度。

下面以180°舵机为例说明,高电平宽度和sg90舵机的转动角度的关系表如下:

占空比如下:

方波示意如下:

或者看下面的演示图就更加形象:

(素材源自网络,侵删!)

按照理解的话,可以根据角度和高电平的时间推断一个公式:

PWM的高电平时间 = 0.5ms +(转动角度/180°)*2ms
注意:这是根据高电平宽度和角度推算的,不一定准确,使用中还是需要根据实际情况进行参数调整

5、180° 和 360° 的舵机

据我所知道的,sg90舵机是分为两种的,一种是转角范围180°的舵机,另外一种是360°转角的舵机。这两种是存在一定的差别的。

(1)180°舵机

180°舵机是给一个PWM信号就转动到一定的角度,然后保持在这个转动之后的位置,直到有下一个不同的PWM信号,才会转到其他的角度。

转动的角度和PWM高电平的时间关系如下:

0.5ms  ---- 0度;1ms    ---- 45度;1.5ms  ---- 90度;2ms    ---- 135度;2.5ms  ---- 180度;

(2)360°舵机

360°舵机是给一个PWM信号,就会按照一定的速度转动,这是和180°舵机不同的地方。但是按照我自己的测试中发现,其实360°舵机按照180°舵机的控制方式,每次只发一个周期的PWM的话,也是可以控制360°舵机按照一定的角度转动的。

转动的速度和PWM高电平的时间关系如下:​​​​​​​

0.5ms --- 正向最大转速;1.5ms --- 速度为0;2.5ms --- 反向最大转速;注意:其他的转速也是可以调的!

6、控制舵机的PWM的产生方式

(1)用中断的方式

中断的方式的话,大致的步骤如下:(以转动45°为例)

1)使用一个定时器,并开启中断;

2)第一次:先设置定时器的中断时间为1ms,这段时间IO输出高电平;

3)第二次:1ms时间到了,在中断里面让IO输出低电平,并同时设置下一次中断时间为19ms。就可以产生一个周期20ms,高电平时间为1ms的PWM方波控制信号。

4)一直循环上面的 2)3)的操作

(2)用MCU的PWM输出功能

这个方法比用中断的方式就容易多了,毕竟中断过于频繁的话,对于控制程序也不好,特别是有操作系统的时候,可能会影响系统的实时性能。

MCU自动生成PWM的方式就很好了,这个过程不需要MCU的参与,极大的释放了MCU的压力。有很多的MCU本身甚至可以产生很多路的PWM输出,可以用于控制很多路的舵机。

 

### SG90舵机原理SG90舵机是一种常见的小型舵机,广泛应用于各种机器人项目DIY电子制作中。该舵机内部主要由直流电机、减速齿轮组、电位器以及控制电路组成。 #### 舵机构造概述 舵机外壳内含有一个微型直流电动机作为动力源,通过一组精密设计的齿轮来放大扭矩并降低速度。为了能够精确反馈当前位置给控制系统,在输出轴上安装有一个可旋转的电位计(Variable Resistor),它随着输出轴一起转动并将位置信息转换成电压信号返回给内部控制芯片[^1]。 #### 控制机制解析 对于像SG90这样的模拟舵机而言,其接收来自外部控制器发出的标准PWM (Pulse Width Modulation) 信号来进行操作。具体来说就是利用不同宽度的正脉冲去指示目标角度: - 当接收到持续时间为`0.5 ms` 的高电平时,表示要转向最左边的位置 (`0°`); - `1 ms` 对应中间偏左一点(`45°`); - 中间位置则对应于大约`1.5 ms` 高电平; - 同样地, `2 ms` `2.5 ms` 分别代表接近右侧极限处(`135°`, `180°`) [^4]. 这种基于时间间隔变化而非频率改变的方式使得即使供电电压有所波动也不会影响到最终定位精度. #### 接线说明 通常情况下,SG90舵机会有三条引脚用于连接电源与信号输入: |颜色 | 功能 | |-----|------------| |棕色/黑色| GND 地线 | |红色 | VCC 正极 (+5V) | |橙色/黄色| PWM 输入端 | 这些引脚可以直接接入Arduino或其他微控制器板子上的相应管脚以便编程控制舵机动作[^3]. ```c++ // 示例代码展示如何使用Arduino库函数servo.h 来操控SG90舵机 #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); // 将伺服对象绑定至数字引脚9 } void loop() { for (int pos = 0; pos <= 180; pos += 1) { // 执行一次完整的扫动周期 myservo.write(pos); delay(15); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式之入坑笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值