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)
连接线: JR265 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型加减速控制。 xia_jason27 发表于 2015-6-9 15:54
应该不会是电流原因吧, 供电的时候是4A开关电源, 而且只是对舵机供电。 之前有看到有人编写过舵机调速的 ...
可不可能是pwm速率不够快呢?试试a/d转换呢
页:
[1]