技术文章及通讯

Arduino电机控制:数据驱动建模和控制设计的案例研究

作者:Pravallika Vinnakota, MathWorks


在物理原型或工厂硬件上调整控制器可能导致不安全的操作条件并损坏硬件。更可靠的方法是建立一个工厂模型并对其进行模拟,以验证控制器在不同工况下的运行情况,从而在没有风险的情况下运行what-if场景。

当第一性原理建模不可行时,另一种方法是根据工厂的投入-产出测量来开发模型。低阶线性模型对于设计基本控制器可能已经足够了。详细的分析和高性能控制器的设计需要一个更高的保真度和可能的非线性模型。

本文以一个简单的直流电机控制系统为例,介绍如何从输入输出数据中识别出一个工厂模型,利用识别出的模型设计控制器,并实现控制器。该工作流程包括以下步骤:获取数据,识别线性和非线性植物模型,设计和模拟反馈控制器,并在嵌入式微处理器上实现这些控制器进行实时测试。

本例中使用的模型和脚本可用于下载

直流电机:控制设计目标

物理系统是连接到Arduino的直流电机®通过电机驱动器Uno板(图1)。我们想为这个电机设计一个反馈控制器来跟踪参考位置。控制器将根据电机位置参考数据生成适当的电压命令。当施加到电机上时,该电压将使电机产生转矩,使电机轴转动。我们将使用电位器来测量电机轴的旋转角度,并将这个角度反馈给控制器。

Arduino板连接直流电机
图1。Arduino板连接直流电机。

电机驱动集成电路(IC)增加了电流能力,可以双向驱动电机。我们通过Arduino板上的Analog Input pin接收电机位置数据,并计算参考数据和实际数据(控制器输入)之间的误差。我们将电压命令(控制器输出)作为PWM信号发送到板上的两个模拟输出引脚。这些信号被馈送到驱动IC,为电机提供适当的驱动电流。

控制器必须保持系统稳定,并以最小的稳态误差和超调提供快速参考跟踪。

获取和处理数据

我们使用Simulink将主机PC连接到Arduino板金宝app®允许您生成可执行文件并在选定的硬件上运行它的功能。图2显示了用于Arduino硬件的Si金宝appmulink库。

SystemID_Figure2_w.jpg
图2。金宝appSimulink块库:用于Arduino硬件的目标。

为了收集数据,Arduino板将向电机发送电压命令并测量电机的角度。我们创建了一个Simul金宝appink模型来支持数据收集。主机必须与Arduino板通信,发送电压命令并接收角度数据。我们创建了第二个模型来实现这种通信。

在该模型中,将运行在Arduino Uno板上(图3),MATLAB®功能块电压命令到引脚从串口读取,并将电压命令路由到相应的引脚。我们使用串行通信协议使上位机与Arduino板通信。在CreateMessage子系统中,一个完整的串行消息从从板上的一个模拟输入引脚获得的电机位置数据生成。

SystemID_Figure3_w.jpg
图3。金宝app将在Arduino板上运行的Simulink模型。

我们通过选择从模型创建一个实时应用程序工具>在目标硬件上运行>运行.然后,我们准备使用将在主机上运行的模型获取输入/输出数据(图4)。

SystemID_Figure4_w.jpg
图4。将在主机上运行的模型。

我们发送各种电压波形来激励系统,并记录和记录相应的位置数据。在模拟结束时,Simulink中的信号记录特性将在工作空间中创建一个Simulink数据集对象,其中包含作为时间序列对象金宝app的所有记录的信号。

接下来,我们准备收集到的数据进行估计和验证。使用以下命令,我们将数据转换为iddata对象,以便导入系统识别工具箱™中的系统识别工具。

