电动滑板攻略 – 无刷电机控制原理
由 动力老男孩 发表于 2015/05/14 18:23:13机械部分就绪之后,就是各种软件和电子的工作了,首先我们看看怎么控制一个无刷电机。我们用的电机是外转子无刷电机,型号是5065。
PWM是“怕玩命”的缩写,英文写法是“Pulse-width modulation”,也有些外行人士把它翻译成“脉冲宽度调制”。对于没有听说过PWM的同学,请先参考一下我的另一篇博客Arduino的模拟输入和输出。
简单的说,对于传统的控制信号,假设最高速的时候控制电压是1,那么可以输出0.5来表示一般的速度。但是对于单片机来说,输出0和1是方便的,输出0.5会比较麻烦。这种情况了,可以快速的在0和1之间切换,达到的效果就和0.5很相似了。
电调的控制,就是使用了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是刹车区域。
好盈的电调一般都支持很多模式,另外还有很多可选的参数。如果想修改它的模式,可以按住小按钮后接通电源,然后按照说明书的提示进行设置。
不差钱的同学可以买一个编程器,插上电调之后可以直接设置。