OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 23637|回复: 27

四轴串级PID调试

[复制链接]

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-7-18
在线时间
1 小时
发表于 2015-7-31 17:58:47 | 显示全部楼层 |阅读模式

作为四轴飞行器的小白,机缘巧合我们参加国赛的三个组被迫选择四轴飞行器的控制类题目。当时四轴所有的东西都是我一手配置,对于四轴界的小白当时逛了整整两天淘宝,看了许多配置四轴的帖子。这里提出几点个人这么久调试四轴对于当初购买元件的心得:

1.作为大四轴作为电机驱动的电调,这里一定不能节省,一定买个好点的牌子电调。作为学生党当初为了尽量省钱买了一个没有牌子的电调,这里电机的调试发现电机控制很粗糙怎么调试程序都达不到理想的效果,后来和网上的朋友交流发现他的程序和我的几乎一样,后来才发现是电调的问题。

2.还有一个就是电机的选择,我自己选择的是新西达的电机,只因为便宜啊!经济条件好的小伙伴电机还是选择好的,四轴总结一句话就是烧钱。会给你后期调试PID带来很大的好处。电机越好控制效果越精准,转速差异就越小。这里还有就是电机和浆的配置这个网上有很多普及的帖子在这就不细谈了。

3.其他的对于机架和电池大家尽量考虑满足要求越轻越好,这里也不过多介绍。

下面是我要和大家分享的也是我在这一个月里面折磨我最久的PID算法的问题,经过多番调试开始我们使用单纯的位置形PID很难达到很稳定的效果。于是在网上各种找他人的四轴算法的介绍。最终我们决定用串级PID。单纯的位置型还是模模糊糊,刚开始来个串级PID弄得我们云里雾里,一方面网上能看懂的代码资源太少,只能不断的找文字说明的帖子,把程序拼揍了出来,最后经过多番修改,折磨了一个礼拜的时间。最后终于达到了稳定的效果,串级PID的稳定效果确实很不错。这里我的机架子是X型机架(F330),调试完全与+字不同,这里给个帖子给大家参考,有详细介绍。http://www.amobbs.com/thread-5554367-1-1.html 这里也感谢这位网友帖子对我的帮助。我一直相信被帮助然后传播这种分享,会让我们在学习的路上少走更多弯路。下面贴上我们调试的PID代码,希望能对正在搞串级PID的小伙伴有点帮助,也希望大家发现错误给我指出,这个算法的问题是还是偶尔会出现PID死角,飞机失控,一边电机极速加速。尚未解决。。希望有小伙伴解决了这个问题的给点提示。

