电动滑板攻略 – 无刷电机控制原理

机械部分就绪之后,就是各种软件和电子的工作了,首先我们看看怎么控制一个无刷电机。我们用的电机是外转子无刷电机,型号是5065。

外转子无刷电机

外转子无刷电机

这种电机和常见的直流电机不同,它的线圈是不动的,周围是一圈磁瓦。工作的时候,三条电线里面的电流方向会不断的切换,这个切换是通过电子方式实现的,所以不需要传统电机的电刷。
跟它必须同时提到的就是电调,全称是电子调速器。它的作用就是在这3条电线里,不断的切换电流状态,从而控制电机转速。
电调

电调

至于调试方式,传动的直流电机,可以通过电压调节,转速随着电压增大而增大。而无刷电机是通过可编程控制器来调速,一般是用一种叫做PWM的方式。

PWM是“怕玩命”的缩写,英文写法是“Pulse-width modulation”,也有些外行人士把它翻译成“脉冲宽度调制”。对于没有听说过PWM的同学,请先参考一下我的另一篇博客Arduino的模拟输入和输出

简单的说,对于传统的控制信号,假设最高速的时候控制电压是1,那么可以输出0.5来表示一般的速度。但是对于单片机来说,输出0和1是方便的,输出0.5会比较麻烦。这种情况了,可以快速的在0和1之间切换,达到的效果就和0.5很相似了。

pwm1.gif (601×197)

电调的控制,就是使用了PWM的方式。不过它不是通过占空的比例来控制转速,而是用1的脉冲宽度来判断:
输出高电平2.1ms左右,表示最大值;

输出高电平0.9ms左右,表示最小值。

下面这段代码,用蓝牙发送0~100的数值给单片机,就可以模拟航模摇杆从油门最小推到最大的情况:

#include <Servo.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(11, 5);

int motorPin = 12;    // 用于控制电机的管脚
Servo powerServo;

void setup()
{
  mySerial.begin(9600);
  powerServo.attach(motorPin);
}

void loop()
{
  double T = 2500; // 脉冲周期2.5ms,相当于400Hz
  long t0 = micros();  // 记录当前时间

  int readPower = 50; //默认是中点位置50
  while(mySerial.available()) {
    // 从蓝牙输入一个0~100的值
    readPower = mySerial.read();
  }

  double len = 900 + readPower * 12; //(0~100对应总周期0.9ms~2.1ms)
  powerServo.writeMicroseconds(len);

  int leftMs = (int) (t0 + T - micros());  //休眠到下一个周期继续循环
  delayMicroseconds(leftMs);
}

需要注意的是,航模和车模的电调操控方式是不同的。航模的油门是从最低点开始,推到头是最大值;而车模的电调平时处于中点位置,向上推到头表示加速,向下拉到头表示刹车。滑板就是使用的车模电调模式,也就是说高电平从 1.5ms~2.1ms是加速区域、从1.5ms~0.9ms是刹车区域。

好盈的电调一般都支持很多模式,另外还有很多可选的参数。如果想修改它的模式,可以按住小按钮后接通电源,然后按照说明书的提示进行设置。

不差钱的同学可以买一个编程器,插上电调之后可以直接设置。

———————————–
回到目录点这里


发表评论

可以使用下列 XHTML 标签:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>