【控制理论】滑模控制最强解析
滑模控制是一种相当简单而且控制性能优越的控制方法,但是绝大多数的工厂在做过程控制时还是只考虑PID控制,我觉得有必要写一篇文章详细的解释一下它的工作原理。
它的控制效果优越体现在哪里呢?主要是两点:
1、滑动模态可以进行设计,调节的参数少,响应速度快。
2、对扰动不灵敏。什么是干扰?如果你的机器好端端地在工作,突然来了一个熊孩子拿起一钉锤就是一顿敲;或者工厂附近有高铁,每隔一段时间地面就要抖两下。滑模控制对扰动有很强的抑制能力,这对于在复杂环境工作下的机器来说非常友好。
滑模控制本质上是非线性控制的一种,简单的说,它的非线性表现为控制的不连续性,即系统的“结构”不固定,可以在动态过程中根据系统当前的状态有目的地不断变化,迫使系统按照预定“滑动模态”的状态轨迹运动。
针对一个真实的系统来解释,现在假设光滑的平面上有一个小木块,它在坐标轴X=2处,它存在一个向坐标轴远离的速度,现在的问题就是如何设计一个控制器让它最后能停在原点。
1、根据上面的描述,可以写出这个小木块的状态方程:
x1,x2分别代表木块的位置和速度,u代表控制器的输出即加速度,控制目标很明确,最终要让 。用系统框图来表示为:
2、设计滑模面
这里可能有人就要问了,滑模面是个什么东西?凭什么要写成这种形式而不是其他形式?
之前说过了控制器的目的是为了使得 ,那如果
,会有什么结果呢?
可以看出状态量最终都会趋于零,而且是以指数速度趋近,指数趋近速度什么意思,也就是说当 时,趋近到零的这个过程它已经完成了63.2%,当
时,它已经完成了95.021%。
调节c的大小可以调节状态趋近于零的速度。c越大,速度也就越快。所以如果满足 ,那么系统的状态将沿着滑模面趋于零,(
称之为滑模面)。用相平面来表示这个指数趋近的过程为,沿着箭头的方向移动到原点的这个过程就是设计滑模面要实现的效果。
3、设计趋近律,寻找s与控制u之间的关系
上面说到如果 则可以保证状态变量最终会趋于零,可是如何保证
呢?这就是控制率u所要实现的内容了。
,在这个方程里面并没有u,我们想到可能和u有关系,果然:
趋近律就是指的 ,趋近律一般有如下几种设计:
根据以上的趋近律,可以求出控制器u的表达式,对于 来说,
,对木块施加该u的控制,那么最终木块会稳定在原点。
回来解释为什么趋近律这么设计会保证s=0。
在控制原理中,用Lyapunov函数来判断系统的稳定性,对于系统状态方程 (目标已经变成s=0,因此现在写成s的状态方程),对于平衡点s,如果存在一个连续函数V满足
那么系统将在平衡点s=0处稳定,即
令 ,很明显满足第一个条件,第二个条件
也满足。满足Lyapunov函数的条件,s最终会稳定滑模面,也就是s=0。
讲到这里,我们可以稍微总结一下滑模控制的设计步骤。首先根据被控对象的状态方程设计滑模面,状态一旦到达滑模面 ,将以指数趋近方式达到稳定状态。然后设计趋近律求出控制器的表达,李雅普诺夫函数作为稳定性的保证,即保证s=0可达,(相平面中的其他点能到达滑模面)。
细心的朋友可能发现了一个问题,Lyapunov函数的两个条件能保证 ,但是这个几乎没有什么用处。为什么这么说呢,因为它对到达的时间没有任何的要求,t=2s时s=0和t=200s时s=0都满足Lyapunov函数的要求,万一真的出现那种长时间才到达滑模面的情况,在实际情况下,是没有意义的。
对Lyapunov函数的第二个条件做修改,让它能实现有限时间达到稳定点。
2)
对于改进后的第二个条件,分离变量然后积分,假设积分时间为t。
得到:
根据这个不等式可以看出V将在有限时间tr内到稳定点,越大,到达稳定点的时间越快。
因为Lyapunov条件的改变,控制器u也要相应做出改变:
只有满足 才能实现有限时间到达滑模面。
咱们继续分析,因为以上的讨论都还没有涉及干扰项d,现在将干扰加入系统状态方程,看看滑模控制是怎么做到对干扰不敏感的,这是真的牛。
加入干扰项后,有新的状态方程:
当然,这对滑模面的设计没有影响,滑模面还是 ,变化的是趋近律
,
,控制率u还是保持上面的形式
为了满足Lyapunov函数,有:
式中的L表示干扰的上界,
对比的条件,只有当 时,Lyapunov函数既满足有限时间收敛又负定。因此,系统仍按照先滑动到滑模面,再沿滑模面做指数趋近运动。干扰没有对系统造成影响。
转自:https://blog.csdn.net/xiaohejiaoyiya/article/details/90271529
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