以下文章来源于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模块则需要根据外接编码器类型进行选择。
这样一来换新编码器的时候,只需要很小的开发工作就可以完成新编码器的驱动了。另外这三个角度获取模块通过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驱动编码器模块的所有内容,和设计过程。在后续新型号的编码器添加进来的话,可以以最小的代价完成这项工作。
-
FPGA
+关注
关注
1648文章
22143浏览量
622575 -
编码器
+关注
关注
45文章
3852浏览量
139207 -
FOC
+关注
关注
21文章
361浏览量
44873
原文标题:FPGA FOC编码器(库)模块详解
文章出处:【微信号:FPGA研究院,微信公众号:FPGA研究院】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
RS连续编码器的FPGA设计与实现

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

基于FPGA增量式编码器的接口设计
基于FPGA的圆光栅编码器数据采集系统设计
基于FPGA+DSP的海德汉编码器结构及设计

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

评论