matlab怎么输出多个变量(matlab如何输出多种结果)

matlab怎么输出多个变量(matlab如何输出多种结果)环路建模工具 环路建模工具就是 matlab 通常的做法是建立 M 文件 然后在 M 文件中 输入各个模块的传递函数 利用 matlab 进行相乘 串联 连续转离 散 离散转离散等操作 得到高级环路模型 nbsp 高级环路模型是指将环路简化为几个基本模块后的结构 这些结构能被 matlab 工具箱 sisotool 所支持 nbsp 下图为 sisotool 支持的所有结构 DSP 设计工具 DSP 参数确定可以使用 matlab 自带的 sisotool 工具 这个工具能够根据 要求得到传递函数



环路建模工具

环路建模工具就是matlab,通常的做法是建立M文件,然后在M文件中 输入各个模块的传递函数,利用matlab进行相乘(串联),连续转离 散,离散转离散等操作,得到高级环路模型。

高级环路模型是指将环路简化为几个基本模块后的结构,这些结构能被 matlab工具箱sisotool所支持。

下图为sisotool支持的所有结构:

DSP设计工具

DSP参数确定可以使用matlab自带的sisotool工具,这个工具能够根据 要求得到传递函数。得到传递函数后,再将传递函数化为PID和LPF系 数。

因为我们采用的是平台化的控制方法,因此可以将传递函数通过特定 的公式转成PID和LPF系数。

电压控制环路

画出整个环路的模块,如下图:

其中K表示输出电压反馈时的缩放系数。

PWM和Convertor的本质可以理解为一个DA,或者将PWM视为DA,将 convertor视为输入模拟量(0-100%),输出模拟电压的一个装置。

电压控制环路离散模型

为了使用sisotool,将电压控制环路画成如下的形式。

环路设计的工作就是使用Sisotool在已知G和H的情况下求C

采样频率和固有延

要将模拟模块处理成离散模块,首先要确定的就是采样频率,在这个 环路里面,唯一能作为标准采样频率的就是开关管的切换频率fs。

PWM的周期也为Ts。

固定采样频率后,所有的延迟都只能是Ts的整数倍。

此系统为LTI系统,可以将所有的延迟集中到一起,此时如果延迟不是 一个整Ts,必须人为加上延迟,凑够Ts的整数倍。

将延迟分离后,所有的模型都视为和其传递函数表达式是完全相同的:

DSP,输入数据,0延迟立即输出数据,输入X[k-1],X[k],立即得到Y[k]。

忽略ADC的量化误差后,ADC变成一个理想采样开关 ZOH,这个ZOH制造了1/2 倍转换时间的延迟。

注意ADC的转换延迟并不是等于转换时间,而是等于1/2转换时间。

PWM和转换器的延迟

PWM和转换器合力完成如下工作:

在周期的起始,PWM接收占空比信号D,输出持续一个周期的PWM波形, 在这个周期的结束点,输出电压反映了上一个周期的电压 当前周期占空比 的影响。

由此可见,如果在周期的末尾采样输出电压的话,PWM和转换器合起 来有1个周期的延迟。

有些资料上将PWM直接等效为一个ZOH,这样是存在问题的,因为ZOH只 有半个周期的延迟,这样处理的前提是要求ADC在Ts/2的位置采样,并假 设Ts/2处采样的值等于周期平均值。

这个问题的根源是没有考虑开关电源的特殊性,而是将开关电源的等效模型当成 真实模型来用了,认为PWM 转换器是一个输入模拟量d,输出稳定电压V的装置。

环路延迟的处理

前面讨论过,转换器的输出电压在一个周期内是变换的,因此,ADC 在何时采样就很关键了,假设电压在一个周期内是逐渐稳定的,那么 理想的采样点是上一个占空比D刚刚结束,下一个占空比还未更新时。

按照这个思路,环路延迟(包括PWM的ZOH’等)=2Ts

理想无延迟状况是采样V[k-],产生D[k],决定V[k ],现在是采样V[k-2], 决定V[k]。

提高输出电压采样精度

前面是假设输出电压在周期结束时最精确,因而在周期末尾进行采样, 这并不是最好的方式,最理想的方式是在整个周期都进行采样,然后 进行平均,得到整个周期的平均电压。

这个方法在理论上是可行的,但实际操作时会面临一个问题是ADC本身的 量化误差可能会超过单个周期内输出电压的波动,使得这种方法毫无意义。

作为一种折中,需要根据转换器的拓扑,研究转换器在何时的输出电 压接近其周期平均电压。

