在嵌入式开发中,有各式各样的开发板,例如STM32、树莓派pico、arduino uno,arduino nano、ESP32、ESP8266等等。板子的选择因项目而异,在最近的项目研发中,我使用的是ESP8266的开发板,本文主要讲述如何在Arduino环境下ESP8266 使用servo库驱动新西达电调。
实现原理:
市面上的大多数电调(电子调速器的简称)是根据pwm (脉冲宽度调制)信号进行调速的,我们通过Servo库可以让ESP8266产生pwm信号,从而控制电调。
一、arduino IDE 以及ESP8266 开发环境搭建
下载arduino IDE , 官方网址:Arduino - Home
安装完成之后打开“首选项”-->“其他开发板管理地址”,写入以下网址
http://arduino.esp8266.com/stable/package_esp8266com_index.json
如图所示:
设置完成后,重启IDE 安装开发板
因为本人已经安装了这个开发板,所以这里会显示"移除",如果没有安装,则会显示"安装",点击后等待安装完成即可。
Servo库属于arduino内置的库,只需要在文件中添加以下代码即可使用。
#include <Servo.h>
二、硬件连接
如下图所示
实物图,由于之前有开发板损坏,本人自行更改了开发板的连接,但引脚与上图一致。
三、程序代码
#include <Servo.h>
const int pin = 14; //设置信号输出引脚为 GPIO 14 对应开发板D5
Servo a; //生成电机对象
int g = 1000; //油门
void unlock_motor() {
//解锁电机
a.writeMicroseconds(2000);
delay(3000);
a.writeMicroseconds(1000);
}
void setup() {
pinMode(pin, OUTPUT); //初始化GPIO引脚为输出引脚
a.attach(pin); //电机对象连接到输出引脚
unlock_motor();
Serial.begin(115200);
}
void loop() {
if (Serial.available()) { // 从串口输入油门
g = Serial.parseInt();
}
a.writeMicroseconds(g);
Serial.println(g);
}
代码中出现的unlock_motor函数我将其命名为电机解锁函数,此函数首先模拟将油门打到最大,三秒之后将油门打到最小,进行油门行程校准。这样做的目的是防止出现给一点油门电机就以最快速度运行(这一点穿越机玩家以及航模玩家应该都清楚)。
进行油门行程校准之后。我们可以通过键盘调整油门变量g,输入数据后,writemicroseconds函数可以根据我们写入的油门大小更改PWM波形控制电调,进而控制电机速度。
在此之前我们做过实验研究过此函数,大量实验数据表明,电机速度与油门变量g是线性关系,因此我们可以通过油门变量g来控制电机转速,达到了ESP8266使用Servo库驱动新西达(xxd)电调的效果
四、调试
上电测试:先打开电调,后打开ESP8266
效果如下: