FPGA FOC驱动编码器模块介绍
2025-10-15 来源:elecfans
一. 简介
在使用有感FOC算法的时候,离不开使用编码器来获取电机角度,编码器的种类非常多,常见的有AS5600、AS5047P和MT6835等等,它们的驱动方式可以分为IIC、SPI、ABZ和HALL,其中最简单的就是ABZ方式了,因为它对于任意编码器来说,驱动方式都是一样的,只需要将脉冲对应的角度分辨率修改一下即可,而IIC和SPI则会根据不同的芯片,内部寄存器地址和位宽的不一样,驱动上会存在一些差异,针对这种驱动方式,如何能够在更换芯片后,对原工程的改动量最小,代码开发量最小,这正是本篇文章所要介绍的内容。
二. 编码器模块介绍
在多路FOC驱动板上,一共是支持了两种编码器和两种角度获取方式,分别是AS5047P和MT6835,SPI和ABZ。AS5047P的精度是14bit,MT6835的精度是21bit,它们的价格差不多,大家可以根据自己的需求进行选择,个人感觉精度越高的编码器调试起来越难(达到编码器精度所对应的效果),不知道大家是否有同样的感觉。
整个编码器模块的结构如下图所示,输入端为ABZ、SPI的引脚信号,则为角度、速度等信息。ABZ模块、SPI驱动模块和角度..检测模块为固定模块,更换编码器后也不需要进行修改,而AS5047P_SPI模块和MT6835_SPI模块则需要根据外接编码器类型进行选择。

这样一来换新编码器的时候,只需要很小的开发工作就可以完成新编码器的驱动了。另外这三个角度获取模块通过generate条件编译控制,根据外部parameter参数即可选择对应的模块生效。

SPI驱动模块
SPI驱动模块的端口信号如下图所示,CPOL、CPHA控制SPI的模式,SCLK_DIV控制SPI的通信速率,DATA_WIDTH控制单次SPI通信的数据位宽,这样基本可以满足所有通过SPI的方式来获取角度的编码器了。

2. AS5047P_SPI模块
AS5047p读角度信息的过程可以通过数据手册来获取,一共需要发起两次的SPI传输,上一次发起的SPI回读数据会在下一次SPI传输时输出,过程如下图所示。

角度获取有两个寄存器可以读,分别是0x3FFF和0x3FFE,本次使用的是0x3FFF寄存器,然后NOP指令什么也不操作,最开始设计的时候也没有考虑那么多,直接先发送一个0x3FFF,然后发送一个NOP,这样就可以获取到角度信息了,刚开始用的时候,基本没有什么问题。

但是在后面继续用的时候,就出现了非常严重的bug,AS5047P会一直读到错误的数据,需要断电一下编码器才行。通过debug发现是回传数据的EF位拉高了,导致无法获取到正确的数据,而该状态信息是无法自行清除的,所以只要EF拉高了,在后续的通信过程中会一直拉高,导致角度获取异常。
通过数据手册可以看到,通过读ERRFL可以将错误状态信息给清除,那么我们可以将第二阶段的NOP指令换成ERRFL指令就可以了,这样即使在通信的过程中出现了问题,也会在下一次角度获取的时候,可以正常通信。

AS5047P的SPI精度为14bit,所以将获取到的原始数据转化为角度信息还需要将其乘上1440(扩大65536)即可。
3. MT6835_SPI模块
MT6835的角度获取过程会比AS5047P的先对而已简单许多,只需要一次SPI传输即可,传输过程如下图所示,在获取到数据之后,按照手册给的信息拼接成完整的角度。MT6835获取到的原始数据数据为21bit,将其转为角度需要乘上11.25即可。


4.角度、速度、位置检测模块
角度信息在输入进模块的时候就已经是角度了,直接将信息输入即可。
速度信息采用单位时间内角度变化量进行求解,单位时间的选择不宜过大也不宜过小,本设计采用的是100us,角度输入的单位是°,直接计算出来的话是°/s,速度一般采用RPM转每分钟作为衡量单位,因此需要进行单位的转换,转换过程如下图所示。
10000为100us的倒数。
speed_angle_gap_sum为角度间隔总和
0.000015为每一个speed_angle_gap_sum代表的角度值, 转换方式为 1/(360*65536)
最后将角度信息扩大100倍进行输出

位置控制由两个信号进行控制,一个是使能信号,当该信号使能后,模块才会累加角度间隔,避免在切换到位置控制的时候,目标角度和实际角度误差过大的问题。另外一个就是设置当前位置为初始位置,也就是将位置信息置零。

5. ABZ模块
略
三.小结
本次主要给大家介绍了一下FPGA FOC驱动编码器模块的所有内容,和设计过程。在后续新型号的编码器添加进来的话,可以以最小的代价完成这项工作。
- 利用锚定可信平台模块(TPM)的FPGA构建人形机器人安全
- 贸泽电子开售:面向工业、AI、医疗、数据中心等领域的Altera Agilex 5 FPGA与SoC
- DC到3.2GHz采样率!PXI平台+开放FPGA赋能,我们打造了一款“软件定义”的锁相放大器
- 莱迪思半导体携手EXOR International和TrustiPhi推出网络韧性参考套件
- Altera 25G Holoscan 传感器桥接器演示荣获Embedded Computing Design最佳展品奖
- 采用FPGA与双路AD9288的便携式示波器设计
- 莱迪思半导体将举办关于低功耗FPGA实现传感器附近AI推理的网络研讨会
- 发力物理 AI:Altera 以 FPGA 创新,赋能机器人及边缘场景
- 弥合传感器融合鸿沟:FPGA如何助力边缘端实时机器人应用
- FPGA在机器人领域同样是关键支撑
- 嵌入式的风向变了:2026纽伦堡嵌入式展透露这些趋势
- 高通确认不在GDC 2026发布新款骁龙G系列掌机处理器SoC
- 阿里达摩院发布玄铁C950,打破全球RISC-V CPU性能纪录
- 行业评论 从工具到平台:如何化解跨架构时代的工程开发和管理难题
- 面向嵌入式部署的神经网络优化:模型压缩深度解析
- Mujoco中添加Apriltag标签并实现相机识别教程
- 摩尔线程MTT S5000全面适配Qwen3.5三款新模型
- 英飞凌与宝马集团携手合作,基于Neue Klasse架构塑造软件定义汽车的未来
- 物理AI仿真新突破:摩尔线程与五一视界共建全栈国产化生态
- 爆火的OpenClaw! 告别云端,米尔RK3576开发板本地部署
- 中国芯片研发重要成果!中科院发布香山、如意系统
- Miniconda环境隔离教程:解决Python版本冲突的完整指南
- Jetson GPU Burn烤机测试与PTX编程详解
- LabelImg安装使用教程:YOLOv12训练数据标注完整指南
- 根据题意,水位上升记为正,下降记为负。汛期水位上升3分米(即0.3米)记作+3分米,此时达到最高水位12.5米,因此基准水位(记作0时的水位)为: 12.5米 - 0.3米 = 12.2米。 汛期过后水位下降4分米(即0.4米),是从最高水位下降,故实际水位为: 12.5米 - 0.4米 = 12.1米。 实际水位相对于基准水位的变化量为: 12.1米 - 12.2米 = -0
- YOLOv12训练实战:train.py常用参数详解
- Altera 与 Arm 深化合作,共筑 AI 数据中心高效可编程新方案
- 莱迪思加入英伟达 Halos生态系统,通过Holoscan传感器桥接技术提升物理人工智能安全性
- 芯科科技闪耀2026嵌入式世界展 以Connected Intelligence赋能,构建边缘智能网联新生态




