0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用LabVIEW和NI myRIO实现PID控制器

科技观察员 来源:allaboutcircuits 作者:马克·纳维达斯 2022-05-10 16:22 次阅读

在本系列中,我们将讨论如何使用 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 爱好伺服协议。

poYBAGJ6IM2ATuJ6AAAu6ijywZ4059.jpg

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

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

pYYBAGJ6IM6AT-7HAAA63WnfIBo737.jpg

表 1:标准伺服行为

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

poYBAGJ6IM-AdR64AAA7A8XcVS0723.jpg

表 2:定制后的伺服行为

然而,在实践中,这些值可能会有很大的变化,尤其是对于我们在本教程中使用的预算伺服系统。

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

软件

创建 LabVIEW 项目

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

在新的弹出窗口中,选择“myRIO Project”并单击“Next”。

pYYBAGJ6INCAe_jWAADC-0tg2pI519.jpg

图 2:创建 myRIO 项目——第 1 步

然后给项目起个名字。我把我的简称为“PID”。

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

pYYBAGJ6INGAYlVxAADvVg7RUIU754.jpg

图 3:创建 myRIO 项目——第 2 步

创建一个新VI

然后,在 myRIO 目标下创建一个名为“PID Controller.VI”的新 VI,如图 4 所示。您可以忽略甚至删除“Main.VI”——它是默认创建的,作为在下创建的每个 myRIO 项目的示例这个模板。

poYBAGJ6INKAaDapAAB0qZpE7P8547.jpg

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

打开新 VI 并切换到程序框图窗口。创建一个带有相关停止按钮的 while 循环。我们将在这里放置所有需要连续执行的代码。

pYYBAGJ6INOAAZMnAAAaVFfZbew979.jpg

图 5:带有停止按钮的 While 循环

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

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

然后单击“确定”并将 express VI 放入 while 循环中。

pYYBAGJ6INSAYCXKAACDz51Rq-o581.jpg

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

同样,让我们​​创建一个 PWM 输出,以便我们可以控制伺服速度。同样,使用 Quick Drop 或函数选板,添加一个名为“PWM”的快速 VI(图 7)。

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

poYBAGJ6INWAKKMxAADBxWfTdco004.jpg

图 7:添加 PWM 功能

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

pYYBAGJ6INaAMVKQAAA1Orr9dkI872.jpg

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

确定伺服的中心位置

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

您也可以为“反馈”创建一个指标,这样您就可以观察电位计的值(范围在 0 到 5 之间,但正如我们稍后将看到的,将这些值转换为不同的范围很简单)。我们还将使用“等待”功能添加一些时间。框图如图9所示;Wait 函数显示为手表,附加的常数 10 表示我们有 10 ms 的延迟。

poYBAGJ6INiAK6BhAABJi-PiV5U151.jpg

图 9:添加控件、指示器和计时。

从理论上讲,我们的占空比将介于 1 ms 和 2 ms 的脉冲宽度之间,其中 1.5 ms 是停止伺服的值(零速度)。我们的 50 Hz 信号的周期为 20 ms,因此这些脉冲宽度对应于 0.05、0.10 和 0.075 的占空比。

在实践中,产生零速度的实际脉冲宽度可能与理论值不同。要找到实际值,请在占空比设置为 0.075 的情况下运行 VI,然后对其进行调整,直到伺服不旋转。在我的例子中,实际值为 0.058(图 10)。

pYYBAGJ6INmAOKGxAAAVMZVXwbs383.jpg

图 10: 中心查找代码的前面板(前面板)。

添加任意偏移量

接下来,我们将向该中心值添加任意速度控制偏移。

我选择了 0.012 的偏移量。这意味着顺时针方向的最大角速度对应于 0.046 (0.058 - 0.012) 的占空比,类似地,逆时针方向的最大角速度对应于 0.070 (0.058 + 0.012)。这些映射如表 3 所示。

pYYBAGJ6INqAUfqJAAArzGxi2iM922.jpg

表 3:速度映射

任何中间值都代表给定方向上最大角速度的一小部分。例如,对于以最大速度的一半逆时针旋转,控制器需要将占空比设置为 0.058 + (0.012/2) = 0.064。

