在嵌入式中实现控制器

在控制系统的设计中,我们所设计得到的控制器和滤波器通常都是以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!1​x2+3!1​x3+4!1​x4+5!1​x5+6!1​x6+⋯
略去高阶项:
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=T2​z+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)​=2T​z−1z+1​
同理可得:
s=2Tz−1z+1s=\frac{2}{T} \frac{z-1}{z+1} s=T2​z+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=T2​z+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​+b2​z−1+b3​z−2+⋯+bn​z−(n−1)a1​+a2​z−1+a3​z−2+⋯+am​z−(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函数的转换

传递函数转化为差分方程相关推荐

  1. matlab仿真Gz转换为差分方程,怎么用matlab把传递函数转成差分方程

    怎么用matlab把传递函数转成差分方程 以下是PID控制的部分代码(matlab的m文件): ts=0.001;采样时间=0.001s sys=tf(400,[1,50,0]);建立被控对象传递函数 ...

  2. matlab 传递函数转化差分方程,从传递函数到差分方程的转换

    1.传递函数的形式 假设传递函数为:G(s)=exp^(-0.004s)*400/(s^2+50s): 其中^后表示指数,如:2^3=8;4^2=16: 在matlab里面建立这个传递函数的命令就是: ...

  3. Matlab怎样将传递函数转换成差分方程

    最近在做毕业设计,自己的控制对象描述形式是传递函数,而书里看到的大部份被控对象都是差分方程的形式,就想有没有这种转换的方法,网上搜索了一圈,总结如下. 步骤一,先建立传递函数方程 首先给定一个连续的传 ...

  4. 从入门到放弃系列-傅里叶变换,拉普拉斯变换,Z变换

    文章目录 概述 傅里叶变换 傅里叶级数 虚指数e−jωte^{-j{\omega}t}e−jωt的引入 傅里叶级数和变换的区别 傅里叶级数和变换的一点感悟 拉普拉斯变换 Z变换 总结 参考文献 概述 ...

  5. 基于MATLAB的离散系统的数字PID控制仿真

    基于MATLAB的离散系统的数字PID控制仿真 1 设计要求 2 方案设计 2.1 设计思路及总体方案框图 2.2 PID算法的基本原理 2.3 PID算法的离散化 3 总体方案的选择与设计 3.1 ...

  6. 计算机控制系统脉冲传递函数,计算机控制系统的数学描述2(差分方程脉冲传递函数)课件...

    <计算机控制系统的数学描述2(差分方程脉冲传递函数)课件>由会员分享,可在线阅读,更多相关<计算机控制系统的数学描述2(差分方程脉冲传递函数)课件(37页珍藏版)>请在人人文库 ...

  7. 计算传递函数乘法_软件开发教程:计算机科学最重要的32个算法

    软件开发的根本在于解决各种业务功能需要,实现数字化和自动化,而算法(Algorithm)是对解决方案的准确而完整的描述,是一系列解决问题的清晰指令.算法代表着用系统的方法描述解决问题的策略机制.在计算 ...

  8. matlab中传递函数的离散化

    matlab中传递函数的离散化 转载▼ 标签: 差分方程 传递函数 采样周期 转化 c2d 分类: Matlab matlab中,传递函数离散化,特别是转化为差分方程,可以使用c2d实现,系数直接转化 ...

  9. 连续系统与离散系统传递函数的求解问题

    文章目录 1 Z变换的定义与常见激励的Z变换求解 1.1 定义 1.2 单位样值函数 1.3 单位阶跃序列 1.4 斜变序列 1.4.1 间接求导法 1.4.2 错位相减法 1.5 指数序列 1.6 ...

最新文章

  1. 动画代码Android动画学习笔记动画代码
  2. python list 取重复次数
  3. Apache2.4.29+Tomcat 8.5.29负载均衡群集最强解析
  4. React-Native测试报告
  5. 一道计算时间的机试题
  6. MapInfo启动时,提示the Microsoft jet engine is not available
  7. 表单元素内容禁用拼写检查
  8. 12.MongoDB之固定集合(Capped Collections)
  9. Nginx源码包软件安装步骤
  10. 破解校园网锐捷无法开热点问题
  11. autojs遍历当前页面所有控件_解放双手,手机自动化神器-AutoJS的使用
  12. 原子结构示意图全部_所有原子结构示意图(1-118)最新元素周期表.pdf
  13. python适合做网站吗_python做网站吗
  14. easyWeChat 6.X微信支付V3下载更新微信支付平台证书
  15. 笔记本电脑微信视频对方却听不到声音
  16. 在NS2 AODV协议中添加blackhole attacker(黑洞攻击) [转载]
  17. python生成测试数据_Python基于Hypothesis测试库生成测试数据
  18. 用c语言写一个求和的程序,C语言实现两数求和
  19. python itemgetter函数_[问题解决] sorted函数以及operator.itemgetter函数
  20. js之延迟执行及循环执行

热门文章

  1. Modbus 通讯协议
  2. ZigBee协议栈组播
  3. wait,notify/notifyAll的使用及实现原理
  4. 串口接头与区分TTL\RS232电平
  5. 建议初创团队起初也要构建分布式应用
  6. 菜鸟攒机之深度学习(下)
  7. android非活动程序,android – 将registerReceiver用于非活动和非服务类
  8. 微信小程序元素靠右css
  9. 我为什么会放弃了大厂 45 万美元的高薪工作?
  10. 一名普通网安程序员的2022总结和2023展望