ADIS16470和ADIS16500从到手到读出完整数据,附例程

由于保密原因,不能上传我这边的代码,我所用的开发环境是IAR, 下边转载别的博主的文章,他用的是MDK
下文的博主给了你一个很好的思路,特此提出表扬
最下方是我做的一些手册批注,方便大家了解这个东西

原文链接:https://blog.csdn.net/wmdscjhdpy/article/details/111288961

前言

本文章本来是作为ADIS16470的测评报告的,写于2018年,近期整理数据的时候发现这篇文章,而与此同时网上还没有太多的相关的资料,因此整理一下发到本博客上。鉴于当时水平不足,完成度只做到了驱动起来读出简单整理的数据。例程见github:项目链接
另外由于传感器比较新,基本上主要资料都是来源于datasheet,下文中大量图片也是引用datasheet,如有需要可以先行下载datasheet再跟着思路走可能会更清晰一些:数据手册下载地址数据手册下载地址
附当时使用的评测板子图:
16470
在这里插入图片描述
在这里插入图片描述

16500
在这里插入图片描述

评测正文

基本程序设置与电路搭建

通过数据手册可以知道,ADIS16470是通过SPI的方式来与主设备的通信的,组成SPI通信需要CLK时钟线,MOSI输出线,MISO输入线与NSS片选线。我手头上就只有一个STM32F439IGT6核心板,所以我的工程选用了该板来建立工程。
在STM32CubeMX中建立STM32F439IGT6的工程后,建立工程后首先设定好时钟频率和调试方式,然后启用一个SPI和一个普通GPIO作为NSS片选线,如图:
在这里插入图片描述

然后是配置SPI和GPIO方式,作为SPI信号线,GPIO建议设置为开漏输出模式
SPI的配置方式要根据数据手册来决定,查阅数据手册可以发现,CPOL应为1,CPHA应为1,在Cube中即设置Polarity=HIGH, Phase=2Edge(这个问题在刚开始弄的时候一不小心弄错了 折腾了很久才弄出来)。同时因为ADIS16470传输数据是以16bits为一个单位的,可以在Cube中设置SPI的Data Size=16。然后还要调整SPI的Prescaler以降低波特率以保证不超过2Mb/s(使用BurstRead时不能超过1Mb/s)
在这里插入图片描述

当以上配置都完成之后可以生成工程,然后根据陀螺仪的数据手册中的引脚定义,进行核心板和陀螺仪的接线。这里有一点其实我听迷惑的,就是这里J1的序号并不是从上到下排序的,而是按照行来进行编号的,这一点大家要注意,别一不小心误操作就把这贵重的陀螺仪给烧了!上千块的玩意
在这里插入图片描述

以BurstRead方式读取原始数据

该陀螺仪的读取数据的方式有很多种,而BurstRead就是其中一种方式,它的特点是读取简单,连续读取,一步到位获得三轴加速度和三轴角速度值。在对精度要求不是很高要求快速上手的情况下,BurstRead方式是一个不错的选择。
在这里插入图片描述

查阅技术手册可以得到BurstRead方式的操作时序图,在启动的时候将CS线拉低,随后发送一个字0x6800,然后连续读取SPI数据,就能得到按照一定顺序排列的传感器数据了。
根据数据手册上数据的排列,可以定义一个结构体用于存放数据:
在这里插入图片描述

然后就可以在程序中做一个循环读取,读取前先发BurstRead前置指令,然后将剩下读到的数据放到结构体内即可。为了保证数据可靠性,每一帧数据都存在一个校验字节可用于保证帧完整性和可靠性。在每次接收完完整的一帧之后,可以进行数据校验,仅当校验成功时保留数据。以下为读取出来的传感器值(原始数据值):
在这里插入图片描述

通过单独读取寄存器来获得传感器数据

在大部分时候,BurstRead可以满足基本上的需求,可是ADIS16470拥有更精准的32位精度的数据,在我们有更高要求的时候,通过读取其寄存器可以得到非常高的精度的传感器数据。
下图则为其角速度的32位数据精度,为655360LSB每度每秒,可以说是十分吓人了:
在这里插入图片描述

所以,当我们有高精度需求的时候,就需要单独的去读取它的寄存器了。读取寄存器的时序如下:
在这里插入图片描述

可以看到,每次发送需要读取的寄存器的时候,读取结果会在SPI传输的下一个时序中返回。为了提高读取效率,可以将需要读取的寄存器地址连续发送,然后在接收时加上偏移即可。
在读取完毕之后,将两个16位数据合成一个32位的数据(根据手册,按照小端模式,低位低地址高位高地址合并),这样就得到了32位的原始数据。仅仅得到原始数据还不够,根据如上图的表格得到原始数据到标准单位的关系进行换算,最终得到三轴角速度以及三轴加速度值。

