在嵌入式中实现控制器
在控制系统的设计中,我们所设计得到的控制器和滤波器通常都是以s域传递函数的形式给出的,要想在嵌入式系统中实现上述的控制器和滤波器就必须进行传递函数的离散化;下面简单介绍几种由复频域到离散域的转换方法:
1.一阶向前差分法:
s=z−1Ts=\frac{z-1}{T} s=Tz−1
将传递函数中的s使用上式进行替换即可,接下来是推导过程:
已知微分方程 y′=u(t)\boldsymbol{y}^{\prime}=\boldsymbol{u}(\boldsymbol{t})y′=u(t) ,初值为0,离散步长h=Th=Th=T,利用欧拉数值积分公式,则有:
yn=yn−1+Tu(tn−1)\boldsymbol{y}_{n}=\boldsymbol{y}_{n-1}+\boldsymbol{T} \boldsymbol{u}\left(\boldsymbol{t}_{n-1}\right) yn=yn−1+Tu(tn−1)
两边同时取ZZZ变换可得:
Y(z)=z−1Y(z)+Tz−1U(z)\boldsymbol{Y}(z)=z^{-1}\boldsymbol{Y}(z)+\boldsymbol{T}z^{-1} \boldsymbol{U}(z) Y(z)=z−1Y(z)+Tz−1U(z)
则:
G(z)=Y(z)U(z)=Tz−1G(z)=\frac{Y(z)}{U(z)}=\frac{T}{z-1} G(z)=U(z)Y(z)=z−1T
对原式两端同时取拉普拉斯变换,可得:
G(s)=Y(s)U(s)=1sG(s)=\frac{Y(s)}{U(s)}=\frac{1}{s} G(s)=U(s)Y(s)=s1
比较上述两式,则有:
s=z−1Ts=\frac{z-1}{T}s=Tz−1
或者:
根据离散域中z的定义:
z=esTz=e^{s T} z=esT
上式泰勒展开:
ex=1+x+12!x2+13!x3+14!x4+15!x5+16!x6+⋯e^{x}=1+x+\frac{1}{2 !} x^{2}+\frac{1}{3 !} x^{3}+\frac{1}{4 !} x^{4}+\frac{1}{5 !} x^{5}+\frac{1}{6 !} x^{6}+\cdots ex=1+x+2!1x2+3!1x3+4!1x4+5!1x5+6!1x6+⋯
略去高阶项:
1+sT=z1+s T=z 1+sT=z
可得:
s=z−1Ts=\frac{z-1}{T} s=Tz−1
2.一阶向后差分法
或者:
已知微分方程 y′=u(t)\boldsymbol{y}^{\prime}=\boldsymbol{u}(\boldsymbol{t})y′=u(t) ,初值为0,离散步长h=Th=Th=T,利用欧拉数值积分公式,则有:
yn=yn−1+Tu(tn)\boldsymbol{y}_{n}=\boldsymbol{y}_{n-1}+\boldsymbol{T} \boldsymbol{u}\left(\boldsymbol{t}_{n}\right) yn=yn−1+Tu(tn)
两边同时取ZZZ变换可得:
Y(z)=z−1Y(z)+TU(z)\boldsymbol{Y}(z)=z^{-1}\boldsymbol{Y}(z)+\boldsymbol{T} \boldsymbol{U}(z) Y(z)=z−1Y(z)+TU(z)
则:
G(z)=Y(z)U(z)=T1−z−1G(z)=\frac{Y(z)}{U(z)}=\frac{T}{1-z^{-1}} G(z)=U(z)Y(z)=1−z−1T
对原式两端同时取拉普拉斯变换,可得:
G(s)=Y(s)U(s)=1sG(s)=\frac{Y(s)}{U(s)}=\frac{1}{s} G(s)=U(s)Y(s)=s1
比较上述两式,则有:
s=1−z−1Ts=\frac{1-z^{-1}}{T}s=T1−z−1
3.双线性变换法
一阶向前、向后差分法的依据是积分的矩形法则,有时效果并不好,故出现了依据积分的梯形法则的双线性变换法(又称塔斯汀法);
s=2Tz−1z+1s=\frac{2}{T} \frac{z-1}{z+1}s=T2z+1z−1
推导过程如下:
假设:y′=u(t)y^{\prime}=u(t)y′=u(t)
利用梯形的数值积分形式:
yn+1=yn+T2[u(tn)+u(tn+1)]y_{n+1}=y_{n}+\frac{T}{2}\left[u\left(t_{n}\right)+u\left(t_{n+1}\right)\right] yn+1=yn+2T[u(tn)+u(tn+1)]
两边取z变换,可得:
zY(z)=Y(z)+T2[U(z)+zU(z)]z \boldsymbol{Y}(z)=\boldsymbol{Y}(z)+\frac{\boldsymbol{T}}{2}[\boldsymbol{U}(z)+z \boldsymbol{U}(z)] zY(z)=Y(z)+2T[U(z)+zU(z)]
则有:
G(z)=Y(z)U(z)=T2z+1z−1G(z)=\frac{Y(z)}{U(z)}=\frac{T}{2} \frac{z+1}{z-1} G(z)=U(z)Y(z)=2Tz−1z+1
同理可得:
s=2Tz−1z+1s=\frac{2}{T} \frac{z-1}{z+1} s=T2z+1z−1
或者:
z=esT=esT/2e−sT/2≈1+sT/21−sT/2z=e^{s T}=\frac{e^{s T / 2}}{e^{-s T / 2}} \approx \frac{1+s T / 2}{1-s T / 2}z=esT=e−sT/2esT/2≈1−sT/21+sT/2
可得:
s=2Tz−1z+1s=\frac{2}{T} \frac{z-1}{z+1}s=T2z+1z−1
至此,将传递函数中的s全部替换,得到传递函数的离散域表示(即差分方程);我们也可以使用matlab中的c2d函数来对传递函数进行离散化;调用格式如下:
[numZ denZ]=c2d(num,den,‘tustin’)%bilinear method
注意:得到的差分方程的表示如下,n必须大于等于m(因为未来时刻的信息无法获知)
Y(z)U(z)=a1+a2z−1+a3z−2+⋯+amz−(m−1)b1+b2z−1+b3z−2+⋯+bnz−(n−1)\frac{Y(z)}{U(z)}=\frac{a_{1}+a_{2} z^{-1}+a_{3} z^{-2}+\cdots+a_{m} z^{-(m-1)}}{b_{1}+b_{2} z^{-1}+b_{3} z^{-2}+\cdots+b_{n} z^{-(n-1)}} U(z)Y(z)=b1+b2z−1+b3z−2+⋯+bnz−(n−1)a1+a2z−1+a3z−2+⋯+amz−(m−1)
与s域传递函数类似,z呈降幂排列,但是首相幂为0,无正幂项;
式中:
z−nx(z)=x(t−n)z^{-n} x(z)=x(t-n)z−nx(z)=x(t−n)
表示前n个采样时刻的信号值。
当从连续域到离散域的离散效果不好时,有如下改进的方法:
1.选取更适合的离散化方法;
2.提高采样频率;
3.修正连续域设计,如增加稳定裕度指标等。
参考文献:
从传递函数向z函数的转换