智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 14090|回复: 20
打印 上一主题 下一主题

[控制类] PID控制量的输出问题

  [复制链接]

3

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
363
QQ
威望
274
贡献
29
兑换币
2
注册时间
2010-7-17
在线时间
30 小时
跳转到指定楼层
1#
发表于 2011-2-26 11:10:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1贡献
我是刚接触PID的新手,看了很多PID的理论知识,有一点不明白。但是不明白PID控制的输出控制量是什么.。
输入量是速度的偏差,假如我设定转速时5m/s,实际转速是4m/s,那么偏差就是1m/s ,把这个偏差当做输入量送到PID控制器并进过计算的输出控制量与PWM如何对应,那个输出我怎么处理,难道直接就送给电机?PID运算出的控制量需经过映射到实际控制量从而实现对系统的调节,速度的偏差如何映射成PWM?

12

主题

364

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1536
威望
706
贡献
188
兑换币
28
注册时间
2010-3-14
在线时间
321 小时
2#
发表于 2011-2-26 13:01:34 | 只看该作者
你输入输出的不是实际速度,而是编码器的脉冲数好吧
回复

使用道具 举报

12

主题

364

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1536
威望
706
贡献
188
兑换币
28
注册时间
2010-3-14
在线时间
321 小时
3#
发表于 2011-2-26 13:01:40 | 只看该作者
你输入输出的不是实际速度,而是编码器的脉冲数好吧
回复

使用道具 举报

12

主题

364

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1536
威望
706
贡献
188
兑换币
28
注册时间
2010-3-14
在线时间
321 小时
4#
发表于 2011-2-26 13:01:42 | 只看该作者
你输入输出的不是实际速度,而是编码器的脉冲数好吧
回复

使用道具 举报

12

主题

364

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1536
威望
706
贡献
188
兑换币
28
注册时间
2010-3-14
在线时间
321 小时
5#
发表于 2011-2-26 13:02:07 | 只看该作者
不好意思,网速卡,点多了,抱歉
回复

使用道具 举报

15

主题

119

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2957
QQ
威望
469
贡献
2294
兑换币
2
注册时间
2010-11-14
在线时间
97 小时
6#
发表于 2011-3-6 15:15:10 | 只看该作者
速度的偏差 转化成电机的占空比 进行调节就行了
回复

使用道具 举报

9

主题

86

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1723
QQ
威望
349
贡献
1278
兑换币
10
注册时间
2010-11-15
在线时间
48 小时
7#
发表于 2011-3-28 18:07:16 | 只看该作者
一样茫然中,求解
回复

使用道具 举报

4

主题

221

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1161

优秀会员奖章

QQ
威望
452
贡献
673
兑换币
0
注册时间
2011-4-9
在线时间
18 小时
8#
发表于 2011-4-23 17:52:29 | 只看该作者
回复

使用道具 举报

0

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
威望
180
贡献
29
兑换币
2
注册时间
2011-4-9
在线时间
12 小时
9#
发表于 2011-5-7 14:31:27 | 只看该作者
//位置式 PID 控制设计
unsigned int LocPIDCalc(int NextPoint)
{
    register int  iError,dError;
  
  iError = sptr->SetPoint - NextPoint;       //偏差
  sptr->SumError += iError;       //积分
  dError = iError - sptr->LastError;     //微分
  sptr->LastError = iError;
      
  return(sptr->Proportion * iError            //比例项
           + sptr->Integral * sptr->SumError   //积分项
           + sptr->Derivative * dError);        //微分项
}

第一:以上的是位置式PID 算法,输入的是从CCD中读取过来的黑线的中点,setpoint的值是舵机位置。按照凌阳公司的PID解说,好像这个函数的返回值是具体的位置,而不是增量。其实PID的程序,比如说要偏差啦,积分了,微分了,这些设置我是懂的,我也看了好多大学的报告,也包括他们的程序,程序也很少。感觉还是有点云里雾里的。这个返回值到底是什么东西,是舵机角度的增量吗??还是PWM的增量,还是直接是具体位置(比如采集40个点,正中是20)?我知道增量式PID算出来是增量的,最后要实现控制的话还得加上原来的PWM数值。这个位置式是什么情况。
看过whut_wj的一个回答,输出的是PWM的增量。但是,他回答的是增量式的,而不是位置式的。  

可以直接给,但是有个问题要考虑,就是PWM的分频系数那,如果时钟太大,那么为了保证1.5MS的高平时间,这样给的数就是比较大,带来3个参数的值比较大,所以,你要协调好,这个参数的整定是需要花很长的实验时间来确定的
回复

使用道具 举报

1

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
400
QQ
威望
254
贡献
50
兑换币
0
注册时间
2011-4-10
在线时间
48 小时
10#
发表于 2011-5-9 09:48:02 | 只看该作者
回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|亿加合和智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-5-6 13:57 , Processed in 0.171742 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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