在这里插入图片描述

在取到三轴角速度和三轴加速度后,我们还有一个经常使用的值,就是三轴的姿态角。很多时候对于普通陀螺仪我们都是直接取速度的积分作为角度值,这样存在一定的偏差。为了解决积分的准确度,ADIS16470还提供了角度差数据。这个数据提供一定时间区间内的角度差,默认值为1/2000秒的角度差。在做机器人控制系统的时候,我们一般不需要用到这么高的数据频率,因此我们需要提高积分的时间,即降低数据频率。ADIS16470中提供了一个寄存器用来控制积分时间,如果这个寄存器为x的话,数据频率就为2000/(x+1)Hz。该寄存器的默认值为0,所以默认频率为2000Hz。在控制系统的用途中,我们把数据频率控制到500Hz就可以获得较佳的控制效果了。因此我们需要写入该寄存器为0x03把积分时间提升到1/500s。
在这里插入图片描述

当我们的控制周期为500Hz时,每次读取角度差值并进行积分,此时积分的结果就是较为精确的角度值,不会因为控制频率的降低而损失精度。 最终的所有数据如下:
在这里插入图片描述

简单的数据处理
从刚刚我们已经得到了所有的数据,不过数据还是不大稳定,这时候还需要做一些处理。
在这里插入图片描述

陀螺仪由于其硬件限制,会存在零点漂移,也就是说当真实的某轴角速度为0的时候,其输出的值并不是0而是一个接近0的数,也就是说它的零点发生了偏移。ADIS16470内部提供了零点校准的寄存器值,其工作的原理如下:

在这里插入图片描述

也就是说,确定好了合适的零点偏移量后,每次陀螺仪的数据都会经过偏移量的修正从而得到较为准确的数据。一般常用确定零点漂移量的方法是在程序启动的一段时间内保持陀螺仪不发生运动,采集一段时间的数据,然后用得到的角度除以自检的时间得到偏移角速度,然后将其取负号作为零点漂移修正值。在进行零点修正后,陀螺仪就能读出更稳定的数据了。
当然影响陀螺仪的准确度的因素远不止这一种,还有很多诸如随机漂移,高频振动等各种影响陀螺仪准确度的因素,不过因为ADIS16470的各个方面的性能都很出色,把像随机漂移和高频振动带来的偏移这种较难处理的误差降到很低,所以简单处理就能得到较好的数据。除了零点修正外,ADIS16470还内置了巴特沃斯滤波器,可以根据需求通过配置寄存器可以开启滤波器得到更准确的数据。如果还需要更精确的数据还可以考虑数据融合算法,在此不再赘述。

关于细节可以参考我做的一些批注,用的是16500,如下

https://download.csdn.net/download/weixin_44057803/88226636

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
其实16470的手册我感觉比16500更专业,而且解释更专业

下边这个16500手册都写错了

在这里插入图片描述
在这里插入图片描述

按照下边这个给的算就知道是52428800=2,097,152,000/40

在这里插入图片描述

这个也不对,默认值是C1,下边却说是0

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/77711.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 函数

mysql 函数语法 create function 函数名(参数名 参数类型,。。。) returns type —返回值类型 ----returns 有个 s [characteristics…] begin 函数体 ### 函数体中肯定有 return 语句 end 参数列表 指定参数为 IN | out | INOUT 只对存储过程…

【NAS群晖drive异地访问】使用cpolar远程访问内网Synology Drive「内网穿透」

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 前言 群晖作为专业的数据存储中心&…

空气IT

现代社会中,空气质量成为了人们关注的焦点之一。随着工业化的发展,汽车尾气、工厂排放和燃煤等行为导致城市空气污染日益严重,给人们的健康和生活质量带来了极大的威胁。 首先,空气污染对人体健康造成了严重的危害。空气中的颗粒…

分布式 - 消息队列Kafka:Kafka生产者架构和配置参数

文章目录 1. kafka 生产者发送消息整体架构2. Kafka 生产者重要参数配置01. acks02. 消息传递时间03. linger.ms04. buffer.memory05. batch.size06. max.in.flight.requests.per.connection07. compression.type08. max.request.size09. receive.buffer.bytes和 send.buffer.b…

解读2023年上半年财报:净利润达11.08亿元,东鹏做对了什么?

“累了、困了,喝东鹏特饮”,这句朗朗上口的广告词是很多人对于功能性饮料的第一印象。而这句经典广告词背后的公司便是如今发展如日中天的东鹏饮料。近些年,东鹏饮料凭借快准狠的营销、推广打法,迅速在功能性饮料市场攻城略地&…

Linux:shell脚本:基础使用(4)《正则表达式-grep工具》

