Skip to main content

FPGA 和 Arduino 驱动电机控制

边缘计算,嵌入式软件,FPGA,Arduino

任何曾经设计过推、拉、转动或旋转机电系统的工程师都非常熟悉电机控制。其应用如此广泛,即使是简单的微控制器 (MCU) 也能提供时钟速度和信号处理性能,以驱动具有可变速度和负载的复杂电机。

但对于这些功能多样的小 MCU 来说,多少才算是太多呢?如果使用高分辨率的正交编码器来测量电机的速度或方向,会怎么样?如果一次需要驱动两个或多个电机,该怎么办?

请了解一下 Hexy the Hexapod(图 1)。Hexy 是 ArcBotics 开发的低成本、基于 Arduino 的机器人套件。该机器人的六条腿上各有三个伺服电机,头部还有一个,总共 19 个伺服电机。

ArcBotics Hexy the Hexapod DIY 机器人套件包含 19 个伺服电机
图 1. ArcBotics Hexy the Hexapod DIY 机器人套件包含 19 个伺服电机。(来源:ArcBotics

由于 Hexy 是为 Arduino 社区设计的,因此它与一些 8 位到 32 位 MCU 兼容。这些 MCU 在执行简单的任务时表现出色,比如按顺序驱动 Hexy 每条腿上的电机。但是,当引入中断服务例程后,就像在使用正交编码器的任何系统中一样,MCU 开始遇到困难。

对于这些更复杂的用例,一个解决方案是 FPGA 加速器。

摆脱编程的痛苦

FPGA 的一个主要优势是可以重新编程,从而能够满足应用的确切需求。FPGA 结构可以根据驱动电机的 PWM 信号的精确性、控制和抖动要求进行优化。可以配置更多的 FPGA 逻辑模块来支持额外的电机,从而提供其他嵌入式处理器架构无法提供的并行度。

事实上,能够根据确切系统要求进行配置,使得 FPGA 比稳健的高端电机控制 MCU、DSP 和 ASIC 更适用于电机控制应用。

视频 1 是由 Hexy 机器人上 8 位和 32 位 MCU 控制的电机控制演示。正如您所看到的,当引入 50 μs 中断后,机器人的手臂开始抽动;对于 MCU 来说,并发任务太多,无法补偿驱动伺服的 PWM 信号中的抖动。

 

视频 1。电机控制演示,Hexy 机器上的 8 位和 32 位 MCU 难以执行并发任务。(来源:Alorium Technology

 

该视频还展示了在复杂、基于中断的多电机驱动器用例中,FPGA 的并行度和精度有多高。无需使用多个处理器或控制板,一个 FPGA 就可以驱动多个电机,并读取和处理正交数据。这样就降低了设计成本和功耗,并减小了系统规模。

但 FPGA 编程历来让工程师们疲于应付。这是因为 VHDL 和 Verilog(用于描述 FPGA 结构的两种主要硬件描述语言 (HDL))实际上是电子设计自动化 (EDA) 范式。

这些语言不像典型的软件那样运行。我们需要复杂的逻辑合成工具来将 HDL 代码转换为可以定义逻辑门、生成比特流等的设计实施。

对于大多数工程团队来说,在权衡并行性和性能收益与编程的痛苦之后,才决定使用 FPGA。一家为无人机 (UAV) 设计定制 BLDC 电机控制应用程序的公司最近需要做出这样的抉择。

为了避免做出权衡,它与 FPGA 加速嵌入式解决方案开发公司 Alorium Technology 进行了合作。

增强型定制 BLDC 电机控制

无人机公司最开始围绕 MCU 设计 BLDC 系统,并使用 Arduino IDE 编写和测试其电机控制软件。该应用需要一个处理元件,既能以极高的可变速度运行电机,又能读取传感器数据。最终,系统变得过于复杂,无法在 MCU 上运行,因此决定迁移到定制硬件上。

这个决定的主要问题是,公司的整个代码库都是在 Arduino 环境中和围绕该环境设计的。这意味着,无论为电机控制系统选择何种计算架构,都必须能高效地运行 Arduino 的简化 C++ 代码。

公司选择了 Alorium Technology 的 XLR8 开发板(图 2)。XLR8 是 Arduino 可编程、基于 FPGA 的原型平台,搭载 8 位 AVR MCU。从外形上看,该开发板是 Arduino Uno 的替代品,且引脚与之兼容。无人机工程公司能够将该开发板融入其设计中,并立即开始运行现有代码。

XLR8 开发板
图 2. XLR8 开发板。(来源:Alorium Technology

XLR8 FPGA 结构基于英特尔® MAX® 10 FPGA,具有 8,000 个逻辑元件 (LE) 和 500 个逻辑阵列块 (LAB)。其最大工作频率为 450 MHz,即使面对最复杂的电机控制应用,也能提供足够的马力。

MAX 10 还本地集成了闪存、ADC、数字和模拟 I/O 以及其他组件,对于工业用例部署,无疑是成本效益很高的解决方案(图 3)。

用于加速电机控制等应用的英特尔 MAX 10 FPGA
图 3. 英特尔® MAX® 10 FPGA 可加速电机控制等应用。(来源:英特尔® 公司

但是,XLR8 开发板对于定制无人机 BLDC 设计如此有吸引力的原因,是因为有特定于功能的 “Xcelerator Block”(加速器模块,简称 XB)。XB 集成在 MAX 10 FPGA 结构中,用于优化某些功能的性能,如伺服控制、正交编码、模拟到数字转换、浮点数学等。

XB 通过可寻址寄存器接口与 AVR MCU 通信(图 4)。由于来自 Alorium 的 XB 库可以安装在 Arduino IDE 中,因此用户可以使用标准的 API 调用访问其功能,而无需修改代码。甚至可以通过 Arduino IDE 更新 FPGA 映像。

与 AVR 微控制器通信的 Xcelerator Block
图 4. Xcelerator Block 与 AVR 微控制器通信。(来源:Alorium Technology

为了支持 BLDC 应用中使用的独特控制算法,需要定制硬件。Alorium 客户能够使用称为 OpenXLR8 的方法创建自己的专用 XB。这确实需要 VHDL 或 Verilog 编码,但是为用户提供了模板化环境。甚至生成了与 Arduino 兼容的 .RPD 文件。

就无人机项目而言,Alorium 协助开发了多个定制硬件模块。其中包括:

  • RC 输入 XB,用于解释来自无线电控制设备的传入信号
  • PWM XB,用于实施可配置的 PWM 与三相正弦 PWM
  • 霍尔传感器 XB,用于在将信号发送到电机控制 XB 之前提供信号的静态调谐
  • 基于电机转速动态调节系统的能力
  • 专有模块

由于添加的 BLDC 功能需要更多的 FPGA 结构,因此无人机设计最终迁移到 Alorium 的高性能 Snō FPGA 模块。Snō 是生产级的,支持 8 位 MCU 并与 Arduino 兼容。它还将 FPGA 升级到具有 16,000 个逻辑元素的 MAX® 10。

随着无人机系统接近生产,需要其保护免受高压开关引起的信号噪声的影响。为了解决这个问题,Alorium 为 Snō 模块开发了一款抗噪声的载板,称为 AT10(图 5)。

AT10 是用于 Alorium Snō 模块的抗噪声载板
图 5. AT10 是用于 Alorium Snō 模块的抗噪声载板。(来源:Alorium Technology

从制造者到专家

无人机 BLDC 案例研究提供了一个很好的例子,展示了开源教育硬件是如何在专业的工程社区中占据一席之地的。

除了此应用之外,Alorium 还有测试、测量和科学仪器等行业的客户,这些客户要求数据采集和信号处理系统提供极高的保真度。要在满足许多特定用例要求的同时进行扩展,硬件平台必须灵活。由于这些系统的主要用户是科学家或领域专家,因此新用户必须能快速熟练掌握平台软件。

通过高性能、低成本、与 Arduino 兼容的 FPGA 解决方案,业界正在普及可编程的逻辑技术。在某些情况下,这些解决方案的存在会带来快速创新。而在许多其他情况下,则会产生一种更高效、更经济、更可扩展的方式来应对已经存在的挑战。

要下载 XLR8 映像、XB 和应用程序说明,请访问 Alorium Technology 的 Github

作者简介

Brandon is responsible for Embedded Computing Design’s IoT Design, Automotive Embedded Systems, Security by Design, and Industrial Embedded Systems brands, where he drives content strategy, positioning, and community engagement. He is also Embedded Computing Design’s IoT Insider columnist, and enjoys covering topics that range from development kits and tools to cyber security and technology business models. Brandon received a BA in English Literature from Arizona State University, where he graduated cum laude.

Profile Photo of Brandon Lewis