忽略输出电压单周期纹波

如果忽略输出电压单周期纹波,那么采样时刻的选取就变简单了,一 个合适的采样时刻是采样后,完成后续的所有工作,恰好更新下一周 期占空比

按照这种方式,环路延迟将减少到Ts,而不是2Ts。

离散化方法的选择

由前面的分析可知,整个环路的延迟等于,2Ts的延迟,加上模块传递 函数自带的相位改变。

比如传递函数分母出现s或1-z-1,意味着相位要推迟。

但是光考虑这些还不够,还要注意到,在将连续传递函数进行离散化 的时候,离散化这个过程可能会引入延迟。

如果选择加零阶保持器法,那么会引入半个周期的延迟;

如果选择双线性变换法,那么不会引入延迟,因此,在充分考虑了环路延 迟后,应该选择这种离散化方法,以免得到的离散传递函数不能表达真实 的情况。

考虑延迟后的环路模型

下图示出了延迟为Ts时的环路模型:

环路延迟的的影响

从之前的分析可以看到,如果环路有Ts的固有延迟,这Ts的固有延迟 在f=fs处制造了360度的相位延迟,环路稳定性将下降。

因此,相位交点必须足够低,远离fs处,这样,这Ts的影响将降低, 按照前面的经验,100K的fs,将增益交点定在10K,相位交点也在10K 附近,离100K足够远,可以消除这个延迟的影响。

计算H的传递函数

H的传递函数很简单:

Hk=K;

Hd=z-1

H=Hk*Hd;

计算G的传递函数

G的传递函数如下:

Gpwm=1/VM

Gcov,Gaalpf;

G=Gpwm*Gcov*Gaalpf;

将G转成连续传递函数:Gd=c2d(G, 1e-5,’tustin’)

C部分的传递函数

C部分通常被称为补偿器,因为G和H已知,只能用C来调节环路性能。 C部分由一个PID和一个LPF串联而成,PID提供2个零点和一个极点, LPF提供2个极点和1个零点,两者串联后得到3零3极。

PID传递函数如下:

LPF传递函数如下:

注意LPF中存在一个-1处的零点,这个零点在z平面单位圆的最左边,属于 最高频的位置,对系统响应无影响,可以忽略。

LPF中的零点

z域是离散抽象后得到的效果,要搞清楚-1处的零点的影响,需要联合 s域来考虑。

将s域传递函数转成z域有几种方法,不同的方法得到的零极点数量不一样。

将传递函数H=1/s转成z域传递函数:

由上可见,使用加zoh法,得到的传递函数其在原点有一个极点,和原s域 传递函数一样,使用双线性变换法后,在最高频有一个零点。

由此也可以看出,z 1这个零点完全是由于不同的离散化方法导致的。

PID和LPF系数的获取

使用matlab可以得到C(PID LPF)的传递函数,得到传递函数后,需要 得到PID和LPF的系数。

PID和LPF的系数有2种表示方式,一种方式就是得到3个零点和3个极点, 然后将这3个零点和极点分配到PID和LPF中去。

另一种方式就是将零极点转换为KP,KI,KD,A1,A2,A3的值,这是我 们最终需要的值,这些值可以直接写入到硬件寄存器中。

将零极点转为多项式系数

联立2个式子,可以得出多项式系数的表达式:

PID加LPF v.s. III型补偿器

PID加LPF这种3零3极的结构和III型补偿器是完全相同的,因此,可以 刻直接在z域设计PID和LPF,也可以在s域设计III型补偿器,转到离散 域,甚至可以直接将设计好的III型补偿器的参数转化为PID和LPF的系数。

通过波特图确定参数的原则

PID和LPF一共提供了2个有效零点和3个有效极点,在设计时,先设 C(PID LPF)的传递函数为1,画出开环传递函数的波特图,然后在此 波特图上添加零极点,同时通过上移或下移增益曲线来调整0频增益。

这些操作可以在matlab的工具箱sisotool中完成。

在添加零极点和调整增益时通常遵循如下的原则:

将开环截止频率定在开关频率的1/5-1/20,比如100KHz的切换频率,截止频率定 位10K;

截止频率出的增益曲线斜率设为-20dB;

相位裕度定为45-70,增益裕度定为10dB以上;

低频增益尽量高。

插入误差放大器

按照前面的环路模型进行设计时,会发现一个问题,系统的开环增益 太小,直流增益甚至会小于1。这个问题的原因在于环路中没有任何误 差放大装置,虽然PID中的P能够承担放大任务,但由于寄存器位宽的 限制,P不可能做到很大,因此放大任务必须由专门的增益单元承担。

