本帖最后由 lou 于 2020-5-13 11:16 编辑
基于Arduino使用SG90 9克塑料舵机
产品介绍
舵机是一种位置「角度」伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统,目前在高档遥控玩具、航模、机器人中已经得到普遍使用,舵机是一种俗称,其实是一种伺服马达,SG90舵机是一个模拟舵机,而非数字舵机,数字舵机(Digital Servo)和模拟舵机(Analog Servo)在基本的机械结构方面是完全一样的,主要由马达、减速齿轮、控制电路等组成,这两者的区别是这样,数字舵机只要给一个PWM信号即可,这个信号是目的地的位置,舵机会自动旋转到这个位置,而模拟舵机需要一直给予目的角度的PWM信号,由于舵机需要的PWM信号实际就是一个方波,所以模拟舵机就是需要不断的重复发一样的方波,直到舵机旋转到指定的位置,并且如果需要锁定在这个位置,那么还需继续给予这个方波。
(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)
内部结构:主要是由马达、减速齿轮组、电位器和控制电路构成。
电位器:用于位置反馈。它会将其旋转后产生的电阻变化信号发送回控制电路,从而监控当前轴角度
控制电路:用来驱动电机和接收PWM控制信号和电位器反馈信号
减速齿轮组:用来放大马达的扭矩。齿轮有塑料齿轮、混合材料齿轮和金属齿轮
工作原理
舵机内部有一个基准电路,产生周期为20ms、宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出,经过电路板IC方向判断,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回信号,判断是否已经到位,舵机转动的角度是通过调节PWM「脉冲宽度调制」信号的占空比来实现的,标准的PWM信号的周期固定为20ms,理论上脉宽分布应该在1ms到2ms之间,实际上可由0.5ms到2.5ms之间,脉宽与转角0°—180°相对应,不同厂家不同型号的舵机也会有所差异。
查看动图形象了解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
- #include <Servo.h>
- Servo servo_9;
- void setup(){
- servo_9.attach(9);
- }
- void loop(){
- servo_9.write(30);
- delay(1000);
- servo_9.write(90);
- delay(1000);
复制代码
SG90 9克舵机基础小案例2
由于Arduino的驱动能力有限,当需要控制多个舵机时,需要外接电源以及使用专用的舵机驱动板,结合Arduino、16路PWM舵机驱动板、两个SG90 9克舵机,一个6v外部供电电源,使两个伺服舵机按照一定的角度来回转动。
(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 图形化编程程序
- #include <Wire.h>
- #include <Adafruit_PWMServoDriver.h>
- Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
- #define SERVOMIN 150
- #define SERVOMAX 600
- void setup(){
- pwm.begin();
- }
- void loop(){
- pwm.setPWMFreq(50);
- pwm.setPWM(9,0,170);
- pwm.setPWM(10,0,170);
- delay(1000);
- pwm.setPWM(9,0,40);
- pwm.setPWM(10,0,40);
- delay(1000);
- pwm.setPWM(9,0,100);
- pwm.setPWM(10,0,100);
- delay(1000);
- }
复制代码 |