电动滑板增加测速功能

标签:

诸葛小新 发布于 2015-04-27 21:56

作为一款智能滑板(尽管现在还一点也不智能),测速应该是必备的功能。
       在人群中飘过,常有人问“这玩意能跑多快啊?”,我只能根据电机的额定转速给出个模糊值,“时速大概。。。二三十公里吧”,听者将信将疑。如果能够精确测速,咱就不用含糊其辞了。此外,有了测速,可以像汽车一样增加里程计量等数据,测量电池续航能力。最后,滑板 APP的 控制模式有“定速巡航 ”和“手动油门 ”两种方式,不过这里的定速巡航并不是真正意义上的“定速”,只是固定油门,平地的话基本可以保持定速,越到上下坡,显然就不是定速了。如果想实现真正的PID定速控制,测速也是必须的。
       
       如果马达自带编码器,测速很好实现。这款马达不带此功能。首先想到的简单、低成本的方案就是用霍尔传感器。
       关于测速原理,可以参考《基于Arduino与LabVIEW的直流电机转速控制系统 》。我采用的是测法,简单说就是计算固定周期T(秒)内由于旋转所产生的脉冲次数C。
       如果对非磁性物体测速,需要额外附加一块磁铁。对于电机来说,因为内置磁铁,可以直接测量。我用的电机每旋转一周会产生P=8次脉冲。这样,电机的转速就是: C/T/P  转/秒。有了电机的转速,再加上减速比、驱动轮直径,滑板的速度很容易计算了。
      公式里面C和P是固定的,计数周期T是在程序里面可以设定的,T决定了转速更新时间,比如T=1秒,每1秒钟,转速值才会更新一次,所以T不能太大。同时,T也不能太小,太小的话误差会比较大。尤其当转速较低的时候。初步设定T=0.2秒,效果如何有待进一步测试分析。
 

       霍尔传感器采用的是最便宜的KY-003 EYES 模块,三个接口分别是正电压V、接地G、信号S。由于需要使用信号产生的中断,S接在了Arduino的digital3端口,也就是1号中断。
void initHallSensor() {
  delay(1000);
  Timer1.initialize(200000);  // 0.2s cycle 
  Timer1.attachInterrupt( timerIsr );
  attachInterrupt(1, counter, RISING); // d2 pin for Hall interrupt.
  interrupts();
}

/*counter for Hall sensor, counts the pulse of motor*/
void counter() {
  counter_val[curCounter & 0x01] += 1;
}

       最后说一下需要注意的问题:
       1. 为了周期性测量霍尔传感器产生的中断数量,用到了定时器库TimerOne,而Arduino中的PWM也需要用到定时器,6个PWM输出脚当然也要用这些计时器,它们是这样分配的:
Pins 5 and 6: timer0
Pins 9 and 10: timer1
Pins 11 and 3: timer2
在使用定时器之前,pin 9连接电调的信号线,启用定时器之后,电调无法正常工作,信号线改接pin11,电调工作正常。
       
       2. 霍尔传感器中断的问题,困扰了我一天时间。按照上面的接线和代码,霍尔传感器在马达转过的时候会产生中断,用电脑的usb接口供电的时候,一切正常,但是当用电调对Arduino供电的时候,中断无效,完全没反应。最开始以为是电调信号线导致的问题,仔细检查代码,没有问题,断开电调的信号线,问题照旧。那么唯一不同的就是usb和电调供电的电压了,上电表测,usb电压5v,电调电压6v,难道是因为电调的电压过高导致的中断引脚电压无效?后来想到实际上是霍尔传感器的信号输出电压受到干扰,霍尔传感器我用的是Arduino 3.3v供电,可能是电压不足导致容易受到干扰。立马改成5v供电,烦恼解除了。