PID控制器实现

一旦我们确定了中间位置,我们就可以最终实现 PID 控制器。使用 Quick Drop 或函数选板,从 LabVIEW PID 和 Fuzzy Logic 工具包中添加“PID.vi”。

为设定点输入创建一个控件;设定点是我们希望输出具有的值(在这个系统中,旋转速度)。

我们还可以为 PID 增益和输出范围创建控制(暂时保持这些不变)。

您现在应该有一个类似于图 11 所示的 VI。

poYBAGJ6INqAPzbfAABSmcnuvgs779.jpg

图 11:添加 PID 控制。

我们需要确保我们的设定点、输出和反馈在适当的值范围内变化。

我们的输出范围设置为在 -100 和 100 之间变化(图 11),因此让我们将相同的范围应用于反馈。反馈最初在 0 到 5 的范围内,因此我们需要缩放这些值(表 4)。

pYYBAGJ6INuAZUwnAAAXrGcrO1w813.jpg

表4:反馈映射表;0 应该映射到 -100,而 5 应该映射到 100。

通过对反馈值应用斜率(用 A 表示)和偏移量(用 B 表示)来实现缩放。我们可以通过求解以下两个联立方程找到所需的斜率和偏移量:

poYBAGJ6INyAGlc7AAAfEu6YCrI782.jpg

图 12:求解将反馈值缩放到 -100 到 100 范围所需的斜率 (A) 和偏移量 (B)。

缩放反馈和输出

下图显示了我们如何将斜率和偏移量合并到 VI 中。

poYBAGJ6IN2ADIIbAABxwfHuEKY612.jpg

图 13:缩放反馈值。

根据我们之前确定的占空比值,我们还必须缩放在 -100 和 100 之间变化的输出:

表 5:输出(占空比)映射表。

pYYBAGJ6IN6AeebzAAA2IALryfg692.jpg

图 14:求解将输出值缩放到 0.046 到 0.070 范围所需的斜率 (A) 和偏移量 (B)。

下图显示了我们如何将输出缩放合并到 VI 中。

poYBAGJ6IN-AEclHAACJH97BB1g936.jpg

图 15:该项目的最终 VI。

概括

如果您已逐步按照教程进行操作,那么您已经成功实现了伺服的 PID 控制器,绕过了原来的伺服控制电路

如果您现在切换到 VI 的前面板,您可以独立调整所有三个 PID 增益并使用“Setpoint”控件控制伺服。更改增益允许您调整 PID 控制器,从而获得更好的伺服性能。

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

pYYBAGJ6IOCADzkdAABDTDuoqTA193.jpg

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

您也可以通过右键单击数字控件并选择“替换》》数字》》水平指针幻灯片”来执行此操作。

恭喜您使用 LabVIEW 和 NI myRIO 实现了 PID 控制器!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • LabVIEW
    +关注

    关注

    1918

    文章

    3619

    浏览量

    316992
  • PID控制器
    +关注

    关注

    2

    文章

    156

    浏览量

    18332
  • myRIO
    +关注

    关注

    28

    文章

    11

    浏览量

    27974
