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