# FPGA-FOC **Repository Path**: whpUp/fpga-foc ## Basic Information - **Project Name**: FPGA-FOC - **Description**: 基于纯Verilog实现的FOC控制器,三环均已实现,并且提供配套的上位机进行系统调试 - **Primary Language**: Verilog - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 45 - **Forks**: 20 - **Created**: 2024-12-24 - **Last Updated**: 2025-07-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ![核心板](https://img.shields.io/badge/Ethereal-核心板-green.svg)![核心板](https://img.shields.io/badge/FPGA-FOC-green.svg)![FOC](https://img.shields.io/badge/FOC-开源-green.svg) ### 一. 硬件简介 Ethereal核心板(ZYNQ7020)终于迎来了第一块底板,实物如下图所示,是一块专门用来学习无刷电机驱动FOC算法的底板,目前来说,是淘宝在售基于FPGA的唯一一款入门级别的学习板。近两年电机驱动这块比较火爆,特别是基于FOC算法的电机驱动,在B站和嘉立创开源广场程上的相关视频和作品不断地涌现,为大家提供了一个很好的学习环境和氛围。有打算入坑的小伙伴可以持续关注,毕竟机器人和新能源汽车较为火爆(能够看到的行业)。 ![1](https://gitee.com/whpUp/fpga-foc/raw/master/3.%20Image/1.png) ### 二. 底板详情 1. **工作电压**: 7 ~ 24 V 2. **工作电流**: 3A 3. **驱动芯片**: MP6540 4. **电流采样**: 低端三相采样 5. **磁编码器**: AS5047P 支持 SPI 、ABZ、 HALL三种方式 6. **ADC采样芯片**: AD7928 8通道 SPI接口 7. **外围接口**: 一路UART 和 一路JTAG,均为SH1.0接口 从底板详情信息可以看出,板载资源全部是围绕无刷电机驱动相关的电路,没有其它一些不必要功能,这样在使用起来非常方便,免去了一些其它不必要的操作;同时作为专门来学习FOC算法的小伙伴来说,可以大大节约成本。而作为公司来说,可以作为前期的学习和验证平台。 ### 三. 视频演示 目前已经在FPGA侧完成了电流环和速度环的控制,前两环控制无误,那么位置环就没什么问题,所以这套软件开发的第一阶段就已经完结( 已开源仅供参考,还有很多不完善的地方,例如消耗资源过多,控制精度粗糙等等 )。演示视频: [B站演示视频](https://www.bilibili.com/video/BV1f8qWYcEew/?spm_id_from=333.999.0.0&vd_source=ff49aebe9f63248ee9e81ca05d813c39) 由于使用的是ZYNQ系列的芯片,PL和PS肯定是要雨露均沾,才能充分发挥这颗芯片的价值,也可以借此完全掌握ZYNQ一整套的开发。**第二阶段的开发计划如下**( 不开源 , 购买配套硬件提供支持 ): 1. 将FOC封装成AXI接口 2. 将FOC IP挂载到PS侧,并且在裸机上进行调用 3. 将FOC IP挂载到PS侧,并且在Linux系统上进行调用 --- 当然如果大家对这套硬件比较感兴趣的话,可以通过淘宝店铺 **FPGA之旅** 获取 跳转链接 [淘宝链接](http://e.tb.cn/h.TVKMYdOnyG4NuNi?tk=5HuH3D7bPdi) ### 四. 程序框架 软件框架如下图所示,除了使用Vivado的VIO,ILA和clk-wiz(PLL)外,未使用其它任何IP,因此只要目标硬件资源满足,就可以轻松的移植。 ![image-20241225161533279](https://gitee.com/whpUp/fpga-foc/raw/master/3.%20Image/%E7%A8%8B%E5%BA%8F%E6%A1%86%E5%9B%BE.png) 想要驱动无刷电机光有FOC算法还不行,还需要一系列的外围必要功能的支持,可以根据框图模块的颜色大致分为五个部分: 1. 编码器和ADC驱动: 在有感FOC算法中,需要使用到编码器来获取电机的实际位置,而在力矩控制中,需要使用到ADC采集三相电流进行控制。AS5047P编码器模块支持SPI/ABZ/HALL(其中SPI和ABZ程序已经支持)三种接口,通过这三种接口可以实时获取到电机的角度、速度和位置信息。AD7928模块采样三相采样电阻上的电压值,然后将其转换为三相电流值。 2. 控制状态机: 根据VIO输入的电机运行状态协调辅助模块和FOC模块。 3. 辅助模块:主要有两个: 自测模块和校准模块。自测模块为了测试FOC算法运行正确和硬件电路无误。而校准校准则是检测编码器和磁铁的零偏以及电机的极对数。 4. FOC模块: 根据电机运行模式,电机电流值和参数选择模块输入的角度等值进行FOC算法实现,最终输出三路PWM。 5. 串口输出模块: 将电机运行相关信息,例如 三相电流、运行速度等等,通过串口通讯上传至配套的上位机软件进行波形显示。 ![image-20241225165316400](https://gitee.com/whpUp/fpga-foc/raw/master/3.%20Image/FOC%E6%A1%86%E5%9B%BE.png) FOC部分的框图如上所示,基本上是一个串行的计算过程,也是严格按照FOC执行的流程一步一步来实现的,其中loop控制模块是FOC的三环控制模块,其中的核心是PID反馈模块。其中的原理就不一样介绍了,可以结合博文和C语言代码进行学习(C代码比较容易懂)。 整个FOC算法在ZYNQ7020上的资源消耗情况如下图所示,其中DSP使用到了比较多的DSP和LUT资源,最多能同时驱动5个无刷电机,这显然是与我设计的目标不相符的,因为接下来我要实现一个轮足机器人,需要同时驱动6个无刷电机以及一些其他外设。所以本次开源的目的是供大家参考学习,并不推荐使用(要求不高的话,使用也是没问题的)。**优化代码以及详细文档购买硬件后提供**。 ![image-20241225170249674](https://gitee.com/whpUp/fpga-foc/raw/master/3.%20Image/%E8%B5%84%E6%BA%90%E6%B6%88%E8%80%97%E7%8E%87.png) 优化后的资源使用情况 ![资源消耗率](https://gitee.com/whpUp/fpga-foc/raw/master/3.%20Image/%E4%BC%98%E5%8C%96.png) 如果大家对FPGA驱动无刷电机感兴趣,或者对这个方向感兴趣的话,可以点个star~~ 同时如果大家对这套硬件比较感兴趣的话,可以在淘宝搜索店铺 **FPGA之旅** 进行购买。 或者直接点击[购买链接](https://e.tb.cn/h.TTfjfyg8x20HcGT?tk=FRJS3zC43bc ).进行购买 感谢大家的支持。