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

动力老男孩发布于 2015-05-14 18:13


机械部分就绪之后,就是各种软件和电子的工作了,首先我们看看怎么控制一个无刷电机。我们用的电机是外转子无刷电机,型号是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是刹车区域。

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

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

-----------------------------------
回到目录点这里

 
后街十八少2017-01-23 22:45:24
SoftwareSerial mySerial(11, 5); 这句是什么意思
动力老男孩2017-01-23 23:28:00
这是arduino实现的串口,你搜索下 SoftwareSerial
后街十八少2017-01-23 22:39:08
动力哥,请问你上面的程序部分是怎样展示出来的,就是有显示行数,还有每行黑白相间的
动力老男孩2017-01-23 23:28:36
这个叫程序高亮,一般都是在客户端用js操作的
后街十八少2017-01-25 13:37:02
回复 动力老男孩 : 不太懂...js又是啥...
动力老男孩2017-02-06 13:32:52
回复 后街十八少 : 一种开发语言,如果不会js的话,这个事情就没法做了
小新2016-06-28 08:51:19
请问你用的单片机啥型号?
橙子不洒脱2016-05-12 11:01:48
触摸中线位置跟松开屏幕时都显示BRAKE 0,不是就代表着发送50这个数字么,经过单片机接受后会给电调发送高电平宽度1.5ms的pwm信号,那么滑板不是一直再跑吗?
动力老男孩2016-05-13 16:52:47
不会,车模电调1.5ms是静止的,0.9ms是全刹,2.1ms是全功率
橙子不洒脱2016-05-12 11:01:31
触摸中线位置跟松开屏幕时都显示BRAKE 0,不是就代表着发送50这个数字么,经过单片机接受后会给电调发送高电平宽度1.5ms的pwm信号,那么滑板不是一直再跑吗?
橙子不洒脱2016-05-12 11:01:30
触摸中线位置跟松开屏幕时都显示BRAKE 0,不是就代表着发送50这个数字么,经过单片机接受后会给电调发送高电平宽度1.5ms的pwm信号,那么滑板不是一直再跑吗?
橙子不洒脱2016-05-12 10:56:35
老男孩大哥哥~有两个疑问请教:1.淘宝上的无刷电机有无感跟有感之分,不知有何区别,您的滑板用的是哪个?2.您说1.5ms~2.1ms是加速区域、从1.5ms~0.9ms是刹车区域,那么是否用app控制时触摸中间位置电机已经在匀速转动?那么怎么让它停住?只能一直触摸着最低点吗?
动力老男孩2016-05-13 16:54:49
刹车的时候要触摸最低点,中间位置不是匀速转动啊,是静止。
按自行车来理解吧:高点表示使劲蹬,低点表示捏闸,中点表示不蹬也不刹车(如果原来是滑行,一会儿就自然停了)
冰清的理想乡2015-10-18 20:23:58
动力哥 嘿嘿  我的滑板做出来 绕着学校跑了两圈 虽然还没有自己做出遥控 不过材料也都买过了在制作中  感谢你的博客 看着你的博客一步一步把这个做出来的
动力老男孩2015-10-22 19:50:14
赞赞赞!
疯子2015-09-08 15:42:41
动力哥,再问个问题,一般的电调都要初始化校正下行程,你是怎么校正的呢? 借鉴下。 :)
疯子2015-09-08 15:44:24
我是指没有遥控器的情况下,纯粹是arduino输出pwm蒙他一下
动力老男孩2015-09-10 14:55:17
回复 疯子 :  直接输出0.9ms高电平的 PWM 方波啊,这个必须要输出,不然电调会报错
书生2016-07-02 08:32:41
回复 动力老男孩 : 麻烦问一下设置油门行程PWM信号怎么给呢?我用STM32,按说明书上电初始化给一个1.5ms高电平对应的PWM,然后我有一按键,按后给一个对应2.1ms高电平的PWM,再按键给一个对应2.1ms高电平的PWM,可是感觉油门行程还是不对。
疯子2015-08-26 14:27:24

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

