既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
参考硬件,测试板
为了方便测试 AS5047P-SPI绝对值编码器
,也便于扩展不同的电机,就有了下面这块万能转接板,支持 2208、2212、3508、5008、6010、6374、42步进、57步进 等不同电机的定位安装。
图中AS5047P转接板购买链接,我的淘宝小店:AS5047P SPI磁编码器 3206云台无刷电机 带径向磁铁 Odrive电机
店铺详情内有安装孔位、原理图、教程、资料,手机端可能因没做适配看不到,建议用电脑打开。
2、AS5047P - SPI通信时序
从手册的第11页开始翻译
SPI 接口(从)
主机微控制器(主)使用 SPI 接口来读取或写入易失性存储器以及对非易失性 OTP 寄存器进行编程。 AS5047P 的 SPI 仅支持从模式
。 它可以以高达 10 MHz 的时钟速率进行通信。
AS5047P SPI 使用模式=1(CPOL=0,CPHA=1)来交换数据。 如图 11 所示,数据传输从 CSn 的下降沿开始(SCL 为低电平)。 AS5047P 在 SCL 的下降沿采样 MOSI 数据。 SPI 命令在帧结束时执行(CSn 的上升沿)。 位顺序是 MSB 在前。 数据受奇偶校验保护。
(注意:与AS5047P进行SPI通信的MCU,需要配置SPI为 SPI mode 1.(CPOL=0, CPHA=1),之前大多数情况用mode0,注意更改硬件配置。)
SPI时序
AS5047P SPI 时序如图 11 所示。
SPI事务
SPI 事务由一个 16 位的命令帧
和一个 16 位的数据帧
组成(也就是各两个字节)。 图 13 显示了命令帧的结构。
SPI命令帧
为了提高 SPI 通信的可靠性,必须生成和发送偶校验位 PARC
。 奇偶校验位的错误设置会导致奇偶校验位错误,错误标志寄存器中的 PARERR 位显示了该错误。 奇偶校验位是从命令帧的低 15 位计算的。 16 位的命令帧由 寄存器地址
和 读/写标志位
组成,该位来指示SPI事务是读还是写,以及奇偶校验位。
图 14 展示了读取的数据帧格式。
奇偶校验位 PARD 由 AS5047D数据帧的低 15 位计算。 如果前一个 SPI 命令帧中发生错误,则 EF 位被置1。 SPI 读取在 CSn 的上升沿进行采样,数据通过下一个读取命令在 MISO 上传输,如图 15 所示。
SPI读数据帧
表15很有参考意义的,图中包含了多个 SPI读
的消息帧。
CMD 和 DATA各16位,DATA会在下一次的CMD传输中被读出。很标准的SPI读过程。
AS5047的一个完整 SPI读
消息帧 = 表 13-命令帧(MOSI)
+ 表 14-读数据帧(MISO)
发送CMD的同时,可一同读出上次CMD指定的寄存器数据。这种读的方式,特别适合AS5047这样,需要以高刷新率读取电机转子位置的场合。
SPI写数据帧
奇偶校验位 PARD 必须根据 16 位数据计算。在 SPI 写事务中,写命令帧之后是 MOSI 的写数据帧。 写数据帧由地址在命令帧中的寄存器的新内容组成。
在通过写数据帧在 MOSI 上传输新内容期间,在 MISO 上发送旧内容。 在 MOSI 上的下一个命令中,寄存器的实际内容在 MISO 上传输,如图 17 所示。
区别于表15-SPI读
。
AS5047的一个完整 SPI写
消息帧 = 表 13-命令帧(MOSI)
+ 表 16-写数据帧(MOSI)
特别注意:SPI写
消息帧时,MISO上的数据可以不读取,除非有需要此寄存器先前内容的需求。千万别让这个搞混了。正常按SPI写操作就行,不必关注MISO输出的数据。另外SPI写几乎用不到,除非有OTP编程的需求。
3、寄存器结构
3.1 易失性寄存器
易失性寄存器如图 18 所示。每个寄存器都有一个 14 位地址。
读取 NOP 寄存器相当于 AS5047P 的 nop(无操作)指令。
Figure 19~24 详细的说明了 易失性寄存器
的 位功能
。内容太多,请自己阅读数据手册。
简要汇总:
NOP:读取 NOP 寄存器相当于 AS5047P 的 nop(无操作)指令。
ERRFL:错误标志寄存器。包括:奇偶校验错误、无效命令错误、帧错误。
PROG:用于对 OTP 存储器进行编程,二次开发基本用不到,不看了。
DIAAGC:磁场强度标志,CORDIC 溢出,及AGC控制,也用不到。
MAG:CORDIC 幅度信息,用不到。
ANGLEUNC:没有动态角度误差补偿的角度信息。
ANGLECOM:具有动态角度误差补偿的角度信息。(获取转子角度,不需要配置其他任何寄存器,在保证时序无误的前提下,只读这一个寄存器的值就够了。读取后要对 PARD进行偶校验,无误后将其转换为实际的转子角度)
3.2 非易失性寄存器 (OTP)
OTP(一次性可编程)存储器用于将传感器的绝对零位和客户设置永久存储在传感器 IC 中。
对于所有非易失性寄存器(软写入),可以多次进行 SPI 写/读访问。 硬件复位后软写入的寄存器内容将丢失。
自编程只可完成一次。 因此,非易失性寄存器的内容永久存储在传感器中。 硬件复位后寄存器内容仍然存在,不能被覆盖。
对于传感器的正确功能,不需要 OTP 编程。 如果未进行配置或编程,非易失性寄存器处于默认状态 0x0000h。
(注意:注意上面的一行话,仅使用传感器的正常功能,是不需要OTP编程的。而且OTP只能固化一次,不可二次编程)
非易失性寄存器表
Figure 26~34 详细的说明了 非易失性寄存器
的 位功能
。内容太多,请自己阅读数据手册。
自己看了下 非易失性寄存器表
的功能,进行以下总结:
ZPOSM
和ZPOSL
为绝对零位
的校准值。SETTINGS1
和SETTINGS2
存储着用户自定义配置。这些配置包括:定义 PWM 的输出功能、禁用动态角度的误差补偿、ABI 脉冲的 十进制或二进制选择、启用 PWM输出、UVW 的极对数设置、滞后设置、ABI的分辨率(4096/4000/2048/2000/1600/1200/1024/800/400/200/100 步每转)。- 芯片出厂后,默认的OTP配置是怎样?
手册对ABI接口的概述:
AS5047P 可以通过增量接口将角度位置发送到主微控制器。 此接口可与其他接口同时使用。
默认情况下,增量接口设置为以每转 4096 步或每转 1024 脉冲 (ppr) 的最高分辨率工作。 可以分别使用位 ABIBIN 在每转十进制和二进制脉冲之间进行选择,并使用位 ABIRES 选择每转脉冲,如图 30 所示。
(不过我买的几块芯片,实测ABI默认是每转 4000 步,感觉和手册说的有点出入…关于ABI的说法暂不确定)
OTP编程的流程框图在手册中有介绍,不过自己没有用到,就不再继续介绍OTP。
4、SPI读AS5047P旋转角度
SPI读AS5047P旋转角度的流程
SPI读角度流程:
- 1、AS5047P和MCU上电。
- 2、上电后至少延时等待tpon=10ms。才可以发送有效数据。
- 3、循环读
ANGLECOM寄存器
(0x3FFF),得到uint16
的数据。PARD位校验无误后,将其转换为转子的实际角度。
获取转子角度的过程较为简单,不需要配置其他任何寄存器,在保证时序无误的前提下,只读 ANGLECOM寄存器
(0x3FFF) 这一个寄存器的值就可以了。读取后要对 PARD进行偶校验,无误后将其转换为实际的转子角度。
读的过程,需要计算 PARC
与 PARD
,他俩均为偶校验。
偶校验:确保整个被传输的数据中“1”的个数是偶数个。
故 如果载荷数据中“1”的个数是奇数个时,PARC
或 PARD
校验位填“1”,否则填“0”。
PARC是发送的(MOSI),PARD是接收的(MISO)。
所以我们在读寄存器的一帧数据内,要先对CMD进行偶检验
,生成PARC
。并添加到CMD的Bit15中,用MOSI发送出去,共16Bit。
MISO接收之后的16Bit数据,剥离出Bit15的PARD
,对余下的数据进行偶检验
,判断与PARD
是否一致。
如一致,表示SPI数据传输无误,可继续进行转子实际角度计算;如不一致,则重读或者抛出异常提醒。
5、驱动程序、SPI测试波形
测试的 MCU 使用 ESP32,以 100KHz-SPI 的速率通信。
(实测信号线串联100R电阻,SPI以18MHz的速率也能正常通信,远高于手册推荐的10MHz。)
源码:easyio-lib-for-esp32 中的 Demo - 29_SPI_AS5047P
。
5.1 SPI读DIAAGC
上面已经说过了 AS5047P-SPI读角度流程。不过为了方便测试,这里换个寄存器。
注意:DIAAGC
寄存器地址为 0x3FFC
,默认值为 0x0180
。但它的值会根据磁场状态动态变化,并不是固定的。只有当磁极转子的运动状态不变,DIAAGC
的值才是静止的。
连续读 DIAAGC 寄存器 波形:
使用软CS,成功。
5.2 SPI读DIAAGC(硬CS,通信失败)
先前一直用的ESP32的 硬CS
引脚,读失败。
注意读取错误时,MISO
上的波形。Bit14 EF-错误标志位
会一直置1,使读取的 uint16
的值 >= 16384,可用此判断SPI通信的正常与否。
5.3 SPI读ANGLECOM(转子角度,软CS,通信成功)
读 ANGLECOM
,转子角度。读一次。
5.4 SPI读ANGLECOM(转子角度,软CS,通信成功)
读 ANGLECOM
,转子角度。连续读。
6、SPI测试波形
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
6、SPI测试波形
[外链图片转存中…(img-HHOL1drq-1715844411078)]
[外链图片转存中…(img-TapEGR2X-1715844411079)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)