找回密码
 立即注册

QQ登录

只需一步,快速开始

基础模块资料库

本帖最后由 lou 于 2020-5-13 11:16 编辑

基于Arduino使用SG90 9克塑料舵机



产品介绍

舵机是一种位置「角度」伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统,目前在高档遥控玩具、航模、机器人中已经得到普遍使用,舵机是一种俗称,其实是一种伺服马达,SG90舵机是一个模拟舵机,而非数字舵机,数字舵机(Digital Servo)和模拟舵机(Analog Servo)在基本的机械结构方面是完全一样的,主要由马达、减速齿轮、控制电路等组成,这两者的区别是这样,数字舵机只要给一个PWM信号即可,这个信号是目的地的位置,舵机会自动旋转到这个位置,而模拟舵机需要一直给予目的角度的PWM信号,由于舵机需要的PWM信号实际就是一个方波,所以模拟舵机就是需要不断的重复发一样的方波,直到舵机旋转到指定的位置,并且如果需要锁定在这个位置,那么还需继续给予这个方波。

73.jpg

(SG90 9克舵机)

技术参数

产品型号:SG90
产品尺寸:23*12.2*29mm
产品重量:13g
工作扭矩:1.6kg·cm(4.8V)
使用温度:-30至+60摄氏度
死区设定:5微秒
工作电压:3.5V-6V
插头类型:JR、FUTABA通用
转动角度:360度
结构材质:塑料齿
附件包含:三种功能摆臂、固定螺钉,线长25cm
适用范围:固定翼、直升机kt、滑翔、小型机器人机械手等模型

引线介绍

黄线 ------ 信号线(脉冲输入)
红线 ------ 正极(VCC4.8-7.2V)
棕线 ------ 负极(GND)

74.png

内部结构:主要是由马达、减速齿轮组、电位器和控制电路构成。

电位器:用于位置反馈。它会将其旋转后产生的电阻变化信号发送回控制电路,从而监控当前轴角度

控制电路:用来驱动电机和接收PWM控制信号和电位器反馈信号

减速齿轮组:用来放大马达的扭矩。齿轮有塑料齿轮、混合材料齿轮和金属齿轮

75.png

工作原理

舵机内部有一个基准电路,产生周期为20ms、宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出,经过电路板IC方向判断,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回信号,判断是否已经到位,舵机转动的角度是通过调节PWM「脉冲宽度调制」信号的占空比来实现的,标准的PWM信号的周期固定为20ms,理论上脉宽分布应该在1ms到2ms之间,实际上可由0.5ms到2.5ms之间,脉宽与转角0°—180°相对应,不同厂家不同型号的舵机也会有所差异。

76.png

180度的舵机PWM控制

77.png

(舵机输出转角与输入信号脉冲宽度的关系)

78.png

查看动图形象了解180度舵机的pwm波形和输出角度的对应关系

提取码:w7pr

关于SG90 9克舵机工作电流可以分为以下几种状态

(1) 舵机上电,无pwm控制信号
此时舵机不工作,静态电流均为4mA左右,舵机不会自动复位,完全不动作。
(2) 舵机上电,有pwm控制信号,舵机工作在输出到指定角度的过程中
此时舵机工作,需要消耗大约300mA的工作电流。
(3)舵机上电,有pwm控制信号,舵机已工作至指定角度
此时,舵机主要工作是维持指定角度,如果无外力抗拒,则消耗电流较小,SG90大约需要5mA,MG90S大约需要8mA左右。当然如果有外力抗拒的话则输出电流增大以抗拒外力。

位置等级

舵机的位置等级通常为1024

控制精度

控制精度=舵机转动角度/位置等级
360°/1024≈0.35°

脉宽控制精度

脉宽控制精度=基准周期信号/位置等级
20000us/1024≈20us

SG90 9克舵机与180度舵机区别