增益单元可以插在环路中任意位置,但理想的位置是在数字部分,比如插 在DSP内PID之前。

这个增益插入后,会导致输入到PID的数字码进一步加长,而稳定工作时输 入到PID的误差信号是很小的,因此在设计电路时,可以控制误差信号的大 小,当误差信号超过某一值时,溢出成最大值。

设误差信号为[9:0],当误差信号进行放大,比如x256倍,此时信号向左移位8位, 如果左移8位后信号大于1024,那么直接将误差视为11_1111_1111。

甚至可以设计成可变增益放大,当信号的高位为0越多,放大的倍数越大,以保证 不会有溢出丧失线性度的问题。其中最大的放大倍数是定值,这样环路只要在最 大放大倍数下是稳定的,就可以在所有放大倍数下稳定。

使用sisotool设计补偿器

利用sisotool做设计非常方便,通常按照如下步骤:

在Archiecture标签中选择好环路形式,输入已知的传递函数;

利用直接编辑法,图形设计法,软件辅助设计法设计补偿器的传递函数;

将设计结果用图形显示出来,检验设计结果,Analysis Plot标签中提供了丰 富的分析图,能够分析开环,闭环等多种系统的响应。

SISOTOOL启动

在matlab主命令窗口中输入sisotool,即可启动sisotool

输入环路模型

直接编辑传递函数

直接编辑传递函数本质上就是手工添加和编辑零极点,编辑后传递函 数会立即更新,至于传递函数的形式,可以在主菜单:Edit > SISO Tool Preferences中编辑。

利用图形法设计传递函数

这是最主要和最常用的方法,其方法就是在开环传递函数的波特图和 根轨迹上添加,删除,移动零极点和增益,sisotool会根据修改完的结 果自动产生补偿器的传递函数。

在标签Graphical Tuning中可以选择使用何种图,默认是3种:根轨迹图, 开环波特图,闭环波特图,通常不需要修改。

利用开环波特图设计传递函数

一开始,补偿器传递函数为1,开环波特图显示的是G*H的传递函数, 为了进行补偿,加入零点和极点,G和H的零极点显示为蓝色,不可修 改,用户加入的零极点显示为红色,可以删除,移动。

在菜单Edit中有undo和redo。

利用根轨迹图设计传递函数

和波特图类似,也可以利用根轨迹图来设计,同样可以添加删除移动零极点,而且还可以移动k值,点击图中紫色的小方块,可以移动,将k设为不同的值,移动的过程中,波特图也会实时关联更新。

软件辅助设计传递函数

软件辅助设计是利用matlab内置的机制全自动产生补偿器传递函数,或者交互式的设计,给出带宽和相位裕量要求,软件自动产生传递函数。

这个方法非常适合对环路理解不够深刻的用户,通过软件的辅助,逐渐加深理解,最终得到合适的设计。

系统性能分析图

设计时,打开系统性能分析图很重要,可以随时观察当前补偿器导致的结果,随时调整设计。

软件使用技巧

在设计时,一定要打开图形设计界面和系统性能分析界面,这样无论是直接设计还是软件辅助设计,图形都会实时更新,随时监视系统性能。

对于经验欠缺的用户,刚开始使用软件辅助设计,随后利用图形调整是一个比较好的做法。

利用Matlab的Help

Matlab的Help是很强大的,与其记住大量的命令格式,不如记住这些命令的专业术语,然后在help中搜索。

比如要将连续传递函数转为离散传递函数,记住其命令术语为c2d,使用时,在help中搜索c2d,就能得到c2d的完整语法。而且记住c2d了后,也就知道了d2c,d2d命令。

Matlab常用命令

表示传递函数的方法:

tf:分子分母用多项式的方法表示传递函数,加上采样时间就是离散,不加是连续;

zpk:用零极点的方法表示传递函数,加上采样时间就是离散,不加是连续;

注意tf和zpk既能用来直接描述传递函数,也能用来将传递函数从一个形式转化为另一个形式,省的手工乘因子和做多项式分解。

如果传递函数中含有e-sT这样的项,就只能手工输入多项式了,在输入多项式之前,需要运行s=tf(‘s’)或z=tf(‘z’,T),确保matlab能识别出多项式中的s和z,

绘图方法:

bode:波特图;margin:带裕量的波特图;step:阶跃响应;impulse:冲激/脉冲响应;rlocus:根轨迹;

编程小号
上一篇 2025-03-06 20:30
下一篇 2025-03-12 20:40

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/31310.html