搜索
bottom↓
回复: 33

四轴PID控制不收敛

[复制链接]

出0入0汤圆

发表于 2012-9-4 12:25:15 | 显示全部楼层 |阅读模式
本帖最后由 jony_lee1986 于 2012-9-4 12:27 编辑

我现在是通过PID单独调试相对的两个马达,采用增量式PID,输入是角度,输出是对应的马达PWM Duty的改变量。
测试架构是这样的:将相对的1、3马达关掉,在将1、3马达拖起来,让2、4马达悬空,控制2、4马达PWM可以左右晃动,单独加入P后感觉回收力很小,加大P后就一直左右震荡。加入I后拿在手上倾斜一下才感觉回收力度在慢慢增大,但是还是会调过,出现震荡!加入D后没有改善。下面是我的PID算法:
int32_t        PID_Cal(float Kp,float Ki,float Kd)
{
        float PID_Value,Delta_Ek,Delta_Ek_B;
        int32_t PID_Temp;
       
        Delta_Ek = AngleMotor - AngleMotor_B1;                                //相邻两次的角度差
        Delta_Ek_B = AngleMotor_B1 - AngleMotor_B2;                //上一次的角度差
       
        PID_Value = Kp*Delta_Ek;                                                                                        //比例项
        PID_Value += (Ki*AngleMotor);                                                                        //积分项
        PID_Value += (Kd*(Delta_Ek - Delta_Ek_B));                //微分项
       
        PID_Value += PID_Deci;                                                                                                //获取整数部分
        PID_Temp = (int32_t)PID_Value;
        PID_Deci = PID_Value - PID_Temp;
        return PID_Temp;
}
由于我是4ms采集一次数据并计算一次角度来改变电机PWM Duty,所以很多时候PID出来的都是比较小的数,所以每次都保留了小数部分,将整数部分去改变PWM Duty。比如:马达2高、马达4低算出角度是正的,马达2低、马达4高算出角度是负的,我会将这个角度带到PID中,如果得到的值是正的就会去减小马达2的Duty,增大马达4的Duty;如果结果为负就增加马达2的Duty,减小马达4的Duty。

请各位帮忙分析一下如何才能收敛,非常感谢!!

本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2012-9-4 16:40:47 | 显示全部楼层
总感觉哪里不对、难道是dt??

出0入0汤圆

 楼主| 发表于 2012-9-4 17:22:55 | 显示全部楼层
这里的dt应该就是4ms!!P值可以影响震荡的周期,也就是红色的角度大概是在1sec左右!请各位不吝赐教,谢谢!

出0入0汤圆

 楼主| 发表于 2012-9-4 17:25:45 | 显示全部楼层
260186221 发表于 2012-9-4 16:40
总感觉哪里不对、难道是dt??

dt应该是4ms,请问一般这个怎么选择?

出0入0汤圆

 楼主| 发表于 2012-9-4 17:48:20 | 显示全部楼层
目前给了PID三个参数还是有些小抖动,不能够稳在那里!附件是抖动波形,绿色为角度,其余两个是PWM的duty!请问还有那些参数可调。现在的 P =1.2;I = 0.01;D = 120。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2012-9-4 18:21:08 | 显示全部楼层
本帖最后由 john800422 于 2012-9-4 18:33 编辑
jony_lee1986 发表于 2012-9-4 17:48
目前给了PID三个参数还是有些小抖动,不能够稳在那里!附件是抖动波形,绿色为角度,其余两个是PWM的duty! ...


启动马达时, 不做平衡
角度震动大约是多少??
图形没有单位...

出0入0汤圆

 楼主| 发表于 2012-9-4 18:42:44 | 显示全部楼层
john800422 发表于 2012-9-4 18:21
启动马达时, 不做平衡
角度震动大约是多少??
图形没有单位...

我现在是将1、3马达架起来,初始给一个固定的duty,使用PID调节后一直会有正负3°的跳动,不能够稳住。

出0入0汤圆

发表于 2012-9-4 19:46:27 | 显示全部楼层
AngleMotor_B2 有纪录吗??

出0入0汤圆

 楼主| 发表于 2012-9-4 20:00:51 | 显示全部楼层
john800422 发表于 2012-9-4 19:46
AngleMotor_B2 有纪录吗??

有,在子程序外面有保存!!
                AngleMotor = AngleMotor13;
                AngleMotor_B1 = AngleMotor13_B1;
                AngleMotor_B2 = AngleMotor13_B2;
                PID_Deci = PID13_Deci;
                Delta_Duty = PID_Cal(Kp13,Ki13,Kd13);

                AngleMotor13_B2 = AngleMotor13_B1;
                AngleMotor13_B1 = AngleMotor13;
                PID13_Deci = PID_Deci;

出0入0汤圆

 楼主| 发表于 2012-9-5 13:35:01 | 显示全部楼层
请问增量式PID三个参数如何选定,现在测试的结果是P大会震荡频繁,但是当一边收外力倾斜时还是回收力度比较小,反映有一点慢....

出0入0汤圆

发表于 2012-9-6 08:30:52 | 显示全部楼层
也碰到抖得问题,不过我的D项加的是陀螺仪输出的角速率,也在+-2度的抖,不明白什么个原因

出0入0汤圆

发表于 2013-3-13 20:26:54 | 显示全部楼层
学习一下,最近调PID参数也碰到了问题.

出0入0汤圆

发表于 2013-3-25 16:22:41 | 显示全部楼层
我也用到了PID,但是不是增量式的

出0入0汤圆

发表于 2013-3-25 16:30:38 | 显示全部楼层
建议先调P到震荡,再调D,D是跟变化率成反比,用负数。最后才是I,调残插。

出0入0汤圆

发表于 2013-3-26 00:51:04 | 显示全部楼层
netawater 发表于 2013-3-25 16:30
建议先调P到震荡,再调D,D是跟变化率成反比,用负数。最后才是I,调残插。 ...

I應該加到甚麼程度??

目前簡單的震動, PD可以平衡
但過大的震動就會發散了( 越震越大 )

另付一下PD的調法

固定四軸(X型):
1. 固定對角兩顆馬達, 此時對固定軸旋轉, 理想上Pitch的變化會等於Roll的變化
2. 建立U字形平台, 並將固定軸放置其上U上兩端, 此時推動四軸飛行器, 應該可以自由旋轉
3. 開啟四軸即可調整PID看結果

無外力測試&調整:
1. 啟動馬達, 讓螺旋槳可以正常旋轉
2. 先加P值, 直至飛行器開始震盪
3. 在加D值, 直至可以仰制飛行器震盪 ( D太大會引起震盪 )
4. 反覆調整PD, 直至找到適合區間

有外力測試&調整:
1. 外加力量轉動四飛行器, 並看震盪是否可以收斂
2. 不能收斂則減少P或加大D ( D太大也會引起震盪 )
3. 反覆調整PD, 直至找到適合區間

出0入0汤圆

发表于 2013-3-26 13:50:39 | 显示全部楼层
john800422 发表于 2013-3-26 00:51
I應該加到甚麼程度??

目前簡單的震動, PD可以平衡

你好像碰到硬件限制了,PID不是万能的了。建议检查马达和驱动部分,看上去带不动了。

出0入0汤圆

发表于 2013-3-26 18:25:56 | 显示全部楼层
netawater 发表于 2013-3-26 13:50
你好像碰到硬件限制了,PID不是万能的了。建议检查马达和驱动部分,看上去带不动了。 ...

不清楚你說的硬件限制

是指馬達轉速沒辦法更高
無法提供足夠的推力做平衡的意思嗎??

那假設硬件解決了
I值應該如何去調整?
如何調整出合適的I值?

出0入0汤圆

发表于 2013-3-28 13:47:08 | 显示全部楼层
john800422 发表于 2013-3-26 18:25
不清楚你說的硬件限制

是指馬達轉速沒辦法更高

差不多,马达就是硬件,先要选合适的马达,软件优化是建立在这基础上得。

I只是为了消除残差,跟静态误差有关,不大能应付这种动态震荡。

PS:你是港台人?不用简体字的说。

出0入0汤圆

发表于 2013-3-29 02:07:11 | 显示全部楼层
netawater 发表于 2013-3-28 13:47
差不多,马达就是硬件,先要选合适的马达,软件优化是建立在这基础上得。

I只是为了消除残差,跟静态误 ...

四軸是450mm的, 總重約1kg左右吧
馬達用2212 980KV + 1045的槳 + 40A電調
單顆馬達推力應該有800以上

感覺應該不會推力不足

我在調調看I值

台灣的

出0入0汤圆

发表于 2013-3-29 10:04:19 | 显示全部楼层
john800422 发表于 2013-3-29 02:07
四軸是450mm的, 總重約1kg左右吧
馬達用2212 980KV + 1045的槳 + 40A電調
單顆馬達推力應該有800以上

哦,你多试试。可以看看我写的一点运动控制的理论总结,http://www.amobbs.com/thread-5514372-1-1.html

四轴飞行用了四个马达,这个应该增大了复杂度,机械的平衡也应该考虑进去。

出0入0汤圆

发表于 2013-4-6 10:21:14 | 显示全部楼层
学习         

出0入0汤圆

发表于 2013-9-2 11:20:59 | 显示全部楼层
挺不错的帖的

出0入0汤圆

发表于 2013-9-2 20:34:55 | 显示全部楼层
加油,四轴飞行用了四个马达,这个应该增大了复杂度

出0入0汤圆

发表于 2013-9-3 14:58:50 | 显示全部楼层
不错的贴,pid很费事啊

出0入0汤圆

发表于 2013-9-4 05:23:54 | 显示全部楼层

不错的贴,pid很费事啊

出0入0汤圆

发表于 2013-9-6 13:46:15 | 显示全部楼层
一般大家都用什么来调四轴???
还有我觉得增量式PID可能会引入积分误差。

出0入0汤圆

发表于 2013-10-3 18:02:08 | 显示全部楼层
请问 姿态角解算出来后 该怎么通过PID控制电机,经PID控制后输出的量怎么分配到四个电机上呢?这里面X模式和+模式有什么区别?

出0入0汤圆

发表于 2013-11-4 20:40:16 | 显示全部楼层
同问,  请问一下,这里 的角度是欧拉角还是什么角?  可以直接用到PD的调节中?

出0入0汤圆

发表于 2013-11-4 20:40:44 | 显示全部楼层
同问,  请问一下,这里 的角度是欧拉角还是什么角?  可以直接用到PD的调节中?

出0入0汤圆

发表于 2014-2-2 18:09:15 | 显示全部楼层
表示学习ING

出0入0汤圆

发表于 2014-4-19 15:39:45 | 显示全部楼层
x模式的pid公式是什么啊?

出0入0汤圆

发表于 2014-4-29 15:46:15 | 显示全部楼层
你这个做的好高端啊

出0入0汤圆

发表于 2014-9-11 14:33:10 | 显示全部楼层
说的 挺有道理

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-29 18:22

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

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