汽车电子笔记之-013:旋变硬解码ADI芯片AD2S1210使用记录(从零开始到软件实现)

目录

1、概述

2、技术规格

3、芯片引脚

4、旋变信号格式

5、使用过程只是要点分析

5.1、程序注意点分析

5.1.1、SPI配置时序

5.1.2、问题一:SPI时序问题

5.1.3、问题二:SPI读取时序(配置模式)

5.1.4、问题三:SPI写入时序(配置模式)

5.1.5、问题四:初始化问题

5.1.6、问题五:SAMPLE管脚

5.1.7、问题六:故障寄存器0xFF、复位寄存器0xF0

5.1.8、问题七:普通模式

5.2、常见问题分析

5.2.1、变比问题

5.2.2、削波故障

5.2.3、锁相故障

5.2.4、SPI通信故障

5.2.5、故障寄存器读取问题

5.2.6、数据处理错误

5.2.7、硬件连接问题

6、代码链接


1、概述

AD2S1210是一款10位至16位分辨率旋变数字转换器,集成片上可编程正弦波振荡器,为旋变器提供正弦波激励。

转换器的正弦和余弦输入端允许输入3.15 V p-p ± 27%、频率为2 kHz至20 kHz范围内的信号。 Type II伺服环路用于跟踪输入信号,并将正弦和余弦输入端的信息转换为输入角度和速度所对应的数字量。最大跟踪速率为3125 rps。

AD2S1210是做电机控制器常见的位置解析芯片,具备解析出绝对位置(机械角度)与速度,解析的方式可以通过串口SPI、并口IO口、ABZ传出需要的信息。

最大跟踪速率: 3125 rps(10位分辨率)注意这里的单位是秒,也就是3125转每秒,日常使用已经足够了。

精度±2.5弧分,意味着该设备在测量角度时,其输出值与实际输入值之间的最大误差为±2.5弧分。

弧分(Arcminute):弧分是一个角度单位,1弧分等于1/60度。因此,±2.5弧分等于±2.5/60度,约等于±0.04167度。

最大精度:这一参数表示在理想条件下(例如温度、供电电压等都在规定范围内),AD2S1210在测量时可能产生的最大误差。换句话说,设备的输出值可能在实际值的±2.5弧分范围内波动。

功能框图如下:

产品特色:

1、比率跟踪转换。 Type II跟踪环路能够连续输出位置数据,且没有转换延迟。它还可以抑制噪声,并提供参考和输入信号的谐波失真容限。

2、系统故障检测。故障检测电路可以检测旋变的信号丢失、超范围输入信号、输入信号失配或位置跟踪丢失。各故障检测阈值可以由用户单独编程,以便针对特定应用进行优化。

3、输入信号范围。正弦和余弦输入端支持3.15 V p-p ± 27%的差分输入电压。

4、可编程激励频率。可以轻松地将激励频率设置为2 kHz至20 kHz范围内的多个标准频率。一般使用10KHz.

5、3种格式位置数据。通过16位并行端口或4线串行接口可以访问10位至16位绝对角位置数据。增量式编码器仿真采用标准A-quad-B格式,并提供方向输出。

6、数字速度输出。通过16位并行端口或4线串行接口可以访问10位至16位带符号的数字量速度。

2、技术规格

除非另有说明, AVDD = DVDD = 5.0 V ± 5%, CLKIN = 8.192 MHz ± 25%, EXC频率 = 10 kHz至20 kHz(10位)、 6 kHz至20 kHz(12位)、3 kHz至12 kHz(14位)、 2 kHz至10 kHz(16位); TA = TMIN至TMAX1。

一般来说按照芯片推荐使用的方式,初始化正确就行了,然后在普通模式下直接运行即可。

正弦余弦的电压是有一定需求的

正余弦的输入一般来源于旋转变压器,既然叫变压器,肯定有变比,一般来说AD2S1210的励磁信号输出为正负5V也就是峰峰值10V的样子,什么叫变比呢,细节概念不怎么懂,实际使用就是假设变比为0.5,那么sin+与sin-的差分信号为正负2.5V,这点很重要,关乎到故障问题。

不过芯片推荐的为P-P7.2V

手册里面有个注意点的,sin毕竟随着位置呈现正弦变化,幅值也会变。

假设通过SPI通信的波特率是多少呢?如下所示,与电源相关性比较强。

串口读取的时候需要注意的: 在串行回读期间内, A0和A1应保持不变。要回读8位故障信息和16位位置/速度数据,可能需要24个时钟周期。如果不需要故障信息,可以在16个时钟周期之后释放A0/A1。

3、芯片引脚

着重注意的引脚如下

|--------|-------------------------------------------------------------------------------|
| 引脚名称 | 说明 |
| RES1 | 分辨率选择1。逻辑输入。利用RES1和RES0,可以对AD2S1210的分辨率进行编程, |
| CS | 片选。低电平有效逻辑输入。 CS保持低电平时,器件使能。 |
| SOE | 串行输出使能。逻辑输入。该引脚使能并行或串行接口。 SOE引脚保持低电平时,选择串行接口; SOE引脚保 持高电平时,选择并行接口。 |
| SAMPLE | 采样结果。逻辑输入。 SAMPLE信号发生高电平至低电平转换后,数据从位置和速度积分器传输到位置和速度寄存器,故障寄存器也会进行更新。(与初始化上电有关) |
| RESET | 复位。逻辑输入。 AD2S1210需要一个外部复位信号使RESET输入保持低电平,直到VDD达到规定的工作电压范围4.75 V至5.25 V以内。 |
| A0 | 模式选择0。逻辑输入。 |
| A1 | 模式选择1。逻辑输入。 |
| RES0 | 分辨率选择0。逻辑输入。利用RES1和RES0,可以对AD2S1210的分辨率进行编程, |

4、旋变信号格式

旋变的电信号如下

5、使用过程只是要点分析

5.1、程序注意点分析

5.1.1、SPI配置时序

本次SPI采用的是S32K3x系列的芯片实现的,先将SPI的时序列举出来再描述坑点。

|-----------------|-----------|
| 属性 | 描述 |
| 波特率 | 5MHZ |
| CS空闲状态 | Low |
| 数据转换边沿 CPHA =1 | 下降沿,第二个边沿 |
| 时钟空闲状态 CPOL = 0 | Low |
| 数据传输宽度 | 8bit |
| 数据传输方向 | MSB |

配置参考图

5.1.2、问题一:SPI时序问题

一定要注意CPOL = 0、CPHA =1当这一项配置有问题的时候,A0 = 1,A1=1的配置模式下会出现读取的SPI数据D7位一直为1,也就是最终数据为0x80,如下图所示。

错误时序如下

上述时序乍一看与手册里面描述是一致的,但是手册图示有个坑点的,注意时钟与片选低电平的位置 ,正确理解是时钟开始的时候是低电平,不是高电平,数据转换在上升沿也就是前沿,数据读取在后沿也就是下降沿,千万别被迷惑了。注意如下图所示。

正常时序如下

5.1.3、问题二:SPI读取时序(配置模式)

读取数据的时候注意点有以下两个,**1、SPI传输需要先将OLD DATA传出来。2、读取只能以8bit传输一次,不能通过SPI一次读取n个字节的方式。**下图串行接口读取时序---配置模式里面有明确指示。

伪代码如下

#define Register1   	0x88
#define Register2		0x89
#define Register3   	0x8A
#define Register4		0x8B
#define Register5   	0x8C
#define Register6		0x8D
(void)ReadAD2S1210(Register1);	/*将OLD DATA传出来不要,所以void了函数*/
For(i = 0; i<6;i++)
{
if(i <5)
{
Buff[i] = ReadAD2S1210(Register_i); /*正常读取0-5寄存器数据*/
}
else
{
 Buff[i] = ReadAD2S1210(Register1);  /*将Register6数据传出来*/
}
}

5.1.4、问题三:SPI写入时序(配置模式)

写入时序与读取时序类似只是以16bit为一次串口数据传输,一定要注意传入的值第一次是无效的。

5.1.5、问题四:初始化问题

初始化是有严格的时序的,如果没有正确控制上电复位时序,可能会导致位置指示不正确。

初始化时序图如下

正常通过逻辑分析仪测试出来的波形如下图,注意一下tTRACK,这个时间参数很重要,直接影响了采样分辨率。

5.1.6、问题五:SAMPLE管脚

采样管脚的下降沿用于锁存位置,产生下降沿之后,只有用SPI读取了位置信息才会再次进行更新。

5.1.7、问题六:故障寄存器0xFF、复位寄存器0xF0

故障寄存器0xFF与复位寄存器0xF0是例外,故障寄存器0xFF不遵从问题二,复位寄存器0xF0问题三的规则,故障寄存器只需要用读取8bit数据0xFF即可实现读取故障,复位寄存器只需要写入8bit数据0xF0即可实现复位。

5.1.8、问题七:普通模式

普通模式下,通过IO口A0与A1进行设置的,如下图选择

