13833| 4
|
[讨论] Arduino 舵机驱动调速 |
本帖最后由 xia_jason27 于 2015-6-5 16:16 编辑 关于舵机调速的一些想法和不理解的地方 关于180°数字舵机的驱动方式,自己在网上也有查过资料,基本上是通过脉冲信号的高低电平的时间来控制位置,但是一般实际应用的话舵机速度都会偏快,下面是一些我实际的一些尝试。 舵机资料: JX Servo/PDI-5521MG/20KG大扭力/矩金属齿轮数字标准舵机 http://gd4.alicdn.com/bao/uploaded/i4/T1hS1xFLhdXXXXXXXX_!!0-item_pic.jpg_400x400.jpg 死区: 2μs 最大脉宽:500-2500us(适合单片机控制板) 角度范围:实际角度172±2° 电机:铁芯 工作电压: DC4.8~6.0 V 速度 (4.8V): 0.18sec/85° 速度 (6V): 0.16 sec/85° 扭力 (4.8V): 17.25kg.cm (239.55oz/in) 扭力 (6.0V): 20.32 kg.cm (281.89 oz/in) 尺寸: 40.5X20.2X44.2mm /1.59 X0.80X1.74 in 重量: 55.6 g (1.96oz) 连接线: JR 265 mm (10.43in) 输出齿:25T(Futaba通用) 舵机控制方法: 1. 由于电机是133MHZ工作频率,所以这边每个脉冲周期为3030us. 目标是控制电机旋转90°,并可以通过改变delay()里的数值改变速度。 将90°的行程分为a份,在每一份后面插入一个延时。因为舵机的死区为2us,不知道是不是每次增加的高电平时间不能超过2us。 部分代码如下: for(a = duration;a>=0;a--){ digitalWrite(sp1,HIGH); delayMicroseconds(1090 + interval*a); digitalWrite(sp1,LOW); delayMicroseconds(3030 - 1090 - interval*a); delay(39);} delay(2000); } void servorun() { digitalWrite(sp1,HIGH); delayMicroseconds(510 + a*interval); digitalWrite(sp1,LOW); delayMicroseconds(3000 - 510 - interval*a); delayMicroseconds(interval); } 实验结果: 速度可以得到控制,但是会出现抖舵现象。个人觉得可能是插入delay时间太长,电机动作不连续。 2. 希望能达到舵机起步时速度逐渐加快,中间部分舵机速度为峰值,快到达90°时逐渐减慢,大致为正弦0-180°变化。 主要的控制方式为对高电平时间增量采用正弦变化。代码如下: for(a = 0; a<=100; a++){ interval = map(a,0,100,0,90); float delaytime = cos(interval*(3.1412/180)); digitalWrite(sp1, HIGH); delayMicroseconds(startangle+2*a); digitalWrite(sp1,LOW); delayMicroseconds(3030-startangle-2*a); delay(7*delaytime); } for(a = 101; a<=400; a++){ digitalWrite(sp1, HIGH); delayMicroseconds(startangle+2*a); digitalWrite(sp1,LOW); delayMicroseconds(3030-startangle-2*a); int delta; interval = map(a,201,400,0,180); delta = 3*sin(interval*(3.1412/180)); a = a+delta; } for(a = 401; a<=duration/2; a++){ interval = map(a,401,duration/2,0,90); float delaytime = sin(interval*(3.1412/180)); digitalWrite(sp1, HIGH); delayMicroseconds(startangle+2*a); digitalWrite(sp1,LOW); delayMicroseconds(3030-startangle-2*a); delay(7*delaytime); } 实验结果: 在SG90微型舵机上工作正常(周期换成20ms),但是用在大功率舵机上时舵机内部会有异响,并有抖舵现象发生。 这边还想请教一下各位资深玩家,如果想控制舵机速度达到类似正弦曲线的效果,应该如何控制啊?还有这样控制出现抖舵现象,是因为开关电源电流不够引起的吗? 本人刚刚接触Arduino,还有很多地方不懂,望指教。。 |
应该不会是电流原因吧, 供电的时候是4A开关电源, 而且只是对舵机供电。 之前有看到有人编写过舵机调速的库文件,但是还是实现不了对舵机进行S型加减速控制。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed