OpenEdv-开源电子网

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

关于PID算法纠结点

[复制链接]

38

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2015-3-3
在线时间
1 小时
发表于 2015-4-20 22:26:47 | 显示全部楼层 |阅读模式
5金钱
我用的是四旋翼电机,做的平衡杆,用PID算法控制的角度可是当角度差较大时杆子振荡波动太大了,杆子根本没法平衡,已经毁了桨叶,落后别人好多了,调了一下午都不行,请问我还可以用PID算法吗,还是用最笨的方法,我很着急,时间不多了,请大神指点一下

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2015-4-20 22:56:21 | 显示全部楼层
不用p|D用啥?2个电机的加减号搞错了没有,先确认你的油门计算公式是否正确。pID本来就是个细致活得耐心!
手艺人要内外兼修。
回复

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2015-4-20 23:09:59 | 显示全部楼层
先给的小点,看调节趋势,再慢慢加上去
博观而约取,厚积而薄发。
回复

使用道具 举报

38

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2015-3-3
在线时间
1 小时
 楼主| 发表于 2015-4-20 23:15:36 | 显示全部楼层
回复【3楼】745021926:
---------------------------------
可是,我给了小的角度差,算法在差值小于5度就不调节了,这个是怎么回事呢?
回复

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2015-4-20 23:17:14 | 显示全部楼层
回复【4楼】梁小哥:
---------------------------------
程序中做了限制?这个肯定不对
博观而约取,厚积而薄发。
回复

使用道具 举报

38

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2015-3-3
在线时间
1 小时
 楼主| 发表于 2015-4-20 23:18:38 | 显示全部楼层
回复【2楼】wangyan915205:
---------------------------------
额,PID算法还需要考虑加减号?不是直接给的设定值,与信号测量值,然后设定一下参数吗?哪里需要设定加减号呢?不懂求指点
回复

使用道具 举报

38

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2015-3-3
在线时间
1 小时
 楼主| 发表于 2015-4-20 23:25:15 | 显示全部楼层
回复【5楼】745021926:
---------------------------------
我没有设置任何限制啊,他自己不调节了的,程序如下,增量式PID控制
int incPIDcalc(PIDtypedef *PIDx,u16 nextpoint)//PID????
{
 int iError,iincpid;
 iError=PIDx->setpoint-nextpoint;  //
 /*iincpid=                                               
 IDx->proportion*iError                //e[k]
 -PIDx->integral*PIDx->last_error          //e[k-1]
 +PIDx->derivative*PIDx->prev_error;//e[k-2]
*/
iincpid=                                                         //????????
PIDx->proportion*(iError-PIDx->last_error)
+PIDx->integral*iError
+PIDx->derivative*(iError-2*PIDx->last_error+PIDx->prev_error);

 IDx->prev_error=PIDx->last_error;                            //?????ó??????????????-2
 IDx->last_error=iError;                                     ////   -1
 return(iincpid) ;
}

定时器中断处理程序500毫秒的中断,PWM1原来为580;中断程序:
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)          
{
PID_set(&PID1,0.05,0.5,4);
pwm1+=(incPIDcalc(&PID1,degree)/8);  
TIM3_PWM1_VAL= pwm1;
TIM_ClearITPendingBit(TIM4, TIM_IT_Update);   

}

请问有错误吗?
回复

使用道具 举报

38

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2015-3-3
在线时间
1 小时
 楼主| 发表于 2015-4-20 23:31:06 | 显示全部楼层
回复【5楼】745021926:
---------------------------------
还有为什么电机一会儿不转,一会儿转速又特别大呢,请问是哪里错误呢,不敢再大幅度搞了没有桨叶了
回复

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2015-4-20 23:36:46 | 显示全部楼层
你这个我没仔细看,但我觉得PID首先要把偏差范围,调节范围,限幅还有调节方向这些基本的问题确定
博观而约取,厚积而薄发。
回复

使用道具 举报

38

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2015-3-3
在线时间
1 小时
 楼主| 发表于 2015-4-20 23:39:38 | 显示全部楼层
回复【9楼】745021926:
---------------------------------
额,这个PID算法可以限伏吗?PID调节范围怎么设置呢,用判断程序吗?还是什么?还有调节范围怎么设置呢,这个真心不懂啊
回复

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2015-4-21 07:10:45 | 显示全部楼层
500ms刷新太大,我用的是5ms提高实时性,限幅,用示波器看看波形,姿态解算,滤波等等这些因素都要考虑。
手艺人要内外兼修。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 16:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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