其他分享
首页 > 其他分享> > 使用Arduino UNO以及好盈电调控制无刷电机

使用Arduino UNO以及好盈电调控制无刷电机

作者:互联网

文章目录


前言

学习如何使用Arduino UNO控制低成本航模无刷电调。

1. 实验设备概览

实验设备包含:

接线方式如下:实验设备鸟瞰图
注意事项:

2. 好盈电调控制

好盈电调所期望的控制信号通常是频率为50Hz的PWM信号,通过占空比(或者说高电平时间)来控制“油门”的大小,1ms高电平为电调识别的最低“油门”(0%),2ms高电平则为最高可识别的“油门”(100%)。

另外,在第一次开机时需要对电调进行校准,具体校准流程如下:

听到哔哔两声 听到哔一声 电调上电 油门设置到100%等待2s 油门设置到0%等待1s 油门全行程校准完成

注意事项:

更多关于好盈电调的详细资料可查看好盈天行者说明书或者好盈电调说明书

3. Arduino UNO

鉴于上文总提到的好盈电调的控制信号为50Hz的PWM信号,并且其每个周期内高电平时间的范围在1ms~2ms。这恰巧和伺服舵机的控制信号是同样的标准,而Arduino中有现成的Servo库可以很好的生成控制舵机的PWM信号。因此,最简单的办法就是利用Servo库来控制这个电调。
ServoPWM
另外,我们还希望在电脑上通过串口来控制电机的“油门”,所以还需要启动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写一些学习心得。
  1. Arduino的GPIO中带“~”的引脚为可配置PWM引脚,比如Arduino UNO中的DIGITAL 3,5,6,9,10,11。 ↩︎

标签:控制,油门,Arduino,无刷电机,Serial,好盈,电调
来源: https://blog.csdn.net/weixin_45206768/article/details/114234545