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

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何利用 ChatGPT 进行自动数据清理和预处理

推荐:使用 NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 ChatGPT 已经成为一把可用于多种应用的瑞士军刀,并且有大量的空间将 ChatGPT 集成到数据科学工作流程中。 如果您曾经在真实数据集上训练过机器学习模型,您就会知道数据清理和预…

novnc 和 vnc server 如何实现通信?原理?

参考:https://www.codenong.com/js0f3b351a156c/

随机微分方程

应用随机过程|第7章 随机微分方程 见知乎:https://zhuanlan.zhihu.com/p/348366892?utm_sourceqq&utm_mediumsocial&utm_oi1315073218793488384

复习3-5天【80天学习完《深入理解计算机系统》】第七天

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

Linux与bash(基础内容一)

一、常见的linux命令: 1、文件: (1)常见的文件命令: (2)文件属性: (3)修改文件属性: 查看文件的属性: ls -l 查看文件的属性 ls …

Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 摘要当前的检测sota模型网络架构swin Transformer和Vision Transformer的不同之处整体架构Patch Partition结构Linear Embedding结构Swin Transformer Block结构 Patch MergingW-MSAMSA模块计算量W-M…

Genoss GPT简介:使用 Genoss 模型网关实现多个LLM模型的快速切换与集成

一、前言 生成式人工智能领域的发展继续加速,大型语言模型 (LLM) 的用途范围不断扩大。这些用途跨越不同的领域,包括个人助理、文档检索以及图像和文本生成。ChatGPT 等突破性应用程序为公司进入该领域并开始使用这项技术进行构建铺平了道路。 大公司正…

如何发布自己的小程序

小程序的基础内容组件 text&#xff1a; 文本支持长按选中的效果 <text selectable>151535313511</text> rich-text: 把HTML字符串渲染为对应的UI <rich-text nodes"<h1 stylecolor:red;>123</h1>"></rich-text> 小程序的…

MySql过滤重复数据

假设模型表是: 1. 根据单字段过滤: SELECT user_name, COUNT(*) as count FROM sys_user GROUP BY user_name HAVING count > 1;结果: 2. 根据多个字段查询重复数据 SELECT user_name, email, COUNT(*) as count FROM sys_user GROUP BY user_name, email HAVING count…

[centos]设置主机名

1、设置 hostnamectl set-hostname 名字 2、查看是否生效 hostnamectl status 3、打开一个新链接就可以了

[python] 使用Jieba工具中文分词及文本聚类概念

前面讲述了很多关于Python爬取本体Ontology、消息盒InfoBox、虎扑图片等例子&#xff0c;同时讲述了VSM向量空间模型的应用。但是由于InfoBox没有前后文和语义概念&#xff0c;所以效果不是很好&#xff0c;这篇文章主要是爬取百度5A景区摘要信息&#xff0c;再利用Jieba分词工…

hive--给表名和字段加注释

1.建表添加注释 CREATE EXTERNAL TABLE test(loc_province string comment 省份,loc_city string comment 城市,loc_district string comment 区,loc_street string comment 街道,)COMMENT 每日数据处理后的表 PARTITIONED BY (par_dt string) ROW FORMAT SERDEorg.apache.had…

71 # 协商缓存的配置:通过内容

对比&#xff08;协商&#xff09;缓存 比较一下再去决定是用缓存还是重新获取数据&#xff0c;这样会减少网络请求&#xff0c;提高性能。 对比缓存的工作原理 客户端第一次请求服务器的时候&#xff0c;服务器会把数据进行缓存&#xff0c;同时会生成一个缓存标识符&#…

Transformer是什么,Transformer应用

目录 Transformer应用 Transformer是什么 Transformer应用:循环神经网络 语言翻译:注重语句前后顺序 RNN看中单个特征; CNN:看中特征之间时序性 模型关注不同位置的能力 Transformer是什么 Transformer是一个利用注意力机制来提高模型训练速度的模型。关于注意力机…

whisper语音识别部署及WER评价

1.whisper部署 详细过程可以参照&#xff1a;&#x1f3e0; 创建项目文件夹 mkdir whisper cd whisper conda创建虚拟环境 conda create -n py310 python3.10 -c conda-forge -y 安装pytorch pip install --pre torch torchvision torchaudio --extra-index-url 下载whisper p…

智慧工地云平台源码——塔机监控系统

智慧工地概念 智慧工地是一种崭新的工程全生命周期管理理念&#xff0c;是指运用信息化手段&#xff0c;通过对工程项目进行精确设计和施工模拟&#xff0c;围绕施工过程管理&#xff0c;建立互联协同、智能生产、科学管理的施工项目信息化生态圈&#xff0c;并将此数据在虚拟…

鸽王-稚晖君,“远征”A1启程

看到这篇文章的人&#xff0c;想必对野生钢铁侠-稚晖君&#xff0c;都有所了解。作为华为的天才少年&#xff0c;获得了很多的荣誉&#xff0c;作为B站有名的鸽王&#xff0c;在沉浮一段时间后终于要带着新的东西和大家见面了。动态-哔哩哔哩https://b23.tv/Jv7tIjg 众所周知&a…

网络通信原理TCP字段解析(第四十七课)

字段含义Source Port(源端口号)源端口,标识哪

vueuse常用方法

useDateFormat 时间格式化 <script setup lang"ts">import { useNow, useDateFormat } from vueuse/coreconst formatted useDateFormat(useNow(), YYYY-MM-DD HH:mm:ss)</script><template><div>{{ formatted }}</div> </templa…

大模型技术实践(一)|ChatGLM2-6B基于UCloud UK8S的创新应用

近半年来&#xff0c;通过对多款主流大语言模型进行了调研&#xff0c;我们针对其训练方法和模型特点进行逐一分析&#xff0c;方便大家更加深入了解和使用大模型。本文将重点分享ChatGLM2-6B基于UCloud云平台的UK8S实践应用。 01各模型结构及特点 自从2017年6月谷歌推出Transf…