比如上面就是个书上举的例子。小口径高炮高精度伺服系统,最终是要控制转角,是个电机相关的控制系统。可以看出来比较老了,8255A作为IO口,可能控制计算机是8088这个时代的东西。
这个实际的系统大概画出来这这个样子的,这个框图不是数学上的框图,需要想办法用数学语言描述出来
最主要的,数字系统和连续系统里面不一样的,是AD和DA转换还有计算机控制过程,被控对象还是个连续的物理设备,如何用数学描述这些不一样的地方呢?
在数学上可以认为A/D过程是个理想采样过程,即采样是理想采样(瞬间完成),量化误差(字长足够)也忽略不计了。
\[\tau << T, e^*(kT) = e(kT)\]计算过程描述成数码量通过一个连续系统后再次采样。
比如实际系统,MCU输入为 signed int error
,输出为signed int u
,数学上MCU内部的算法计算仍为\(G_c(s)\),只不过后面又跟了个理想采样过程,相当合理。
D/A过程在数学上用ZOH(零阶保持器)来描述,把离散数值保持一拍,使得连续时刻每刻都有个值,虽然不光滑但是连续了。
接着MCU输出了signed int u
,后面跟一块DA芯片,就描述成这个样子。
现在常用的MCU比如,STM32或者NXP之类的,自带DAC模块了,这个过程实际上也是单片机里面内在的,比如说STM32,调用DAC_SetChannel1Data(DAC_Align_12b_R, vol);函数以后重新设置DAC的值,在此之前电压值就是上次设置的值。
实际上寄存器这个东西就是ZOH,只要不改变存储值,这个值一直即不会变。
将上面过程画成数学上的表达方式
信号采样序列\(\delta_T(t) = \sum_{-\infty}^{+\infty} \delta(t - nT)\),调幅信号是载波乘信号生成的,离散信号类似,单位脉冲序列乘时间域信号就是一串离散信号。
信号采样的数学表达\(e^*(t) = e(t) \cdot \delta_T(t) = \sum_{0}^{+\infty} e(nT) \cdot \delta(t - nT)\)
这个误差采样的拉普拉斯变换
\[E^*(s) = \mathscr{L} \left[ e^*(t) \right] = \mathscr{L} \left[ \sum_{0}^{+\infty} e(nT) \cdot \delta(t - nT) \right] = \sum_{0}^{+\infty} e(nT) \cdot e^{-nTs}\]也就是说,e(nT) 延迟了nT出现了。即第n拍出来值为e(nT)这个值。
一个连续信号拉普拉斯变换是个s的有理式,离散化以后,拉普拉斯变换是个级数和,所以分析起来就不是很容易。
E*和E的区别有多大呢,将采样序列做傅里叶变换后带入进行拉普拉斯变换,可以知道关系 \(E^*(s) = \frac{1}{T}\sum_{-\infty}^{+\infty} E( s + jn\omega_s)\)
区别于前面给出E*与et在采样点上取值之间的关系,一般可以写成封闭形式。这个式子给出了E*与E之间的关系,用于e*的频谱分析。
频谱是对信号而言,频率特性是对系统而言,对于一个给定的信号e(t),非周期信号的频谱是连续的。采样后的离散信号的频谱可以用上面的关系,可以看出是连续频谱平移后叠加。
很重要的一个事情,采样频率必须足够快,才能不丢失连续信号的信息。这就是香农采样定理
\[\omega_s > 2\omega_h\]采样频率足够高后,找个理想滤波器,把高频的全部过滤掉,信号就可以一模一样的复现出来了,只不过幅值差了一点点。
很遗憾理想滤波器物理上不可实现,但是有个差不多的,找个容易实现又接近的。零阶保持器。
时域表达
\[k(t) = 1(t) - 1(t-T)\] \[\color{red} { G_h(s) = \frac{1-e^{-Ts}}{s} }\] \[G_h(j\omega) = T\frac{\sin (\omega T/2)}{\omega T/2} e ^{-j\omega T/2}\]表达式略微复杂了一点,但是幅相特性还是可以画的
希望的理想滤波器的幅频特性是蓝线,相频特性是0,然而实际的ZOH的特性是红线,所以即便是满足了香浓采样定理,也是没法完全一模一样复现的。但是还是要精确的看看影响
ZOH把离散信号变成阶梯信号,粗略的看,认为是加了一个T/2的纯延时环节,相角滞后了,稳定裕度损失了。所以ZOH对系统是有不利影响的。但是这点不利换来了巨大的其他便利。
ZOH实际上不需要去实现,寄存器就是。而且可以严格证明,这个性能不算差,这个滞后效应比一阶二阶保持器都要小。
采样后送进MCU,运算输出后,复现的问题。
为什么可以离散的问题
前面出现过,\(e^{Ts} = z\),可以认为就是个简单的代换。
究其本质,这是个复函数,这个代换实际上是个映射。复函数\(w = e^z\)代表的映射
把这里个离散表达的东西放到一起
\[\begin{array}{} \left\{ \begin{align} e^*(t) &= \sum_{0}^{+\infty} e(nT) \cdot \delta(t - nT) \tag{1}\\ E^*(s) &= \sum_{n=0}^{+\infty} e(nT) \cdot e^{-nTs} \tag{2}\\ E(z) &= \sum_{n=0}^{+\infty} e(nT) \cdot z^{-n} \tag{3} \end{align} \right. \end{array}\]核心都是在表达幅值为e(nT)的这个脉冲延迟了n拍出现,这里的求和是把单个脉冲加成连续的序列,而不是一点上值相加。这三个意思是一样的。
Z变换仅仅对离散信号而言,但是写法有好多
\[E(z) = \mathscr{Z} [e^*(t)] = \mathscr{Z} [E^*(s)]= \mathscr{Z} [E(s)]\]z变换的数学方法:级数求和法、部分分式展开法、留数法。
级数求和根据上面式子(3),算一个无穷级数,这就是纯数学方法了,先导后积或者先积后导这些可能也要用的。
部分分式展开需要熟悉基本的几个变换
\(E(s)\) | \(e(t)\) | \(E(z)\) |
---|---|---|
\(1\) | \(\delta(t)\) | \(1\) |
\(\frac{1}{s}\) | \(1(t)\) | \(\frac{z}{z-1}\) |
\(\frac{1}{s^2}\) | \(t\) | \(\frac{Tz}{(z-1)^2}\) |
\(\frac{1}{s^3}\) | \(\frac{t^2}{2}\) | \(\frac{T^2z(z+1)}{(z-1)^3}\) |
\(\frac{1}{s+a}\) | \(e^{-at}\) | \(\frac{z}{z-e^{-aT}}\) |
同样的和拉普拉斯变换一样,也有一些Z变换的性质。最常用的,线性性质,位移定理。
最重要的,初值定理终值定理,这在连续系统里都有对应的东西,对照的看,工具性质的东西。连续系统的思想,离散的工具,具体的细节放在后面稳定稳态误差做对照。
还有个卷积定理。遇到了再说。
Z反变换:幂级数法(长除法)、部分分式展开法、留数法。
长除法最无脑,部分分式展开要记得除z,留数法最通用。
数学工具,z变换只局限在采样点去研究系统,这也是不得已而为之,和最后的连续的输出相比还是有差距。
举个例子说明一下,用窄脉冲去模拟脉冲序列直接作用于一个连续系统
蓝线是实际响应曲线,但是虚设采样开关后只反映了采样时刻的信息。后面还会说虚设开关这个事情。
接下来要真正的找出离散系统的模型。
离散系统的时域数学模型:差分方程。
差分有个前向后向的问题,前向是往未来操作(前进),后向是往过去操作(后退)。
前向差分:
\[\Delta e(k) = e(k+1) - e(k)\] \[\Delta^2 e(k) = \Delta e(k+1) - \Delta e(k)\]后向差分:
\[\nabla e(k) = e(k) - e(k-1)\] \[\nabla^2 e(k) = \nabla e(k) - \nabla e(k-1)\]对比连续的微分
\[\lim_{T \to 0} \frac{\Delta e(k)}{T} = \frac{de(t)}{dt}\]相应的,差分方程有前向差分、后向差分,解法有迭代法、Z变换。
对于离散系统,解出差分方程自然也就有时域解了,系统的特性也就知道了。
差分方程对应微分方程,相应的脉冲传递函数对应传递函数。脉冲传递函数定义为零条件输出z变换比输入z变换。
对于一个系统,有时候需要虚设一个开关,放弃部分输出信息,退一步用离散的方法还可以进行分析。
放弃一部分输出信息后使用z变换就可以得到离散数学模型,脉冲传递函数:
\[G(z) = \frac{C(z)}{R(z)}\]类比连续系统,也是单位脉冲响应的Z反变换。
同样的类比连续传递函数,这是个z的复函数,也由系统结构参数确定,等价于差分方程,同样可以画出z平面的零极点图。
当然脉冲传递函数也有局限性,无法反映系统响应的全部信息(仅采样点);只适用单入单出、线性定常。
由实际系统各模块画出控制框图以后,同样面临着找出脉冲传递函数的问题,由于由采样开关的问题,和连续系统还稍稍有点不一样。
前面频率里推到过ZOH的传递函数,这里看看串联进去改怎么处理。把ZOH拆开来,可以看出虽然ZOH有积分环节但是并不增加系统阶数。
闭环系统脉冲传递函数,这是最后要用的东西。在这里Mason公式是有条件的。
再找闭环脉冲传递函数的时候,采样开关有时候需要等效,思想大概就是早晚都要采样,不如提前采样。
找闭环脉冲传递函数跟着信号流动方向硬推肯定是没问题的,虽然略微复杂。要注意前面一块Z变换还是分开Z变换的问题。
对于Mason公式,从数学方法的角度去考虑,改变字母并不会改变公式本质,所以每个环节前后都有采样开关或者等效采样开关的话,是可以直接用Mason公式的。
此外只有一个回路(无前馈通道),在前向通道至少存在一个一个实际采样开关的系统也可以小用一下。
这种系统采样开关没法透过G1,输入是连续,这种情况一般求不出脉冲传递函数,只能求出输出的z变换C(z),但是只要输出的有了不影响分析,有个技巧,认为输入的r是单位脉冲激励的,开始的一瞬间给一下后面就没关系了。
这样的话就有
\[\frac{C(z)}{1} = \frac{RG_1(z)G_2(z)}{1 + G_1G_2H(z)}\]卷积的本质是信号的分解
基本信号及响应,信号的分解,
连续信号分解成\(\delta(t)\)的线性组合,这样线性是不变系统就好搞了。
\[f(t) = \int_{-\infty}^{+\infty} f(\tau)\delta(t-\tau)d\tau\]这个积分是时间上加成一个序列,并非一个点上的数值相加。放在离散系统可能更好理解。
相当于把一个连续信号看作是一堆脉冲输入到系统里。
\(\delta(t-\tau)\)的输出为\(h(t-\tau)\)
那么总的输入\(f(t) = \int_{-\infty}^{+\infty} f(\tau)\delta(t-\tau)d\tau\)的输出为
\[y(t) = \int_{-\infty}^{+\infty} f(\tau)h(t-\tau)d\tau\]这个式子叫成卷积积分,直接在时域里面得到了响应。
更数学的定义:
\[f(t) = f_1(t)*f_2(t) = \int_{-\infty}^{+\infty} f_1(\tau)f_2(t-\tau)d\tau\]卷积完还是个函数。纯时域的操作。
在复频域来看\(Y(s) = G(s)R(S)\)
取样序列
\[\delta(k) = \begin{array}{} \left\{ \begin{align} = 1 , \ \ \ k=0\\ = 0 , \ \ \ k \ne 0\\ \end{align} \right. \end{array}\] \[\delta_T(t) = \sum_{n=0}^\infty \delta(t-nT)\]同样这个一串序列也是时间上把一个个脉冲加起来,不是说一个点把值加起来。
信号与系统里面有序列的分解。
任意离散序列\(f(k) = \sum_{-\infty}^{+\infty} f(i)\delta(k - i)\)