打印

传递函数问题 PID

[复制链接]
9443|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xddzccn|  楼主 | 2008-4-11 20:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
好不厉害| | 2008-4-12 19:36 | 只看该作者

HOHO 给模型搞清楚了

首要是建模   这样才好调参数
用带死区的PID吧 

使用特权

评论回复
板凳
xddzccn|  楼主 | 2008-4-12 23:24 | 只看该作者

死区PID

死区PID 晕了???????????

使用特权

评论回复
地板
wxj1952| | 2008-4-13 18:10 | 只看该作者

死区。

超调区域不控?

建模?程序跑飞了还乱控。知难行易:按自己希望的要求做个输入/输出表,查表数据控制。

使用特权

评论回复
5
xddzccn|  楼主 | 2008-4-13 19:08 | 只看该作者

输入输出表也不错!

输入输出表也不错!

使用特权

评论回复
6
wxj1952| | 2008-4-14 08:23 | 只看该作者

有人挑剔。

有人说你查表法不叫PID,响应太慢。故意把输入跳变,来考验你系统的响应。

这还不容易,做一个有差调节的计算式,输入差别越大,输出量越多(暂时不符合输入输出表值)。当输入差别大于某个值时,全量输出(全速升/降温度),一旦接近设定值,即恢复到输入输出表值稳态输出。这个接近值的大小,与加热器的属性有关。

PID实现啦。

使用特权

评论回复
7
jack.king| | 2008-4-14 08:25 | 只看该作者

为什么要建模?怎么建模呢?

使用特权

评论回复
8
piter_tan| | 2008-4-14 08:45 | 只看该作者

我也想知道

哪位大虾能具体的说说呢
看书都只知道数学原型
PID这几个参数不知如何代进去呀

使用特权

评论回复
9
xddzccn|  楼主 | 2008-4-14 19:49 | 只看该作者

系统函数

不知道能不能自己测出 系统函数啊?
好像还有一种DDC算法,也不明白
在书上看到 H(s)=e^-ts/(1+T*S);
完全不懂!

使用特权

评论回复
10
IceAge| | 2008-4-14 20:29 | 只看该作者

查以前的帖子

温控系统的数学模型不难,如果你有控制的背景。查表法确实不叫PID,因为pid有积分与微分项,不是查表能做到的,查表只能做到线性或非线性比例控制。

使用特权

评论回复
11
piter_tan| | 2008-4-14 21:27 | 只看该作者

很高兴能见到IceAge

翻了以前的老贴
IceAge回答得很详细
也许是俺没有控制背景理论吧
有些问题还得请教下
如 已注册 问过的一样
如何确定输出?
假如一个温度控制,设置目标温度100度,当前实际温度60度,前一次测量温度56度,再前一次测量温度55度,微分时间10,积分时间5,比例15,控制周期为2秒,输出用MCU的PWM控制固态继电器,PID计算的结果为VALpid,这个结果如何转化为PWM的占空比?

使用特权

评论回复
12
piter_tan| | 2008-4-14 21:46 | 只看该作者

引用老贴 会流泪的鱼 发过的贴请教

刚才在家里翻箱倒柜找出了一张温控仪的说明书,它P可以在0.0-100.0、I在0-4320、D在0-1200、0-60秒可调,默认是P=3.0、I=250、D=50,采样周期是20秒,就这些参数而言,假设我在设定参数的+-10度之间进行PID控制,公式还是这条:d(t)=p*(e(0)-e(1))+i*e(0)+d*(e(0)-2e(1)+e(2))经过几个周期后设定温度是60.0度,e(0)=55.0、e(1)=55.6、e(2)=55.9 (e直接把温度值代进来应该可以的吧?

使用特权

评论回复
13
piter_tan| | 2008-4-14 22:22 | 只看该作者

先顶起来.....

等待中......

使用特权

评论回复
14
IceAge| | 2008-4-14 22:24 | 只看该作者

上述公式是所谓“增量式“

即:d(0) = T(0) - T(1) <----> T(0) = T(1) + d(0)

因为pwm 可以近似认为是线性的,即PWM的占空比与计算的结果为VALpid为正比关系,这中间的系数可以折入pid 中,也就是说最终计算的结果就是占空比。

使用特权

评论回复
15
piter_tan| | 2008-4-14 22:50 | 只看该作者

是这样吗

谢谢 IceAge
也许这样对我们刚接触PID来说还是不太了解
能否将上面的数值代入公式给我们演示一下呢

使用特权

评论回复
16
piter_tan| | 2008-4-15 09:24 | 只看该作者

TO:IceAge

V = Kp*e + Ki*integrator(e)  --> 
I(n) = I(n-1) + Ki * (e(n) - e(n-1)) ---- 单独的积分器
V(n) = Kp*e(n) + I(n) 

请教IceAge,对于上面的公式,I(n)是什么呀,e(n)是否为第N次的温度差
计算出V(n)后,怎么转换成最终输出呢?

使用特权

评论回复
17
yewuyi| | 2008-4-15 10:21 | 只看该作者

呵呵,计算值直接比例缩小作为PWM的占空比就行

使用特权

评论回复
18
好不厉害| | 2008-4-15 11:04 | 只看该作者

简单的温控系统没必要搞那么复杂

就想LS的那样查表吧,低了调高,高了调低,调节的程度与误差的程度成比例
就像热水器,对温度要求并不是很严格,偏离一两度都无所谓

另外:温度系统一般可以近似的看做惯性环节和延迟环节串联,也就是H(s)=e^-ts/(1+T*S);对于其中的t和T,一般要做试验才能确定,通过给定输出,测输出,然后做曲线拟合,确定t和T的数值,在次基础上,根据动态性能指标,确定PID的参数,你如果用单片机控制的话,还用把模型离散化

使用特权

评论回复
19
piter_tan| | 2008-4-15 11:25 | 只看该作者

LS的能把模型离散说说吗

现在就是用单片机控制的
且编译器也不支持浮点
相同的原理,用比较法,高的停止输出,低的就加热
以前用在控制的别地方,温度误着最多也是几度而以
且现在用在给一块铝合金加热,温度误差可大了
采样回来的温度也跳变,如现是140度,下一次采样回来显示又变为119度这样了
所以才想用PID来控制看看

使用特权

评论回复
20
好不厉害| | 2008-4-15 12:04 | 只看该作者

主要是Z变换

这个你要看控制理论的书


你的控制对象不一样,也就是t和T的参数不一样,铝合金导热快,t和T也相应较小,你说的温度跳变较大,我想主要是这个原因

你就照ls的思路弄吧,误差比较大,输出就调大点,小就调小点,小到一定的程度,就不输出

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

550

帖子

0

粉丝