FPGA/SoC控制机械臂

这篇具有很好参考价值的文章主要介绍了FPGA/SoC控制机械臂。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

FPGA/SoC控制机械臂

机器人技术处于工业 4.0、人工智能和边缘革命的前沿。让我们看看如何创建 FPGA 控制的机器人手臂。

fpga控制机械臂,fpga开发

介绍

机器人技术与人工智能和机器学习一起处于工业 4.0 和边缘革命的最前沿。

因此,我认为创建一个基础机器人手臂项目会很有趣,我们可以回过头来添加几个功能,例如:

  • 逆运动学 - 确定末端执行器的位置。

  • AI / ML - 操作期间的对象分类。

  • 网络控制——实现边缘远程控制。

fpga控制机械臂,fpga开发

此示例将使用一个机器人手臂,该机器人手臂在 Zynq SoC 的控制六个伺服系统。可以使用简单的软件界面或使用两个操纵杆进行直接控制。

伺服控制

我们需要做的第一件事是弄清楚如何控制伺服位置。伺服电机是最简单的驱动电机之一,也是机器人技术的理想选择,因为只要我们保持相同的驱动信号,它们就能保持相对位置。

fpga控制机械臂,fpga开发

那么伺服的驱动信号是什么呢?我们使用的同类伺服系统中的大多数都使用 60Hz PWM 波形。在 60Hz 波形的 16.66 ms 周期中,信号将在 0.5 ms 到 2.5 ms 之间为高电平。信号的持续时间将驱动伺服器在 0 到 180 度之间运动。

0.5 ms 脉冲驱动 0 度位置,而 2.5 ms 脉冲将驱动 180 度位置。因此,可以通过将信号驱动为 1.5 ms 脉冲来维持 90 度。

因此,增加或减少脉冲13.9 us宽度会使舵机移动 1 度。

fpga控制机械臂,fpga开发

接下来要解决的是如何生成驱动信号,PWM 扩展板(上图)使用四个 8 位寄存器来驱动每个 PWM 信号。

on 寄存器定义信号变高的计数,off 寄存器定义信号变低的计数。

因此,我们可以将开启时间设置为 0,然后定义关闭信号的计数,以获得所需的信号宽度。

Vivado 构建

fpga控制机械臂,fpga开发
  • Zynq PS - 这是 Zynq 处理系统

  • AXI IIC - 在 PL 中实现的 I2C 接口

一旦完成了PL设计,我们就可以构建设计并将其导出到软件。

软件设计

我们将在软件中开发大部分应用程序。由于我们希望在多种模式下使用它,并在将来进行升级时使用它,因此我们需要一种模块化方法。

因此,为每个关节开发了一个可以根据需要调用和使用的函数。每个关节都能够接收无符号的 8 位值,然后将该 8 位值与 90 度 (1.5 ms) 脉冲宽度相加或相减,以获得所需的角度。

我这样做有几个原因:

  • 单个 RS232 字节可以包含所需的电机位置。

  • 从操纵杆读取的值也是 8 位。

因此,我们需要确保操纵杆和手臂之间的运动对齐。

两个操纵杆中,第一个连接到 JA,第二个连接到 JB(JA和JB是PMOD接口,就是普通的GPIO)。

JA 当沿 X 方向移动时,将向前或向后移动手臂;当沿 Y 方向移动时,它将上下移动手臂。

fpga控制机械臂,fpga开发fpga控制机械臂,fpga开发

JB 在 X 方向移动时会旋转手腕,在 Y 方向移动时会上下移动手腕。

fpga控制机械臂,fpga开发fpga控制机械臂,fpga开发

每个移动函数的代码都非常相似,并且可以在后面提供的代码找到,但是,下面提供了向上向下函数以供参考

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 < 128 ){
  signal = 122 + (YData * 1.91);
 }
 else if (YData == 128){
  signal = 369;
 }
 else{
  signal = 369 + ((YData - 128) * 1.91);
 }
 u8 cent_l_off, cent_h_off;
 cent_l_off = (u8)signal;
 cent_h_off = (u8) (signal>>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 信号。

随着操纵杆的移动,脉冲宽度逐渐从 0.5 ms 变为 2.5 ms。

fpga控制机械臂,fpga开发

视频演示

参考代码

!! https://github.com/ATaylorCEngFIET/Hackster

!! https://github.com/ATaylorCEngFIET/Hackster/tree/master/Hexapod_servo文章来源地址https://www.toymoban.com/news/detail-854185.html

到了这里,关于FPGA/SoC控制机械臂的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA验证学习(五):SoC的总线架构

    SoC的发展离不开应用领域的需求牵引。在根据需求进行片上系统设计时,不仅要考虑SoC本身,而且还要考虑SoC应用产品的需求,重点关注特定IP获取和系统总体结构(性能、功耗、成本、可靠性、适用性)的评估。 为了提高开发模块的重复利用率,降低开发成本, 用户采用

    2024年02月07日
    浏览(39)
  • SOC FPGA之HPS模型设计(一)

    目录 一、建立HPS硬件系统模型 1.1 GHRD 1.2 从0开始搭建HPS 1.2.1 FPGA Interfaces 1.2.1.1 General 1.2.1.2 AXI Bridge 1.2.1.3 FPGA-to-HPS SDRAM Interface 1.2.1.4 DMA Peripheral Request 1.2.1.5 Interrupts 1.2.1.6 EMAC ptp interface 1.2.2 Peripheral Pin Multiplexing 1.2.3 HPS Clocks 1.2.3.1 Input Clocks 1.2.3.2 Output Clocks 1.2.4 SDRAM 1.2.4.

    2024年02月14日
    浏览(41)
  • SOC FPGA之HPS模型设计(二)

    根据SOC FPGA之HPS模型设计(一), Quartus工程经过全编译后会产生 Handoff文件夹、SOPCINFO文件、SVD文件 通过信息交换文件Handoff文件生成Preloader,需要用到SOC EDS Preloader也被称为spl(Second Program Loader)或u-boot-spl 在SOC EDS安装目录下双击Embedded_Command_Shell.bat文件启动嵌入式命令Shell窗口,

    2024年02月15日
    浏览(33)
  • 【FPGA】基于C5的第一个SoC工程

    本文是在毕业实习期间学习FPGA的SoC开发板运行全连接神经网络实例手写体的总结。 声明:本文仅作记录和操作指南,涉及到的操作会尽量细致,但是由于文件过大不会分享文件,具体软件可以自行搜索相关资源。 首先,既然提到了软件开发,那么我们就需要在FPGA的SoC开发板

    2024年02月16日
    浏览(43)
  • FPGA验证学习(四):SoC的验证与测试

    验证和测试是两个不同的概念。 前面的三篇嘞,咱们对整个开发的流程有了个了解,这里就来看看验证与测试,芯片这个东西流片一次可太贵了,所以一次芯片的开发流程有超级多的时间都花在了验证上。 一般验证是指检验电路的逻辑、功能、时序等是否满足设计者在设计

    2024年02月16日
    浏览(34)
  • 学习笔记01:ASIC、FPGA、SOC设计流程比较

    图1:ASIC设计流程 图2:ASIC设计流程 图3:FPGA设计流程 图4:Soc设计流程 SoC设计与传统的ASIC设计最大的不同在于以下两方面:①是SoC设计更需要了解整个系统的应用,定义出合理的芯片架构,使得软硬件配合达到系统最佳工作状态,如 总线的设计 使得总线传输吞吐量满足操

    2024年04月29日
    浏览(64)
  • PLC原理及PLC+FPGA(SOC)架构方案简介

    工业生产和科技的发展都离不开PLC的自动化控制,PLC可以广义的理解为: 集中的继电器延伸控制柜,实际的生产应用中,PLC大大的节省了工业控制的成本,加强了设备的集中管理和自动控制。 PLC (Programmable Controller,可编程程序控制器)它是一个以微处理器 为核心的数字运

    2024年02月10日
    浏览(49)
  • 车规级芯片之 MCU、MPU、DSP、FPGA、SOC

            随着处理器技术的不断发展, CPU (Central Processing Unit)的发展逐渐出现三种分支,分别是 MCU (Micro Controller Unit,微控制器单元) 和 MPU (Micro Processor Unit,微处理器单元)和 DSP (Digital Signal Processing/Processor)数字信号处理器。         MCU在应用中比较常见的就是ST的

    2024年02月02日
    浏览(45)
  • 【2021集创赛】Arm杯三等奖:基于FPGA的人脸检测SoC设计

    本作品参与极术社区组织的 有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~ 活动。 团队介绍 参赛单位:合肥工业大学 队伍名称:芯创之家 指导老师:邓红辉、尹勇生 参赛杯赛:Arm杯 参赛人员:王亮 李嘉燊 金京 获奖情况:全国总决赛三等奖 人脸检测系统在诸多

    2024年02月08日
    浏览(40)
  • 基于FPGA的4x4矩阵键盘控制器verilog开发实现

    欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 一、理论基础 二、核心程序 三、测试结果        基于FPGA的4x4矩阵键盘控制器是一种使用FPGA(现场可编程门阵列)来实现对4x4矩阵键盘进行控制的设备。该控制器能够有效地降低硬件资源的使用,提高系

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包