PID控制器、超前校正网络等经典传递函数的C语言实现 |
您所在的位置:网站首页 › pi控制器是超前还是滞后 › PID控制器、超前校正网络等经典传递函数的C语言实现 |
前面发了一个视频,主要讲如何通过系统辨识来得到系统的传递函数,接着通过仿真,用仿真出来的控制器参数,来指导实际的控制器调节。 但这里实际上有一个问题,就是我们理论上的PID控制器、或者各种校正网络:超前校正网络、滞后校正网络等等,或者书上常讲的什么一阶惯性环节,到底怎么在C语言上实现? 我自己本科在学控制的时候,就经常有一个问题,就是老师讲的这些理论,我到底怎么用在我的智能车、机器人上呢? 这篇文章就是为了解决这个问题。 PID控制器我们先来看PID控制器,PID控制器的传递函数为: 为了等下方便变成微分方程,我们先稍微变形一下: 好了,现在变成微分方程(实际上就是变回时域): 考虑到这是理论上的连续系统,实际上我们在C语言只能是离散系统,因此继续变成差分方程: 需要注意,一定不要漏掉I项和D项的T。这个T是程序实现差分方程的采样时间,也就是多久调用一次这个函数。比如PID控制是5ms控制一次,那么这个T就是。网上很多推导,推导最后漏掉了这两个T,虽然说这样也能调出合适的参数,只是这样调出来的Ki和Kd与理论值会差一个T倍的系数,因此为了能把理论值直接用上,这个T不要漏掉。包括之后所有的差分方程,都有一个T。 好了,有了差分方程,我们就可以在C上实现了。 超前校正网络好了,接下来我们再推一个超前校正网络,传递函数是: 同样变形: 微分方程: 差分方程: 好了,下面是C语言实现: 一阶惯性环节这个就不再推到了,反正原理差不多,都是先列出传递函数,变成微分方程,然后变成差分方程。 传递函数: 实现: |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |