0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA FOC驱动编码器模块介绍

FPGA研究院 ? 来源:FPGA之旅 ? 2025-09-06 09:50 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

以下文章来源于FPGA之旅,作者电击小子

一. 简介

在使用有感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模块则需要根据外接编码器类型进行选择。

6f6ec160-89e8-11f0-8c8f-92fbcf53809c.png

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

6fc7fb54-89e8-11f0-8c8f-92fbcf53809c.png

SPI驱动模块

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

70288032-89e8-11f0-8c8f-92fbcf53809c.png

2. AS5047P_SPI模块

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

7081df9c-89e8-11f0-8c8f-92fbcf53809c.png

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

70e130e6-89e8-11f0-8c8f-92fbcf53809c.png

但是在后面继续用的时候,就出现了非常严重的bug,AS5047P会一直读到错误的数据,需要断电一下编码器才行。通过debug发现是回传数据的EF位拉高了,导致无法获取到正确的数据,而该状态信息是无法自行清除的,所以只要EF拉高了,在后续的通信过程中会一直拉高,导致角度获取异常。

通过数据手册可以看到,通过读ERRFL可以将错误状态信息给清除,那么我们可以将第二阶段的NOP指令换成ERRFL指令就可以了,这样即使在通信的过程中出现了问题,也会在下一次角度获取的时候,可以正常通信。

713f8c54-89e8-11f0-8c8f-92fbcf53809c.png

AS5047P的SPI精度为14bit,所以将获取到的原始数据转化为角度信息还需要将其乘上1440(扩大65536)即可。

3. MT6835_SPI模块

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

719bbd3a-89e8-11f0-8c8f-92fbcf53809c.png

71f6b0dc-89e8-11f0-8c8f-92fbcf53809c.png

4.角度、速度、位置检测模块

角度信息在输入进模块的时候就已经是角度了,直接将信息输入即可。

速度信息采用单位时间内角度变化量进行求解,单位时间的选择不宜过大也不宜过小,本设计采用的是100us,角度输入的单位是°,直接计算出来的话是°/s,速度一般采用RPM转每分钟作为衡量单位,因此需要进行单位的转换,转换过程如下图所示。

10000为100us的倒数。

speed_angle_gap_sum为角度间隔总和

0.000015为每一个speed_angle_gap_sum代表的角度值, 转换方式为 1/(360*65536)

最后将角度信息扩大100倍进行输出

72521d82-89e8-11f0-8c8f-92fbcf53809c.png

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

72a82cd6-89e8-11f0-8c8f-92fbcf53809c.png

5. ABZ模块

三.小结

本次主要给大家介绍了一下FPGA FOC驱动编码器模块的所有内容,和设计过程。在后续新型号的编码器添加进来的话,可以以最小的代价完成这项工作。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1648

    文章

    22143

    浏览量

    622575
  • 编码器
    +关注

    关注

    45

    文章

    3852

    浏览量

    139207
  • FOC
    FOC
    +关注

    关注

    21

    文章

    361

    浏览量

    44873

原文标题:FPGA FOC编码器(库)模块详解

文章出处:【微信号:FPGA研究院,微信公众号:FPGA研究院】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    FOC电机驱动编码器怎么校准?

    FOC电机驱动编码器怎么校准?磁编码器受影响,出来的角度变得非线性了,要怎么做?
    发表于 01-19 10:50

    怎样使用Simple FOC库运行编码器

    怎样使用Simple FOC库运行编码器呢?编码器中断设置该怎样去实现呢?
    发表于 01-24 06:25

    编码器,编码器是什么意思

    编码器,编码器是什么意思 编码器 编码器(encoder)是将信号
    发表于 03-08 15:04 ?3293次阅读

    RS连续编码器FPGA设计与实现

    介绍了Virtex2Ⅱ系列FPGA (现场可编程门阵列)的时钟管理模块DCM (数字时钟管理)的结构和功能,详细分析了RS(Reed2Solomon)码
    发表于 09-02 16:25 ?83次下载
    RS连续<b class='flag-5'>编码器</b>的<b class='flag-5'>FPGA</b>设计与实现

    基于正余弦编码器反馈处理的FPGA在伺服驱动中的应用

    伺服驱动用于自动化系统、机器人、以及专用机器与机床的驱动系统等众多领域。本文描述了一些基于FPGA编码器方案以连接伺服驱动
    发表于 09-07 15:00 ?53次下载
    基于正余弦<b class='flag-5'>编码器</b>反馈处理的<b class='flag-5'>FPGA</b>在伺服<b class='flag-5'>驱动</b>中的应用

    基于FPGA增量式编码器的接口设计

    分析了光电编码器4倍频原理,提出了一种基于可编程逻辑器件FPGA对光电增量式编码器输出信号4倍频、鉴相、计数的具体方法,它对提高编码器分辨率与实现高精度、高稳定性的信号检测
    发表于 11-03 15:13 ?76次下载

    基于FPGA的圆光栅编码器数据采集系统设计

    介绍了一种基于FPGA的圆光栅编码器数据采集系统的设计方法。通过分析圆光栅的实际工作情况,将系统分为三大模块,详细阐述了滤波模块实现消除高频
    发表于 09-25 16:10 ?28次下载

    LDPC码编码器FPGA实现

    800Mbps准循环LDPC码编码器FPGA实现
    发表于 05-09 10:59 ?37次下载

    高精度增量式编码器与基于DSP和FPGA编码器信号测量模块

    本文介绍了基于DSP和FPGA编码器信号测量及处理的通用模块,对海德汉编码器进行了概述等。
    发表于 10-13 18:17 ?19次下载
    高精度增量式<b class='flag-5'>编码器</b>与基于DSP和<b class='flag-5'>FPGA</b><b class='flag-5'>编码器</b>信号测量<b class='flag-5'>模块</b>

    基于FPGA+DSP的海德汉编码器结构及设计

    在现代工业控制系统中,对电机的控制是其重要组成部分。编码器作为电机角位移的检测装置,为系统提供重要反馈信号。本文介绍了一个适合嵌入式系统的基于DSP和FPGA的海德汉光电编码器信号处理
    发表于 11-18 03:39 ?4092次阅读
    基于<b class='flag-5'>FPGA</b>+DSP的海德汉<b class='flag-5'>编码器</b>结构及设计

    基于FPGA的EnDat接口编码器数据采集设计

    EnDat接口的特点、功能、时序和数据传输、OEM数据存储,同时介绍编码器数据采集后续电路设计方案、基于FPGA模块设计的原理和原则。
    发表于 01-01 13:13 ?2902次阅读
    基于<b class='flag-5'>FPGA</b>的EnDat接口<b class='flag-5'>编码器</b>数据采集设计

    旋转编码器测量_旋转编码器安装方式

    本文主要介绍了旋转编码器测量及安装方法。旋转编码器检测直线位移方法具体如下:使用“弹性连轴”将旋转编码器
    发表于 08-06 11:40 ?4439次阅读
    旋转<b class='flag-5'>编码器</b>测量_旋转<b class='flag-5'>编码器</b>安装方式

    SINAMICS-S120系统中的编码器转换模块介绍

    SINAMICS-S120系统中的编码器转换模块介绍说明。
    发表于 04-25 11:28 ?6次下载

    编码器模块的使用方法

    有关编码器的知识,编码器有不同的模块,在使用编码器时这些模块怎么用,在操作时要注意什么问题,以下介绍
    的头像 发表于 06-26 17:32 ?6685次阅读

    ec11编码器 有什么驱动芯片吗

    EC11编码器是一种常用的编码器,通常用于工业自动化、机器人、数控机床等领域。为了驱动EC11编码器的正常工作,需要使用相应的驱动芯片。下面
    的头像 发表于 12-13 10:43 ?2692次阅读