使用 Arduino 进行伺服电机控制 - 伺服电机开发工程师;伺服电机是直流电机、位置控制系统、齿轮的组合。直流电机轴的位置由伺服系统中的控制电子设备根据 SIGNAL 引脚的 PWM 信号的占空比进行调整。
简单地说,控制电子设备通过控制直流电机来调整轴位置。有关轴位置的数据通过信号引脚发送。到控制器的位置数据应通过伺服电机的信号引脚以 PWM 信号的形式发送。
PWM(脉冲宽度调制)信号的频率可能因伺服电机的类型而异。这里重要的是 PWM 信号的占空比。根据此占空比,控制电子设备调整轴。
如下图所示,要将轴移动到 9 点钟位置,TURN ON RATION 必须为 1/18。 18ms 信号中有 1ms 的 ON 时间和 17ms 的 OFF 时间。
对于要移动到 12 点的轴,信号的 ON 时间必须为 1.5ms,OFF 时间应为 16.5ms。该比率由伺服系统中的控制系统解码,并根据该比率调整位置。这里的 PWM 是使用 ARDUINO UNO 生成的。
电路元件
硬件:ARDUINO UNO、电源(5v)、100uF电容、按键(两个)、1KΩ电阻(两个)、伺服电机(需测试) 。
软件:arduino IDE(Arduino nightly)。
Arduino伺服电机电路图及说明
使用arduino控制伺服电机电路图
一般情况下,我们需要到控制器的寄存器来调整频率和获取所需的占空比,以实现舵机的精确位置控制,在ARDUINO中我们不需要做这些事情。
在 ARDUINO 中,我们有预定义的库,一旦调用或包含头文件,它将相应地设置频率和占空比。在 ARDUINO 中,我们只需指定所需的伺服位置,UNO 就会自动调整 PWM。
为了获得舵机的准确位置,我们需要做的事情是:
|
首先我们需要设置 PWM 信号的频率,为此我们应该调用“#include
现在我们需要为舵机定义一个名称“Servo sg90sevo”,这里“sg90servo”是选择的名称,所以在编写potion时我们将使用这个名称,当我们有很多舵机要控制时,这个功能会派上用场,通过这个我们可以控制多达八个舵机。
现在我们告诉UNO舵机的信号引脚连接在哪里或者需要在哪里产生PWM信号。为此,我们有“Sg90.attach(3);”,在这里我们告诉 UNO 我们将伺服器的信号引脚连接到 PIN3。
剩下的就是设置位置了,我们要通过“Sg90.write(30);”来设置舵机的位置,通过这个命令舵机手移动30度,就这样了。之后每当我们需要改变舵机的位置时,我们都需要调用命令“Sg90.write(needed_position_angle);”。在这个电路中,我们将有两个按钮,一个按钮增加舵机的位置,另一个按钮用于减少舵机的位置。
Arduino 伺服电机控制教程 通过下面给出的 C 代码逐步进行说明。
volatile int i=0;//initializing a integer for incrementing and decrementing duty ratio.
#include <Servo.h>// header file for controlling servo
Servo servo;//defining the name usage as servo itself
void setup()
{
pinMode(3, OUTPUT); // sets the pin3 as output
pinMode(0, INPUT);// sets the pin0 as output
pinMode(1, INPUT);// sets the pin1 as output
}
void loop()
{
servo.write(i);//set servo potion ‘i’ degrees
if (digitalRead(0)==LOW)
{
if (i<180)
{
i++;//if pin0 is pressed and degrees is less than 180
delay(30);
}
}
if (digitalRead(1)==LOW)
{
if (i>0)
{
i--;// if pin1 is pressed and degrees is greater than 0
delay(30);
}
}
}