标签 arduino 下的文章

20210502153352830.png

接线

红-------------------------VCC
棕色----------------------GND
橙色----------------------信号线

原理

舵机的控制信号为周期是20ms (10bit 50hz) 的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0—180度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。舵机内部有一个基准电路,产生周期20ms,宽度1.5ms的基准信号,有一个比较器,将外加信号与基准信号相比较,判断出方向和大小,从而产生电机的转动信号。

控制电路板接受来自信号线相应的PWM控制信号,进而控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机的转动方向和速度,从而达到目标停止。

舵机的控制需要MCU产生一个周期为20ms的脉冲信号,以0.5ms到2.5ms的高电平来控制舵机转动的角度
20210502154617563.png

代码

在Arduino中,可以使用servo库实现控制舵机控制。您可以在Arduino的lib管理器中搜索servo安装。

#include <Servo.h>
 ​
 Servo myservo;  // 创建舵机对象来控制舵机
 // 大多数板子上可以创建12个舵机对象
 ​
 int pos = 0;    // pos变量用于存储舵机位置
 int speed = 15; // speed变量用于控制舵机转动的速度,单位ms
 int pin = 9;    // pin变量用于选择控制舵机的引脚 只能使用pwm引脚 
 // Arduino UNO中,pwm引脚是3、5、6、9、10和11
 ​
 void setup() 
 {
   myservo.attach(pin,500,2500);  // 将舵机连接到9号引脚的舵机对象,最小脉宽500us,最大脉宽2500us,(50hz)
 }
 ​
 void loop() {
   for (pos = 0; pos <= 180; pos += 1) // 从0度逐渐转动到180度 每次正方向转动1度
   { 
     myservo.write(pos);              // 告诉舵机转到变量'pos'所表示的位置
     delay(speed);                       // 等待15毫秒,让舵机到达目标位置
   }
   for (pos = 180; pos >= 0; pos -= 1)// 从0度逐渐转动到180度 每次负方向转动1度
   {
     myservo.write(pos);              
     delay(speed);                     
   }
 }