尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Simulink PID仿真入门:从原理到工程实践的全流程指南

Simulink PID仿真入门:从原理到工程实践的全流程指南 1. 从零开始为什么PID仿真对工程师如此重要如果你刚接触控制工程或者正在做毕业设计、项目开发大概率会听到“PID”这个词。它可能是你实验室里温控箱的核心也可能是你调试无人机时最头疼的参数。但很多人包括我当年都犯过一个错误一上来就对着硬件猛调参数结果调了半天电机要么纹丝不动要么直接“起飞”烧了驱动板不说还浪费了大量时间。后来我才明白在动手接线之前有一个步骤至关重要那就是仿真。而Simulink就是做这件事最趁手的工具之一。PID控制说白了就是一种“纠偏”的艺术。它通过比例P、积分I、微分D三个环节的组合让一个系统比如电机的转速、水箱的水位、无人机的姿态的输出能紧紧跟随我们设定的目标值。听起来简单但P、I、D这三个参数具体设多少它们之间如何相互影响为什么调大了P值系统会振荡为什么加了I值能消除静差但又可能让响应变慢甚至不稳定这些问题光靠理论公式和头脑想象是很难直观理解的。Simulink的价值就在这里。它提供了一个图形化的“沙盘”让你能在电脑上用拖拽模块、连线的方式快速搭建起一个包含被控对象比如一个电机模型和PID控制器的完整闭环系统。然后你只需要点一下“运行”就能看到系统在各种参数下的动态响应曲线。这个过程就像在玩一个即时战略游戏你可以随时暂停、修改“兵力”参数然后立刻看到战局系统响应的变化。这种即时反馈对于理解PID的内在机理和培养调参的“手感”是任何教科书和代码都无法替代的。更重要的是仿真能帮你规避现实中的风险。你可以在Simulink里把积分项调得极大看看会发生什么“积分饱和”而不用担心真实的电机因为过流而冒烟。你也可以模拟传感器噪声、执行器延迟提前测试你的控制算法在非理想环境下的鲁棒性。对于汽车、航空航天这些高成本、高安全要求的领域仿真更是产品开发流程中法规强制要求的一环。所以无论你是学生、工程师还是研究者掌握用Simulink进行PID仿真都是一项能极大提升效率、降低风险的核心技能。2. 仿真前的基石理解PID的三个核心环节与数学模型在打开Simulink之前我们必须把PID控制器本身“拆开”看明白。很多人调参调不好根本原因是对P、I、D各自的作用和副作用理解不透彻。这里我们不堆公式用最生活化的场景来类比。想象一下你在淋浴时调节水温。目标是把水温调到舒适的38度。比例环节P你用手试了一下水温发现只有20度太凉了。于是你根据“冷了多少”这个偏差猛地往热水方向拧阀门。偏差越大你拧的幅度就越大。这就是P的作用成比例地、即时地响应偏差。P值越大纠偏动作越“猛”。但问题来了如果你只靠P当水温接近38度时偏差变小你拧阀门的幅度也变小最后可能永远停在37度或39度这就是静差。而且如果P值太大你可能会因为动作过猛把水温调得过高然后又往回调导致水温在38度上下反复振荡系统就不稳定了。积分环节I为了解决静差你引入了I。它关注的是“偏差持续了多久”。如果水温一直低于38度存在正偏差积分环节就会把这个偏差随时间累加起来。累加值越来越大它就会命令阀门再开大一点直到偏差彻底为零。所以I能消除静差。但I是一把双刃剑。因为它有“记忆性”当水温已经达到38度后由于热惯性水温可能还会继续上升一点产生负偏差此时积分项还在累加正偏差它的输出指令依然是“开大热水”这就会导致超调甚至引发振荡。I值越大消除静差的能力越强但也越容易引起超调和振荡。微分环节DD是一个“预言家”。它不关心当前偏差有多大也不关心偏差积累了多久它关心的是偏差变化的趋势速度。当水温从20度快速上升到35度时虽然还有3度偏差但D环节已经“预见”到按这个速度水温很快就会冲过38度。于是它会输出一个抑制性的信号“慢点加热”。所以D能预测未来抑制超调提高系统的稳定性。但D对噪声极其敏感。如果你的温度传感器信号有毛刺D会把这些毛刺放大导致控制输出剧烈抖动。因此实际中D项往往需要配合低通滤波器使用。在Simulink中PID控制器的连续时间数学模型通常表示为U(t) Kp * e(t) Ki * ∫e(t)dt Kd * de(t)/dt其中U(t)是控制器输出e(t)是设定值与实际值的偏差Kp、Ki、Kd就是我们要调的三个参数。在数字仿真或实际单片机中我们需要将其离散化比如采用位置式或增量式PID算法。Simulink的PID Controller模块帮我们封装好了这一切我们只需要输入Kp、Ki、Kd的值即可。注意在Simulink中PID模块通常有两个参数输入形式(Kp, Ki, Kd)和(Kp, Ti, Td)。后者是另一种常见表示其中Ti是积分时间常数Td是微分时间常数关系是Ki Kp/Ti,Kd Kp*Td。使用时务必看清模块的参数对话框避免混淆。我刚开始就曾因这个搞错调了半天参数都没反应。3. 手把手搭建你的第一个Simulink PID仿真模型理论懂了我们立刻动手。打开MATLAB在命令窗口输入simulink回车或者点击主页的Simulink图标。新建一个空白模型我们就从这个空画布开始。3.1 核心模块的寻找与放置Simulink库浏览器就像我们的工具箱。点击模型工具栏上的“库浏览器”图标或者按CtrlShiftL打开它。设定信号源Step在库浏览器中找到Simulink - Sources库从中拖拽一个Step模块到模型图中。这个模块代表我们的目标指令比如我们希望电机转速从0突然上升到1000 RPM。双击它可以设置Step time阶跃发生时间比如设为1秒、Initial value初始值0和Final value最终值1。这里我们先归一化处理目标值设为1。PID控制器PID Controller在库浏览器中搜索“PID Controller”。你会看到好几个相关模块我们选择最常用的PID Controller位于Simulink - Continuous或Simulink - Discrete库取决于你需要连续还是离散控制器。对于入门仿真用连续域Continuous里的就可以。拖拽到图中。双击它你会看到参数设置界面。先将Controller类型设为PIDForm设为Parallel并行结构即输出Kpe Ki∫e Kd*de/dt最直观。Kp, Ki, Kd先设为0.1, 0.1, 0.1作为初始值。被控对象Plant这是我们要控制的系统。为了简化我们用一个典型的一阶惯性环节来模拟比如一个直流电机的简化模型。在库浏览器中找到Simulink - Continuous库拖拽一个Transfer Fcn传递函数模块过来。双击它假设我们的电机模型传递函数为1/(0.1s1)。那么在Numerator coefficients分子系数里输入[1]在Denominator coefficients分母系数里输入[0.1 1]。这代表一个时间常数为0.1秒的惯性系统。观测器Scope我们需要看结果。从Simulink - Sinks库中拖拽一个Scope示波器模块过来。一个可能不够我们拖两个。一个用来观察系统的输出响应是否跟随了阶跃指令另一个用来观察控制器的输出即U(t)看看控制量是否合理。求和与信号线我们需要计算偏差e(t) 设定值 - 实际值。从Simulink - Math Operations库中拖拽一个Sum求和模块。双击它将Icon shape改为rectangular方形List of signs改为|-表示上面是正输入下面是负输入实现减法。现在用鼠标从Step模块的输出端口拖出线连接到Sum模块的正输入端。再从Transfer Fcn模块的输出端口拖出线连接到Sum模块的负输入端-。然后从Sum模块的输出端连线到PID Controller的输入端再从PID Controller的输出端连线到Transfer Fcn的输入端。这样一个最基础的闭环就形成了。连接观测将Step模块的输出和Transfer Fcn模块的输出用线分别连接到第一个Scope可以重命名为Response。将PID Controller模块的输出连接到第二个Scope重命名为Control Effort。为了让画面清晰可以右键点击连线选择Signal Name给信号命名如Reference、Output、Control_Signal。至此你的模型应该类似下图此处为文字描述实际为连线图[Step] -- () [Sum] (-) -- [Transfer Fcn] | v [PID Controller] -- [Transfer Fcn] -- [Scope (Response)] | ^ | | ----- [Scope (Control Effort)]同时Step模块也直接连到了Response Scope上用于对比。3.2 首次运行与参数初探点击工具栏上的“运行”按钮或按CtrlT。仿真结束后双击Response和Control Effort两个Scope查看结果。你会看到由于我们随便设的KpKiKd0.1响应曲线很可能不理想。比如输出缓慢上升永远达不到1静差大或者振荡剧烈。别担心这正是我们预期的。记下这个“糟糕”的响应作为我们调参的起点。实操心得在开始复杂调参前我习惯先进行一个“单环节测试”。即先把Ki和Kd设为0只调Kp。逐渐增大Kp观察系统的响应。你会发现随着Kp增大系统响应变快静差减小但大到一定程度就会开始振荡。找到那个刚刚开始出现轻微振荡的Kp值记下来我们称之为Kp_critical临界比例增益。这是后续整定方法的一个重要参考点。对于我们的1/(0.1s1)模型你可以试试把Kp从0.1逐渐增加到2、5、10观察Scope中曲线的变化。4. 从理论到感觉在Simulink中实践PID参数整定有了模型和初步测试我们现在进入最关键的环节——调参。调参不是玄学有经典的方法论指导。我们在Simulink里可以安全、快速地实践这些方法。4.1 试凑法与“先P后I再D”的黄金法则这是最直观的方法遵循一个安全顺序整定P比例将Ki和Kd设为0。逐渐增大Kp直到系统出现如图4-1所示的等幅振荡即临界振荡状态。记录此时的Kp_critical和振荡周期T_critical。然后将Kp设置为0.5 * Kp_critical。这是一个非常保守且通常能保证系统稳定的起始点。在我们的例子中你可能发现Kp在8左右开始振荡那么就先设Kp4。此时系统响应较慢但有静差。整定I积分保持Kp4Kd0。逐渐减小Ki注意在并行结构中Ki是系数值通常比Kp小。比如从0.1开始尝试。你会发现加入Ki后静差逐渐被消除但响应速度可能会变慢并且出现超调。Ki的增加会降低系统稳定性。我们的目标是找到一个Ki值能在可接受的时间内比如几个时间常数消除静差同时超调量又不过大例如10%。可以尝试Ki2因为Kp4Ki2意味着积分时间TiKp/Ki2秒。整定D微分保持Kp和Ki不变。逐渐增加Kd。Kd的引入可以抑制超调提高稳定性。你会观察到随着Kd增加图4-1中响应曲线的超调峰值被压低系统更快地稳定下来。但Kd太大会放大高频噪声也可能导致系统对设定值变化的响应变迟钝。尝试Kd0.1到0.5之间的值。通过Scope你可以实时观察每一次参数调整后系统阶跃响应的变化。关注这几个关键指标上升时间、超调量、调节时间、稳态误差。在Simulink中你可以使用Step Response特性来自动计算这些指标需安装Control System Toolbox但用眼睛观察Scope进行对比对于培养“手感”更重要。4.2 基于模型的整定方法Ziegler-Nichols法则当你能通过试凑法获得一个还不错的响应时可以试试更系统的Ziegler-NicholsZN法。它有两种方法这里说第一种临界比例度法正好用上我们前面找的Kp_critical和T_critical。假设我们通过只加P的测试测得Kp_critical 8T_critical 0.4秒从Scope里测量两个波峰之间的时间。根据ZN法则的推荐表P控制器:Kp 0.5 * Kp_critical 4PI控制器:Kp 0.45 * Kp_critical 3.6,Ki Kp / (0.85 * T_critical) 3.6 / (0.85*0.4) ≈ 10.6(注意这里计算出的Ki是系数需根据你的PID模块公式确认。如果模块用(Kp, Ti)形式则Ti0.85*T_critical0.34秒)PID控制器:Kp 0.6 * Kp_critical 4.8,Ki Kp / (0.5 * T_critical) 4.8 / (0.5*0.4) 24,Kd Kp * (0.125 * T_critical) 4.8 * 0.05 0.24将这三组参数分别输入你的Simulink模型运行仿真对比Scope中的响应曲线。你会发现ZN法给出的PID参数响应通常比较“激进”超调量可能较大20%-25%但响应速度快。它为我们提供了一个优秀的起点而不是终点。你可以基于ZN法的结果进行微调。例如觉得ZN-PID超调太大可以适当减小Kp或Ki或者增加Kd。避坑指南ZN法假设被控对象近似为一阶惯性加纯延迟系统。如果你的实际模型与此相差甚远比如是二阶振荡环节ZN法的效果可能不好。此外临界振荡实验在真实的物理系统上做是危险的可能损坏设备。这正是Simulink仿真的巨大优势——我们可以在模型上安全地找到Kp_critical。4.3 进阶观察PID输出限幅与抗积分饱和在真实的控制系统中执行机构如电机驱动器、阀门都有物理极限。电机驱动器的输出电压不能超过电池电压阀门的开度只能在0-100%之间。如果不加限制PID控制器可能会计算出超出执行机构能力的控制指令导致实际控制效果与仿真不符甚至损坏设备。在Simulink中模拟这一点很简单在PID Controller模块和Transfer Fcn模块之间插入一个Saturation饱和模块位于Simulink - Discontinuities库。双击Saturation设置上下限例如Lower limit为-10Upper limit为10模拟一个±10V输出的驱动器。重新运行仿真。你会发现当控制指令试图超过±10时会被钳位在边界值。这可能会带来一个问题积分饱和。积分饱和现象与应对当系统存在较大偏差且持续一段时间比如启动阶段积分项会不断累积即使输出已经饱和积分项仍在增加。当偏差反向时积分项需要很长时间“退出”饱和区这会导致系统响应延迟出现“失控”的瞬间。在图4-1的Control Effort曲线中你可能会看到指令长时间顶在限幅值上。Simulink的PID Controller模块以及PID Controller (2DOF)等高级模块内部通常集成了抗积分饱和机制。在模块参数对话框中找到Output Saturation或Anti-windup相关选项。你可以选择back-calculation反算或clamping钳位等策略。启用后当输出饱和时积分器的累积会暂停或回退从而有效抑制积分饱和效应。务必在你的仿真中对比启用和禁用抗积分饱和的效果理解其重要性。5. 超越理想模型让仿真更贴近现实的几个关键技巧到目前为止我们都在一个理想的环境下仿真设定值是完美的阶跃信号被控对象是精确的线性模型没有噪声没有延迟。但现实世界远比这复杂。Simulink的强大之处在于它能方便地引入这些非理想因素测试控制器的鲁棒性。5.1 引入测量噪声与传感器模型真实的传感器信号总是带有噪声的。在Simulink中模拟噪声在Transfer Fcn被控对象输出和Sum模块的负输入端之间插入一个Band-Limited White Noise模块位于Simulink - Sources库。将该噪声模块的Noise power噪声功率设为一个较小值比如0.001Sample time设为0.001。运行仿真。观察ResponseScope你会发现输出曲线不再是光滑的而是带有毛刺。更关键的是观察Control Effort你会发现控制输出信号开始剧烈抖动这是因为微分环节D对高频噪声极其敏感将微小的测量噪声放大了。应对策略为D项添加滤波器这是必须的。Simulink的PID Controller模块参数中通常有一个Filter coefficient (N)选项。它会在微分项前加一个一阶低通滤波器传递函数为N*s/(sN)。增大N值滤波器截止频率变高微分作用更“纯净”但仍有滤波效果。尝试将N设为100观察控制输出的抖动是否显著减小。降低D项增益如果噪声无法完全滤除可能需要牺牲一些动态性能降低Kd值。使用PID Controller (2DOF)两自由度PID可以将设定值响应和干扰抑制响应分开整定有时能更好地处理噪声问题。5.2 模拟执行器延迟与采样周期在数字控制系统中控制器以固定的采样周期运行并且从计算到执行存在延迟。模拟采样将连续的PID Controller模块替换为Discrete PID Controller模块在库浏览器中搜索。双击模块设置Sample time例如0.01秒即100Hz采样率。同时将Step、Sum等信号处理模块的采样时间也设置为-1继承或相同的0.01。你会发现当采样周期变大时系统性能会下降甚至不稳定。这解释了为什么高速控制系统需要更快的处理器。模拟计算延迟在Discrete PID Controller模块后添加一个Transport Delay传输延迟模块位于Simulink - Continuous库设置一个小的延迟时间如0.002秒。延迟会进一步降低相位裕度可能使系统振荡。你需要重新调整PID参数来补偿这个延迟。5.3 应对非线性饱和、死区与摩擦现实中的被控对象往往是非线性的。饱和我们已经用Saturation模块模拟了。死区很多执行机构如便宜的舵机、阀门在输入信号很小时不动作。可以用Dead Zone模块位于Simulink - Discontinuities库模拟。这会导致小信号控制失灵通常需要PID输出叠加一个小的恒定偏置或使用变增益策略。静摩擦可以用Coulomb Viscous Friction模块位于同一库模拟。它会导致系统在启动或低速时存在“爬行”现象。在模型中引入这些非线性模块后你会发现之前整定好的线性PID参数可能不再适用。这时可能需要更复杂的控制策略或者使用Simulink提供的自动调参工具。在PID Controller模块的参数对话框中点击Tune...按钮可以打开PID整定器。它允许你指定响应时间、带宽、相位裕度等目标自动计算出满足要求的PID参数。这是一个非常强大的功能尤其对于高阶或非线性系统。6. 从仿真到代码Simulink PID算法的工程化落地仿真的最终目的是指导实际系统。对于嵌入式开发者而言如何将Simulink中调试好的PID算法变成可以烧录到单片机如STM32里的C代码是一个核心需求。Simulink提供了强大的代码生成功能。6.1 模型配置与离散化首先确保你的PID控制器是离散的使用Discrete PID Controller模块。然后进行关键的模型配置在Simulink界面点击Modeling选项卡下的Model Settings或按CtrlE。在Solver选项中将Solver selection的Type改为Fixed-step固定步长并选择一个合适的步长比如0.001或与你控制器采样周期一致。固定步长是生成可预测、高效代码的基础。在Code Generation部分将System target file设置为ert.tlcEmbedded Coder Target。这会为生成嵌入式代码进行优化。在Hardware Implementation中选择你目标芯片的基本硬件参数如芯片厂商、数据类型等这会影响生成的代码如是否使用single单精度浮点。关于数据类型一个常见的工程问题是如何将默认数据类型设置为single以节省资源在模型设置中Hardware Implementation-Hardware board settings-Device details里可以设置ProdHWDeviceType。但更直接的方法是在Code Generation-Interface中勾选Support: single precision。然而更根本的是在模型内部你可以右键点击信号线选择Properties直接指定该信号的数据类型为single。对于Discrete PID Controller模块双击打开在Data Types选项卡下可以分别设置Proportional、Integral、Derivative增益以及内部状态和输出的数据类型。对于资源紧张的MCU将PID内部计算全部设为single单精度浮点甚至fixdt(1,16,8)Q格式定点数可以显著节省内存和计算时间。6.2 生成代码与集成配置好后点击APPS选项卡下的Embedded Coder然后点击Build或按CtrlB。Simulink会自动将整个模型或你选定的子系统编译生成C代码。生成的代码会包含几个关键文件模型名.c/h包含PID控制算法的阶跃函数模型名_step()。这个函数就是你需要在主循环中定时调用的核心。模型名_private.c/h包含内部状态变量如积分项累积值、上一次的偏差等。模型名_types.h定义了用到的数据结构体。你需要做的就是在你的嵌入式工程中包含这些头文件调用生成的step函数并正确初始化相关数据结构。通常你需要将ADC读取的测量值作为函数输入函数的输出就是PID计算出的控制量如PWM占空比。工程经验生成的代码通常非常规整但可能包含一些你不需要的接口代码。为了获得更精简的代码可以在Code Generation-Interface中将Code interface packaging设为Nonreusable function并禁用丰富的运行时接口。更进阶的你可以将PID控制器封装成一个Atomic Subsystem原子子系统然后只为这个子系统生成代码这样得到的代码更纯粹只包含PID算法本身便于集成。6.3 联合仿真与硬件在环测试对于更复杂的系统如汽车控制可能会用到Carsim、PreScan等专业动力学软件。Simulink支持与这些工具的联合仿真。以Carsim为例通常的方式是Carsim提供车辆动力学模型并导出为一个S-Function模块或通过接口模块如Carsim S-Function。在Simulink中导入这个模块作为你的“被控对象”。在Simulink中搭建你的PID控制器或更高级的控制器如滑模控制。通过Simulink-Carsim接口Simulink将控制指令油门、刹车、转向发送给CarsimCarsim计算车辆状态车速、位置、横摆角等并反馈回Simulink。这种联合仿真可以在接近真实车辆动力学的环境下验证控制算法的有效性比简单的传递函数模型可靠得多。更进一步是硬件在环仿真。你可以将Simulink中的控制器模型生成代码并下载到一块真实的ECU电子控制单元如DSP或单片机开发板中运行。这台真实的ECU通过IO板卡与Simulink中运行的被控对象模型或Carsim进行实时数据交换。这可以测试控制代码在真实硬件上的运行情况包括时序、中断处理、外设驱动等是产品量产前非常关键的一步。Simulink的External Mode外部模式就支持这种调试方式允许你在Simulink界面上实时调整运行在硬件上的模型参数。7. 举一反三复杂PID结构与实际案例仿真掌握了基础PID仿真后我们可以挑战一些更复杂的结构和实际案例这也是网络热词中大家关心的。7.1 串级PID控制在温度控制、无人机姿态控制等场景中单回路PID往往不够。以“温度PID串级”控制为例外环温度环。输入是目标温度与实际温度的偏差输出是目标功率或目标加热电流。内环功率/电流环。输入是外环输出的目标电流与实际电流的偏差输出是PWM占空比或晶闸管触发角。内环响应速度远快于外环热惯性大。在Simulink中搭建串级PID就是将一个PID控制器的输出作为另一个PID控制器的设定值。你需要先整定好响应快的内环然后再整定外环。外环的Ki项用于消除温度静差但参数要设置得非常小因为积分过程对应着巨大的热容。7.2 增量式PID算法在“电机的位置闭环pid三个参数都需要用到吗”和“智能车速度环增量式pid”这些热词中提到了增量式PID。它与我们之前用的位置式PID输出是绝对控制量不同增量式PID输出的是控制量的增量。其公式为Δu(k) Kp*[e(k)-e(k-1)] Ki*e(k) Kd*[e(k)-2e(k-1)e(k-2)]实际控制量u(k) u(k-1) Δu(k)。在Simulink中实现增量式PID可以使用基本的加、乘、延迟模块搭建也可以使用Discrete PID Controller模块并将其配置为Incremental形式。增量式PID的优点是对算力要求低不需要一直累加积分项抗积分饱和天然好输出平滑更适用于执行机构带积分特性的对象如步进电机。但缺点是对参数变化更敏感。7.3 实战案例直流电机速度闭环控制仿真让我们综合运用所学搭建一个更贴近实际的案例。假设我们控制一个直流电机采用PWM驱动。被控对象模型电机可以建模为转速 (Kt * PWM占空比) / (J*s B)其中Kt是转矩常数J是转动惯量B是阻尼系数。在Simulink中用Transfer Fcn表示。PWM与功放模型在PID输出后加入Saturation模块模拟PWM限幅0-100%再乘以一个增益模拟驱动电压。速度测量模型在电机模型输出后加入Quantizer模块模拟编码器分辨率再加入Band-Limited White Noise模拟测量噪声。控制器使用Discrete PID Controller采样时间设为0.01秒。采用增量式算法。整定先整定速度环PID。给定一个阶跃速度指令观察响应。为了更真实可以加入一个Rate Limiter模块模拟电机加速度限制。通过这个案例你能完整地体验从建模、控制器设计、参数整定到非理想因素处理的全部流程。你还可以尝试加入“位置闭环”构成位置-速度双闭环这是伺服系统常见的结构。7.4 模糊PID与智能控制对于非线性、时变严重的系统常规PID可能力不从心。“模糊pid”是一种常见的智能控制方法。它用模糊规则如“如果误差为正大且误差变化率为负小则输出控制量为正中”来代替固定的PID计算公式。在Simulink中有Fuzzy Logic Controller模块可以与PID结合使用实现参数自整定模糊自适应PID。虽然搭建和调试更复杂但Simulink提供了可视化的规则编辑器和曲面观察器使得设计过程变得直观。对于像“二阶倒立摆”这类经典的非线性、不稳定系统模糊控制或滑模控制另一个热词往往是更好的选择你可以在Simulink中搭建这些高级控制算法进行仿真验证。仿真从来不是目的而是通向可靠工程实践的桥梁。在Simulink这个安全的沙盘里大胆尝试、反复试错、深入观察你对PID控制的理解会从书本上的公式变成指尖上的直觉。当你在现实中再次面对一个需要控制的系统时那份在仿真中积累的“手感”和系统性思维会让你事半功倍。
返回列表