我是搞软件的,对硬件的了解还不如玩航模的小学生。这次费尽周折才让舵机成功运转,写篇流水账记录一下。
挑选舵机
一年前用 ruff 做了个打鼓机,后来没啥可做的就扔柜子里落灰了。前段时间对机器人感兴趣了,觉得能用ruff搞搞,研究了一下,发现除了各种传感器,还要用到舵机。舵机就是能控制转动角度的电动机,淘宝上有各种型号,买哪个好呢。其实没有什么挑选余地,因为不懂硬件,不会写驱动,只能用现成的,而rap仓库里只有2个舵机的驱动,一个是 9g,一个是MG996R。淘宝看了一下,9g力量太小,机器人用996的比较多。
下单,三天后......
第一个坑:连线
夜深人静,把电脑,ruff板子和舵机都准备好了,按照rap layout --visual显示的接线图连接设备的时候,发现一个尴尬的问题,舵机和ruff板都是母头,两个连不上......
好吧,再去马云家找了公对公的杜邦线。
下单,三天后......
第二个坑:舵机不转
按照连线图接好了线,测试的时候发现舵机里传出哒哒哒的齿轮声,但就是不转。难道买了个坏的舵机?行走江湖最重要的是一个稳字,当初买舵机的时候就一次买了两个(其实是为了包邮……)
换上另一个,发现还是一样的问题,头疼啊。网上各种查资料,慢慢摸索出点头绪。
按照连线图,舵机中间的一根红线连接的是一个叫3v3的接口。舵机的说明书上说红线应该连接5v的电源。我在ruff淘宝店发现一张板子的说明图(这么重要的图官网竟然找不到......),上面标着板子上单独有5v和12v的接口。于是我有了个猜测,是不是3v3这个口是给普通传感器供电的,达不到5v,像舵机这种大功率设备要单独供电。(猜测的,硬件大哥可以留言回答下)
插上去试试呗,大不了舵机烧了,死马当活马医。结果跟我猜想的一样,舵机可以正常运转啦。
命也太好了,这都能蒙对.....
第三个坑:驱动
测试了一下,又发现个问题,舵机转动的角度和我输入的不太一致。研究了一下发现,这个MG996R的驱动是0-180度的,而我买的舵机转动范围是0-270度的(因为270的比180的就贵1块钱...)。
那怎么办呢,只能试试改驱动了。打开驱动的代码一看,我靠,这也太简单了吧!
var duty = 0.115-0.088*angle/180;
this._pwm.setDuty(duty);
有用的就这两行,算出一个值,传进去就行了。核心的就是这个计算pwm值的公式,看上去也不太难。
研究研究......最后还真算出来了....
pwm:一个0-1之间的值,=脉宽/生命周期(知道公式就行,我也不懂啥意思)
MG996R参数(请确认你的舵机参数):转到最左边脉宽为0.5ms,中间为1.5ms,最右边为2.5ms。生命周期20ms;
我的舵机是0-270度的,根据上面的这些资料,列个表:
位置 | 转动角度 | 脉宽 | 生命周期 | pwm值 |
---|---|---|---|---|
最左边 | 0度 | 0.5ms | 20ms | 0.5/20=0.025 |
中间 | 135度 | 1.5ms | 20ms | 1.5/20=0.075 |
最右边 | 270度 | 2.5ms | 20ms | 2.5/20=0.125 |
然后就好办了,二元一次方程,把数据代进去就可以了,应该是初中数学吧
duty = x+y*angle/270
0度:0.025 = x+y*0/270
135度:0.075=x+y*135/270
270度:0.125=x+y*270/270
最后的公式就是
var duty = 0.25 + 0.1 * angle / 270;
放到ruff里测试,完美~想转多少度就多少度
最后的啰嗦
1.硬件和软件的鸿沟太大了,要胆大心细连蒙带猜。
2.大功率设备要独立供电,不能靠ruff主板,我测试同时使用2个舵机,经常出现问题。还得研究怎么独立供电,又是一个坑...
3.相对来说 ruff 真的很简单了。我查怎么计算pwm值时,搜到的都是其他类型的开发板的代码,那一坨代码看了顿时懵逼,不像ruff就2行。
4.自从搞过舵机,每次看到扫地机器人从脚边走过,都觉得它好牛B。
5.啰啰嗦嗦竟然写了这么多字....