> > logsoutlogsout = 金宝appSimulink. simulationdata . dataset包:Simulink. logsout = Simulink. simulationdata . datasetSimulationData特征:名称:'logsout'总元素:2元素:1:'Voltage' 2: 'Angle' -使用getElement按索引或名称访问元素。-使用addElement或setElement添加或修改元素。方法,父类>> u = logout . getelement (1).Values.Data;>> y = logout . getelement (2).Values.Data;> > bounds1 = iddata (y, u, 0.01,“InputName”、“电压”、“OutputName”的角度 ',... ...' InputUnit”、“V”、“OutputUnit”、“度”)时域数据集,有1001个样本。采样时间:0.01秒输出单位(如指定)角度度输入单位(如指定)电压V

我们将与之合作12个数据集.选择这些数据集是为了确保系统有足够的激励,并为模型验证提供足够的数据。

从实验数据建立植物模型

使用系统识别技术开发工厂模型涉及模型保真度和建模工作之间的权衡。模型越精确,在工作量和计算时间方面的成本就越高。我们的目标是找到能够充分捕捉系统动态的最简单的模型。

我们遵循系统识别的典型工作流程:我们从估计一个简单的线性系统开始,然后估计一个更详细的非线性模型,这是电机的更准确的表示,并捕捉非线性行为。虽然线性模型可能足以满足大多数控制器设计应用,但非线性模型可以更精确地模拟系统行为和控制器设计在一定范围内的工作点。

线性系统辨识

使用iddata对象,我们首先估计一个线性动态模型的植物作为一个连续时间传递函数。对于这个估计,我们指定极点和零的数量。然后,系统识别工具箱自动确定它们的位置,以最大限度地适合所选数据集。

我们通过执行启动系统标识工具

> >鉴别

我们可以使用import data下拉菜单(图5)将数据集从基本工作区导入到工具中。我们还可以选择对导入的数据进行预处理。为了开始估计过程,我们选择将用于估计模型的工作数据和用于测试估计模型的验证数据。我们可以最初使用相同的数据集进行估计和验证,然后使用其他数据集来确认我们的结果。图5显示了系统标识工具和导入的数据集。估计数据集,数据集11,来自一个旨在避免系统中令人兴奋的非线性的实验。

SystemID_Figure5_w.jpg
图5。导入数据的系统识别工具。

我们现在可以估计这个数据的连续传递函数。在我们的例子中,我们估计了一个2极,非零,连续时间传递函数(图6)。

SystemID_Figure6_w.jpg
图6。连续传递函数估计GUI。

我们将估计模型的模拟响应与实测数据进行比较模型输出框中的系统识别工具。估计线性模型的响应与估计数据的拟合度为93.62%(图7)。

SystemID_Figure7_w.jpg
图7。比较估计模型响应和估计数据的图。

为了确保估计的传递函数代表电机动力学,我们必须对一个独立的数据集进行验证。为了这个目的,我们选择数据集12,其中电机线性运行作为我们的验证数据。我们得到了一个相当精确的拟合(图8)。

SystemID_Figure8_w.jpg
图8。比较估计模型响应与验证数据的图表。

虽然拟合并不完美,但我们确定的传递函数在捕获系统动态方面做得很好。我们可以利用这个传递函数为系统设计一个控制器。

我们还可以分析植物不确定性的影响。使用系统识别工具箱获得的模型不仅包含标称参数值的信息,还包含由参数协方差矩阵封装的参数不确定性信息。作为模型可靠性的度量,计算的不确定性受影响系统的外部扰动、未建模的动态和收集的数据量的影响。我们可以通过绘制不确定性对模型响应的影响来可视化不确定性。例如,我们可以生成估计传递函数的波德图,显示围绕标称响应的1个标准差置信限(图9)。

SystemID_Figure9_w.jpg
图9。估计模型的波德图显示模型的不确定性。

非线性系统辨识

利用从电机运行的线性区域收集的数据建立电机动力学的线性模型,对于设计有效的控制器是有用的。然而,该植物模型不能捕捉电机表现出的非线性行为。例如,数据集2表明,电机的响应饱和在约100°,和数据集3说明电机对小的指令电压没有反应,可能是由于干摩擦。

