---
title: FPGA/SoC控制的机械臂
url: "https://www.fpgalearn.com/9164.html"
kind: article
id: 9164
excerpt: 机器人技术处于工业4.0、人工智能和边缘革命的前沿。让我们来看看如何创建FPGA控制的机器人手臂。 这个项目中使用的东西 硬件组件：Z7-10、Adafruit…
published_at: 2025-05-12
author: FPGA小白
tags: FPGA工程, FPGA源码, 机械臂控制
word_count: 3682
source: "https://www.fpgalearn.com"
---

# FPGA/SoC控制的机械臂

> 标签：FPGA工程、FPGA源码、机械臂控制
> 机器人技术处于工业4.0、人工智能和边缘革命的前沿。让我们来看看如何创建FPGA控制的机器人手臂。 这个项目中使用的东西 硬件组件：Z7-10、Adafruit…

> 机器人技术处于工业4.0、人工智能和边缘革命的前沿。让我们来看看如何创建FPGA控制的机器人手臂。 这个项目中使用的东西 硬件组件：Z7-10、Adafruit…

机器人技术处于工业4.0、人工智能和边缘革命的前沿。让我们来看看如何创建FPGA控制的机器人手臂。
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2025/05/2019-01-26_19_30_31_1poZvdCe6h-拷贝.jpg)
这个项目中使用的东西
硬件组件：Z7-10、Adafruit 16通道PWM/伺服屏蔽、Digilent Pmod操纵杆2*2
软件应用程序和在线服务：AMD Vivado设计套件
手工工具和制造机器：PicoScope 3000
### 介绍
机器人技术与人工智能和机器学习一起处于工业4.0和边缘革命的最前沿。
因此，我认为创建一个基础机器人手臂项目会很有趣，我们可以回来添加几个功能，例如：
- 逆运动学-确定末端效应器的位置。
- AI/ML-操作期间的对象分类。
- 网络控制-在边缘启用远程控制。
本例将使用一个机器人手臂，该机械臂在Zynq SoC的控制下使用六个伺服。它将可以使用简单的软件界面或使用两个Pmod操纵杆来进行直接控制。
### 伺服控制
我们需要做的第一件事是解决如何控制伺服位置。伺服是最简单的驱动电机之一，对于机器人来说，它们的想法是，只要我们保持相同的驱动信号，它们也会保持位置。
那么，伺服的驱动信号是什么？我们使用的大多数伺服使用60Hz PWM波形。在60Hz波形的16.66毫秒周期中，信号将在0.5毫秒到2.5毫秒之间高。信号的持续时间将以0到180度的运动范围驱动伺服。
驱动0.5毫秒的脉冲驱动0度位置，而2.5毫秒将导致180度。因此，通过将信号高驱动1.5毫秒来维持90度。
因此，增加或减少脉冲宽度13.9 us，使伺服移动1度。
虽然我们有三重计时器计数器，能够提供必要的PWM信号。在此应用中，我们还需要以6伏的电压提供伺服电源，因此使用Adafruit PWM Shield是最简单的方法。这不仅提供6v功率，还对PWM信号进行电平转换。
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2025/05/image_HBzkqmAFRB-拷贝.jpg)
接下来要解决的是如何驱动信号，PWM屏蔽使用四个8位寄存器来驱动每个PWM信号。
PCA9685屏蔽上的设备使用4096位计数器。开寄存器定义了信号高点的计数和信号低点的关计数。
因此，我们始终可以将on time设置为0，然后定义关闭信号的计数，以给我们所需的信号宽度。
### Vivado构建
为了能够与Pmod操纵杆和PWM屏蔽接口，我们首先需要在Vivado中创建一个设计。此设计将包含以下IP块
- Zynq PS – 这是Zynq处理系统
- Pmod操纵杆2 – Pmod的接口
- AXI IIC – 在PL中实现的I2C接口
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2025/05/image_hh0Bk0hf68.jpg)
要使用Pmod IP内核，我们需要将Digilent Vivado库映射为IP存储库。如果您没有它，您可以[在这里](https://github.com/Digilent/vivado-library)获取存储库，您还需要安装Cora板定义，如果您缺少这些，您可以在[这里](https://github.com/Digilent/vivado-boards)下载它们。
一旦我们完成方块图，我们就可以构建设计并将其导出到软件中。
### 软件设计
我们将在软件中开发大部分应用程序。由于我们想在几种模式下使用它，并将来返回升级，因此我们需要一种模块化的方法。
因此，我为每个关节开发了一个功能，可以根据需要调用和使用。每个关节都能接受一个无符号的8位值，然后从90度（1.5毫秒）的脉冲宽度中加减去或减去这个8位值，以获得所需的角度。
我这样做有几个原因：
- 单个RS232字节可以包含所需的电机位置。
- 从操纵杆读取的值也是8位。
我们如何使用操纵杆很有趣，它们可以直接控制手臂。因此，我们需要确保操纵杆和手臂之间的运动对齐。
在两个操纵杆中，第一个与JA相连，第二个与JB相连。
JA在X方向移动时会向前或向后移动手臂，在Y方向移动时会上下移动手臂。
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2025/05/image_VoXSy67sQY.png.jpeg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2025/05/image_UQgKO3FExw.png.jpeg)
JB在X方向移动时会旋转手腕，在Y方向移动时会上下移动手腕。
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2025/05/image_aGvQBsSZcX.png.jpeg)
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2025/05/image_nCK4gd2vwE.png.jpeg)
如果你仔细注意，你会认为我们没有解决手臂围绕其底座的旋转或抓手的操作。
我们通过使用触发器来控制这些，然而，当Pmods连接到Arm时，很难到达下面的触发器。
相反，我们将使用向下推操纵杆本身。如果我们按下JB，那么末端夹持器将关闭并保持关闭，直到我们释放它。
为了围绕底座旋转，我们使用相同的技巧，按下JA，向Y方向旋转将使手臂围绕其底座旋转。
每个运动函数的代码都非常相似，并且可以在我的GitHub上找到，但是，为了参考，下面提供了上下函数
```
void up_dwn(u8 YData){
	SendBuffer[0] = 0x0A;
	SendBuffer[1] = 0x00;
	XIic_Send(iic.BaseAddress,IIC_SLAVE_ADDR,(u8 *)&SendBuffer, sizeof(SendBuffer),XIIC_STOP);
	SendBuffer[0] = 0x0B;
	SendBuffer[1] = 0x00;
	XIic_Send(iic.BaseAddress,IIC_SLAVE_ADDR,(u8 *)&SendBuffer, sizeof(SendBuffer),XIIC_STOP);
	SendBuffer[0] = 0x0C;
	u16 signal;
	if( YData >8);
	SendBuffer[1] = cent_l_off;
	XIic_Send(iic.BaseAddress,IIC_SLAVE_ADDR,(u8 *)&SendBuffer, sizeof(SendBuffer),XIIC_STOP);
	SendBuffer[0] = 0x0D;
	SendBuffer[1] = cent_h_off;
	XIic_Send(iic.BaseAddress,IIC_SLAVE_ADDR,(u8 *)&SendBuffer, sizeof(SendBuffer),XIIC_STOP);
	}
```
软件应用结构的其余部分是：
- 初始化PWM屏蔽和Pmod操纵杆。
- 对手臂进行自我测试，并将所有伺服定位在90度。
- 输入外观以通过RS232接收命令或从操纵杆接收命令。
当然，如果我们想要命令中的硬代码来执行重复性任务，我们也可以。
### 初始测试
一旦Vivado构建和初始软件可用，下一步就是确保软件能够正确移动伺服。我在将伺服连接到PWM屏蔽之前就做了这个，以防我有什么不正确的地方。
使用示波器，当我移动操纵杆时，我能够测量PWM信号。
随着操纵杆的移动，脉冲宽度从0.5毫秒逐渐移动到2.5毫秒。
![图片](https://admin.shaonianxue.cn/wp-content/uploads/2025/05/image_F5YhL9XQT2.png.jpeg)
当我把这个放在一起时，手臂按预期工作，我们可以在运动包络内随意控制它。
正如下面视频中所看到的，Arm在Zynq SoC的控制下愉快地移动。
### 未来工作
我们将在未来的项目中回到这个部门，以增加逆运动学等功能。如果有人想看它的动作或使用操纵杆驾驶它，我也会考虑把它带到我正在参加的会议上。
您可以在此处找到与此项目相关的文件：
[Https://github.com/ATAylorCEngFIET/黑客](Https://github.com/ATAylorCEngFIET/黑客)
[在这里](https://www.hackster.io/adam-taylor/projects)查看以前的项目[。](https://www.hackster.io/adam-taylor/projects)
