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

devtools/2024/9/19 11:32:18/ 标签: 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/devtools/113198.html

相关文章

大数据新视界 --大数据大厂之MongoDB与大数据:灵活文档数据库的应用场景

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【Gateway】网关服务快速上手

微服务的接口都是直接对外暴露的,可以直接通过外部访问,为了保证对外服务的安全性服务端实现的微服务接口通常都带有一定的权限校验机制,由于使用了微服务,原本一个应用的的多个模块拆分成了多个应用,我们不得不实现多次校验逻辑,当这套逻辑需要修改时,我们需要修改多个应用,加…

.Net Gacutil工具(全局程序集缓存工具)使用教程

GAC介绍&#xff1a; GAC&#xff08;Global Assembly Cache&#xff09;全局程序集缓存&#xff0c;是用于存放.Net应用程序共享的程序集。 像平常我们在Visual Studio中引用系统程序集时&#xff0c;这些程序集便来自于GAC。 GAC默认位置为&#xff1a;%windir%\Microsoft…

自动驾驶自动泊车场景应用总结

自动泊车技术是当前智能驾驶技术的一个重要分支,其目标是通过车辆自身的感知、决策和控制系统,实现车辆在有限空间内的自主泊车操作。目前自动泊车可分为半自动泊车、全自动泊车、记忆泊车、自主代客泊车四种产品形态,其中, 根据搭载传感器和使用场景的不同,全自动泊车又可…

Maven从入门到精通(二)

一、什么是pom.xml pom.xml是Maven项目的核心配置文件&#xff0c;它是 项目对象模型 - Project Object Model&#xff08;POM&#xff09;的缩写。POM定义了项目的所有属性&#xff0c;包括项目的名称、版本、依赖关系、构建配置等。使用pom.xml&#xff0c;我们可以轻松地管…

场外期权合法吗?

今天期权懂带你了解场外期权合法吗&#xff1f;场外期权是指在场外市场进行交易的期权合约&#xff0c;而非在标准化交易所进行交易。这些期权合约通常由交易双方直接协商具体条款&#xff0c;包括到期时间、行权价格和标的资产等。 场外期权主要特点 1.定制化&#xff1a;OT…

Flink学习2

创建一个无界流 package com.qyt; import org.apache.flink.api.java.functions.KeySelector; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.datastream.Keye…

谷歌在在线展示广告技术上的垄断,Meta无法有效竞争

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

完美的宝塔面板防御策略,基于 fail2ban

之前分享过宝塔面板配合fail2ban&#xff0c;以及开启cloudflare的cdn双重防御的教程&#xff0c;并制作了便捷的脚本这次不靠cloudflare的减速cdn&#xff0c;看看防御效果怎么样 系统环境 debian/ubuntu nginx 宝塔面板 注意要点 1.在宝塔面板开启站点日志 2.添加服务器白名…

计算机毕业设计 大学志愿填报系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Matlab simulink建模与仿真 第十七章(补充离散库和补充数学库)

参考视频&#xff1a;simulink1.1simulink简介_哔哩哔哩_bilibili 一、补充离散库和补充数学库中的模块概览 1、补充离散库 注&#xff1a;每个版本的补充离散库不一定相同&#xff0c;也不是每个版本的库都有如上所有模块。 2、补充数学库 二、离散直接传递函数Ⅱ模块 1、…

百度移动刷下拉词工具:快速出下拉词的技术分析

都2024年了&#xff0c;你还在做SEO百度下拉&#xff1f;答案当然是肯定的&#xff0c;虽然百度的搜索流量不如从前&#xff0c;但移动端的流量依然是巨大的&#xff01;除了百度SEO快排以外&#xff0c;下拉也是一大流量入口&#xff0c;尤其是在移动端搜索的流量越来越大时&a…

react使用技巧

1搭建项目要看项目支持什么浏览器 通常是 vitereact18 2有些是需要小文件大小的 使用react小版本插件 有些需要支持ie11&#xff0c;建议webpack打补丁 3组件库的选择 比如antd有变量控制颜色 css in js 方便是方便 4路由的选择 一般是react-router-dom6 做动态路由我习惯是把路…

CPU 和 GPU:为什么GPU更适合深度学习?

目录 什么是 CPU &#xff1f; 什么是 GPU &#xff1f; GPU vs CPU 差异性对比分析 GPU 是如何工作的 &#xff1f; GPU 与 CPU 是如何协同工作的 &#xff1f; GPU vs CPU 类型解析 GPU 应用于深度学习 什么是 CPU &#xff1f; CPU&#xff08;中央处理器&#xff09;…

Spring Boot集成Akka Cluster实现在分布式节点中执行任务

1.写在前面 前面已经写过akka的很多文章了&#xff0c;具体如下&#xff1a; Spring Boot集成akka actor快速入门DemoSpring Boot集成Akka Stream快速入门DemoSpring Boot集成Akka remoting快速入门DemoSpring Boot集成Akka Cluster快速入门Demo 今天主要讲一下如何在一个ak…

Linux: network: IPv6: ESP: UDP checksum error 一例

文章目录 问题分析解决方法问题 最近遇到一个问题,操作系统的内核版本是:3.10.0-693.21.1.el7.x86_64 #1 SMP Wed Mar 7 19:03:37 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 使用的是virtio-net虚拟网卡,设置网卡的MTU-1500,配置IP6的地址,用ESP加密UDP包,如果UDP内部数…

Vue与React的Diff算法

虚拟DOM 定义 虚拟DOM是一种用于在前端开发中模拟真实DOM的技术。它是一种抽象的数据结构&#xff08;简单来说就是一个Javascript对象&#xff09;&#xff0c;用于描述HTML或XML文档的结构和内容。通过将页面的状态和结构保存在内存中&#xff0c;而不是直接操作真实的DOM&am…

OCR2.0--General OCR Theory

引领光学字符识别&#xff08;OCR&#xff09;的新篇章 引言&#xff1a;OCR技术进化的必要性 光学字符识别&#xff08;OCR&#xff09;是一项广泛应用的技术&#xff0c;它能够从图像中提取字符并将其转换为可编辑格式。虽然OCR-1.0在过去取得了广泛应用&#xff0c;但传统…

iOS的传递链与响应链机制

iOS的框架分为&#xff1a;应用层、触摸层、媒体层、核心服务层、核心系统操作层以及内核和驱动层。 详见https://blog.csdn.net/ScheenDuan/article/details/134274203?spm1001.2014.3001.5501 其中触摸事件涉及到触摸层中的UIKit中的UIResponse&#xff0c;只有继承了UIRe…

在Ubuntu 16.04上安装R的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 R 是一种流行的开源编程语言&#xff0c;专门用于统计计算和图形处理。它被广泛用于开发统计软件和进行数据分析。R 很容易扩展&a…