使用Arduino UNO以及好盈电调控制无刷电机
作者:互联网
文章目录
前言
学习如何使用Arduino UNO控制低成本航模无刷电调。1. 实验设备概览
实验设备包含:
- 3s锂电池包,配XT60母头 (125元)
- 好盈天行者电调(40A),配XT60公头,3.5mm香蕉头母头 (50元)
- SUNNYSKY无刷直流电机,KV980 ,3.5mm香蕉头公头(78元)
- Arduino UNO (128元)
接线方式如下:
注意事项:
- 安全起见,在调试的时候将电池和电机断开链接,确定接线和程序正确时再接通电源;电机在任何时候不要安装航模的螺旋桨!
- 电调和电机之间的三相线可以以任意顺序链接
- 电调的3根信号线颜色分别为:
- 红色(+),接Arduino +5V
- 黑色(-),接Arduino GND
- 白色(PWM控制信号),接Arduino的任意~PWM引脚1
2. 好盈电调控制
好盈电调所期望的控制信号通常是频率为50Hz的PWM信号,通过占空比(或者说高电平时间)来控制“油门”的大小,1ms
高电平为电调识别的最低“油门”(0%),2ms
高电平则为最高可识别的“油门”(100%)。
另外,在第一次开机时需要对电调进行校准,具体校准流程如下:
注意事项:
- 不对油门校准通常也能使用,但是通常无法使用
1ms
到2ms
的全部行程。 - 正常电调上电提示音是
do re mi, 哔哔哔 哔~
,100%油门的设置要在哔~
之前操作,否则电调会直接进入正常上电状态,而不会进入校准模式。 - 校准过程是基于上述流程的手动操作,即通过Arduino串口监视器控制PWM信号来控制“油门”,因此插上电调电源前一定要事先准备好Arduino程序,在插上电调电源的同时将“油门”设置为最大值。
更多关于好盈电调的详细资料可查看好盈天行者说明书或者好盈电调说明书。
3. Arduino UNO
鉴于上文总提到的好盈电调的控制信号为50Hz的PWM信号,并且其每个周期内高电平时间的范围在1ms
~2ms
。这恰巧和伺服舵机的控制信号是同样的标准,而Arduino中有现成的Servo库可以很好的生成控制舵机的PWM信号。因此,最简单的办法就是利用Servo库来控制这个电调。
另外,我们还希望在电脑上通过串口来控制电机的“油门”,所以还需要启动Serial服务,在loop中监听Serial输入,并将其转换成PWM信号发给电调。
Arduino代码如下:
#include <Servo.h>
Servo myServo;
String comStr = "";
int comInt=0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); // start serial port
while(Serial.read()>=0){} // clear serial port's buffer
myServo.attach(9); // attach myServo to GPIO_09
myServo.writeMicroseconds(1000); // set initial PWM to minimal
}
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available() > 0){
// listen the Serial port, run the code when something catched..
delay(10);
comStr = Serial.readString(); // read out the string
comInt = comStr.toInt(); // convert the string to integer
comInt = constrain(comInt, 1000, 2000); // limit the integer between to 1000 and 2000
Serial.println(comInt); // show the integer number on Serial Monitor
myServo.writeMicroseconds(comInt); // write the integer number to Servo in unit of micro-second
}
}
代码本身十分简单易懂,上传到Arduino,接通电调电源,通过串口校准电机油门后就可以在串口监视器中输入1000~2000中的任意数字来控制电机油门,可以实现开环的电机转速控制。
可以注意到最低油门开度大概在1050才能让电机转起来,而且低速的转速表现并不稳定,而且振动和噪声都比较明显,用手轻放在转子轴上能清晰的感受到扭矩的波动。这主要是由于这套系统本身以及它的控制方式决定的。
虽然好盈电调在这套系统里输入“黑盒子”,但不难猜测它的控制方法是Six-Step-Commutation
,并通过非导通相的反向电动势来估计转子的位置进行换向控制。
总结
低成本电调控制无刷电机实现起来十分简单,在一些无人机或是模型赛车中可以被应用。但如果对电机的控制姿态要求较高,比如精准的伺服系统中的位置控制或者是机器人上的力反馈控制,则需要更先进的控制系统来解决,其中也不乏一些开源的解决方案,比如小功率应用的simple-foc、大功率的odrive或者VESC。之后我也会专门针对simple-foc和odrive写一些学习心得。Arduino的GPIO中带“~”的引脚为可配置PWM引脚,比如Arduino UNO中的DIGITAL 3,5,6,9,10,11。 ↩︎
标签:控制,油门,Arduino,无刷电机,Serial,好盈,电调 来源: https://blog.csdn.net/weixin_45206768/article/details/114234545