ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-02-28 22:57:27  阅读:796  来源: 互联网

标签:控制 油门 Arduino 无刷电机 Serial 好盈 电调


文章目录


前言

学习如何使用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%)。

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

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

注意事项:

  • 不对油门校准通常也能使用,但是通常无法使用1ms2ms的全部行程。
  • 正常电调上电提示音是do re mi, 哔哔哔 哔~,100%油门的设置要在哔~之前操作,否则电调会直接进入正常上电状态,而不会进入校准模式。
  • 校准过程是基于上述流程的手动操作,即通过Arduino串口监视器控制PWM信号来控制“油门”,因此插上电调电源前一定要事先准备好Arduino程序,在插上电调电源的同时将“油门”设置为最大值。

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

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有