搜索
bottom↓
回复: 40

基于STC15W408AS的四轴飞行器

  [复制链接]

出0入0汤圆

发表于 2015-2-6 21:52:11 | 显示全部楼层 |阅读模式
本帖最后由 lcw_swust 于 2015-2-7 14:30 编辑

取这个标题是因为这里所用的单片机只有一个型号:STC15W408AS。
遥控器是游戏手柄改装的,不太好控制油门。
采用NRF24L01P作无线传输,在250Kbps的无线速率下通信距离还行。
无线模块单独加了个单片机做成了无线串口模块。
电机是新西达A2212 KV1000,1147桨。
传感器为MPU6050+HMC5883L+BMP180,三个模块用排针串在一起,貌似比那种一体的模块便宜。
电池为2S的2200mAh。
机架以木头为主,据说这种木料叫“子弹线”,或“子弹头”。
飞行器整机重量约800g,做这个飞行器的费用约500。

今天总算飞得比较稳了,可惜充电器不给力,试飞时电量不足,
只飞了约半米高。
(电调参考帖:http://www.amobbs.com/thread-5602945-1-1.html



























-------------------
2月7日添加:
现补上今天的飞行视频:

由于今天风大,最后飞机掉下来了,有一条机臂与主板连接处裂开了。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2015-2-14 16:45:41 | 显示全部楼层
本帖最后由 lcw_swust 于 2015-2-16 10:16 编辑

2015.02.14:
今天把飞控程序改进了一下,主要是改进PID算法。
PID算式中增加角加速度项,使得控制更稳定;
修改PID参数,加大P,减小I,“打舵跟随效应”有所提高。

先看看原来的程序:
        mot_dx=Pidx_p*err0+Pidx_i*temp_i+Pidx_d*(err0-err1);
系数Pidx_p与Pidx_i都不能取大,稍大一点就会振荡;
所以这两个参数都取得很小,导致“打舵跟随效应”极差;
虽然Pidx_d有抑制振荡的作用,但是Pidx_d过大也会引起振荡。

改进后的核心算法:
(此为简化代码,与实际代码略有差异)
void DoPid_x(void)
{
        static S16 temp_i;//积分
        static S16 deg1,degv1;//上次角度,上次角速度
        S16 err0,degv0;//本次误差、本次角速度
        err0=GyDegX-set_x+300;//计算角度误差
        degv0=GyDegX-deg1;//计算角速度
        temp_i=temp_i+err0;//积分       
        mot_dx=err0*Pidx_p+temp_i*Pidx_i+degv0*Pidx_d+(degv0-degv1)*Pidx_d2;
        deg1=GyDegX;//保存角度,用于计算角速度
        degv1=degv0;//保存角速度
}
现在的mot_dx的组成:角度比例+角度积分+角速度(或角度微分)+角加速度(或角度二次微分)。
这个式子不知道能不能算作“串级PID”,总之效果好就是了。
下面说说各参数对于控制的影响:
Pidx_p:取大了易引起振荡,值小了又会使得“打舵跟随效应”差,需要从小到大寻找合适的值;
Pidx_i:比Pidx_p更易引起振荡,所以尽量取小,甚至可以取为0,因为人可以操作遥控器来补偿静差;
Pidx_d:取大些可以抑制振荡,取太大也会引起振荡,需要从小到大寻找合适的值;
Pidx_d2:取大些可以抑制振荡,取太大会造成mot_dx的剧烈波动,需要从小到大寻找合适的值。

整定方法:
Y方向的两个无刷电机的串口线拔掉,只让X方向的无刷电机受控;
飞行器放于桌面,用手略微抬起Y方向的一端,让X方向有一定的摆动空间。
1.Pidx_p、Pidx_i、Pidx_d2归0,Pidx_d慢慢增加,晃动机身,感觉到机身能产生较大阻力即可。
2.Pidx_d2慢慢增加,感觉机身能迅速产生较大阻力即可。
3.Pidx_p慢慢增加,直到机身能迅速转动到设定的角度且不振荡即可。
4.Pidx_i慢慢增加,直到机身不振荡即可;若有振荡,则减小Pidx_p,或增加Pidx_d、Pidx_d2。

感谢坛友及校友:makeflyeasy
看了makeflyeasy的程序,受益良多。

今天又断了个桨,幸好买了备用的。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2015-2-15 21:03:14 | 显示全部楼层
本帖最后由 lcw_swust 于 2015-2-16 10:22 编辑

在飞行器底部绑上一个手机,用于航拍:






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-2-6 22:09:17 | 显示全部楼层
高手在民间,国产化程度超高呀。

出0入0汤圆

发表于 2015-2-6 22:15:28 | 显示全部楼层
这一家伙摔断了岂不是要心疼死了。

出0入0汤圆

发表于 2015-2-6 22:16:35 | 显示全部楼层
楼主动手能力超强,牛叉!

出0入0汤圆

 楼主| 发表于 2015-2-6 22:37:52 | 显示全部楼层
登云钓月 发表于 2015-2-6 22:15
这一家伙摔断了岂不是要心疼死了。

是啊,昨天试飞时摔断了一个桨。
而且这东东不好控制,稍一倾斜就跑得飞快,相当危险。

出0入0汤圆

发表于 2015-2-6 22:40:07 | 显示全部楼层
给木板上打孔是为了减轻重量吗?

出0入76汤圆

发表于 2015-2-6 23:21:36 | 显示全部楼层
非常佩服lcw_swust大侠的动手能力,目测还是要花点精力的,不是一两天可以搞定的,很好奇一天哪有那么多的时间来折腾?

出0入0汤圆

发表于 2015-2-6 23:27:58 | 显示全部楼层
前辈,又开始自己DIY了,真牛逼啊,什么玩意儿都自己做,佩服

出0入0汤圆

发表于 2015-2-6 23:46:17 | 显示全部楼层
不易,不易!就那4条木头的弄成要大把时间呀。顶起行动派的DIY,佩服

出0入0汤圆

 楼主| 发表于 2015-2-7 07:53:32 | 显示全部楼层
eva 发表于 2015-2-6 22:40
给木板上打孔是为了减轻重量吗?

是的,也有略微减小对螺旋桨的风阻的作用。

出0入0汤圆

 楼主| 发表于 2015-2-7 07:54:45 | 显示全部楼层
foxpro2005 发表于 2015-2-6 23:21
非常佩服lcw_swust大侠的动手能力,目测还是要花点精力的,不是一两天可以搞定的,很好奇一天哪有那么多的 ...

上班时偶尔不忙,就“不务正业”了一把。

出0入0汤圆

 楼主| 发表于 2015-2-7 07:56:38 | 显示全部楼层
lintel 发表于 2015-2-6 23:46
不易,不易!就那4条木头的弄成要大把时间呀。顶起行动派的DIY,佩服

是啊,钻孔钻了半天,而且钻到底的时候得慢,不然很容易带出毛刺。

出0入0汤圆

发表于 2015-2-7 12:03:28 | 显示全部楼层
楼主是个DIY高人

出0入0汤圆

 楼主| 发表于 2015-3-4 15:49:05 | 显示全部楼层
2015.03.03:
由于假期把机架摔坏了,现在重新做个更结实的。
用的是不锈钢,大小与之前的木条差不多,只是略重一点。






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-3-4 21:23:19 | 显示全部楼层
lcw_swust 发表于 2015-3-4 15:49
2015.03.03:
由于假期把机架摔坏了,现在重新做个更结实的。
用的是不锈钢,大小与之前的木条差不多,只是 ...

亲,我现在的四轴已经能各种暴力动作稳定做了,没有任何抖动,3楼手抛起飞完全没有压力,欢迎来东五3楼嵌入式实验室参观交流。校友可以赠送套件哦。

出0入0汤圆

 楼主| 发表于 2015-3-4 21:35:34 | 显示全部楼层
makeflyeasy 发表于 2015-3-4 21:23
亲,我现在的四轴已经能各种暴力动作稳定做了,没有任何抖动,3楼手抛起飞完全没有压力,欢迎来东五3楼嵌 ...

好的。
其实我买了OV7670摄像头模块,准备通过图像处理来实现悬停。

出0入0汤圆

发表于 2015-3-4 22:01:52 | 显示全部楼层
牛            

出0入0汤圆

发表于 2015-3-4 23:07:01 | 显示全部楼层
力挺楼主。
交流一下,我玩玩具四轴时,油门可以精确控制的,可以很好的悬停,建议楼主改进一下,做玩具的还是挺有两把刷子的,很佩服。

出0入0汤圆

 楼主| 发表于 2015-3-5 09:13:56 | 显示全部楼层
mandylion2008 发表于 2015-3-4 23:07
力挺楼主。
交流一下,我玩玩具四轴时,油门可以精确控制的,可以很好的悬停,建议楼主改进一下,做玩具的 ...

原来玩具四轴也这么牛?可惜我没玩过呢。
但是它不怕风吹么?
而且我的手比较笨,不会太精细的操控。
我想要达到的目标是让第一次操作的人也能很好的控制,就像操作玩具车一样。
理想中的遥控器只有按键,没有电位器,一按就动,不按就悬停。

出0入0汤圆

发表于 2015-3-5 09:55:27 | 显示全部楼层
本帖最后由 mandylion2008 于 2015-3-5 10:01 编辑
lcw_swust 发表于 2015-3-5 09:13
原来玩具四轴也这么牛?可惜我没玩过呢。
但是它不怕风吹么?
而且我的手比较笨,不会太精细的操控。


确实是这样的,但是不同厂家用的方案不同效果有天上地下的差别。
我买的第一个真的可以精细调节油门来悬停.但第二个就不行,还是一个厂家生产的,可能为了降低成本用了便宜的方案公司的设计,稍微加油门就撞天花板,稍微减油门就直接撞地,本来想多买两个做研究备用的,都买不到了,很遗憾!

你的想法就是大疆现在的精灵能做到的,希望你继续改进,给我们大家看看,我也对四轴比较感兴趣。
电位器还是要的,通过调节电位器,精灵可以做到精细的俯仰横滚角度来决定水平速度,可以慢慢移动,我亲自试过的,用它离地半米在人行道上吹起很大的灰尘,很好玩,但别人觉得会很讨厌 希望对你有用。

出0入0汤圆

发表于 2015-3-13 13:09:34 | 显示全部楼层
这个厉害  学习

出0入0汤圆

发表于 2015-3-13 13:15:25 | 显示全部楼层
奇葩啊!!!

出0入0汤圆

发表于 2015-3-13 13:23:53 | 显示全部楼层
为了安全操作砂轮机或钻台千万别带这种手套!!!

出0入0汤圆

发表于 2015-4-9 09:26:20 | 显示全部楼层
楼主威武,实在佩服。

出0入0汤圆

发表于 2015-4-12 11:23:01 来自手机 | 显示全部楼层
不错,很霸气

出0入0汤圆

发表于 2015-4-21 15:01:21 | 显示全部楼层
姿态解算用的是什么算法

出0入0汤圆

发表于 2015-4-21 15:35:13 | 显示全部楼层
   买一个150¥  的四轴玩具,,,然后拆掉它的飞控,装上自己的去玩??  省得去折腾机架哪类结构件很烦人,,

出0入0汤圆

 楼主| 发表于 2015-4-21 15:39:56 | 显示全部楼层
chaojikoushuige 发表于 2015-4-21 15:01
姿态解算用的是什么算法

目前的算法很笨:
由重力传感器得到的atan角度与陀螺仪累加得到的角度进行“互补滤波”得到角度。

出0入0汤圆

 楼主| 发表于 2015-4-21 15:51:19 | 显示全部楼层
wkman 发表于 2015-4-21 15:35
买一个150¥  的四轴玩具,,,然后拆掉它的飞控,装上自己的去玩??  省得去折腾机架哪类结 ...

你说的是小四轴吧,空飞杯有刷电机,寿命以及载重能力都不行。
我这个可以载个手机的,发展空间比较大。

出0入0汤圆

 楼主| 发表于 2015-8-3 10:22:11 | 显示全部楼层
本帖最后由 lcw_swust 于 2015-8-3 10:23 编辑


本次对机架做了较大修改:
将机架做成工字型,且前后桨约有1/4面积的重叠,看起来比较紧凑。


PID算法的改进:
mot_dx=err0*Pidx_p+temp_i*Pidx_i+degv0*Pidx_d+(degv0-degv1)*Pidx_d2;
degv0在前一版本用的是陀螺仪与加速度传感器融合之后的数据,存在较大的抖动
且不够精细,现在degv0直接用陀螺仪的数据,效果很好,且姿态解算与PID的
频率均改为100Hz,现在的飞行器比以前稳定多了,不会有晃动,打舵响应也不错。

各单片机的波特率均改为38400,改正了无线串口的一个BUG。
目前仍存在的问题是不容易悬停,主要是没有作定高处理。
看来还是应当把加速度和气压计用上。

关于姿态解算:
我用的比较笨的办法,将重力作为三维向量,陀螺仪的数据用来对这个三维向量
进行旋转,二者再将座标进行互补滤波。
旋转公式参考《欧拉角的求取与互补滤波器在姿态解算中的应用.pdf》
关于矩阵什么的我就不多说了,还要注意是否要加负号。
  1.         //----------------------------------最初的公式
  2.         Mpu_Gx=-Mpu_Gx;//角反向
  3.         Mpu_Gz=-Mpu_Gz;
  4.         sx=sin((float)Mpu_Gx/GYDIV*3.14/PIDEG);//求各角的正余弦
  5.         sy=sin((float)Mpu_Gy/GYDIV*3.14/PIDEG);
  6.         sz=sin((float)Mpu_Gz/GYDIV*3.14/PIDEG);
  7.         cx=cos((float)Mpu_Gx/GYDIV*3.14/PIDEG);
  8.         cy=cos((float)Mpu_Gy/GYDIV*3.14/PIDEG);
  9.         cz=cos((float)Mpu_Gz/GYDIV*3.14/PIDEG);
  10.         //旋转公式
  11.         GAX=cz*cy*GAX+(-sz*cx-cz*sy*sx)*GAY+(sz*sx-cz*sy*cx)*GAZ;
  12.         GAY=sz*cy*GAX+(cz*cx-sz*sy*sx)*GAY+(-cz*sx-sz*sy*cx)*GAZ;
  13.         GAZ=sy*GAX+(cz*sx)*GAY+(cy*cx)*GAZ;
  14.        
  15.         //----------------------------------旋转公式的简化
  16.         //(cx=cy=cz=1,sx*sy=0,sin(x)=x)(角度极小的情况)
  17.         x=Mpu_Gx;
  18.         y=Mpu_Gy;
  19.         z=Mpu_Gz;

  20.         GAX=GAX+z*GAY/SINDIV+(-y)*GAZ/SINDIV;
  21.         GAY=(-z)*GAX/SINDIV+GAY+x*GAZ/SINDIV;
  22.         GAZ=y*GAX/SINDIV+(-x)*GAY/SINDIV+GAZ;

  23.         GAX=(GAX*49+AX_av*100)/50;//互补滤波GAX~AX_av*100
  24.         GAY=(GAY*49+AY_av*100)/50;
  25.         GAZ=(GAZ*49+AZ_av*100)/50;
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-8-3 22:30:49 | 显示全部楼层
谢了,很好的东西,最近也想玩玩小四轴,正苦于资料的查找!

出0入0汤圆

发表于 2015-8-4 10:53:43 | 显示全部楼层
牛人,MARK备用

出0入0汤圆

发表于 2015-12-23 00:10:39 | 显示全部楼层
楼主的太利害了,都是自己做东西。

出0入0汤圆

发表于 2016-3-25 16:57:06 | 显示全部楼层
请问楼主哪里人,有空的话大家可以一起搞搞DIY

出0入0汤圆

 楼主| 发表于 2016-3-25 18:45:03 | 显示全部楼层
xl1736 发表于 2016-3-25 16:57
请问楼主哪里人,有空的话大家可以一起搞搞DIY

绵阳,现在在做固定翼:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-4-3 20:25:11 | 显示全部楼层
好叼的楼主

出0入0汤圆

发表于 2016-4-21 08:43:28 | 显示全部楼层
NB啊!一直想做!就是脱不开身!佩服!

出0入0汤圆

发表于 2016-4-24 10:48:26 | 显示全部楼层
资料太好了,谢谢LZ
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-18 15:44

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表