网志

使用Beaglebone PRU以低成本实现实时

Fabien Le Mentec2014年4月25日8条评论

介绍

我在同步加速器工厂担任工程师。几周前,我帮助电源开发人员将实时控制算法集成在原型平台上:运行Linux的BeagleBone Black(BBB)。过去,我已经在此主板上工作过,鉴于其出色的资源与价格比(约40欧元),我发现它非常有趣。这次,它的实时功能给我留下了深刻的印象。我认为在这里分享我的经验是一个好主意。

在此应用程序中,控制环核心算法如下所示:

while (1)
{
timer_wait(); u = adc_read(); d = update_pid(pid_state, u); pwm_set_duty(d); }

无法使用标准的Linux操作系统,因为控制循环具有实时约束,难以满足。因此,典型的设计在专用单元(FPGA或专用微控制器)上运行循环。该单元通过PCIe串行点对点链接与主CPU通信。用户应用程序可以使用TCP通道通过网络与电源接口进行交互。下图描述了该体系结构:

本文以PDF格式提供,便于打印

PSU控制应用

尽管此架构运行良好,但电源单元(PSU)控制板的成本可能为几百欧元,如果少量进行特定设计则可能会更高。这就是为什么要对BBB进行调查的原因:它附带了一个am335x CPU,该CPU集成了2个独立的实时单元。通过使用这些单元来运行控制回路,FPGA和相关的通信链路被删除,总体成本大大降低。而且,集成级别简化了开发过程中的迭代。

平台概述

通常将BBB板与树莓PI(RPI)进行比较:

http://beagleboard.org/Products/BeagleBone+Black

http://www.raspberrypi.org

bbb

两者都是使用ARM CPU的廉价板卡。但是,从外围设备和硬件文档的角度来看,我发现BBB比RPI更有趣。 BBB依赖于Texas Instruments am335x CPU:

http://www.ti.com/product/am3359

 am335x

该CPU集成了2个实时单元,称为PRU:

http://processors.wiki.ti.com/index.php/Programmable_Realtime_Unit_Subsystem

框图

奇怪的是,德州仪器(TI)不支持PRU。取而代之的是,有一个社区驱动的工作,它提供了包括文档和代码的完整开发套件:

//github.com/beagleboard/am335x_pru_package

PRU具有自己的执行核心(时钟频率为200MHz)和内存。据我了解,它的主要目的是在专用硬件单元中实现等效的软件bitbanging(即SPI ...),而不是使主CPU繁忙。但是,PRU的功能远不止于此:它具有丰富的指令集,甚至有一个乘法累加单元。它可以触发或接收中断,访问主存储器以与CPU共享。在我们的应用中,它还访问PWM并读取ADC值。它还具有一组有限的集成外围设备。以下部分详细介绍了如何设置PRU。

软体设定

首先,您必须配置linux,使其支持PRU模块。我个人使用LFS,该工具可生成基于Linux的最小系统磁盘映像:

//github.com/texane/lfs

文档可在以下位置找到:

doc / tex / main.pdf

到处仍然存在一些硬编码的值,这些值会阻止按原样使用LFS,但是您可能会发现它很有用。

然后,可以从此处检索PRU软件开发套件:

//github.com/beagleboard/am335x_pru_package

它包含开始使用PRU的所有文档,工具和示例。汇编器位于:

pru_sw / utils / pasm_source

它从程序集源代码生成二进制文件。然后使用称为应用程序加载器的库将生成的文件上传到PRU,该库可在以下位置找到:

pru_sw / app_loader / interface

甚至可以在以下位置使用python版本:

pru_sw / app_loader / python

以下部分显示了有关如何使用PRU的示例。

例子

例如,我将使用以下存储库:

//github.com/texane/pru_sdk

同样,这里有些变量是硬编码的,但是非常有用。文档目录包含我在该项目中使用的4个pdf文件。示例目录包含一些单元测试,这些单元测试说明了如何使用项目所需的不同硬件模块(共享内存,ADC,PWM,MAC和计时器)。我们将调查计时器示例。

首先,Makefile在这里:

示例/ pruss_iep / Makefile

它编译3个不同的文件:

  • 设备树脚本,
  • 主程序
  • PRU程序。

设备脚本在这里:

示例/pruss_iep/pru_enable-00A0.dts

它被编译为目标文件:

pru_enable-00A0.dtbo