收藏 人收藏

    评论

    相关推荐

    PID在工业控制领域的实现原理

    PID控制器非常实用且有效。它们基于简单的数学原理,通过调整三个参数(比例系数P、积分系数I和微分系数D)来对系统的偏差进行控制。这种简单性使得PID
    发表于 04-12 11:06 104次阅读
    <b class='flag-5'>PID</b>在工业<b class='flag-5'>控制</b>领域的<b class='flag-5'>实现</b>原理

    什么是pid控制,其控制作用是什么

    信号进行比例、积分和微分运算,从而实现系统的稳定控制和性能优化。 PID控制器由三个部分组成:比例控制器(P),积分
    的头像 发表于 02-01 14:51 985次阅读

    什么是pid控制原理 pid各个参数对系统的影响

    参数对系统的影响。 一、PID控制原理 PID控制的基本原理是根据反馈信号来调整输出控制量,使得系统的实际输出与期望输出尽可能接近。
    的头像 发表于 01-22 15:35 1299次阅读

    pid控制中的p,i,d的概念及意义

    PID控制器是一种常见的控制算法,它由比例(P)、积分(I)和微分(D)三部分组成。这个控制器通过根据给定的参考输入值和实际输出值的误差来计算输出信号,以
    的头像 发表于 01-19 15:45 2773次阅读

    什么是PID控制器PID控制器积分控制介绍

    PID,就是“比例(proportional)、积分(integral)、微分(derivative)”,是一种很常见的控制算法。
    的头像 发表于 01-11 18:14 820次阅读
    什么是<b class='flag-5'>PID</b><b class='flag-5'>控制器</b>?<b class='flag-5'>PID</b><b class='flag-5'>控制器</b>积分<b class='flag-5'>控制</b>介绍

    请问ad7763使用的接口是不是标准的SPI协议?

    我想用NI公司的myRIO来驱动AD7763(myRIO内含ARM Cortex-A9和一个FPGA,通过labVIEW编程)。现遇到问题:myRI
    发表于 12-12 08:23

    飞行控制PID算法的作用解析

    PID控制器是一种线性控制器,它主要根据给定值和实际输出值构成控制偏差,然后利用偏差给出合理的控制量,目前,人们通过科学研究获得了诸多具有优
    的头像 发表于 11-27 10:57 706次阅读
    飞行<b class='flag-5'>控制</b><b class='flag-5'>PID</b>算法的作用解析

    单片机如何实现pid控制 基于pid控制的STM32代码实现

    PID控制算法是目前应用较为广泛的一种控制算法,PID控制具有参数可调、应用范围广、控制精度高等
    的头像 发表于 11-10 16:56 1905次阅读

    MATLAB如何实现PID

    MATLAB是一种非常强大的工具,用于实现和分析PID(比例-积分-微分)控制器。在MATLAB中,您可以使用控制系统工具箱来设计、模拟和调整PID
    的头像 发表于 11-04 08:00 1118次阅读
    MATLAB如何<b class='flag-5'>实现</b><b class='flag-5'>PID</b>?

    LabVIEWPID控制的的高级功能

    LabVIEWPID控制的的高级功能 比例-积分-微分(PID控制占当今控制和自动化应用的9
    的头像 发表于 10-24 14:30 759次阅读
    <b class='flag-5'>LabVIEW</b>中<b class='flag-5'>PID</b><b class='flag-5'>控制</b>的的高级功能

    labview是什么软件?labview是什么语言?labview实现什么功能?

    labview是什么软件?labview是什么语言?labview实现什么功能? LabVIEW是一种图形化的编程语言,通常被用于数据采集
    的头像 发表于 08-31 17:23 3166次阅读

    如何使用DSP库中的PID控制器功能

    应用程序: CMISIS-DSP 库是一套通用的信号处理和数学功能, Numicro M4 微控制器已经优化。 该文件描述了如何使用 DSP 库的 PID 控制器功能帮助用户获得 DSP 高性能
    发表于 08-31 07:58

    PID算法在控制系统中的特性和指标

    PID算法广泛的被应用在很多的控制系统中,最终的目的都是希望通过pid控制器实现被控量能稳定在预期的目标值。
    的头像 发表于 08-22 11:05 707次阅读
    <b class='flag-5'>PID</b>算法在<b class='flag-5'>控制</b>系统中的特性和指标

    S7-1200中实现PID控制

    PID控制器PID控制器按照一定的运算规律,计算出结果,即为输出值,送到执行器进行调节,其中的P、I和D指的是比例、积分和微分,是一种闭环控制
    的头像 发表于 05-16 09:52 1749次阅读
    S7-1200中<b class='flag-5'>实现</b><b class='flag-5'>PID</b><b class='flag-5'>控制</b>

    电机控制中的PID

    FOC算法中的电流环,速度环都涉及到PID控制 PID又分位置式PID控制算法和增量式PID
    发表于 05-05 11:51 10次下载
    电机<b class='flag-5'>控制</b>中的<b class='flag-5'>PID</b>