《电子技术应用》
您所在的位置:首页 > 模拟设计 > 业界动态 > 自制四轴飞行器中的问题及解决方案

自制四轴飞行器中的问题及解决方案

2017-04-29
关键词: 四轴飞行器

  我走的弯路千万不要有人再走。

  你在愁你的四轴飞行器怎样调整pid都飞不起来吗?那就一定不是pid的。我也苦苦调了三个星期,毫无进展,当发现了不是pid的问题并且改进了之后,我随便给了两个参数就飞起来了。下面给出我的经验。

  一个好的机构,应当由三部分构成:一个听话的执行单元,一个精准的测量单元,一个聪明的控制单元。

  1、执行单元。我的电机是直流无刷电机(新西达1000kv),用好盈30a电调控制,这种电调你只需给它一个1000-2000us(太大太小都不好)的脉冲信号就可以控制电机转速,只需给一次,它就可以一直转,改变的时候再给一次。比如我的起飞速度就是大约1600us的脉冲。需要注意的是,电调刚开始时需要给3s的低宽度脉冲用来给电调设置最低点。听到滴滴两声之后就说明设置好了。

  2、控制单元。控制单元不是第三个吗?怎么放到第二个了。因为不说pid后面没法说。pid调节是控制论中十分经典的一种经典的控制方法,有时i可以不要,就比如说我的就没有i。对于没有学过控制论的人pid怎么理解呢?举个例子,比如一个理想弹簧,你拽它一下,然后放开,它就会一直往复运动,p就是弹簧的弹性系数,p越大,弹簧的回复力就越大,抵抗拉的力也越强。在飞机上,当我们检测到一边倾斜,就给它一个和角度成正比的回复力,就是给电机转速+p*pitch。但是如果只有p呢,就像弹簧一样,一直晃啊晃。那么我们把弹簧放进水里,水的阻力会使弹簧一段时间之后挺止,并且水的阻力和弹簧运动速度成正比,这就是d的作用。在飞机上,当我们依靠陀螺仪侦测到飞机往一个方向旋转时,我们就加上一个抑制这种转动的力,即-d*w,w为角速度。i为假如我们的弹簧变形了,我们加上一个力使我们的弹簧恢复原来的形状,我是手动调整了一下误差,没有通过d来调节。

  3、测量单元。我的问题出现在测量单元,同时我也相信绝大部分的人的问题都出现在测量单元。我用的是陀螺仪是gy80,集成了adxl345加速度测量单元还有l3g420d角速度测量单元。加速度计虽然叫加速度,但是可以直接得到pitch和roll,即沿x和y方向的倾斜角,原理在这里不解释。在没有干扰的情况下反回的数据很完美。我以为能真实反应飞机目前的倾角然后进行调节,我竟然就天真的拿这个数据直接用了,并且调整pid参数三星期毫无进展。当没有进展时,我开始思考是什么出了问题,我用processing打了一个示波器出来,将数据返回的绘制成波形显示在电脑上,发现了问题:电机不开的时候数据很好,电机一开数据简直没法看,因为电机震动对加速度计的影响非常大,而我们的角度是考加速度测量的,返回的简直是乱码,三个星期以来原来就是调这堆乱码!

  定下心来,觉得进行滤波,对加速度计返回的倾角进行低通滤波,陀螺仪受震动影响很小,不需要滤波。低通滤波大家不需要知道,这也是被淘汰了的,原因是滤波之后数据虽然很好看,但是会造成极大的延迟,飞机都偏到另一边了,还显示偏在这一边,这只适合在一些不需要太灵敏的地方。

  下面介绍拯救我的一个简单有效的算法,不需要用到卡尔曼滤波这样高级的算法就足以让它飞起来而且飞的很好,有人叫他数据融合算法,其实没有这么玄。

  陀螺仪受震动的影响很小,它返回的是角速度,角速度*时间就是积分,每次循环读取一下当前的角速度再累加起来,比如第一次角速度20度/s,一个循环的周期是0.02s,譬如我的周期22ms。就是那么我们就知道转了0.4度。第一次转了2,第二次转了3,第三次转了-1,总共就转了2+3-1=4。有人会问,这样积分准确吗?很准!我开始也觉得不靠谱,后来发现很靠谱。两三面零点会产生三四度的偏差,不要紧,我们用准确的角度(加速度计返回的,加速度返回角度,有点绕)计来修正。

  不加修正时,公式是这样的

  角度=角速度*周期时间+原来的角度

  加上修正后

  角度=95%*(角速度*周期时间+原来的角度)+5%*准确的角度

  对于这两个数据进行加权平均,这样既有时时性,又能保证零点不漂移,好,很好!

  之后,pid随便给给就起来了,不信试试。


本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。