普通模式下输出速度或者位置信息,包含故障信息,此时无需写入寄存器地址,通过SPI的读取函数传输16bit的任意数据得到的是速度或者位置信息,若是24bit的任意数据则是包含8bit的故障信息,一般来说使用16bit毕竟节省时间,DOS与LOT管脚会指示故障,当指示了故障再进入配置模式读取8bit的故障寄存器即可,毕竟故障只是少数时间内产生。

5.2、常见问题分析

5.2.1、变比问题

EXC+与EXC-两者属于差分信号,两者的峰峰值在项目里面一般是正负5V,通过变比出来的sin+-,cos+-应该在手册给定的范围内。

EXC+、 EXC-输出

给到AD2S1210的信号电压峰峰值应该在下图范围内,超过的话就会报警了。

在实际调试的时候一定要注意变比的问题。

5.2.2、削波故障

**问题描述**:削波故障通常是因为输入信号的单端信号低于0.15V或高于4.8V,导致芯片无法正确处理信号。

削波故障如下图

**解决方法**:确保输入信号的差分峰峰值在2.3V至4V之间。如果测量的峰峰值为2.4V,检查电路设计是否正确,确保信号在规定的范围内。

5.2.3、锁相故障

  • **问题描述**:锁相故障通常表现为角度值跳动范围大,可能由于激励信号滤波、旋转变压器或SIN/COS输入滤波器导致的延迟超出了44°。

  • **解决方法**:检查并调整激励信号滤波器的截止频率,确保其不会对信号造成过大的相移。如果系统中滤波器的截止频率对10KHz的信号相移过大,建议将截止频率放宽到50KHz左右,并进行实际仿真以观察延迟。

5.2.4、SPI通信故障

  • **问题描述**:在读取SPI数据时,与预期结果不符,可能由于时序问题或配置错误。

  • **解决方法**:检查SPI通信的时序设置,确保数据的读取和写入时序正确。如果问题依旧存在,检查GPIO配置是否正确,特别是采样保持次数的配置(针对DSP28335之类的芯片)。

5.2.5、故障寄存器读取问题

  • **问题描述**:在读取故障寄存器时,可能遇到读取数据不正确的情况。

  • **解决方法**:按照正确的时序和方法读取故障寄存器。例如,使用配置模式下读取故障寄存器,确保按照正确的步骤操作,如先写入控制寄存器地址,然后读取控制寄存器的值。参见5.1.3章节。

5.2.6、数据处理错误

  • **问题描述**:在处理从AD2S1210读取的数据时,可能出现数据处理错误。

  • **解决方法**:确保在软件中正确处理数据,包括位移操作和数据组合。例如,对于16位编码器分辨率,可能需要将高8位和低8位的数据组合成一个完整的16位数据。取出来的数据选择高位,别忘记移位操作。完整的16位数据。取出来的数据选择高位,别忘记移位操作。

5.2.7、硬件连接问题

  • **问题描述**:硬件连接错误或不稳固可能导致故障。

  • **解决方法**:检查所有硬件连接,包括旋转变压器的连接、AD2S1210的电源连接以及SPI通信接口的连接。确保所有连接正确无误,并且牢固可靠。

6、代码链接

此代码属于在网上搜集的,包含了官方的与GitHub上收藏量比较高的,代码很原始,查看其实现逻辑比较重要,里面有五个文件夹分别对应五个例子。

AD2S1210例程(官方与GitHub)

相关推荐
youcans_13 小时前
【动手学电机驱动】STM32-FOC(8)MCSDK Profiler 电机参数辨识
stm32·单片机·嵌入式硬件·电机控制·foc
做一道光2 天前
八、无刷电机电压电流温度采集
单片机·嵌入式硬件·电机控制
初心不忘产学研1 个月前
如何对物理系统进行数学建模?
算法·数学建模·电机控制·双惯量旋转系统·简化数学模型·数学建模方法·负载工艺建模
别问,问就是全会2 个月前
FOC矢量控制
电机控制·svpwm·foc·bldc
LabVIEW开发2 个月前
LabVIEW回转马达试验系统
labview·电机控制
烦恼归林4 个月前
电机控制杂谈——以袁雷老师滑模控制模型为例子,如何搭建准确的电机仿真模型
matlab·电机·电力电子·电机控制·永磁同步电机
朴人4 个月前
【从零开始实现stm32无刷电机FOC】【理论】【3/6 位置、速度、电流控制】
stm32·单片机·嵌入式硬件·电机控制·foc
shadow3D5 个月前
嵌入式PID算法总结
嵌入式·pid·电机控制·cmsis-dsp·温度控制
初心不忘产学研5 个月前
软件方案评审与模块优化:从FOC模块出发的电控平台建设
产品运营·团队开发·电机控制·控制算法·软件方案·模块优化·软件平台