大多数情况下,直流电机控制的控制方法都是非常简单的(只需要连接电源和地)。伺服电机有一些不同,它使用3根线连接(电源、地和信号)将电机移动到某个旋转位置。该位置由信号线上发送的信号决定。一旦电机到达信号指定的位置,它将保持其位置,并抵抗试图将其从该位置移动的任何外力。该电阻称为伺服的转矩额定值,可在数据表中找到。
脉冲宽度调制PWM:
参考:PWM占空比控制电机转速
当我们使用Arduino编程时,这种伺服电机背后的理论并不太重要。我们可以导入一个库来满足大多数的PWM应用场景。该库称为Servo库,您可以在Arduino参考页查看的该库的所有不同函数,或者在太极创客上有相应的中文版关于库的介绍。
使用伺服库的基本操作如下:
(参考:【【太极创客】零基础入门学用Arduino 第二部分 meArm机械臂 合辑-哔哩哔哩】)
- 将伺服电机命名servo,可以使用Servo [servo name];函数实现。
- 将伺服关联到一个引脚,这个引脚将是我们伺服的信号引脚,并使用 [servo name].attach([PinNumber]);
- 为伺服的位置创建一个变量(或者只是使用一个整数值)
- 现在我们可以使用[servo name].write([position integer])写入伺服的位置。
以Arduino Uno和一个小型爱好伺服为例,您的设置应该看起来像这样,请注意,我们使用的PWM引脚10,但可以使用任何PWM引脚!
#include //import the servo library
Servo coreservo; //Name the Servo
void setup() {
coreservo.attach(10);
/*Attach the named servo object to Digital IO 13, use following syntax:
servoname.attach(Pin#, minimum Pulse width (ms), maximum pulse width (ms));
if you want to define the pulse widths for your motor*/
}
void loop() {
coreservo.write(0);
delay(200);
coreservo.write(90);
delay(200);
coreservo.write(180);
delay(200);
/* If you wanted to read the angle of your servo at any given time, use servoname.read();
* If you wanted to write a pulse of a certain width use servoname.writemicroseconds(value in microseconds);
*/
}