PID控制器的数学模型
在标准的控制类书籍上PID算法是这么定义的:
这个公式是连续系统用的,我们单片机的控制是用不了的,我们的单片机使用的是离散的控制模型也叫0阶保持器的离散系统,就是需要把上面的公式离散化,而这个离散化的过程我们使用的是后项差分法。首先把上面的积分传递函数转化为连续的s域模型:
使用后向差分法可以得到s域到z域的映射关系:
于是可以得到:
这里特地给出了Kp Ki Kd这三个参数,这三个参数就是大家最常看到的那个离散的PID公式,也就是说你在这里既可以使用Kp Ti Td的参数来建模也可以使用Kp Ki Kd的参数来建模,到这里就总算是可以把我们的传递函数放在系统中用自控原理的相应工具来分析了。分析之前要先声明一个事情,有人发现(比如在MWC和其他许多飞控中)用陀螺仪的输出来当做PID中的微分项,会取得比标准PID更好的控制效果,乍一看这么做与用前后两次欧拉角作差没有区别(因为角速度整好就是角度的微分),控制效果不一样就说不通了。
其实是这个样子的,如果我们在程序中做了非常好的线程安全的处理并且控制频率和姿态解算读陀螺的频率是一样的的情况下二者确实是没有任何差别的,但是大家的飞控都写的非常简单,姿态解算频率都高于控制频率,于是读到的陀螺仪的数据并不是‘当前使用的姿态前一时刻’的数据而是‘后一时刻’的数据,这时候PID控制的微分部分就不再是‘后项差分’而是‘前向差分’了(这就是我前面要强调使用后项差分法的原因),那这个时候就尴尬了,我们不能全部使用前向差分模型来建模(因为积分还是使用的后向模型)两边分开用又会出现模型阶次不匹配的问题,所以这时候是无法使用PID模型来考虑接下来的问题的,你使用的其实是两个独立的控制器并联,一个是角度的PI控制器,而另一个是角速度的P控制器,二者采样时间不一样,于是得当做两个独立的控制回路调整参数,这是使用这种控制器时的参数调整方法。也就道出了为什么部分情况下使用角度微分和角速度控制效果不一样的问题,这种方法固然是很好的(可以有效的降低振动),当然前提是你按照二者独立控制的思路来设计参数。但是很不幸,大家都没有这么做,依然是把整体作为PID控制器来考虑,那么,我只能说这是个近似的PID控制器了,手调固然可以(万能的实验调参啊)但是通过建模的方式算出优化的参数就不可能了。我们接下来看会怎样:
从系统的零极点图理解PID控制的原理
有了上面的PID传递函数的离散系统模型我们就可以开始下一步了,将上面的分式上下做因式分解可以得到系统的零极点,在自控原理中我们知道,系统的极点确定系统的稳定性情况,零点不影响系统稳定性,零点和极点共同决定系统的响应。这里说的有些模糊,在现代控制理论中会提到一种控制器叫零极点配置控制器,能更好的阐述零点的作用:系统中的零点可以用来与系统中的不稳定(或者不想要)的极点对消来设计出理想的控制器(数学上),工程中我们考虑的是让零点与我们不想要的极点尽可能的靠近,就能削弱这个不想要的极点对系统的影响。下面我们用极点配置的方法来设计PID控制器,这里提前声明我们使用的并不是最标准的闭环极点配置方法,因为我们的PID控制器只有两个零点可以配置(如果使用PI控制器的话就只有一个零点可以自由配置了)而且还多了一个临界稳定的极点,反馈又使用的是单位负反馈……极大的限制了极点配置的自由度,于是我们为了简单起见仅从开环部分进行极点配置,这么做有许多不严谨的地方,但是会简化许多工程上的应用(在做自适应PID控制器的时候会用到完整的极点配置方法,到那里就会发现是多么复杂的一件事儿了……)。
上图是PID控制器开环部分(就是上面推导的数学模型)常见的零极点分布情况,有两个固定在(0,0)和(1,0)位置的极点,两个对称分布的零点(手调参数时很难出现两个零点都在实轴上的情况而且我们也不希望那样),这两个零点的位置是可调的,微分时间常数Td主管零点位置的左右移(注意是‘主管’,也就是说对虚轴的位置还是有影响的),常数越大越靠右(也就是说临界稳定极点的影响越弱,抗噪声性能越好但到达0误差的稳态也就越困难,因为这个临界稳定的极点是在闭环系统中让系统到达稳态0误差的关键但很影响稳定性),积分常数Ti越大零点越靠近实轴,Ti在实际控制中的作用不好说明,留在后面再说,但是到这里大家也就看出我为什么要使用标准的Kp Ti Td参数而不是Kp Ki Kd参数了,因为使用这种参数时Kp对开环系统的稳定性(注意仅指开环系统)没有影响,我们就可以降低系统对这个参数的敏感性而主要考虑另外两个参数就好。大家在手调参数的看到的图形和这个都应该没有多少区别
接下来我们看一下我们被控系统的数学模型:
被控系统的小范围线性化模型
正如我前面所述,想要分析PID的控制性能必须得得到被控系统的线性近似模型(非线性系统下的分析工具没个正经能用的),这里大家可以通过动力学建模得到系统的非线性模型(像几乎所有的硕士博士论文那样)再泰勒展开,但是这样做往往得到的模型跟实际情况差异太大以至于没有参考价值,这里我推荐使用系统辨识的方法来得到系统的线性模型,因为这么做如果能做到正确的辨识的话还能得到系统的误差模型,于是现在在控制界很流行,只是实际用的时候就发现难度颇高,尽管有许多现成的工具但是依然特别难掌握,也难怪很多热会把这个当做是看家本领,作者在这方面也算是连皮毛都没摸全,不敢乱讲,这里就为了解释PID方便直接把我的大四轴辨识出来的Pitch轴模型拿出来当做例子来讲了:
画出来的系统阶跃响应是这个样子的:
检验系统建模的相似程度就靠这个了,给我的飞机一个阶跃信号反映出来的情况和这个确实差不多。关键是下面,它的零极点分布情况:
可以看到辨识出来的结果又两个很靠近不稳定边界的主导极点(气泡框那里)表现明显的零点又和这几个极点8杆子打不着,如果我们消灭那两个主导极点,我们的四轴理论上就可以控制的非常完美了,众所周知,主导极点越靠近0则系统稳定性越好,那么按照极点配置的方法(当然我这里指的还是开环的极点配置),那么我们接下来开始看用这种建模的方法怎么实现PID参数的配置:
用极点配置PID实现对系统的控制
那么按照上面的介绍我们来尝试消除这两个主导极点,前面说过,PID模型中两个对称零点的位置是可以任意调整的,不用计算,直接手试出如下的参数:
那么得到的开环零极点图是这样的:
那么闭环响应是这个样子的:
看着很漂亮啊,我们加大Kp到4试试,其他参数都不变
哟,完美嘛,0.5s即可到达稳态,0稳态误差,超调量也不过10%而已,相当的理想,而且从这里可以看出使用Kp Ti Td参数的优势:随意调整Kp,可以提高系统性能而且对闭环稳定性几乎没有影响,甚至对开环系统的稳定性完全没有影响,我想,这也就是MWC飞控用Kp(角速度的)作为动态参数的原因。那么好吧,令人沮丧的部分终于要来了,把这个参数烧到飞控里面,运行,哇塞,不错哦,不动摇杆它平衡的很好,那我们遥控下……我擦,越抖越大,控制不住了,翻了,打到人了,鲜血汩汩而出……………………
评论
查看更多