dtbo文件必须复制到固件目录中,在这种情况下:

/lib/firmware/pru_enable-00A0.dtbo

linux内核需要此目标文件来启用PRU。更一般而言,设备树文件用于描述设备资源,正如从该存储库的其他示例中可以看到的那样。那些有兴趣了解更多信息的人可以在这里找到有关内核设备树的很好的介绍:

http://free-electrons.com/pub/conferences/2013/elce/petazzoni-device-tree-dummies/

主程序文件在这里:

例子/pruss_iep/main.c

它是典型的C程序,负责将PRU程序加载到PRU单元中。它定期从CPU和PRU之间共享的存储器中读取值,并最终在接收到用户信号后终止PRU程序。

然后是实际的PRU程序代码。在这里能找到它:

例子/pruss_iep/iep.p

如您所见,汇编器带有预处理器,用于处理注释和指令。另外,那些熟悉GNU汇编器语法的人应该有宾至如归的感觉。我不会在这里详细说明代码,但是请随时提出问题。但是请注意,PRU参考指南包含与该指令集相关的所有材料。

最后,使用脚本完成应用程序的运行:

示例/pruss_iep/run.sh

假定您已将设备树对象复制到:

/lib/firmware/pru_enable-00A0.dtbo

结论和进一步参考

我希望这篇文章引起了人们的兴趣,以研究BBB作为具有实时需求的应用程序平台。 TI可能不支持PRU,但网上有很多社区支持的资料。我发现其中一些有趣:

http://analogdigitallab.org/articles/beaglebone-black-introduction-pru-icss

http://elinux.org/BeagleBone_PRU

//github.com/modmaker/BeBoPr

更新

TI最近发布了适用于Linux和Windows的Code Composer Studio版本,该版本允许为PRU编译C代码。它附带一个标准库,并具有浮点类型支持。我仅对其进行了简短的测试,因此欢迎您提供任何反馈。您可以在这里找到更多信息:

http://www.element14.com/community/community/knode/single-board_computers/next-gen_beaglebone/blog/2014/04/30/bbb--pru-c-compiler

http://processors.wiki.ti.com/index.php/Download_CCS#Code_Composer_Studio_Version_6_Downloads

我发表了一篇有关如何使用C语言对PRU进行编程的文章:

//www.sunsetgrillect.com/showarticle/603.php


[-]
评论者 tex烷2014年5月19日
对于那些对使用C语言编程PRU感兴趣的人,我在文章参考部分中仅添加了2个链接。
[-]
评论者 托尼2014年5月19日
TI确实提供了一些支持(也许在Linux上不是),例如编译器。
PRU的全名是PRU-ICSS(可编程实时单元和工业通信子系统),最初旨在实现Profibus,EtherCAT和Ethernet PowerLink等实时工业现场总线。实际上,TI的基于AM335x的ICE开发套件附带了这些协议的示例代码。
[-]
评论者 tex烷2014年5月19日
感谢您的评论。我读到TI不支持LINUX上的PRU。如果需要,我可以找到参考。感谢您提供有关PRU C编译器的提示...我已经在测试它了!
[-]
评论者 灰熊2014年6月19日
谢谢你

我已经研究过将BBB用于实时应用程序,但出于与您列出的相同原因,它并不适合。

认为我将花一些时间研究PRU。
[-]
评论者 狮子座2015年10月19日
感谢您的文章并分享您的知识,这非常有帮助!
[-]
评论者 阿列克2016年3月21日
嗨,德克萨斯州,谢谢您的工作,您是如何从普鲁士获得ADC的?
[-]
评论者 姆帕萨一月14,2017

感谢这篇出色的文章,我一直在寻找使用PRU的可能性。我的一个大问题是100 MB网络不适合我的应用程序,我正在寻找具有1GB以太网的板卡用于实时应用程序,您有什么建议吗? 

[-]
评论者 tex烷一月15,2017

如果您确实需要1GB,我没有简单的解决方案,抱歉...

要发布对评论的回复,请单击每个评论所附的“回复”按钮。要发布新评论(而不是回复评论),请查看评论顶部的“写评论”标签。

注册后,您可以参加所有相关网站上的论坛,并获得所有pdf下载的访问权限。

注册

我同意 使用条款隐私政策.

试试我们偶尔但很受欢迎的时事通讯。非常容易退订。
或登录