增加部分内容,兼回复动力兄留言。

    给驱动轮加磁铁是最先想到的方案,但是后来被否定了。
    原因1. 需要固定一块磁铁,还需要固定好霍尔传感器,两者之间的距离大概在5mm之内才有效。尽管磁铁可以很小,对动力毫无影响,​但还是额外增加了复杂性,如果以后想要更换新的驱动轮或者驱动轮规格发生了变化,会比较麻烦,也不利于美观。用软件工程的术语来讲,测速功能和驱动轮是耦合的。
    原因2. 驱动轮转速相对电机来说较低,测速不够精确。如果在驱动轮上只固定一个磁铁,也就是每转一周产生一次脉冲,当驱动轮转速为5转/秒(按照我用的5寸轮尺寸,滑板速度大约7km/h,脉冲频率为5次/秒,也就是200毫秒/次,假设脉冲计数周期为200毫秒,能够检测到1次脉冲,当驱动轮转速低于5转/秒,得到的速度就都是0。如果增大计数周期,速度更新周期也相应变大,实时性变差。
    如果增加磁铁数量,又回到原因1了。

    归纳起来,转速为R(转/秒),每转产生的脉冲次数为 C(次/转), 脉冲计数周期为T,则脉冲频率为RC(次/秒),也就是 1/RC(秒/次),如果要保证能够测量到每次脉冲,必须有T>1/RC。假设我们需要测量的最低转速是1(转/秒),即R=1,就有 T>1/C。 如果转速更新周期T是0.2秒,则C>5;如果每转只产生一次脉冲(C=1,也就是只有一个磁铁),T>1,这样的话速度更新周期过长了。

    其实电机里面每个线圈就是一个磁铁,c5065每转会产生8次脉冲,所以目前的方案是霍尔传感器直接测量电机转动产生的脉冲。

 
blcakblue2016-01-13 18:32:10
小新老师不好意思打个广告

1550出售一个做好不到一个月的单驱滑板,最高速度30,最远续航20.用的是动力老男孩的遥控。要的私聊1055251363
疯子2015-09-17 11:13:20
诸葛老师, 你的霍尔传感器的接线原理图能show下吗?不知道怎么接呢,是否要加入电阻电容之类的
诸葛小新2015-09-17 18:57:25
我用的是Arduino 模块,不需要再加电阻了,直接和Arduino连接就可以了,线路很简单,正负极、信号读取三根,你应该会接吧。
疯子2015-09-21 14:38:41
回复 诸葛小新 : 会的,我是在想需不需要滤波之类的。我的5065电机每圈产生7个脉冲(两个电机多次测试证实),跟你的8个有点区别。
诸葛小新2015-09-22 10:42:37
回复 疯子 : 滤波的话我觉得不是很有必要,除非想做PID,精确控制速度。
马昌聪2015-08-26 16:19:37
我让电机匀速转动,霍尔传感器检测的速度不怎么稳定?怎么改进?谢谢
诸葛小新2015-08-26 20:06:54
你的意思是:向电调输出固定值,让电机保持匀速转动?
有两种可能,一种是电机确实没有保持匀速,比如收到阻力变化,但是如果空转、输出信号稳定的话,电机应该能够保持匀速。
另外一种可能就是传感器测速频率的问题,但是不知道你的不稳定是什么样的,周期性地跳动?还是无规律地变化。这种不稳定是否受转速影响?还有电机产生的脉冲怎么测的?  但根本问题还是测速频率的问题,具体关系我在上文的补充内容部分已经说明了。 你可以尝试修改测速频率,多观察一下。
马昌聪2015-08-27 16:31:07
回复 诸葛小新 : 我让电机空转,给相同的信号,两次测试的转速不一致,但是每一次的测速基本是稳定的。

还有,我用手转动电机一周,然后用霍尔元件去检测脉冲个数,每次检测到的脉冲个数都基本不同,这个可能是什么的影响?我猜测是电机的抖动造成的,但不知道如何去滤除这种抖动。
诸葛小新2015-08-27 20:12:20
回复 马昌聪 :
我觉得电机抖动的问题应该不大,还是测速的问题。
转动一周脉冲个数不一样? 那测速肯定不稳定啊。 你是测量电机内部磁铁的脉冲么? 一周产生几次脉冲?脉冲计数周期是多少?  相同的计数周期,转速越慢、误差越大。用手转速度肯定不稳定、而且速度也很慢,之所以每次到的不同的脉冲个数,可能技术周期比较大,有些脉冲被漏掉了。不存在电机抖动的问题吧,不知道你所说的“抖动”具体指什么。
莫克丁2015-06-02 11:43:34
我现在在用你这个方法,试卷控制两个轮子的转速保持一致(我用的是双驱动方案)
David2015-06-17 08:58:59
你的双驱方案成功了吗?
莫克丁2015-06-19 17:15:03
回复 David : 电机和驱动件买的现成的(电机两个N5056  80A 电调),现在在写两个轮子的驱动方法,也是借鉴各位大侠们的。(近段时间公司老加班,等有空了再弄了)
诸葛小新2015-08-26 20:14:53
精确同步的话得用PID吧?这种测速方法我觉得精度未必够。
其实我个人觉得没必要搞精确同步,只要两个马达的控制信号一致就可以了。
你需要同步的目地是希望直线运动?但是滑板的方向主要是靠我们站在上面移动重心来控制的,误差完全超过电机的同步了。即使电机能够精确同步,我们也很难让滑板精确地走直线,也没有必要。
动力老男孩2015-04-28 02:13:57
晕,想着飞行器的事情,晕了…
滑板的转速固定个磁铁完全无压力 :)
动力老男孩2015-04-27 23:15:08
轮子上加了磁铁?会不会导致不平衡呢?
诸葛小新2015-04-28 08:36:33
回复见文内
动力老男孩2015-04-28 08:49:18
回复 诸葛小新 : 看到了,原来如此!

作者

诸葛小新

辽宁,大连

50粉丝 6作品 0随笔
  关注 私信

作者的最新作品


阅读数: 3056