SG90 9克舵机可以360度旋转,因此与180度舵机有相当大的区别,首先360度舵机不能够控制旋转角度,一般的舵机是给一个特定的PWM,舵机会转到相应的角度,而360度舵机是只能够控制方向和旋转转速,所以360度舵机给定一个PWM,会以特定的速度和方向转动。

PWM信号与360舵机转速的关系:

0.5ms---------------- 正向最大转速
1.5ms---------------- 速度为0
2.5ms---------------- 反向最大转速

SG90 9克舵机基础小案例1

结合Arduino、6V外部电池电源、一个SG90 9克舵机,实现舵机转动;通过程序,SG90 9克舵机将角度旋转到30度,停顿1000毫秒后旋转到90度,再停顿1000毫秒后旋转到30度,依次循环执行。

接线方式

SG90 9克舵机                       Arduino
      黄色线          <------>          9
      棕色线          <------>       GND
      红色线          <------>        5V

6V外部电池电源                    Arduino
         正极            <------>      VIN
         负极            <------>     GND

Mixly 图形化编程程序

79.png

程序实现代码

  1. #include <Servo.h>

  2. Servo servo_9;

  3. void setup(){

  4.   servo_9.attach(9);

  5. }

  6. void loop(){

  7.   servo_9.write(30);

  8.   delay(1000);

  9.   servo_9.write(90);

  10.   delay(1000);
复制代码

SG90 9克舵机基础小案例2

由于Arduino的驱动能力有限,当需要控制多个舵机时,需要外接电源以及使用专用的舵机驱动板,结合Arduino、16路PWM舵机驱动板、两个SG90 9克舵机,一个6v外部供电电源,使两个伺服舵机按照一定的角度来回转动。

80.png

(16路PWM舵机驱动板)

16路PWM舵机驱动板功能介绍

电压:DC5-10V供电
通信接口:IIC 16路舵机控制
产品尺寸:60mm*24mm
重量:11g
PCA9685芯片被包裹在小板的中央
电源输入端子
在4组3针连接器中方便你一次插入16个伺服舵机
(伺服舵机的插头稍宽于0.1,所以你可以放4对0.1的接头)
绿色电源指示灯
接线板上输入的方向极性保护
级联设计
V+线上放置一个大电容(在某些场合你会需要)
外围输入大电压取决于这个10V1000uf的电容
所有PWM输出线上都放一个220欧姆系列电阻器来保护它们,并能轻易的驱动LED

接线方式

16路PWM舵机驱动板                  Arduino
             VCC               <------>      5V         
             GND              <------>    GND
              SCL               <------>      A5
              SDA              <------>      A4
个SG90 9克舵机分别接在16路PWM舵机驱动板的9和10,6v外部供电电源的正极接在16路PWM舵机驱动板V+和Arduino的VIN负极接在16路PWM舵机驱动板GND和Arduino的GND

16路PWM舵机驱动板和SG90 9克舵机接线方式

16路PWM舵机驱动板                  SG909克舵机
               PWM            <------>     黄色线
                 V+              <------>     红色线
                GND            <------>     棕色线

(1)将PCA9685 16路舵机模块库导入到Mixly中

提取码:gzas

(2)Mixly 图形化编程程序

81.png
(图形化程序)

程序实现代码

  1. #include <Wire.h>

  2. #include <Adafruit_PWMServoDriver.h>

  3. Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

  4. #define SERVOMIN  150

  5. #define SERVOMAX  600

  6. void setup(){

  7.    pwm.begin();

  8. }

  9. void loop(){

  10.   pwm.setPWMFreq(50);

  11.   pwm.setPWM(9,0,170);

  12.   pwm.setPWM(10,0,170);

  13.   delay(1000);

  14.   pwm.setPWM(9,0,40);

  15.   pwm.setPWM(10,0,40);

  16.   delay(1000);

  17.   pwm.setPWM(9,0,100);

  18.   pwm.setPWM(10,0,100);

  19.   delay(1000);

  20. }
复制代码
分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册