动力哥,这个周期是业界标准吗? 你的150A电调比较贵,我想入个120A 华沃瑞 勇狼。不知道控制周期是不是也一样? 

疯子2015-08-26 14:49:32
看起来2.1ms 0.9ms的遥控信号是业界标准哦,频率可以从50hz到450hz不等(400会保守点),频率越高控制精度应该越好,但是与速度无关。有点好奇你是怎么知道这个周期的,用示波器捉遥控器的?
动力老男孩2015-08-26 15:18:05
回复 疯子 :  我是很久以前在一个帖子里看到的,感觉应该是业界标准
Mrsails2015-05-27 10:08:38
是的,用航模接收机就正常,或者用修改舵机库方式驱动也正常,但是总手机+蓝牙就卡顿,电机是n5065,电调是航模80a。行程校准都做过
动力老男孩2015-05-27 16:37:55
卡顿现象是在某个摇杆位置一定会出现,还是说有时候能转有时候不能转?
动力老男孩2015-05-27 16:40:51
我猜测了一个原因,你的蓝牙模块供电是电调提供的BEC吧,你看看供电电量是否够用(比如你的灯带是否也使用BEC来供电?卡顿现象很可能是蓝牙掉线造成的,所以检查下蓝牙是否插紧,如果是焊上的,是否供电不足。
Mrsails2015-05-27 16:41:55
回复 动力老男孩 : 我还在测试,麻烦把结果发邮件给你
Mrsails2015-05-27 10:08:34
是的,用航模接收机就正常,或者用修改舵机库方式驱动也正常,但是总手机+蓝牙就卡顿,电机是n5065,电调是航模80a。行程校准都做过
Mrsails2015-05-27 10:08:27
是的,用航模接收机就正常,或者用修改舵机库方式驱动也正常,但是总手机+蓝牙就卡顿,电机是n5065,电调是航模80a。行程校准都做过
Mrsails2015-05-26 23:18:59
用航模遥控就正常,就是输出标准波形时候就正常,但是总动力哥程序就有问题
动力老男孩2015-05-26 23:27:55
也就是说,你用航模的接收机+航模遥控器是ok的,但是改用蓝牙+手机遥控,就会卡顿?
你用的电调和电机各是什么?有做过行程校准吗?
Mrsails2015-05-26 23:18:58
用航模遥控就正常,就是输出标准波形时候就正常,但是总动力哥程序就有问题
Mrsails2015-05-26 22:45:05
动力哥,我仔细看了下程序,程序有好多部分直接被你//了,不知道为什么,比如喇叭停止部分,还有一些个别地方,都被你直接注释掉了
动力老男孩2015-05-26 22:56:57
是这样的,因为我有四个滑板,有的功能在这个板上,有的功能在那个板上。
那个大喇叭的功能,是愚人节的时候,给滑板装了个汽车喇叭。其实那天跑完之后,我就把喇叭拆了,所以代码也注释掉了
Mrsails2015-05-25 19:51:52
完全用的是动力哥的程序
动力老男孩2015-05-25 23:10:14
发了一个新的APP给你,试试看吧,把手机的下面一半忽略了,中点改成推杆的零点 :)
Mrsails2015-05-26 13:18:37
回复 动力老男孩 : 还是卡顿明显。。。我直接把蓝牙接收数据读出来, 隔一会就会出来空格或者【【【这样乱码,应该是这个问题
动力老男孩2015-05-26 18:57:18
回复 Mrsails : 你是用print还是用write打印蓝牙的数据呢?因为我是用字节发送的数据,所以0~100会对应到一些字符的ASCII 码。你应该用Serial.write(readPower); ,显示的应该全是数字
Mrsails2015-05-26 20:18:06
回复 动力老男孩 : 现在我也搞不明白,为什么会出现卡顿,过两天上视频,希望动力哥看下
动力老男孩2015-05-26 22:57:42
回复 Mrsails : 嗯,这个事情还真是奇怪啊。你是说用遥控器推就正常,用手机推就会卡顿?
Mrsails2015-05-25 19:12:45
起点就是油门pwm信号0点(0.9ms),最高点就是2.1ms,不用做刹车功能,这样我想看看电机运行还有没有卡顿现象,我直接用arduino输出0.9~2.1的pwm信号给电调就能很好控制电机,但是不知道为什么用动力哥蓝牙控制就走卡顿(低速时候会突然卡死一下,然后继续转,没规矩的卡死)
动力老男孩2015-05-25 19:15:05
我大概明白了,确认一下:滑板上的电路和代码是跟这个帖子里的代码一致吧?
Mrsails2015-05-23 14:58:03
用航模电调出现低速堵转现象,速度提到70%左右现象消失,是什么问题呢?
诸葛小新2015-05-16 20:38:02
动力兄,如果我不需要电调的刹车和反向功能,能否采用航模电调。同是120A,航模电调比车用电调要便宜不少。
动力老男孩2015-05-17 20:30:12
应该是可以的,不过没有刹车会很危险啊
诸葛小新2015-05-17 21:14:39
回复 动力老男孩 :
可以采用机械结构刹车,类似有些滑板车尾部有个可以踩的挡泥板,起到刹车片的效果。
从我自己使用感受来看,如果不是很熟练的话,电调刹车效果其实不是特别好控制,主要是没有力度反馈,不是很容易控制刹车力度。刹车太轻,达不到迅速减速目的,刹车太重,容易飞出去。
动力老男孩2015-05-18 10:04:19
回复 诸葛小新 : 原来如此,我看到你滑板上的刹车板了,实际操作的时候方便吗?
诸葛小新2015-05-18 11:17:03
回复 动力老男孩 : 
其实那个不是刹车板,就是挡泥板,是吊顶的铝扣板折成的,作为刹车板不太合适,太软。
目前这种结构操作肯定不方便,高度有些高,一只脚在滑板上,一只脚抬起来去踩刹车板,不好控制平衡,也不好控制刹车力度。 我想驱动轮换成4寸的,这样板面基本就是平的了,再改进一下挡泥板,估计这样脚刹效果就好多了。
动力老男孩2015-05-18 11:54:02
回复 诸葛小新 : 我也担心玩滑板的时候,抬起一只脚去踩刹车,技术难度有点儿大
Mrsails2015-05-23 14:48:41
回复 动力老男孩 : 用航模电调的话,程序还要修改。这样的话会堵转
诸葛小新2015-05-23 15:22:45
回复 Mrsails : 堵转是什么意思?
Mrsails2015-05-23 15:30:23
回复 诸葛小新 : 电机会突然抽风,卡一下。只有低速的时候出现,一般油门在70%以上就好了
动力老男孩2015-05-23 15:40:50
回复 Mrsails : 我之前在滑板上一直用车模电调,没有注意过堵转的问题,这是什么原因呢?
Mrsails2015-05-23 16:37:57
回复 动力老男孩 : 动力哥,我估计是因为车调是高电平从 1.5ms~2.1ms是加速区域、从1.5ms~0.9ms是刹车区域。我们·的是从0.9-2.1都是加速,会不会是这个原因呢

动力老男孩2015-05-24 22:05:29
回复 Mrsails : 有可能,两种遥控器也是不一样的,航模遥控器是自动回位到底的,车模是回位到中点
Mrsails2015-05-25 10:53:20
回复 动力老男孩 : 这个程序我估计我改很难。。。动力哥,能帮忙改下嘛
动力老男孩2015-05-25 17:31:23
回复 Mrsails : 你的方案是什么样的,电调和电机还有Arduino程序。DIY就是这点麻烦,大家的方案差别一点儿就不好吧,你可以把细节给我发一下。如果只是改APP的话,我可以把手机中点以下的部分忽略掉,向上改成0~100

作者

动力老男孩

北京,海淀

176粉丝 11作品 14随笔
  关注 私信

作者的最新随笔


阅读数: 18880