Arduino 控制舵机教程
所需零件
阅读本篇文章需要的前置知识
- 有一些C/C++的基础
阅读本文需要的零件
- Arduino 开发板一块
- 杜邦线若干
- SG90舵机
Arduino 介绍
Arduino
是一个开源硬件平台,包括了各种各样的Arduino开发板和配套的软件开发平台Arduino IDE
简单易学是它的特点
硬件介绍
Arduino的硬件平台是各种各样的开发板,官方有很多开发板,大都采用Atmel
芯片,比如Arduino Nano
、Arduino Uno
等
当然很多其他芯片也支持使用Arduino Framework
开发,比如在电子爱好者中常见的ESP32
系列单片机
软件介绍
Arduino 使用Arduino语言开发,是一种类C/C++
的编程语言,特点是易于上手和丰富的库可以调用
很多情况下,你都可以使用现成的库来直接调用,可以帮你节省很多时间
你只需要学会使用对应的库函数,直接调用就可以驱动起电机或者其他外部设备,从而快速实现你的想法
如果你会用C语言,那么通过简单的学习,你就可以快速的上手Arudino。
Arduino IDE 安装教程
舵机简单介绍
接下来我们来介绍舵机的相关知识!
下面是SG90舵机的图片:
舵机
舵机并非是简单的电机,它是由直流电机、减速齿轮、控制电路板、电位器组成的自控系统。
舵机的工作原理
舵机工作原理是发出的脉冲讯号传给舵机,经由控制电路板驱动电机开始转动,通过减速齿轮组将动力传至摆臂部分,同时由电位器发送角度信号,判断摆臂是否达到预设角度。如果没有达到特定角度,电位器会通过电压变化回传至控制电路,通过传回的偏差控制电路会调整电机输出,使其与目标角度匹配,从而形成一个闭环控制
。
SG90中电位器其实是一个角度电阻,通过角度变化来改变电阻阻值。
以上面的SG90舵机举例,其三根引线:棕色、红色、黄色分别对应负极、正极、信号。其连接到开发板上十分的简单,对应引脚相连即可。不同厂家生产的舵机接线颜色可能有差别,但一般情况下是如上文所说
舵机与直流电机的区别
直流电机接线只有两根,舵机就有三根接线。使用上因为舵机有根信号线,所以舵机可以旋转特定任意角度。而直流电机只能正转或反转,并且无法反馈角度信息(除了带有编码器的直流电机)。
PWM
什么是PWM:
是将模拟电平信号转化为数字编码信号的方法。
因此PWM在控制领域应用非常广泛,可以算是数字电路中的“独臂”神通——只需一根线,就在很多关键的应用中起到栋梁的作用。比如当今几乎所有的LED照明、LED背光等都是通过PWM控制来实现;在多种领域被广泛使用的伺服电机,则可以通过PWM实现其旋转定位以及速度的控制。包括我们这边讲的舵机也使用了PWM信号控制角度
占空比:PWM信号保持高电平时间占脉冲信号时间的百分比。
PWM的周期:信号从高电平到低电平(重复出现的波形的时间间隔)。
脉宽时间:一个周期内高电平的时间。
峰峰值:波形的高度称之为幅度或者峰峰值
所谓的PWM信号,就是调整波形的占空比,从而得到一系列矩形脉冲
舵机的信号线中传输的是PWM信号,这种信号的周期一般为20ms。
角度 | 高电平 | 占空比 |
---|---|---|
0 | 0.5ms | 2.5% (250) |
45 | 1ms | 5% (500) |
90 | 1.5ms | 7.5% (750) |
135 | 2ms | 10% (1000) |
180 | 2.5ms | 12.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); // 延时函数,单位毫秒
}