所有关于电路
项目

创建一个PID控制器在倪myRIO-The软件

2016年11月29日通过马克Narvidas

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

了解软件的PID控制器使用虚拟仪器和倪myRIO项目。

相关信息

在本系列中,我们将讨论如何实现一个简单的PID控制器使用虚拟仪器和一个爱好直流伺服电机。我们通过消除其内部定制伺服控制器和取而代之myRIO接口。

这是第二篇文章,我们建立定制的伺服电机和专注于PID控制器的编程。你需要跟进系列的第一部分讨论项目的硬件,实现的步骤如下所示。

虚拟仪器

虚拟仪器是一种图形化的编程语言开发的民族乐器。语言的最大的好处之一是大量的工具包,可用模块和库。使用这些,您可以快速大量的工程开发最复杂的应用程序和研究项目。

这个实验也不例外。而不是写我们的PID控制器完全从头开始,我们将全面控制NI的虚拟仪器PID和模糊逻辑工具箱。使用常规的PID。VI”附带的软件,我们将能够解决我们面临的挑战绕过原伺服控制器更快。

本教程并不打算覆盖本质理论PID的细节。相反,它将向您展示如何实现一个简单的PID控制器。

需求

,你应该和/或安装如下:

  • 倪myRIO嵌入式硬件设备
  • 倪myRIO扩展端口(MXP) Protoboard配件(与myRIO来打包)
  • 定制伺服电机,现在应该连接到Protoboard配件
  • 倪虚拟仪器
  • 倪虚拟仪器PID和模糊逻辑工具箱

在本教程中,我使用NI虚拟仪器版本2014与倪虚拟仪器程序倪myRIO设备PID和模糊逻辑工具箱安装。如果你还是一个学生,你应该能够获得贵校的所有软件及相关许可证。

伺服控制理论与实践

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

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

根据这一标准协议,定期伺服将搬到左边的位置在一个脉冲长度(T)1000μs和右边的2000μs,住在中间1500μs(表1)。

表1:标准的伺服行为

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

表2:伺服定制后的行为

然而,在实践中,这些值可以完全不同了,特别是与预算本教程中,我们使用的伺服系统。

因此,我们将根据经验确定中心位置,自己,然后添加任意正负抵消顺时针和逆时针旅行。

软件

创建一个虚拟仪器项目

首先,让我们创建一个虚拟仪器项目。启动虚拟仪器,在闪屏,选择“创建项目”(或者,你可以去文件> >创建项目)。

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

图2:创建一个myRIO项目——步骤1

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

最后,确保myRIO插入和发现,此时您可以单击“完成”。

图3:创建一个myRIO项目——步骤2

创建一个新的六世

然后,创建一个新的六世称为“PID控制器。根据myRIO VI”目标如图4所示。你可以忽略,甚至删除“主要。六世”——创建默认为例,每myRIO项目下创建这个模板。

图4:创建一个新的VI myRIO

打开新的VI和切换到框图窗口。创建一个while循环有一个关联的停止按钮。这是我们将我们所有的代码,需要不断执行。

图5:While循环停止按钮

接下来,使用快速下降(CTRL + Space)或从myRIO选择函数功能面板,添加“模拟输入”表达VI如图6所示。

在配置弹出窗口,确保通道选择“/ AI0(销3)”,为通道指定一个名称。我叫它“反馈”,因为使用此功能块,我们将读取位置值内部伺服电位计。

然后单击“OK”,把表达VI在while循环。

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

同样,让我们创建一个PWM输出,这样我们就可以控制伺服速度。再一次,使用快速下降或功能面板,添加一个表达六世称为“PWM”(图7)。

为你的频道,选择“A / PWM0(销27)。”Set your frequency to 50 Hz (via the "Set constant" option) and select “Set using input to Express VI” under “Duty cycle.”

图7:添加PWM功能

然后单击“OK”,把块在while循环。你应该有一个类似于图8所示的布局。

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

确定伺服的中心位置

接下来,我们将目标确定的中心位置伺服系统。为此,创建一个“责任周期”的控制输入。

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

图9:添加控件、指标和时机。

从理论上讲,我们的责任周期脉冲宽度之间的1和2女士,女士是1.5毫秒值停止伺服(零速度)。我们50赫兹信号有一段20毫秒,所以这些脉冲宽度对应责任周期为0.05,0.10和0.075。

在实践中,实际的脉冲宽度产生零速度可以改变从理论价值。发现实际值,运行VI与责任周期设置为0.075,然后调整直到伺服不旋转。在我的例子中,实际值为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控制器。使用快速下降或功能面板,添加“PID。第六“从虚拟仪器PID和模糊逻辑工具箱。

创建一个定位点输入控制;选点是价值(在此系统中,转动速度),我们想要的输出。

我们还可以创建一个控制的PID增益和输出范围(不改变目前的这些)。

你现在应该有一个VI类似如图11所示。

图11:添加PID控制。

我们需要确保我们的选点、输出和反馈不同在一个适当的范围内的值。

输出范围设置为-100年和100年之间(图11),所以我们应用相同的范围的反馈。反馈是最初的范围在0到5,因此我们需要规模这些值(表4)。

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

扩展是通过应用斜率(用)和一个偏移量(用B)的反馈值。我们可以找到所需的斜率和解决以下两个所抵消联立方程:

图12:解斜率(A)和(B)的偏移量扩展所需的反馈值到-100到100之间。

比例反馈和输出

下面的图显示了我们如何在VI中加入斜率和偏移量。

图13:扩展的反馈值。

我们还必须规模输出,它在-100年至100年之间,根据我们之前决定的责任周期值:

表5:输出(周期性)映射表。

图14:解斜率(A)和(B)的偏移量扩展所需的输出值在0.046到0.070范围。

下面的图显示了我们如何在VI中加入输出比例。

图15:为这个项目最终VI。

总结

如果你跟随本教程一步一步,那么你已经成功地实现了PID伺服控制器,绕过原伺服控制电路。

如果你现在切换到你的VI前面板,你可以调整这三个独立PID收益和控制使用“定位点”的伺服控制。改变收益允许您调整PID控制器,从而实现更好的伺服性能。

同时,注意,我已经改变了界面滑动条,如下图16所示,移动伺服的更自然的方式。

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

你也可以这样做,通过右键单击一个数字控制和选择“替换> >数字> >水平指针滑。”

祝贺使用虚拟仪器实现PID控制器和倪myRIO !

2的评论
  • 阿里Khan_1516614903 2018年1月22日

    嗨,伙计们。谁能送我.v申请这个项目吗?我是一个新手在倪设备和我myrio设备。谢谢

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

    亲爱的马克Narvidas,
    谢谢你的非常有用的文章系列的PID。顺便说一下,由于大多数的人没有如此昂贵的倪myRIO设备,我想建议做一些教程解释与廉价的Arduino平台设备。
    干杯!

    喜欢的。 回复