在这一步中,我们将创建一个高保真的直流电机模型。为此,我们估计了直流电动机的非线性模型。对数据进行更仔细的检查可以发现,响应斜率的变化与电压的变化不是线性相关的。这一趋势表明了非线性的、类似滞后的行为。非线性ARX (NLARX)模型提供了相当大的灵活性,使我们能够使用丰富的非线性函数集(如小波和sigmoid网络)来捕捉这种行为。此外,这些模型让我们结合我们已经发现的系统非线性使用自定义回归器。

为了使NLARX建模有效,我们需要包含丰富非线性信息的数据。我们合并三个数据集来创建估计的数据.我们合并了其他五个数据集来创建一个更大的多实验,验证数据集

>> mergedD = merge(z7,z3,z6)包含3个实验的时域数据集。实验样品样本时间Exp1 5480 0.01 Exp2 980 0.01 Exp3 980 0.01输出单位(如有指定)角度输入单位(如有指定)电压V>> mergedV = merge(z1,z2,z4,z5,z8);

非线性模型具有多种可调分量。我们调整了模型的阶数、延迟、非线性函数的类型以及非线性函数中的单元数。我们添加了代表饱和和死区行为的回归函数。经过几次迭代,我们选择了一个模型结构,它采用了一个带有并行线性函数的sigmoid网络,并使用回归函数的子集作为其输入。对该模型的参数进行了估计,以获得最佳的模拟结果(图10)。

SystemID_Figure10_w.jpg
图10。非线性ARX模型估计GUI。

所得模型对估计数据和验证数据具有>90%的极好拟合。该模型既可用于控制器设计,也可用于分析和预测。

控制器设计

我们现在准备为高保真非线性模型设计一个PID控制器。我们在一个工作点线性化估计的非线性模型,然后为这个线性化模型设计控制器。

我们对PID控制器进行调优,然后选择其参数(图11)。

SystemID_Figure11_w.jpg
图11。PID调谐器接口。

我们还检查了该控制器在非线性模型上的表现。图12显示了我们用来获得非线性ARX模型金宝app的仿真响应的Simulink模型。

SystemID_Figure12_w.jpg
图12。金宝app在Simulink模型上测试控制器的估计非线性模型。

然后,我们比较线性化和非线性模型闭环阶跃响应的理想参考位置为60°(图13)。

SystemID_Figure13_w.jpg
图13。比较非线性和线性化模型模拟响应的阶跃响应图。

从硬件上测试控制器

我们使用控制器创建一个S金宝appimulink模型,并使用Simulink内置支持将模型部署到目标硬件(图14),将其放置在Arduino Uno板上。金宝app

SystemID_Figure14_w.jpg
图14。模型与控制器在Arduino板上实现。Get Angle子系统接收来自串口的参考信号,并将其转换为电机所需的角度。直流电机子系统配置Arduino板与物理电机接口。

通过对估计的非线性ARX模型在某一工作点上进行线性化,设计了控制器。该控制器的结果表明,硬件响应与仿真结果非常接近(图15)。

SystemID_Figure15_w.jpg
图15。对使用线性化模型设计的控制器的阶跃参考进行仿真和硬件响应比较的绘图。

我们还测试了控制器跟踪随机参考命令的效果。我们看到硬件跟踪性能也非常接近仿真过程中获得的性能(图16)。

SystemID_Figure16_w.jpg
图16。用估计非线性模型设计的控制器,在仿真和硬件上比较跟踪性能。

这个示例虽然简单,但捕获了数据驱动控制的基本步骤。我们从给定的硬件目标收集输入/输出数据,并使用系统识别工具箱来构建系统模型。我们展示了如何创建较低和较高保真度的模型,并使用这些估计模型设计控制器。然后,我们在实际硬件上验证了控制器的性能。

发布于2013年- 92066v00

查看相关功能的文章

查看相关行业的文章