[mw_shl_code=c,true]float X,Y,Z; //定义角度设定值 float AX,AY,AZ; //角度实际值 float GZ; //定义Z轴内环设定值 float err_ox,err_oy; //定义外环差值 float err_ix,err_iy,err_iz; //定义内环差值 float err_last_x_out,err_last_y_out; //定义外环上一次的偏差值 float err_last_x_in,err_last_y_in,err_last_z_in; //定义内环上一次的偏差值 //----------------------------------------------- void intheback(void)//回中平衡设定值 { X=0.0,Y=-1.0,Z=0.0; GZ=0.0; } char pid_f_out=1,pid_f_in=1; void PID_init(void) { intheback(); // pid.max=30; pid.min=-30; //X、Y轴外环P、I、D参数 pid.Kp_x_out=6.5; pid.Kp_y_out=6.5; pid.Ki_x_out=0.0; pid.Ki_y_out=0.0; pid.Kd_x_out=0.0; pid.Kd_y_out=0.0; //三轴内环P、I、D参数 pid.Kp_x=3.9; pid.Kp_y=3.9; pid.Kp_z=0.0; pid.Ki_x=0.0; pid.Ki_y=0.00; pid.Ki_z=0.00; pid.Kd_x=(-3.51); pid.Kd_y=(-3.500); pid.Kd_z=0.0; } //内外环积分 float xi_out,yi_out; float xi_in,yi_in,zi_in; //设置积分分离标志位,使系统调节更稳定 char inde_x_out=1,inde_y_out=1; char inde_x_in=1,inde_y_in=1,inde_z_in=1; //内外环输出 float Out_X,Out_Y; float Out_x,Out_y,Out_z; void PID_contrl(float x,float y,float z,float gx,float gy,float gz) { //************外环控制********************************************************************************************************* //输入实际值 AX=x; AY=y; AZ=z; //采用位置型PID,积分采用梯形积分 //计算外环误差(PD) err_ox=X-AX; //if(abs(err_ox)>0.05) inde_x_out=0; else inde_x_out=1; //积分分离,如果误差过大(这里为两毫秒变换0.05度=每秒25度) // xi_out+=err_ox; //取消积分调控 // if(xi_out>20) {xi_out=20;} if(xi_out<-20) {xi_out=-20;} //积分限幅 Out_X=pid.Kp_x_out*err_ox+pid.Kd_x_out*(err_ox-err_last_x_out); //pid.Ki_x_out*inde_x_out*xi_out/2; err_last_x_out=err_ox; err_oy=Y-AY; //if(abs(err_oy)>0.05) inde_y_out=0; else inde_y_out=1; // yi_out+=err_oy; // if(yi_out>20) {yi_out=20;} if(yi_out<-20) {yi_out=-20;} //积分限幅 Out_Y=pid.Kp_y_out*err_oy+pid.Kd_y_out*(err_oy-err_last_y_out); //pid.Ki_y_out*inde_y_out*yi_out/2; err_last_y_out=err_oy; //*************内环控制********************************************************************************************************** //内环误差(PID) err_ix=Out_X-gx; xi_in+=err_ix; if(xi_in>30) {xi_in=30;} if(xi_in<-30) {xi_in=-30;} //积分限幅 Out_x=pid.Kp_x*err_ix+pid.Ki_x*inde_x_in*xi_in/2+pid.Kd_x*(err_ix-err_last_x_in); //限制调解PWM的值 if(Out_x>600) Out_x=600; if(Out_x<-600) Out_x=-600; err_last_x_in=err_ix; err_iy=Out_Y-gy; yi_in+=err_iy; if(yi_in>30) {yi_in=30;} if(yi_in<-30) {yi_in=-30;} //积分限幅 Out_y=pid.Kp_y*err_iy+pid.Ki_y*inde_y_in*yi_in/2+pid.Kd_y*(err_iy-err_last_y_in); //限制调解PWM的值 if(Out_y>600) Out_y=600; if(Out_y<-600) Out_y=-600; err_last_y_in=err_iy; //Z轴参数还未调试 err_iz=GZ-gz; zi_in+=err_iz; Out_z=pid.Kp_z*err_iz+pid.Ki_z*zi_in/2+pid.Kd_z*(err_iz-err_last_z_in); err_last_z_in=err_iz; PID_PWM(Out_x,Out_y,Out_z); }[/mw_shl_code]


或许我缺少天赋,但我拥有比别人付出更多努力的毅力。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
发表于 2015-7-31 22:48:42 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 1 反对 0

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-8-1
在线时间
0 小时
发表于 2015-8-1 16:48:19 | 显示全部楼层
请问楼主保护罩是怎么弄的
回复 支持 反对

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-7-18
在线时间
1 小时
 楼主| 发表于 2015-8-2 10:46:15 | 显示全部楼层
回复【3楼】Stone_Wang:
---------------------------------
四轴的防撞圈吗?我是买的。。。如果你说的是防撞圈这个东西DIY或者网上买吧,
或许我缺少天赋,但我拥有比别人付出更多努力的毅力。
回复 支持 反对

使用道具 举报

15

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2015-2-17
在线时间
3 小时
发表于 2015-8-3 09:28:14 | 显示全部楼层
请问楼主的串级PID是怎么整定的啊?能不能给点儿经验

网上说先调内环  所以先整定内环P   我把外环PID全部设为0    看看四轴在运动的时候电机有没有拉伸  可是我的四轴直接翻了  而且速度还挺快, 看不到有没有拉伸的作用啊
回复 支持 反对

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-7-18
在线时间
1 小时
 楼主| 发表于 2015-8-3 10:53:30 | 显示全部楼层
