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.pswp.cn/news/41339.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41339.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41339.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何利用 ChatGPT 進行自動數據清理和預處理

推薦:使用 NSDT場景編輯器助你快速搭建可二次編輯的3D應用場景 ChatGPT 已經成為一把可用于多種應用的瑞士軍刀,并且有大量的空間將 ChatGPT 集成到數據科學工作流程中。 如果您曾經在真實數據集上訓練過機器學習模型,您就會知道數據清理和預…

有沒有比讀寫鎖更快的鎖

在之前的文章中,我們介紹了讀寫鎖,學習完之后你應該已經知道了讀寫鎖允許多個線程同時訪問共享變量,適用于讀多寫少的場景。那么在讀多寫少的場景中還有沒有更快的技術方案呢?還真有,在Java1.8這個版本里提供了一種叫S…

Docker安裝Skywalking APM分布式追蹤系統

Skywalking是一個應用性能管理(APM)系統,具有服務器性能監測,應用程序間調用關系及性能監測等功能,Skywalking分為服務端、管理界面、以及嵌入到程序中的探針部分,由程序中的探針采集各類調用數據發送給服務端保存,在管…

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 …

神經網絡基礎-神經網絡補充概念-33-偏差與方差

概念 偏差(Bias): 偏差是模型預測值與實際值之間的差距,它反映了模型對訓練數據的擬合能力。高偏差意味著模型無法很好地擬合訓練數據,通常會導致欠擬合。欠擬合是指模型過于簡單,不能捕捉數據中的復雜模式…

基于java在線讀書與分享論壇設計與實現

摘 要 互聯系統的技術在如今的社會中,應用的越來越廣泛,通過互聯系統我們可以更方便地進行辦公,也能夠在系統上就能處理很多日常的事務。互聯系統的技術的發展,也是人們日常中接觸更多的一項技術。隨著互聯系統的發展,…

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…

學習Vue:Vue3 VS Vue2

Vue 3作為Vue.js的最新版本,帶來了一系列令人激動的新特性和改進,讓開發者們在構建現代Web應用時體驗更加順暢和高效。本文將全面介紹Vue 3相對于Vue 2的改進,重點解釋Composition API的使用,以及新引入的Teleport和Suspense等特性…

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、打開一個新鏈接就可以了

log4j教程_編程入門自學教程_菜鳥教程-免費教程分享

教程簡介 Log4j是Apache的一個開源項目&#xff0c;通過使用Log4j&#xff0c;我們可以控制日志信息輸送的目的地是控制臺、文件、GUI組件&#xff0c;甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等&#xff1b;我們也可以控制每一條日志的輸出格式&#xff1b;…

[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…

學習Vue:響應式原理與性能優化策略

性能優化是Vue.js應用開發中的一個關鍵方面&#xff0c;而深入了解響應式原理并采用有效的性能優化策略可以顯著提升應用的性能。本文將解釋響應式原理并介紹一些性能優化策略&#xff0c;旨在幫助您構建高性能的Vue.js應用。 響應式原理 Vue.js的響應式原理是通過利用Object.…

PHP在線客服系統推薦

在當今數字化時代&#xff0c;企業客戶服務的重要性不容忽視。為了提供卓越的客戶體驗&#xff0c;許多企業正在尋找PHP在線客服系統。這種系統不僅可以滿足客戶的需求&#xff0c;還能提升企業的形象。本文將深入探討PHP在線客服系統的一些有趣話題。 理解PHP在線客服系統 PHP…