Arduino 控制舵机教程

We-Fly教程大约 3 分钟

所需零件

阅读本篇文章需要的前置知识

  • 有一些C/C++的基础

阅读本文需要的零件

  • Arduino 开发板一块
  • 杜邦线若干
  • SG90舵机

Arduino 介绍

维基百科介绍open in new window

官方网站open in new window

Arduino是一个开源硬件平台,包括了各种各样的Arduino开发板和配套的软件开发平台Arduino IDE

简单易学是它的特点

硬件介绍

Arduino的硬件平台是各种各样的开发板,官方有很多开发板,大都采用Atmel芯片,比如Arduino NanoArduino Uno

官网硬件列表open in new window

当然很多其他芯片也支持使用Arduino Framework开发,比如在电子爱好者中常见的ESP32系列单片机

软件介绍

Arduino IDE 官网下载open in new window

Arduino 使用Arduino语言开发,是一种类C/C++的编程语言,特点是易于上手和丰富的库可以调用

很多情况下,你都可以使用现成的库来直接调用,可以帮你节省很多时间

你只需要学会使用对应的库函数,直接调用就可以驱动起电机或者其他外部设备,从而快速实现你的想法

如果你会用C语言,那么通过简单的学习,你就可以快速的上手Arudino。

Arduino IDE 安装教程

详见 Arduino IDE 安装

舵机简单介绍

接下来我们来介绍舵机的相关知识!

下面是SG90舵机的图片:

舵机

舵机并非是简单的电机,它是由直流电机减速齿轮控制电路板电位器组成的自控系统

舵机的工作原理

舵机工作原理是发出的脉冲讯号传给舵机,经由控制电路板驱动电机开始转动,通过减速齿轮组将动力传至摆臂部分,同时由电位器发送角度信号,判断摆臂是否达到预设角度。如果没有达到特定角度,电位器会通过电压变化回传至控制电路,通过传回的偏差控制电路会调整电机输出,使其与目标角度匹配,从而形成一个闭环控制

SG90中电位器其实是一个角度电阻,通过角度变化来改变电阻阻值。

以上面的SG90舵机举例,其三根引线棕色红色黄色分别对应负极正极信号。其连接到开发板上十分的简单,对应引脚相连即可。不同厂家生产的舵机接线颜色可能有差别,但一般情况下是如上文所说

舵机与直流电机的区别

直流电机接线只有两根,舵机就有三根接线。使用上因为舵机有根信号线,所以舵机可以旋转特定任意角度。而直流电机只能正转或反转,并且无法反馈角度信息(除了带有编码器的直流电机)。

PWM

什么是PWM:

是将模拟电平信号转化为数字编码信号的方法。

因此PWM在控制领域应用非常广泛,可以算是数字电路中的“独臂”神通——只需一根线,就在很多关键的应用中起到栋梁的作用。比如当今几乎所有的LED照明、LED背光等都是通过PWM控制来实现;在多种领域被广泛使用的伺服电机,则可以通过PWM实现其旋转定位以及速度的控制。包括我们这边讲的舵机也使用了PWM信号控制角度

占空比:PWM信号保持高电平时间占脉冲信号时间的百分比。
PWM的周期:信号从高电平到低电平(重复出现的波形的时间间隔)。
脉宽时间:一个周期内高电平的时间。
峰峰值:波形的高度称之为幅度或者峰峰值

所谓的PWM信号,就是调整波形的占空比,从而得到一系列矩形脉冲

舵机的信号线中传输的是PWM信号,这种信号的周期一般为20ms

角度高电平占空比
00.5ms2.5% (250)
451ms5% (500)
901.5ms7.5% (750)
1352ms10% (1000)
1802.5ms12.5% (1250)

如何驱动舵机

这是一个Arduino的简单例程:

#include<Servo.h> // 引用舵机控制库,需要先安装该库
Servo myservo; // 实例化一个舵机对象myservo
void setup() // setup函数,单片机上电后仅运行一次
{
  myservo.attach(8); // 接D8引脚
}
void loop() // setup函数运行一次过后无限循环执行loop函数,直到下一次上电
{
  myservo.write(0); // 0°
  delay (1000); // 延时函数,单位毫秒
  myservo.write(180); // 180°
  delay(1000); // 延时函数,单位毫秒
}