回复【5楼】叶念西风:
---------------------------------
要看现象的,还有你的四轴是X型还是+字型,我调的时候先调的内外环P,有时候要结合外环P的,不然四轴表现很无力向一边倒,我的帖子里有个网址是很详细的经验分享,调PID一定注意看清楚现象,找对方向,不然很容易越调越远距离理想值。
或许我缺少天赋,但我拥有比别人付出更多努力的毅力。
回复 支持 反对

使用道具 举报

15

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2015-2-17
在线时间
3 小时
发表于 2015-8-3 10:57:14 | 显示全部楼层
回复【6楼】创微:
---------------------------------
我的是X字型的    网上都说调内环的时候 外环为0   我就是这么调的  可是感觉一点儿都不对  如果结合外环的话  那外环的数据该怎么写呢
回复 支持 反对

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-7-18
在线时间
1 小时
 楼主| 发表于 2015-8-3 18:06:26 | 显示全部楼层
回复【7楼】叶念西风:
---------------------------------外环有个P就够了,我调试成功外环就用了一个P。。。当然你也可以加其他的增加稳定性,但可能调试过程就要漫长而艰难点。。外环P结合内环P调试,看四轴的震荡。决定合适 .上面帖子网址里有说到看到怎样的现象确定P。。
或许我缺少天赋,但我拥有比别人付出更多努力的毅力。
回复 支持 反对

使用道具 举报

6

主题

279

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2015-3-27
在线时间
98 小时
发表于 2015-9-3 20:09:06 | 显示全部楼层
新西达=XXD=差差滴
新手一般都会被告诫不要买这种.....
回复 支持 反对

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-7-18
在线时间
1 小时
 楼主| 发表于 2015-9-6 22:57:42 | 显示全部楼层
这里补上自己解决电机一边突然变速失控的问题,比赛已经结束了自己也隔了一段时间没有来这里啦!这种情况最后发现是MPU6050坏啦!所以出现了那种意外情况。这里给做四旋翼的朋友一点小提醒,比赛过程中几次意外情况,想同的程序可是几次测试的现象却一会稳定一会一塌糊涂,弄得我们摸不着头脑。我们总共换了两个MPU6050,后来总结问题,由于MPU6050集成的加速度计和陀螺仪,对于机械震动很是敏感,四旋翼在测试飞行的过程中又会有不断的强烈机械震动,测试中的磕磕碰碰肯定是不可避免的。这时候的防震工作就显得至关重要,在没有好的机械防震的条件下,很大概率会让你的MPU6050崩溃,给你带来不必要的麻烦。所以这里提醒大家在制作飞行器的时候一定要把关键芯片减震工作做好。这点我看到很多朋友的布局和防震做的真的很棒(减震球的应用),对于新手的布局和防震真是不觉惭愧,不过发现自己不足的时候也同时学习到了许多知识。
或许我缺少天赋,但我拥有比别人付出更多努力的毅力。
回复 支持 反对

使用道具 举报

6

主题

279

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2015-3-27
在线时间
98 小时
发表于 2015-10-6 18:34:13 | 显示全部楼层
我也打算做减震了,最近发现电机一直颤动,拆了螺旋桨就不会了.
回复 支持 反对

使用道具 举报

16

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
265
金钱
265
注册时间
2015-11-1
在线时间
34 小时
发表于 2016-2-21 18:29:01 | 显示全部楼层
明年电赛也做四轴,最近在摸索该怎么调试串级PID
这是我的小尾巴~
回复 支持 反对

使用道具 举报

19

主题

296

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1868
金钱
1868
注册时间
2013-7-29
在线时间
275 小时
发表于 2016-3-18 16:43:43 | 显示全部楼层
你程序里角度和角速度转时没有看到积分时间啊
回复 支持 反对

使用道具 举报

19

主题

296

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1868
金钱
1868
注册时间
2013-7-29
在线时间
275 小时
发表于 2016-3-18 17:11:11 | 显示全部楼层
我刚明白了,唉![url][/url]刚才问的问题有点太幼稚了。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-3-1
在线时间
1 小时
发表于 2016-3-19 20:43:54 | 显示全部楼层
你的KD为什么都是负数??
回复 支持 反对

使用道具 举报

82

主题

194

帖子

0

精华

高级会员

Rank: 4

