"); //-->
电力电子转换器(Power Electronics Converter)指的是主要通过开关器件和其他电路的组合将一种形式的电源转化成另外一种形式的电源。
无论是家用的手机电源适配器(AC/DC)、光伏逆变器(DC/AC)、车用电源转换器(DC/DC),再到电网的高压直流输电技术(AC/DC/AC), 电力电子转换器是通过数字控制器(digital controller)控制开关器件(IGBT、MOSFET 等)的开关时间和频率来决定输出的电压和电流。
其中电子控制器大致包含如下的功能:
Simulink 非常适合用来做电子控制器的设计、仿真和开发。原因在于它有丰富的功能:
本文的将通过以下示例,着重介绍 6 种 PID 参数调试的方法:
这是一个简单的 DC/DC 模型,目的是将 24V DC 变换为 12V DC:
电子线路被控对象:
PID 控制器需要被控对象为线性化。由于 MOSFET 或者 IGBT 这类的电子开关的存在,无法让 Simulink 为它自动线性化。
经典的线性化方法一般为小信号分析法(small signal analysis)。小信号分析分为三步:
在一个开关周期内进行状态空间平均,得到非线性化模型。
在工作点(operating point)进行小信号注入和分析,获取平均模型。这个平均模型(averaged model) 为线性模型。
推算被控对象的传递函数。在有了系统的传递函数后,进行控制器设计(例如PID)。
这种方法的局限性在于,对任何一个电子线路都需要做整体的小信号分析。
例如一些比较常见的电子线路(buck converer、booster converter)等等,已经有了现成的平均模型。但对于一些复杂的电子线路,更加常用的方法是用开关平均模型(average switch model)去代替平均模型。开关平均模型只对开关网络部分进行小信号分析,而将剩余的部分作为线性不变系统处理。
Simulink 也采取了类似开关平均模型的方式,将开关网络做了平均化处理,便于做线性化分析。
本文介绍以下 6 种解决方法:
方法 1 —— 用开关平均模型做 PID 设计。 在很多场合,平均模型是很有效的。
也有一些情况,用户需要用带详细开关的模型进行线性化分析。这时候,通常采取的方式是系统辨识(system identification)。把被控对象看成黑盒,输入一些激励信号,通过分析系统输出来辨识出被控对象。系统辨识的方式可以是频域或者时域。
方法 2 介绍了通过频域扫描(AC sweeping)的办法来辨识被控对象。方法 2 是业界常用的方法,优点是可以完全从频域辨识系统,缺点是速度慢。
基于方法 2 的改进,即不做全频域域辨识,而对系统几个比较关键的频率进行辨识,这就是方法 3 —— Frequence Response Based Tuning。
在一些阶数比较少(例如二阶三阶电路)的系统,也可以通过时域辨识的方法来辨识被控对象,这就是方法 4 —— 阶跃响应辨识法。
基于方法 3,设想有这种情况:
我需要 PID 在被控对象发生变化(例如负载变化等)的时候,Simulink 能自动的进行 PID 参数调整,做到“智能化自适应参数整定”,这就是方法 5,也是 Simulink 比较新的方法 —— Auto Tuning。
上述 5 种方法仅仅谈到了单个 PID(即 single-input-single-out,SISO)。如果多个 PID 需要一起调试(或者叫 multi-input-multi-output,MIMO),那我们介绍另外一种调试方式。即方法6 ——MIMO 多 PID 的集中调试。
基于开关平均模型进行 PID 调试将上图中的开关网络用 “Average-Model Based VSC” 替代 —— Simscape Electrical 中的 “Universal Bridege” 中选择这个类型即可。这样就是一个开关平均模型。
然后在双击 PID 模块,选择 Tune。
这一步会打开 PID tuner。在此之后,需要找一个稳态工作点来线性化被控对象。由于在 0.005s 有一个负载变化。所以不妨选择 0.007s 为稳态工作点。
打开 PID tuner 后,选择:
plant -> re-linearize Close-Loop -> Snapshot time = 0.007 -> Linearize
这一步后,Simulink 会将 0.007s 作为稳态工作点的系统响应作为被控对象,然后自动打开 PID tuner,进行交互式调试。在系统性能满意后,选择 Update Block。
在闭环仿真的结果可以看出:
在0.005 秒由于负载变化,电压有变化,但之后很快恢复到 12V。
输出电压电流没有开关纹波 —— 这是由于使用开关平均模型的原因。
开关平均模型的另一个好处是仿真速度极快。工程师可以在开关平均模型仿真后得到了控制参数,然后很快将被控对象切换到实际的详细开关(例如 MOSFET)模型中去验证前面得到的参数。绝大多数情况下,会有很好的结果。
基于详细开关模型进行 AC Sweeping 频域扫描辨识
将上图中的开关网络用 “MOSFET/Diodes” 替代 —— Simscape Electrical 中的 “Universal Bridege” 中选择这个类型即可。这样就是一个详细开关模型。
在这种选择下,由于开关元器件具有断续性,所以 Simulink 无法自动对模型进行线性化处理。此时,可用 AC Sweeping(频域扫描辨识)的方法辨识出系统的传递函数。这是业界的标准方法。
第一步先改造模型,由于本电路是将 24V 变化为 12V。所以先将 PID 输出的 duty 改为恒定值 0.5(12/24)。并且在输入线上右键选择:
Linear Analysis Point -> Input Pertubation。
在实际输出电压(Sensor Dynamics)处选择:
Linear Analysis Point -> Output Mearsurement。
在 MATLAB 的 Linear Analysis Tool 中选择 estimation tab。
Operating Point 选择:
take simulation snapshot = 0.007s
即把这个时间点作为稳态工作点(避开 0.005s 的负载变化)。Analysis I/O 就是 Model I/O,即刚才做的 Linear Analysis Points。
Input Signal 选择 Fixed Sample Time Sinewave。Sample Time 选择为系统的 Sample Time = 1e-7s。在选择激励的 sinewave 时候,将 Amplitude 设定为 0.025(大概为稳态 duty cycle 的 1/20),频域范围为 100 ~ 30000Hz。
在选择 “Bode Diagram” 后,Linear Analysis Point 会给出系统的频域响应,即 Bode Diagram。
然后将频域响应,保存为一个 frd(frequence response data)。
打开:
PID tuner ->Transfer Function based -> Tune
然后在 Plant 中选择 import 刚才保存的 frd,这样 PID tuner 会自动进行调试,用户也可自己调整带宽和相位裕度等参数。
查看输出电压。发现和刚才的开关平均模型相比较,详细开关模型会带来纹波,这正是 MOSFET 开关带来的效果。
基于详细开关模型进行 Frequency Response Based Tuning在刚才的 AC sweeping 方法中,我们实际上进行了全频域扫描(100 ~ 30000Hz)来确定被控对象的频域响应。在系统仿真步长很小获取频域响应的速度会比较慢,在这种情况下可以试一下 Frequency Response Based tuning。此时,系统根据给定的带宽(0dB crossover frequency)进行 [1/3 , 1 , 3 , 10] 倍的带宽频域注入,结合一个时域的阶跃信号,可估计出系统的频域响应。从而可以自动调用 PID Tuner。
此处,start time 为系统的稳态工作点(0.006s),Duration 一般设定为 100/带宽,Astep 为稳态点的 duty cycle(0.5);Asin 为 sine 激励信号的幅值(0.025),一般设定为 duty cycle 的 1/20。在按下 “tune” 后,会发现 PID tuner 把频域响应和 PID tuning 的工作合二为一都完成了,直接给出 PID 的参数。在 “Update PID Block” 后,可查看电压的波形图。
基于详细开关模型进行时域阶跃响应辨识在阶数较低(例如 2、3 阶)的电路中,也可用时域的阶跃响应信号进行辨识,得到被控对象的传递函数。
打开:
PID tuner -> Transfer Function based -> Tune
选择 :
Get I/O Data -> Simulate Data
Sample time 和系统的步长一致。Offset 为系统稳态的 duty cycle(0.5), Onset lag 为开始时间(0.05),Stop Time 为结束时间(0.052)。
然后让 Simulink 用一个 “underdamped pait” 去进行参数估计:达到 98.99% 的准确率。
这时候,PID tuner 就将这个辨识出的传递函数作为被控对象,进行 PID 调试。步骤不再赘述。
基于详细开关模型进行 Auto Tuning
刚才集中调试方式都是利用了系统的频域或者时域响应进行系统辨识,然后进行 PID 的半自动化参数调试。将:
这两步合二为一,做成一个 Simulink Block,不仅可以自动化上述过程,更可以自动化代码生成。这就是如下的 Block:
在 0.04s 到 0.06s 之间,PID AutoTuner 进行频域响应辨识,然后根据频域辨识的结果进行自动 PID 调试。
最终的仿真结果如下:
这种方式的好处可以将控制器做成“自适应”,PID 参数可以自己适应外界的变化。
MIMO 多 PID 的集中调试
刚才我们提到的例子都是单个 PID 的调试。
大家知道如果有多个 PID 的情况,先调内环再调外环。这些情况可视为 SISO (single-input-single-output)。 下面这个例子:是一个机械臂控制的一个例子,6 个电机分别控制 6 个机械关节,6 个电机的位置控制由 6 个 PID 分别控制。
由于机械臂存在 “耦合” 现象,即一个关节的移动会对其它关节造成影响。
那这时候,我们如果单独对某个关节进行 PID 调试可能整体效果不佳,这就是一个典型的 MIMO(multi-input-multi-output) 问题。
这种问题可以用 MATLAB 的 “Control System Tuner” 来进行多 PID 集中调试来解决。首先在 Control System Tuner 中选择一个稳态工作点,例如 take snapshot at 3 seconds。然后将 6 个 PID 选为需要调试的模块。
下一步选择一个 goal:本例中,机械臂的作用为路径跟随,所以选择 reference tracking。
在 Simulink 中选择参考值和反馈值的线路后,同步到 Control System Tuner 对话框中,并输入控制响应性能要求。
Control System Tuner 将调试的目标用频域形式表述如下:tracking error 必须要在虚线之下。
PID 参数调试前的机械臂角度跟随曲线:蓝色的为参考值,橙色为实际反馈值。
在 PID 调试后,tracking error 在虚线之下。
参数调试后的机械臂角度跟随曲线:蓝色的为参考值,橙色为实际反馈值。看到它们几乎重合,说明 PID 调试得很成功。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。