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

ops/2024/9/19 11:05:51/ 标签: 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)


http://www.ppmy.cn/ops/112989.html

相关文章

【SQL】百题计划:SQL判断条件OR的使用。

【SQL】百题计划-20240912 Select name, population, area from World where area>3000000 or population > 25000000;

Python “字符串操作” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业

本文主要是作为Python中列表的一些题目&#xff0c;方便学习完Python的元组之后进行一些知识检验&#xff0c;感兴趣的小伙伴可以试一试&#xff0c;含选择题、判断题、实战题、填空题&#xff0c;答案在第五章。 在做题之前可以先学习或者温习一下Python的列表&#xff0c;推荐…

【论文阅读】FedABC: Targeting Fair Competition in Personalized Federated Learning

论文链接&#xff08;AAAI2023&#xff09; 文章解决的问题主要是NO-IID问题。 文章的方法包括几个关键的技术和策略&#xff0c;具体如下&#xff1a; 二元分类框架&#xff1a; FedABC利用二元分类的训练策略来解决每个类别的个性化问题。这意味着对于每个类别都训练一个独立…

uniapp中使用picker-view选择时间

picker-view 是 UniApp 中用于展示和选择数据的组件。它适用于创建多列选择器&#xff0c;类似于 iOS 和 Android 系统中的选择器视图。以下是 picker-view 的详细介绍&#xff0c;包括用法、属性和事件。 一 用法 <template><view><picker-view :value"…

Phoenix使用

Phoenix Hbase适合存储大量的对关系运算要求低的NOSQL数据&#xff0c;受Hbase 设计上的限制不能直接使用原生的API执行在关系数据库中普遍使用的条件判断和聚合等操作。Hbase很优秀&#xff0c;一些团队寻求在Hbase之上提供一种更面向普通开发人员的操作方式&#xff0c;Apach…

springbootadmin源码编译修改001_node版本管理工具nvm_任意切换node版本_没有成功记录过程---VUE工作笔记0026

由于项目需要对springbootadmin的源码进行编译和修改. 但是springbootadmin的源码编译很麻烦,主要是由于,springbootadmin-server-ui这个项目,因为他是一个前后端分离的 vue项目,而且是使用 https://github.com/coreybutler/nvm-windows/releases/tag/1.1.12 首先去下载,发…

深度学习的笔记

1. 从huggingface上仅下载pytorch模型权重和配置文件到服务器 import os import shutil from huggingface_hub import snapshot_download# 直接指定模型和下载路径 model_name openai/clip-vit-base-patch32 download_path /home/xxx/.cache/huggingface/hub/models--anas-a…

云计算实训50——Kubernetes基础命令、常用指令

一、Kubernetes 自动补齐 # 安装自动补齐软件 [rootmaster ~]# yum -y install bash-completion # 临时开启自动补齐功能 [rootmaster ~]# source # 永 久开启自动补齐功能 [rootmaster ~]# echo "source > ~/.bashrc 二、Kubernetes 基础命令 kubectl [command] …

开思通智网-科技快报20240912:人工智能辅助实现复杂糖苷分子检测

【本周新进展】 人工智能辅助实现复杂糖苷分子检测 https://news.sciencenet.cn/htmlnews/2024/9/529548.shtm IFA2024|元鼎智能推出全新“真智能”泳池机器人 https://tech.gmw.cn/2024-09/07/content_37548570.htm 马斯克宣称的“最强AI训练系统”上线 https://news.science…

产品经理学习笔记

写在前面的话 产品经理从业者的期待与迷茫 产品经理--这个号称入门容易、得道难的职业&#xff0c;随着移动互联网的快速扩张&#xff0c;发展通道已经趋于成熟&#xff0c;再不是那个野蛮生长、群星闪耀的时代了。也因此&#xff0c;行业内的产品经理普遍非常迷茫&#xff0…

Mistral AI 又又又开源了闭源企业级模型——Mistral-Small-Instruct-2409

就在不久前&#xff0c;Mistral 公司在开源了 Pixtral 12B 视觉多模态大模型之后&#xff0c;又开源了自家的企业级小型模型 Mistral-Small-Instruct-2409 &#xff08;22B&#xff09;&#xff0c;这是 Mistral AI 最新的企业级小型模型&#xff0c;是 Mistral Small v24.02 的…

使用Docker部署WordPress

今天我们在阿贝云的免费服务器上进行WordPress的部署测试。阿贝云提供的免费云服务器真是不错&#xff0c;配置为1核CPU、1G内存、10G硬盘和5M带宽&#xff0c;完全足够进行小型项目的开发与测试。这样的性能表现让人惊喜&#xff0c;适合各种开发者尝试新技术。接下来&#xf…

PMP--一模--解题--161-170

文章目录 13.干系人管理161、 [单选] 项目经理正在领导一个公司内部项目&#xff0c;该项目正处于早期阶段。该项目与一年前结束的另一个项目很相似&#xff0c;项目经理该做什么来分析涉及的干系人&#xff1f; 10.沟通管理162、 [单选] 在项目执行过程中&#xff0c;一位关键…

Oracle(126)如何使用闪回表(Flashback Table)?

Oracle数据库的闪回表&#xff08;Flashback Table&#xff09;功能允许你将一个或多个表恢复到过去的某个时刻&#xff0c;而不需要进行复杂的恢复操作。这是一个非常有用的功能&#xff0c;特别是在处理误删除数据或需要查看表在过去某一时刻的状态时。使用闪回表功能&#x…

数据结构——二叉树的介绍

1.树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#xff0c;称为根结点&a…

重放攻击(Replay Attack)与DDoS攻击简介及区别

重放攻击&#xff08;Replay Attack&#xff09;与DDoS攻击简介及区别 1. 重放攻击 简介&#xff1a;攻击者截获合法通信数据并重发&#xff0c;以伪装成用户执行未经授权的操作。目标&#xff1a;伪造身份或篡改交易。机制&#xff1a;攻击者重发数据包&#xff0c;使系统误…

html+css+js网页设计 旅游 龙门石窟8个页面

htmlcssjs网页设计 旅游 龙门石窟8个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#…

Python燃烧废气排放推断算法模型

&#x1f3af;要点 宏观能耗场景模型参数化输入数据&#xff0c;分析可视化输出结果&#xff0c;使用场景时间序列数据模型及定量和定性指标使用线图和箱线图、饼图、散点图、堆积条形图、桑基图等可视化模型输出结果根据气体排放过程得出其时间序列关系&#xff0c;使用推断模…

uniapp小程序中开启微信位置权限的步骤

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…

Hive parquet表通过csv文件导入数据

1. background 已建好了 hive parquet 格式的表, 需要从服务器的csv导入数据至该hive表 2. step 提前上传csv至服务器 /path/temp.csv 创建 textfile 格式的中转表(这里使用内部表,方便删除) ,源表名dw_procurement.dwd_tc_comm_plant ,这里中转表加上了csv后缀 CREATE TA…