作者bobowise (((((*)))))
看板Mechanical
标题Re: [学术] 问题 PID 各各参数代表什麽意思
时间Sun Mar 1 00:06:23 2015
我把你的变数带入下图,并假设这个系统是要做速度控制。
http://sofun.tw-dvd.us/jpg/PID_PPT.jpg
所以你的系统,UpdatedPeriod不是大於MAXPERIOD,不然就是小於MINPERIOD,所以才会
有900或100的状态出现。
这个原因很多,常见的情况,有以下两种:
1.你的PID参数设定不合理,导致计算出来的UpdatedPeriod过大,
超过上下限制(MAXPERIOD,MINPERIOD)。可以试着重新调整PID参数,或是将积
分器在某个稳态时停止,以防止过积分的情况。
2.程式的MAXPERIOD及MINPERIOD限制的范围太小,控制器的UpdatedPeriod被其限制住,
这个时候,可以先使用开回路来测定系统Plant的极限状态。
举例来说,您开回路丢测试讯号,PEPER最大到多少时,Plant的输出Speed可以
到多少,此时可以决定您的MAXPERIOD~
反之,PEPER最小多少时,Plant的输出Speed可以到多少,再决定您的MINPERIOD~
如果以上两个方法都测试过,计算出来的UpdatedPeriod还是非常大,那麽有可能
是该系统的Actual_Value 与 Set_Value的误差一直很大,系统无法追上,那麽
就要重新设计系统,或是检查一下Actual_Value和Set_Value的物理量转换是否有问题
最後,UpdatedPeriod超过後是否会重0开始,一般Overflow就会挂掉,不会从0开始。
你也可以写个测试程式,如果UpdatedPeriod为0时,写回一个BOOL就可以知道了.
以上浅见,希望对你有帮助。
※ 引述《kingzero (一起迷路)》之铭言:
: 谢谢你的资讯,用处很大.
: 我的问题刚刚解掉了!!
: 我补充一下实际上面可能会遇到的问题.
: PID的控制会设定控制变数的上下限
: 例如:
: if(UpdatedPeriod >= MAXPERIOD)
: {
: PTPER = MAXPERIOD;
: }
: else if(UpdatedPeriod <= MINPERIOD)
: {
: PTPER = MINPERIOD;
: }
: 但是下次取入的控制项目 UpdatedPeriod不是最後的
: 举例来说 MAXPERIOD 是900 , MINPERIOD是 100
: UpdatedPeriod 这次是1000
: PTPER是900
: 但是下次PID的计算值 UpdatedPeriod 是1099
: PTPER还是900
: 这样子看起来没有问题.
: 但是有没有可能 UpdatedPeriod会超过可以使用用的范围
: UpdatedPeriod 超过之後 UpdatedPeriod会变成从0开始计算
: 所以虽然实际的情况是 你应该把PTPER控制在 900
: 会後确会在某一个周期之後PTPER变成100
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.255.18.144
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Mechanical/M.1425139585.A.2B3.html