在本系列中,我们将讨论如何使用 LabVIEW 和一个爱好直流伺服电机来实现一个简单的 PID 控制器。我们通过移除其内部控制器并用 myRIO 接口替换它来定制伺服。
这是我们以定制伺服电机为基础的第二篇文章,专门关注 PID 控制器的编程。您需要按照本系列的第一部分(讨论项目的硬件)来实施下面显示的步骤。
LabVIEW
LabVIEW 是由 National Instruments 开发的图形化编程语言。该语言的最大好处之一是可供它使用的大量工具包、模块和库。使用这些,您可以为众多工程和研究项目快速开发最复杂的应用程序。
这个实验也不例外。我们将完全控制 NI LabVIEW PID 和模糊逻辑工具包,而不是完全从头开始编写 PID 控制器。使用软件包附带的常规“PID.VI”,我们将能够更快地解决绕过原始伺服控制器的挑战。
本教程无意涵盖 PID 的基本理论细节。相反,它将向您展示如何实现一个简单的 PID 控制器。
要求
要遵循,您应该有以下可用和/或安装:
NI myRIO 嵌入式硬件设备
NI myRIO 扩展端口 (MXP) 原型板附件(预装 myRIO)
现在应该连接到 Protoboard 附件的定制伺服电机
NI LabVIEW
NI LabVIEW PID 和模糊逻辑工具包
在本教程中,我使用 NI LabVIEW 2014 版对安装了 NI LabVIEW PID 和 Fuzzy Logic Toolkit 的 NI myRIO 设备进行编程。如果您仍然是学生,您应该能够从您的大学获得所有软件和相关许可证。
伺服控制——理论与实践
之前,我们解释了如何控制伺服以及我们如何绕过设备的内部控制器来控制速度而不是位置。我们说过这些设备接受脉宽调制 (PWM) 信号(图 1)并遵循标准 RC 爱好伺服协议。
图 1:通过 PWM 进行简单的伺服控制
根据该标准协议,常规伺服系统将以 1000 μs 的脉冲长度 (T ON ) 移动到其最左侧位置,以 2000 μs 移动到最右侧位置,并在 1500 μs 时停留在中间位置(表 1)。
表 1:标准伺服行为
定制后,它应该以 1000 μs 向左移动最快,以 2000 μs 向右移动,并在 1500 μs 时保持静止(表 2)。请注意,这些假设假设刷新率为 50 Hz。
表 2:定制后的伺服行为
然而,在实践中,这些值可能会有很大的变化,尤其是对于我们在本教程中使用的预算伺服系统。
因此,我们将凭经验确定中心位置,我们自己,然后为顺时针和逆时针行程添加任意正负偏移。
软件
创建 LabVIEW 项目
首先,让我们创建一个LabVIEW项目。启动LabVIEW,在初始屏幕上,选择“创建项目”(或者,您可以转到文件》》创建项目)。
在新的弹出窗口中,选择“myRIO Project”并单击“Next”。
图 2:创建 myRIO 项目——第 1 步
然后给项目起个名字。我把我的简称为“PID”。
最后,确保已插入并找到 myRIO,此时您可以单击“完成”。
图 3:创建 myRIO 项目——第 2 步
创建一个新VI
然后,在 myRIO 目标下创建一个名为“PID Controller.VI”的新 VI,如图 4 所示。您可以忽略甚至删除“Main.VI”——它是默认创建的,作为在下创建的每个 myRIO 项目的示例这个模板。
图 4:在 myRIO 上创建一个新 VI
打开新 VI 并切换到程序框图窗口。创建一个带有相关停止按钮的 while 循环。我们将在这里放置所有需要连续执行的代码。
图 5:带有停止按钮的 While 循环
接下来,使用 Quick Drop (CTRL+Space) 或从 myRIO 函数面板中选择函数,添加“Analog Input” express VI,如图 6 所示。
在配置弹出窗口中,确保选择的通道为“A/AI0 (Pin 3)”并为通道命名。我将其称为“反馈”,因为使用此功能块,我们将从内部伺服电位器读取我们的位置值。
然后单击“确定”并将 express VI 放入 while 循环中。
图 6:添加模拟输入功能。
同样,让我们创建一个 PWM 输出,以便我们可以控制伺服速度。同样,使用 Quick Drop 或函数选板,添加一个名为“PWM”的快速 VI(图 7)。
对于您的通道,选择“A/PWM0(引脚 27)”。将频率设置为 50 Hz(通过“设置常数”选项)并在“占空比”下选择“使用 Express VI 的输入设置”。
图 7:添加 PWM 功能
然后单击“确定”并将块放入while循环中。您应该有一个类似于图 8 中所示的布局。
图 8:向 while 循环添加模拟输入和脉宽调制 (PWM) 功能。
确定伺服的中心位置
接下来,我们的目标是确定伺服的中心位置。为此,请为“占空比”输入创建一个控件。
您也可以为“反馈”创建一个指标,这样您就可以观察电位计的值(范围在 0 到 5 之间,但正如我们稍后将看到的,将这些值转换为不同的范围很简单)。我们还将使用“等待”功能添加一些时间。框图如图9所示;Wait 函数显示为手表,附加的常数 10 表示我们有 10 ms 的延迟。
图 9:添加控件、指示器和计时。
从理论上讲,我们的占空比将介于 1 ms 和 2 ms 的脉冲宽度之间,其中 1.5 ms 是停止伺服的值(零速度)。我们的 50 Hz 信号的周期为 20 ms,因此这些脉冲宽度对应于 0.05、0.10 和 0.075 的占空比。
在实践中,产生零速度的实际脉冲宽度可能与理论值不同。要找到实际值,请在占空比设置为 0.075 的情况下运行 VI,然后对其进行调整,直到伺服不旋转。在我的例子中,实际值为 0.058(图 10)。
图 10: 中心查找代码的前面板(前面板)。
添加任意偏移量
接下来,我们将向该中心值添加任意速度控制偏移。
我选择了 0.012 的偏移量。这意味着顺时针方向的最大角速度对应于 0.046 (0.058 - 0.012) 的占空比,类似地,逆时针方向的最大角速度对应于 0.070 (0.058 + 0.012)。这些映射如表 3 所示。
表 3:速度映射
任何中间值都代表给定方向上最大角速度的一小部分。例如,对于以最大速度的一半逆时针旋转,控制器需要将占空比设置为 0.058 + (0.012/2) = 0.064。
PID控制器实现
一旦我们确定了中间位置,我们就可以最终实现 PID 控制器。使用 Quick Drop 或函数选板,从 LabVIEW PID 和 Fuzzy Logic 工具包中添加“PID.vi”。
为设定点输入创建一个控件;设定点是我们希望输出具有的值(在这个系统中,旋转速度)。
我们还可以为 PID 增益和输出范围创建控制(暂时保持这些不变)。
您现在应该有一个类似于图 11 所示的 VI。
图 11:添加 PID 控制。
我们需要确保我们的设定点、输出和反馈在适当的值范围内变化。
我们的输出范围设置为在 -100 和 100 之间变化(图 11),因此让我们将相同的范围应用于反馈。反馈最初在 0 到 5 的范围内,因此我们需要缩放这些值(表 4)。
表4:反馈映射表;0 应该映射到 -100,而 5 应该映射到 100。
通过对反馈值应用斜率(用 A 表示)和偏移量(用 B 表示)来实现缩放。我们可以通过求解以下两个联立方程找到所需的斜率和偏移量:
图 12:求解将反馈值缩放到 -100 到 100 范围所需的斜率 (A) 和偏移量 (B)。
缩放反馈和输出
下图显示了我们如何将斜率和偏移量合并到 VI 中。
图 13:缩放反馈值。
根据我们之前确定的占空比值,我们还必须缩放在 -100 和 100 之间变化的输出:
表 5:输出(占空比)映射表。
图 14:求解将输出值缩放到 0.046 到 0.070 范围所需的斜率 (A) 和偏移量 (B)。
下图显示了我们如何将输出缩放合并到 VI 中。
图 15:该项目的最终 VI。
概括
如果您已逐步按照教程进行操作,那么您已经成功实现了伺服的 PID 控制器,绕过了原来的伺服控制威廉希尔官方网站 。
如果您现在切换到 VI 的前面板,您可以独立调整所有三个 PID 增益并使用“Setpoint”控件控制伺服。更改增益允许您调整 PID 控制器,从而获得更好的伺服性能。
另外,请注意,我已将界面更改为滑块,如下图 16 所示,以便以更自然的方式移动伺服。
图 16:该项目最终 VI 的前面板。
您也可以通过右键单击数字控件并选择“替换》》数字》》水平指针幻灯片”来执行此操作。
恭喜您使用 LabVIEW 和 NI myRIO 实现了 PID 控制器!
全部0条评论
快来发表一下你的评论吧 !