正则表达式定义: 使用单个字符串来描述,匹配一系列符合某个句法规则的字符串 正则表达式的组成: 普通字符串: 大小写字母,数字,标点符号及一些其他符号 元字符:在正则表达式中具有特殊意义的专用字符 正则表…

易服客工作室:UberMenu WordPress插件 - 网站超级菜单插件

UberMenu WordPress插件是一个用户友好、高度可定制、响应迅速的 Mega Menu WordPress 插件。它与 WordPress 3 菜单系统一起开箱即用,易于上手,但功能强大,足以创建高度定制化和创意的大型菜单配置。 网址: UberMenu WordPress插件 - 网站超…

【Git】(三)回退版本

1、git reset命令 1.1 回退至上一个版本 git reset --hard HEAD^ 1.2 将本地的状态回退到和远程的一样 git reset --hard origin/master 注意:谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。HEAD 说明:HEAD 表示当前版本HEAD^ 上…

《内网穿透》无需公网IP,公网SSH远程访问家中的树莓派

文章目录 前言 如何通过 SSH 连接到树莓派步骤1. 在 Raspberry Pi 上启用 SSH步骤2. 查找树莓派的 IP 地址步骤3. SSH 到你的树莓派步骤 4. 在任何地点访问家中的树莓派4.1 安装 Cpolar内网穿透4.2 cpolar进行token认证4.3 配置cpolar服务开机自启动4.4 查看映射到公网的隧道地…

如何使用SpringBoot 自定义转换器

😀前言 本篇博文是关于SpringBoot 自定义转换器的使用,希望你能够喜欢😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的…

数据链路层

数据链路层和网络层的对比 如果说网络层实现的是路由的功能,那么数据链路层就是实打实的实现具体的传输。 就像导航,网络层告诉我们下一步该去哪个主机,而数据链路层则是实现去下一个主机的方法。 网络层的IP地址告诉我们目的地在哪里&#x…

PostgreSQL-UDF用户自定义函数-扩展插件

PostgreSQL-UDF用户自定义函数-扩展插件 零、前置条件 ggcpostgresql 一、创建 .c 和 .sql 文件 创建.c文件 进入PG源码的contib/目录下面,这个目录下面都是用于PG进行功能扩展的插件。创建我们的插件(UDF同义词:插件;扩展&a…

gitee(码云)如何生成并添加公钥,以及配置用户信息

一,简介 在使用Gitee的时候,公钥是必须的,无论是克隆还是上传。本文主要介绍如何本地生成和添加公钥到服务器,然后配置自己的用户信息,方便日后拉取与上传代码。 二,步骤介绍 2.1 本地生成公钥 打开git ba…

【SpringBoot】| 接口架构风格—RESTful

目录 一:接口架构风格—RESTful 1. 认识RESTful 2. RESTful 的注解 一:接口架构风格—RESTful 1. 认识RESTful (1)接口 ①接口: API(Application Programming Interface,应用程序接口&…

Django的简介安装与配置及两大设计模式

一.Djang的介绍 1.Django是什么 Django 是使用 Python 语言开发的一款免费而且开源的 Web 应用框架。 由于 Python 语言的跨平台性,所以 Django 同样支持 Windows、Linux 和 Mac 系统。 在 Python 语言炽手可热的当下,Django 也迅速的崛起,在…

文件的导入与导出

文章目录 一、需求二、分析1. Excel 表格数据导出2. Excel 表格数据导入一、需求 在我们日常开发中,会有文件的导入导出的需求,如何在 vue 项目中写导入导出功能呢 二、分析 以 Excel 表格数据导出为例 1. Excel 表格数据导出 调用接口将返回的数据进行 Blob 转换,附: 接…

【LangChain】P1 LangChain 应用程序的核心构建模块 LLMChain 以及其三大部分

LangChain 的核心构建模块 LLMChain LangChain 应用程序的核心构建模块语言模型 - LLMs提示模板 - Prompt templates输出解析器 - Output Parsers LLMChain 组合 LangChain 应用程序的核心构建模块 LangChain 应用程序的核心构建模块 LLMChain 由三部分组成: 语言…

前端原生写自定义旋转变换轮播图

html部分&#xff1a; <div class"banner_box"><div class"swiperWrapper" v-show"bannerList.length>0"><div class"swiper-item" :id"swiperSlide${index}" :class"{active:index0,next:index1,pr…

深度学习实战基础案例——卷积神经网络(CNN)基于SqueezeNet的眼疾识别|第1例

文章目录 前言一、数据准备1.1 数据集介绍1.2 数据集文件结构 二、项目实战2.1 数据标签划分2.2 数据预处理2.3 构建模型2.4 开始训练2.5 结果可视化 三、数据集个体预测 前言 SqueezeNet是一种轻量且高效的CNN模型&#xff0c;它参数比AlexNet少50倍&#xff0c;但模型性能&a…

Springboot写单元测试

导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintag…