Arduino UNO驱动数字舵机

2021/5/18 18:28:57

本文主要是介绍Arduino UNO驱动数字舵机,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Arduino UNO驱动数字舵机

    • 舵机
    • 数字舵机工作原理
    • 数字舵机与模拟舵机区别
    • EMAX ES08MD II 金属数字舵机
    • Arduino UNO与数字舵机接线
    • 测试代码
    • 总结

舵机

舵机是一种特殊的电动机,或者更具体来说它是一个闭环控制系统(伺服系统)。舵机包括一个小型直流电机,加上传感器、控制芯片、减速齿轮组,装进一体化外壳,能够通过输入信号(一般是PWM信号,也有的是数字信号)控制旋转角度。标准的舵机有3根导线:电源线,地线,控制线。

数字舵机工作原理

数字舵机内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号。当外部控制信号进入控制芯片,获得直流偏置电压。将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0, 电机停止转动。

数字舵机与模拟舵机区别

数字舵机和模拟舵机在基本的机械结构方面是完全一样的,主要由马达、减速齿轮、控制电路等组成。

最大区别则体现在控制电路上,数字舵机的控制电路比模拟舵机的多了微处理器和晶振。数字舵机一般均采用PID优化算法,所以,线性要好过模拟舵机。模拟舵机由于控制芯片是模拟电路,所以即便是相同型号的舵机会存在小小的性能差异,而数码舵机在一致性方面就非常好。

模拟舵机需要给它不停的发送PWM信号,才能让它保持在规定的位置或者让它按照某个速度转动,数字舵机则只需要发送一次PWM信号就能保持在规定的某个位置。

数字舵机以高得多的频率向马达发送控制脉冲信号。就是说,相对于传统的50脉冲/秒,现在是300脉冲/秒。每个动力脉冲的宽度被减小了,但马达在同一时间里收到更多的激励信号,并转动得更快。这也意味着不仅仅舵机马达以更高的频率响应控制脉冲信号,而且“无反应区”变小;反应变得更快;加速和减速时也更迅速、更柔和;数字舵机提供更高的精度和更好的固定力量。
不管是模拟还是数码舵机,在负载转矩不变时,电机转速取决于控制脉冲信号占空比大小而与频率无关。数码舵机可接收更高频率的 PWM 外部控制信号,可在更短的周期时间后获得位置信息,对舵机摇臂位置做最新调整。所以说数字舵机的反应速度比模拟舵机快,而不是驱动电机转速比模拟舵机快。

对于高灵敏度的控制,建议选择数字舵机,如直升机的控制,高速固定翼飞机,高速滑翔机,比赛用车膜型,云台的控制等。对于不是特别需要灵敏度的场合,如低速固定翼(二战飞机,练习机,低速滑翔机等),船模,娱乐用车模等。可以考虑模拟舵机。

数字舵机以更高频率去修正马达,这一定会增加总体的动力消耗。马达总在转来转去做修正,这一定会增加马达等转动部位的消耗,相对较短的寿命。

EMAX ES08MD II 金属数字舵机

在这里插入图片描述

在这里插入图片描述

Arduino UNO与数字舵机接线

在这里插入图片描述

在这里插入图片描述

测试代码

/*
 Controlling a servo position using a potentiometer (variable resistor)
 modified on 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Knob
*/
#include <Servo.h>
Servo myservo;  // create servo object to control a servo
int potpin = A0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin
void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}
void loop() {
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 180);     // scale it for use with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  delay(15);                           // waits for the servo to get there
}

Arduino的ADC采集电位器的电压值(0-5V)转换成对应舵机旋转角度(0-180度),手动调节电位器时,舵机跟着旋转一定的角度,电位器停止调节时,舵机停留在固定的角度停止转动。

总结

大致了解下模拟与数字舵机的区别和原理,根据自己的应用情况选取合适的舵机,从模拟或数字,塑料或金属、转速、转矩、最大旋转角度等考虑。由于电机类产品驱动电流较大,舵机最好用舵机驱动板连接。重点专注于使舵机旋转的输入信号的控制。



这篇关于Arduino UNO驱动数字舵机的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程