积分
595
金钱
595
注册时间
2015-10-16
在线时间
72 小时
发表于 2016-5-16 20:53:46 | 显示全部楼层
楼主,请问下,角度是角速度是两个不同的量,,角度作为角速度的设定值是直接就将采集到的角度值作为角速度的值吗?还是角速度根据某种变换成角度的关系式值在作为角速度的设定值?
回复 支持 反对

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-7-18
在线时间
1 小时
 楼主| 发表于 2016-12-9 10:17:34 | 显示全部楼层
Stone_Wang 发表于 2015-8-1 16:48
**** 作者被禁止或删除 内容自动屏蔽 ****

防护圈,在网上买的那种,因为出来工作了很久没有上来啦!回复太晚不好意思
或许我缺少天赋,但我拥有比别人付出更多努力的毅力。
回复 支持 反对

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-7-18
在线时间
1 小时
 楼主| 发表于 2016-12-9 10:18:25 | 显示全部楼层
EvanLin 发表于 2016-3-19 20:43
你的KD为什么都是负数??

根据实际想象调的
或许我缺少天赋,但我拥有比别人付出更多努力的毅力。
回复 支持 反对

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-7-18
在线时间
1 小时
 楼主| 发表于 2016-12-9 10:18:43 | 显示全部楼层
创微 发表于 2016-12-9 10:18
根据实际想象调的

实际现象
或许我缺少天赋,但我拥有比别人付出更多努力的毅力。
回复 支持 反对

使用道具 举报

5

主题

51

帖子

0

精华

高级会员

Rank: 4

积分
514
金钱
514
注册时间
2016-3-1
在线时间
63 小时
发表于 2016-12-9 23:01:01 | 显示全部楼层
MARK一下
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2017-4-17
在线时间
1 小时
发表于 2017-4-17 10:05:51 | 显示全部楼层
楼主,你好,我现在在调试内环,调试内环时,外环的PID参数都为0吗?
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2017-5-4
在线时间
3 小时
发表于 2017-5-18 23:42:45 | 显示全部楼层
6666         
回复 支持 反对

使用道具 举报

24

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
248
金钱
248
注册时间
2015-7-24
在线时间
32 小时
发表于 2017-6-10 22:36:37 | 显示全部楼层
本帖最后由 a1154870074 于 2017-6-10 22:37 编辑
且试天下 发表于 2017-4-17 10:05
楼主,你好,我现在在调试内环,调试内环时,外环的PID参数都为0吗?

看六楼回复:要看现象的,还有你的四轴是X型还是+字型,我调的时候先调的内外环P,有时候要结合外环P的,不然四轴表现很无力向一边倒,我的帖子里有个网址是很详细的经验分享,调PID一定注意看清楚现象,找对方向,不然很容易越调越远距离理想值。
回复 支持 反对

使用道具 举报

12

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
950
金钱
950
注册时间
2017-4-3
在线时间
116 小时
发表于 2017-9-12 10:14:23 | 显示全部楼层
外环不是输出的是角速度么,没看没出来是输出的角速度啊
回复 支持 反对

使用道具 举报

1

主题

48

帖子

0

精华

高级会员

Rank: 4

积分
558
金钱
558
注册时间
2017-7-26
在线时间
50 小时
发表于 2017-10-17 11:28:27 | 显示全部楼层
a1154870074 发表于 2017-6-10 22:36
看六楼回复:要看现象的,还有你的四轴是X型还是+字型,我调的时候先调的内外环P,有时候要结合外环P的, ...

老哥 你也是调内环参数的时候加了外环的p吗
回复 支持 反对

使用道具 举报

1

主题

48

帖子

0

精华

高级会员

Rank: 4

积分
558
金钱
558
注册时间
2017-7-26
在线时间
50 小时
发表于 2017-10-23 20:52:34 | 显示全部楼层
且试天下 发表于 2017-4-17 10:05
楼主,你好,我现在在调试内环,调试内环时,外环的PID参数都为0吗?

老哥 你最后调好了吗
回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2016-12-13
在线时间
40 小时
发表于 2018-3-3 11:48:17 | 显示全部楼层
善于分享的好人
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2018-7-20
在线时间
0 小时
发表于 2018-7-21 16:12:49 | 显示全部楼层
楼主大佬,我想写一个无人机前进的程序,您给指点指点行吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-29 17:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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