【技术专辑】使用LabVIEW FPGA读取模拟值和PWM

通过编程以学生为中心的嵌入式设备NI myRIO的板载Xilinx FPGA来学习LabVIEW FPGA。

 

相关文章

 

在NI myRIO上使用LabVIEW FPGA:

 

第1部分:什么是LabVIEW FPGA

 

第2部分:Hello World(闪烁LED)

 

第3部分:读取模拟值

 

第4部分:FIFO 

 

第5部分:第3方代码

概观

 

本文是五个主题系列中的第三篇,通过简单的动手实例介绍了在NI myRIO上编程LabVIEW FPGA的基础知识。上一次,我们介绍了如何通过设备的数字线打开和关闭发光二极管(LED)。今天,我们将看到我们之前代码的几个新增内容,如何调整LED的亮度。此外,我们将研究从诸如电位计的变阻部件读取模拟值。最后,我们将连接这两个概念,通过可变电阻的旋转来控制LED的亮度。

 

推荐的组件清单:

 

1.3.3V LED - 5V也应该工作,但预计整体亮度会降低

 

2.330欧姆  电阻  - 用于限制流过LED的电流,参见本系列的第2条,我们将更详细地讨论它

 

3.10kOhm电位计 - 任何其他变阻器 组件也可以工作,包括线性电位器或LDR。虽然建议使用10kOhm的基值,但大多数其他值也应该没问题

 

4.(可选)1kOhm下拉电阻  - 当读取不带第三个引脚的变阻器元件时,该电阻应作为参考电压(见下文)。

 

5.(可选)跳线和面包板

 

元件接线

 

上次,我们使用了myRIO的端口C,它支持两个模拟输入,两个模拟输出和8条数字线。然而,这甚至不是其外围设备的一半 - 它还有两个端口,每个端口具有2个模拟输出,4个模拟输入和16个DIO。要了解此设备提供的大量I / O并更熟悉它,让我们使用端口B作为以下示例。

 

为了让我们的电路在变大的同时保持整洁,让我们转向面包板。330欧姆的限流电阻将连接到LED的阳极,然后连接到myRIO端口B 的DIO0端(见图1)。将LED的另一个引脚连接到数字地(DGND)端。接下来,我们需要将可变电阻(电位计)连接到myRIO。为此,我们将电位器的中间引脚(有时称为“抽头”)连接到端口B的模拟输入(AI0),其余引脚应连接到  AGND和+ 5V端子(参见图2) )。有关myRIO的更详细连接布局,请参阅其数据表 (PDF)。电路图也在下面的图3中显示,以便更好地参考。

 

【技术专辑】使用LabVIEW FPGA读取模拟值和PWM

图1  端口B已识别所有连接 

 

【技术专辑】使用LabVIEW FPGA读取模拟值和PWM

图2  识别出所有连接的面包板

 

【技术专辑】使用LabVIEW FPGA读取模拟值和PWM

图3电路图

 

FPGA代码

 

将所有电路连接起来后,让我们创建一个与之前文章相同的新LabVIEW项目。在新创建的项目中,找到NI myRIO目标并 在Chassis >> FPGA Target下创建一个名为FPGA.VI的新VI (如果需要复习,请参阅我们的第一篇文章以获得完整的解释)。我们的主要FPGA VI应该类似于下面的图4所示。如果您希望立即对其进行测试,那么完整的示例代码将附在文章的底部,但为了确保我们了解这里发生的事情,我们也要对其进行分析。

 

这次,我们将创建两个while循环 - 一个用于数据采集(“DAQ Loop”),另一个用于驱动LED(“PWM Loop”)。第一个将读取和缩放电位计数据,而第二个将在DIO0引脚上产生脉冲宽度调制信号。 如果你对这个话题感到有些生疏,那么这是一篇关于PWM的简短而又甜蜜的文章。和以前一样,我们需要将外围设备拖到我们的Block Diagram中。我们需要一个来自电位器(A)的模拟输入和一个用于在DIO0线上产生脉冲宽度调制信号(B)的模拟输入。注意LabVIEW中使用的名称与我们在图3中指出的名称相匹配。一旦读入电位器值,我们还需要对其进行缩放(B)。这种缩放允许我们将来自单端模拟输入通道(通过板载ADC采样)的12位值映射到从0到1的单位间隔。因此,最远的值通常在0到4096之间电位器位置现在表示为指标上称为“占空比”(C)的0到1之间的定点值。中间的任何其他值也将相应缩放; 这基本上可以控制我们想要LED的亮度。

 

“PWM循环”包括一个堆叠序列结构(D),它强制执行四个连续部分的顺序行为(记住,LabVIEW本质上是并行的!)。第一部分将LED引脚(DIO0)驱动为高电平。下一部分等待基于计算的占空比计算的给定时间量。注意如何(C)我们从多个地方的同一位置读取,这称为局部变量。通过右键单击指标或控件并选择“创建>>局部变量”,可以在LabVIEW中创建局部变量。虽然在许多场景中都很有用,但它们有时会导致所谓的竞争条件,因此对它们的使用保守。在我们的例子中,由于我们只在一个位置写入变量,因此避免了这个问题。

 

我们的LED开启的时间长度也取决于我们在(F)处运行代码的频率。由于我们的眼睛无法区分50Hz标记附近的光闪烁,我们可以方便地在我们的FPGA.VI前面板控件上设置它,称为“频率(Hz)”(F)。因此,我们实际上会看到LED的调光与LED保持开启和关闭的时间(而不是闪烁)的比例(叠加序列结构的第3和第4部分(D))将其关闭并等待剩余的时间)。LED相对于其关闭而保持打开的时间由占空比确定。在文献中,您经常会将占空比表示为百分比。在我们的例子中,它是一个在0(0%)和1(100%)之间变化的单位值。除此之外,其他一切都保持不变。我们也不要忘记将时序(E)配置为毫安(毫秒)。此时,我们应该准备编译我们的代码并测试它。

 

【技术专辑】使用LabVIEW FPGA读取模拟值和PWM 

图4  LabVIEW FPGA前面板和方框图说明

 

运行FPGA代码

 

最后,如果我们的电路符合图2和图3所示的电路,并且我们的代码功能与图4没有区别,我们应该能够通过旋转电位计来调节LED的亮度。在功能上,LED正在快速打开和关闭,但是,我们的眼睛无法区分,我们实际上只看到不同的亮度。要验证这一点,您可以将FPGA VI前面板上的“频率(Hz)”控制更改为较小的值,例如1Hz。由于我们已将其设为Control,因此LabVIEW允许我们即时调整它,因此无需进行额外的编译。作为一项额外的练习,您可以尝试将软件缩放调整为不同或反转(通过“缩放”控制(B)或自定义代码段)。如果您决定从同一个电位器控制一组LED,那么您需要做的就是复制底部回路并更改数字线路,因为我们正在读取“DAQ回路”中的“占空比”值“这是独立的。

 

恭喜使用NI myRIO创建完整的模拟输入和输出环路。下一次,我们将转向更高级的LabVIEW FPGA主题 - 缓冲区。使用它们,我们将学习如何在业余爱好项目和行业中制作出高速,高吞吐量的应用程序!

  • 【技术专辑】使用LabVIEW FPGA读取模拟值和PWM已关闭评论
    A+
发布日期:2019年03月04日  所属分类:参考设计