假如设计好了一个控制器,得到了它的传递函数,那么该怎么在单片机中实现它呢?里面都是微积分,该怎么编程呢?这就要设计到传函的离散化了。
1:离散化
1.1、离散化的目的
- 将s域下的传递函数转换为离散的z域函数;
- 将离散域下的函数转化为差分方程,然后在单片机中实现;
1.2、离散化的方法
常用的离散化方法有:
- 前向差分法;
- 后向差分法:
- 双线性变换法;
- 零阶保持器法;
- 一阶保持器法;
- 脉冲响应不变法;
前三种方法比较简单,传递函数中,直接用 z和s的关系进行替换就行:

其中Ts为离散化采样时间。
可以借助matlab工具进行离散化,matlab提供多种离散化的方法;
dsys=c2d(sys,ts,’method’); % 传函离散,其中ts表示离散的采样周期,method表示离散的方法;sys表示s域传函,dsys表示对应的z域传函;
其中method包括以下几种方法:
- zoh 零阶保持器;
- foh 一阶保持器;
- tustin 双线性变换法;
- matched 零极点匹配法;
- impulse 脉冲响应不变法;
1.3、使用不同离散化方法的影响
下面我们首先使用不同离散化方法对传函G(s) = 1/(0.2s+1)进行离散,离散化采样时间Ts=0.05:

然后对比不同离散化方法后的伯德图和未离散化的系统伯德图:

从伯德图中可以看出,前向差分法离散化以后偏离实际的系统更远,不能保证系统的稳定性。而
后向差分法和双线性变换法,更接近未离散化的伯德图,所以后向差分法和双线性变换法在工程中较为常用。
2:传函到单片机实现的例子
假设一个低通滤波器的传函为:

我们先用matlab工具看下他的特性;
>> num=1;
den=[6.687e-4,1];
sys=tf(num,den);
p=bodeoptions;
p.FreqUnits= 'Hz';
bode(sys,p

本文介绍如何将连续系统的传递函数通过离散化方法转化为适用于单片机的离散形式,并通过实例展示了具体步骤。比较了几种离散化方法的效果,包括前向差分法、后向差分法和双线性变换法。
—— C实现&spm=1001.2101.3001.5002&articleId=111566934&d=1&t=3&u=781a53ba51634221a8a7d1211ad9feb2)
1万+

被折叠的 条评论
为什么被折叠?



