我在淘宝买了三个9g的舵机,比较便宜,几块钱一个,主要用在无线遥控航模上,在调试中舵抖明显,遥控没有动作就一直抖,百度也没找到具体的方法,很多资料说是电源的问题,但是我的舵是单独供电,而且电压足够,所以只猜想是脉冲不稳的原因了吧,网友建议换硬件pwm,我想到了stc8A,但是一看我的stc12c5A60S2已经焊接上去了,没办法又硬着头皮搞吧。
后来确实想到一个算是办法的办法与大家分享,我的方法就是在方向舵起始阶段和舵到达最大舵角阶段直接停止定时器,这个停止不是完全停止,而是延时一段时间停止,否者舵就不起作用了(具体为什么要延时这个可能需要稍微思考下,我这里不作解释了),然后在过渡阶段把定时器启动起来,这样就实现了在过渡阶段舵动作,在起始阶段和最大舵角时稳定的状态,当然中间过渡阶段也可能抖舵,不过这个对我来说无所谓了。
例如;
我的舵起始位置是0°,最大舵角是左右90°,我就是这样操作的
0° (延时20ms,关闭定时器)
0°-正90° (启动定时器)
正90° (延时20ms,关闭定时器)
正90°-0° (启动定时器)
0° (延时20ms,关闭定时器)
0°-负90° (启动定时器)
负90° (延时20ms,关闭定时器)
负90°-0° (启动定时器)
0° (延时20ms,关闭定时器)
这样依次循环。。。。。
为什么我选择延时20ms呢,因为我看这个舵的基准信号周期是20ms,我试过减小延时比如10ms确实不行,其它就没有试了,实际调试中能达到我要求的效果,只是有点慢,可能是我的程序还需修改,或者这个舵本身就不是很好,马马虎虎过的去。
同时这个方法也有局限性,我只需要向左向右就行,如果进一步控制左右的角度这种方法可能就达不到你需要的效果了。
啰嗦这么多其实就是一句话:
起始阶段和最大舵角阶段延时后再关闭定时器,过渡阶段启动定时器。
附上我的代码(延时准备修改为定时器的,修改中有点问题没解决,改天再弄了):
//防止舵机抖动
if (dangwei2>110 && dangwei2<140)//起始阶段延时后关闭定时器
{
delayus(20000);
TR1 = 0;//定时器停止
}
if ((dangwei2>20 && dangwei2<=110) || (dangwei2>=140 && dangwei2<220))//过渡阶段启动定时器
TR1 = 1;//定时器启动
if (dangwei2<=10 || dangwei2>=220)//最大舵角延时后关闭定时器
{
delayus(20000);
TR1 = 0;//定时器停止
}
==============================================================================
|