yaboPP电子
项目

在ni myrio-the软件上创建PID控制器

2016年11月29日经过Mark Narvidas.

在这个简短的项目文章系列,我们将实现一个简单的PID控制器使用LabVIEW在一个爱好直流伺服电机和NI myRIO。

了解使用LabVIEW和NI myRIO的PID控制器项目的软件方面。

相关信息

在本系列中,我们讨论如何使用LabVIEW和Hobby DC伺服电机实现简单的PID控制器。我们通过删除其内部控制器并用Myrio接口替换它来自定义伺服。

这是第二篇文章,我们建立在我们定制的伺服电机,并专注于PID控制器的独家编程。你得跟我来该系列的第一部分,讨论项目的硬件,实现下面所示的步骤。

虚拟仪器

LabVIEW是由国家仪器开发的一种图形编程语言。语言的最大好处之一是可用于它的大量工具包,模块和库。使用这些,您可以快速开发最复杂的应用程序,以实现众多工程和研究项目。

这个实验也不例外。我们将完全从头开始写入我们的PID控制器,而是完全控制NI LabVIEW PID和模糊逻辑工具包。使用普通的“PID.VI”船用软件包,我们将能够更快地绕过原始伺服控制器的挑战。

本教程不旨在涵盖PID的Nitty-Gritty的理论细节。相反,它将向您展示如何实现一个简单的PID控制器。

要求

要遵循,您应该有以下可用和/或安装:

  • NI Myrio嵌入式硬件设备
  • Ni Myrio扩展端口(MXP)Protoboard附件(预包装Myrio)
  • 定制伺服电机,现在应该连接到Protoboard附件
  • 倪虚拟仪器
  • NI LabVIEW PID和模糊逻辑工具箱

在本教程中,我使用NI LabVIEW版本2014来编程NI Myrio设备,并安装了NI LabVIEW PID和模糊逻辑工具包。如果您仍然是学生,您应该能够从您的大学获取所有软件和相关许可证。

伺服控制理论与实践

之前,我们解释了如何控制伺服,以及如何绕过设备的内部控制器来控制速度而不是位置。我们说,这些设备接受脉宽调制(PWM)信号(图1),并遵循标准RC爱好伺服协议。

图1:通过PWM简单的伺服控制

根据该标准协议,常规伺服将以脉冲长度移动到其最左侧位置(t)1000μs和2000μs右侧,在1500μs停留在中间(表1)。

表格1:标准伺服行为

定制时,它应该在1000μs以1000μs右侧移动到左侧的最快,并在1500μs保持静止(表2)。请注意,这些假设采用50 Hz刷新率。

表2:定制后的伺服行为

然而,在实践中,这些值可能会有很大的变化,特别是像本教程中使用的预算伺服。

因此,我们将自己经验地确定中心位置,然后为顺时针和逆时针移动添加任意的正和负偏移量。

软件

创建LabVIEW项目

首先,让我们创建一个LabVIEW项目。启动LabVIEW,在Splash屏幕上,选择“创建项目”(或者,您可以转到文件>>创建项目)。

在“新建弹出窗口”上,选择“Myrio项目”,然后单击“下一步”。

图2:创建Myrio项目 - 第1步

然后给项目一个名字。我只是打电话只是“PID”。

最后,确保MyRIO已插入并找到,此时您可以单击“完成”。

图3:创建一个Myrio项目 - 第2步

创建一个新的vi

然后,创建一个名为“PID控制器”的新VI。如图4所示。你可以忽略甚至删除“Main”。默认情况下,它会作为在这个模板下创建的每个myRIO项目的示例创建。

图4:在myRIO上创建一个新的VI

打开新VI并切换到框图窗口。使用关联的停止按钮创建一小时循环。这是我们将把所有代码持续执行的地方。

图5:循环与停止按钮

接下来,使用Quick Drop (CTRL+Space)或从myRIO函数面板中选择函数,添加“Analog Input”表达式VI,如图6所示。

在配置弹出窗口中,确保选择的通道是“A/AI0 (Pin 3)”,并给通道一个名称。我称它为“反馈”,因为使用这个功能块,我们将从内部伺服电位器读取位置值。

然后点击“确定”并将快捷VI放入while循环中。

图6:增加模拟输入功能。

同样,让我们​​创建PWM输出,以便我们可以控制伺服速度。同样,使用快速删除或功能调色板,添加名为“PWM”的Express VI(图7)。

对于您的通道,选择“A/PWM0(引脚27)”。设置您的频率为50hz(通过“设置常量”选项),并在“占空比”下选择“设置使用输入来表示VI”

图7:添加PWM功能

然后单击“确定”并将块放入循环中。您应该具有类似于图8所示的布局。

图8:向WHIL循环添加模拟输入和脉冲宽度调制(PWM)功能。

确定伺服中心位置

接下来,我们的目标是确定伺服的中心位置。为此,为“占空比”输入创建一个控制。

你也可以为“反馈”创建一个指示器,这样你就可以观察到电位器的值(它的范围是0到5,但正如我们稍后将看到的,将这些值转换成不同的范围是很简单的)。我们还将添加一些计时与“等待”功能。框图如图9所示;等待功能显示为手表,固定的10意味着我们有10毫秒的延迟。

图9:添加控制、指示器和定时。

从理论上讲,我们的占空比将在1毫秒和2毫秒的脉冲宽度之间进行范围,其中1.5 ms是停止伺服(零速度)的值。我们的50 Hz信号具有20毫秒的时间,因此这些脉冲宽度对应于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控制器。使用快速删除或功能调色板,从LabVIEW PID和模糊逻辑工具包中添加“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增益并使用“设定值”控制来控制伺服。更改增益允许您调整PID控制器,从而实现更好的伺服性能。

另外,请注意,我已经将界面更改为滑块,如下面的图16所示,以更自然的方式移动伺服。

图16:这个项目最终的VI前面板。

你也可以这样做,右键单击数字控件并选择“替换>>数字>>水平指针滑动”。

恭喜使用LabVIEW和NI Myrio实现PID控制器!

2评论
  • ALI KHAN_1516614903 2018年1月22日

    嗨,大家好。有人可以向我发送这个项目的文件吗?我是NI设备的新手,我有Myrio设备。谢谢

    喜欢的。 回复
  • randika2000e. 10月31日,2020年

    尊敬的马克纳尔沃斯,
    感谢您对PID的非常丰富的文章系列。顺便说一下,由于大多数人没有这样的昂贵的NI Myrio设备,我想建议使用廉价的Arduino平台设备进行一些教程解释。
    干杯!

    喜欢的。 回复