RK3568 android11 調試陀螺儀模塊 MPU6500

一,MPU6500功能介紹

1.簡介

MPU6500是一款由TDK生產的運動/慣性傳感器,屬于慣性測量設備(IMU)的一種。MPU6500集成了3軸加速度計、3軸陀螺儀和一個板載數字運動處理器(DMP),能夠提供6軸的運動數據。這些數據包括加速度和角速度,分別對應于x, y, z軸。

MPU6500的接口類型包括I2C和SPI,支持數字輸出。它可以通過I2C或SPI接口與單片機或其他電子設備進行通信,以獲取設備的狀態和數據。此外,MPU6500還支持SPI通信模式,這使得其在某些應用中更為靈活。

2.性能與應用

性能方面,MPU6500具有較高的功耗效率和較小的封裝尺寸,實現了業內領先的消費類陀螺儀性能。它還在加速計噪聲、偏置和靈敏度方面進行了重大改進,進一步提升了其實用性和可靠性。

MPU6500被廣泛應用于多種應用程序中,如飛控系統、機器人、可穿戴設備等,特別是在需要高精度運動數據的場合。例如,有報道提到,大疆精靈3的飛控IMU就是采用了InvenSense的MPU6500芯片,顯示出其在實際應用中的廣泛適用性和良好性能。

總的來說,MPU6500是一款功能強大且性價比高的MEMS運動跟蹤設備,適用于各種需要精確運動數據的應用場景。
在這里插入圖片描述


二,dts配置

pmu6500通過I2C與CPU連接,使用I2C觸摸的接口(VCC,GND,SCL,SDA,INT)。
在這里插入圖片描述

&i2c1 {status = "okay";mpu6500_acc: mpu_acc@68 {compatible = "mpu6500_acc";// 與mpu6500_acc.c定義匹配reg = <0x68>;irq-gpio = <&gpio0 RK_PB5 IRQ_TYPE_EDGE_RISING>;//中斷腳irq_enable = <0>;poll_delay_ms = <30>;type = <SENSOR_TYPE_ACCEL>;//傳感器類型layout = <5>;};mpu6500_gyro: mpu_gyro@68 {compatible = "mpu6500_gyro";//與mpu6500_gyro.c定義匹配reg = <0x68>;poll_delay_ms = <30>;type = <SENSOR_TYPE_GYROSCOPE>;//傳感器類型layout = <5>;};
};

三,驅動文件配置

1.源程序

kernel/drivers/input/sensors/accel/mpu6500_acc.c
kernel/drivers/input/sensors/gyro/mpu6500_gyro.c

mpu6500_acc.c是g-sensor驅動用來系統轉屏,另外一個mpu6500_gyro.c是陀螺儀驅動。

2.內核中加載驅動

CONFIG_MPU6500_ACC=y
CONFIG_GYRO_MPU6500=y

3.內核日志信息

編譯內核燒錄鏡可看到以下打印日志,則說明驅動加載成功并識別到設備。

rk3568:/ # dmesg | grep mpu6500
[    2.792117] gsensor_mpu6500 1-0068: sensor_register_device: mpu6500_acc, id = 29
[    2.792143] i2c i2c-1: sensor_probe: mpu6500_acc,00000000271b25e0
[    2.792190] gsensor_mpu6500 1-0068: sensor_chip_init:mpu6500_acc:devid=0x0,ops=0x000000007868205c
[    2.988057] gsensor_mpu6500 1-0068: sensor_irq_init:use polling,delay=30 ms
[    2.988177] gsensor_mpu6500 1-0068: sensor_misc_device_register:miscdevice: mma8452_daemon
[    2.988188] gsensor_mpu6500 1-0068: sensor_probe:initialized ok,sensor name:mpu6500_acc,type:2,id=29\x0a
[    5.148660] gyro_mpu6500 1-0068-1: sensor_register_device: mpu6500_gyro, id = 58
[    5.148676] i2c i2c-1: sensor_probe: mpu6500_gyro,0000000057dfc117
[    5.148703] gyro_mpu6500 1-0068-1: sensor_chip_init:mpu6500_gyro:devid=0x0,ops=0x000000000c6bf3bd
[    5.231839] gyro_mpu6500 1-0068-1: sensor_irq_init:use polling,delay=30 ms
[    5.232065] gyro_mpu6500 1-0068-1: sensor_misc_device_register:miscdevice: gyrosensor
[    5.232090] gyro_mpu6500 1-0068-1: sensor_probe:initialized ok,sensor name:mpu6500_gyro,type:4,id=58\x0a
[   26.143380] gsensor_mpu6500 1-0068: set sensor poll time to 66ms
[   26.227813] gsensor_mpu6500 1-0068: sensor on: starting poll sensor data 62ms

四,系統配置

1.Android 中的 sensor 相關宏配置

需要修改Android編譯設備配置,添加加速度計和陀螺儀的支持。
BoardConfig.mk中:

BOARD_GRAVITY_SENSOR_SUPPORT := true
BOARD_COMPASS_SENSOR_SUPPORT := false
BOARD_GYROSCOPE_SENSOR_SUPPORT := true
BOARD_PROXIMITY_SENSOR_SUPPORT := false
BOARD_LIGHT_SENSOR_SUPPORT := false
BOARD_PRESSURE_SENSOR_SUPPORT := false
BOARD_TEMPERATURE_SENSOR_SUPPORT := false
BOARD_USB_HOST_SUPPORT := true

支持哪些類型的 sensor,如果沒有,要配置成 false,否則 vts 和 cts 測試會失敗。

2.啟用自動旋轉功能,加速度計旋轉功能

frameworks/base/core/res/res/values/config.xml:
<bool name="config_supportAutoRotation">true</bool>frameworks/base/packages/SettingsProvider/res/values/defaults.xml:
<bool name="def_accelerometer_rotation">true</bool>

3.編譯燒錄

編譯固件燒錄后,正常情況下MPU-6500已經調試完成,進入系統打開設置--顯示--自動旋轉屏幕,此時轉動陀螺儀,系統方向會跟隨陀螺儀的方向轉動。

加速度和陀螺儀測試:
使用Sensor Sense軟件來測試傳感器的數據:
在這里插入圖片描述
重力變化測試,翻轉傳感器模塊,可看到重力曲線隨之變化。


五,調試

1.查看input設備

cat /proc/bus/input/devices

在這里插入圖片描述

2.Gsensor 和 gyro 的校準

命令行校準方法,保持機器水平靜止放置,輸入以下命令校準:

#Gsensor
echo 1 > /sys/class/sensor_class/accel_calibration
#GYRO
echo 1 > /sys/class/sensor_class/gyro_calibration

查看校準值:

cat /sys/class/sensor_class/accel_calibration
cat /sys/class/sensor_class/gyro_calibration

如果無法查看校準值,則說明校準失敗,可以打印 kernel log 確定失敗原因。校準成功后,校準的值會保存到 nand 或 emmc 的 vendor storage 里面,不會被擦除,開機自動生效。


六,遇到的問題

1.方向不對

理論上x,y,z 3個軸的數據都在± 9.8之間變化。機器完全平放的狀態x,y軸接近0,z軸接近9.8。
如果發現方向不對,可以在驅動文件mpu6500_acc.c中交換x,y,z 3個軸的數據。

static int gsensor_report_value(struct i2c_client *client, struct sensor_axis *axis)
{struct sensor_private_data *sensor =(struct sensor_private_data *) i2c_get_clientdata(client);if (sensor->status_cur == SENSOR_ON) {/* Report acceleration sensor information */input_report_abs(sensor->input_dev, ABS_X, axis->x);input_report_abs(sensor->input_dev, ABS_Y, axis->y);input_report_abs(sensor->input_dev, ABS_Z, axis->z);input_sync(sensor->input_dev);}return 0;}
  1. 這段代碼是一個函數gyro_report_value,用于向輸入子系統報告陀螺儀(gyroscope)傳感器的數值。

函數接受兩個參數:一個是指向i2c_client結構的指針client,另一個是指向sensor_axis結構的指針axis,sensor_axis結構可能包含了三軸的數值(x、y、z)。
函數通過i2c_get_clientdata(client)獲取與i2c_client結構相關聯的私有數據結構sensor_private_data的指針sensor。
函數檢查sensor結構中的status_cur字段是否等于SENSOR_ON。如果當前傳感器狀態為開啟狀態,就會執行以下操作:
a. 使用input_report_rel函數向輸入設備報告陀螺儀的x軸數值,并將其存儲在ABS_RX中。
b. 使用input_report_rel函數向輸入設備報告陀螺儀的y軸數值,并將其存儲在ABS_RY中。
c. 使用input_report_rel函數向輸入設備報告陀螺儀的z軸數值,并將其存儲在ABS_RZ中。
最后,調用input_sync函數將所有報告的輸入事件同步到輸入設備。

  1. 例如要將X軸和Z軸數據對換后再進行input上報,可以在調用input_report_rel函數之前交換axis->x和axis->z的值。
static int gyro_report_value(struct i2c_client *client, struct sensor_axis *axis)
{struct sensor_private_data *sensor = (struct sensor_private_data *)i2c_get_clientdata(client);if (sensor->status_cur == SENSOR_ON) {/* Swap X and Z axis values */int temp = axis->x;axis->x = axis->z;axis->z = temp;/* Report gyro sensor information with swapped X and Z axis values */input_report_rel(sensor->input_dev, ABS_RX, axis->x);input_report_rel(sensor->input_dev, ABS_RY, axis->y);input_report_rel(sensor->input_dev, ABS_RZ, axis->z);input_sync(sensor->input_dev);}return 0;
}

這樣就實現了將X軸和Z軸數據對換后再進行input上報的功能。

2.luncher主界面不旋轉

在luncher主界面下不能旋轉,但在其他應用中可以旋轉(比如“資源管理器”“設置”“計算器”)。
可參考如下修改:

$SDK/frameworks/base# git diff
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 970e63b11f37..398e1ea3c6df 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -570,7 +570,7 @@<!-- If true, the screen can be rotated via the accelerometer in all 4rotations as the default behavior. -->
-    <bool name="config_allowAllRotations">false</bool>
+    <bool name="config_allowAllRotations">true</bool><!-- If true, the direction rotation is applied to get to an application's requestedorientation is reversed.  Normally, the model is that landscape is

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718455.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718455.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718455.shtml

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

相關文章

Matlab|基于Logistic函數負荷需求響應

目錄 1 基于Logistic函數的負荷轉移率模型 2 程序示例 3 效果圖 4 下載鏈接 負荷需求響應模型種類較多&#xff0c;有電價型和激勵型等類型&#xff0c;本次和大家分享一個基于Logistic函數的負荷轉移率模型&#xff0c;該模型屬于電價型&#xff0c;由于該方法使用的較少&a…

mysql 性能調優參數配置文件

########################################################################### ## my.cnf for MySQL 8.0.x # ## 本配置參考 https://imysql.com/my-cnf-wizard.html # ## 注意&#xff1a; …

python爬蟲之app爬取-charles的使用

專欄系列:http://t.csdnimg.cn/WfCSx 前言 前面介紹的都是爬取 Web 網頁的內容。隨著移動互聯網的發展,越來越多的企業并沒有提供 Web 網頁端的服務,而是直接開發了 App,更多更全的信息都是通過 App 來展示的。那么針對 App 我們可以爬取嗎?當然可以。 App 的爬取相比 …

FM AM WM DAB是啥

技術描述頻率范圍優點缺點調頻調制&#xff08;FM&#xff09;在FM廣播中&#xff0c;音頻信號的頻率被調制以匹配載波信號的變化&#xff0c;而載波信號的振幅保持不變。FM廣播通常具有較高的音質&#xff0c;并且在一定范圍內提供清晰的音頻。88 MHz 至 108 MHz- 高音質 - 清…

[linux] matplotlib plt畫training dynamics指標曲線時,標記每個點的值

plt畫折線圖時&#xff0c;plt.annotate標記折線圖的點的數值。 def plot_ret(*ret_dicts):plt.figure(figsize(10, 5))for ret_dict in ret_dicts:print(ret_dict["iters"])plt.plot([iter*4/1000 for iter in ret_dict["iters"]], ret_dict["ret&q…

億道信息發布兩款升級款全加固筆記本電腦

2022年5月19日&#xff0c;加固手持終端。加固平板電腦、加固筆記本電腦專業設計商和制造商&#xff0c;以及加固型移動計算機軟硬件整體定制解決方案提供商億道信息&#xff0c;宣布對其兩款廣受歡迎的加固筆記本電腦產品EM-X14U和EM-X15U進行重大升級。新發布的兩款升級款全加…

下載element-ui 資源,圖標 element-icons.woff,element-icons.ttf 無法解碼文件字體

css下載地址&#xff1a;https://unpkg.com/element-ui2.15.14/lib/theme-chalk/index.css js下載地址&#xff1a;https://unpkg.com/element-ui2.15.14/lib/index.js 圖標及文字文件下載地址&#xff1a; element-icons.woff:&#xff1a; ? https://unpkg.com/element-…

《TCP/IP詳解 卷一》第10章 UDP 和 IP 分片

目錄 10.1 引言 10.2 UDP 頭部 10.3 UDP校驗和 10.4 例子 10.5 UDP 和 IPv6 10.6 UDP-Lite 10.7 IP分片 10.7.1 例子&#xff1a;IPV4 UDP分片 10.7.2 重組超時 10.8 采用UDP的路徑MTU發現 10.9 IP分片和ARP/ND之間的交互 10.10 最大UDP數據報長度 10.11 UDP服務器…

【java、微服務、nacos】nacos學習筆記

Nacos服務分級存儲模型 ① 一級是服務&#xff0c;例如userservice ②二級是集群&#xff0c;例如杭州或上海 ③ 三級是實例&#xff0c;例如杭州機房的某臺部署了userservice的服務器 配置實例集群屬性 改變服務的yml文件 spring:cloud:nacos:discovery:cluster-name: H…

Docker將本地的鏡像上傳到私有倉庫

使用register鏡像創建私有倉庫 [rootopenEuler-node1 ~]# docker run --restartalways -d -p 5000:5000 -v /opt/data/regostry:/var/lib/registry registry:2[rootopenEuler-node1 ~]# docker images REPOSITORY TAG IMAGE…

Day 60 | 動態規劃 647. 回文子串 、 516.最長回文子序列 、動態規劃總結篇

647. 回文子串 題目 文章講解 視頻講解 class Solution {public int countSubstrings(String s) {char[] chars s.toCharArray();int len chars.length;boolean[][] dp new boolean[len][len];int result 0;for (int i len - 1; i > 0; i--) {for (int j i; j < l…

基于React低代碼平臺開發:構建高效、靈活的應用新范式

文章目錄 一、React與低代碼平臺的結合優勢二、基于React的低代碼平臺開發挑戰三、基于React的低代碼平臺開發實踐四、未來展望《低代碼平臺開發實踐&#xff1a;基于React》編輯推薦內容簡介作者簡介目錄前言為什么要寫這本書 讀者對象如何閱讀本書 隨著數字化轉型的深入&…

library cache lock/pin

【故障現象】 某些session執行操作被堵塞&#xff0c;檢查event發現’library cache lock/pin’等待&#xff1b; 【可能故障原因】 library cache lock/pin發生在多個session對相同library cache對象進行爭用發生&#xff0c;一般來說在存儲過程編譯過程中發生并堵塞編譯。 …

SOA與微服務的區別

SOA&#xff08;面向服務的架構&#xff09;和微服務是兩種不同的架構風格&#xff0c;它們有一些相似之處&#xff0c;但也存在一些區別。 1. 規模和粒度&#xff1a;SOA是一種面向企業級應用的架構風格&#xff0c;它關注的是將整個企業的功能劃分為一組自治的服務。這些服務…

內核中的Kconfig文件

Kconfig解析 編譯內核時用于配置的Kconfig文件 以內核中的ttyprintk.c為例&#xff0c;其位于/kernel-sources/dirver/char/ttyprintk.c 如何將其編譯進內核&#xff1f; 在char目錄下有Kconfig文件&#xff0c;其中有如下內容 tristate 表示該模塊可以選擇 Y N M(以.ko形…

華為od機試C卷-最長表達式求值

1 題目描述 提取字符串中的最長合法簡單數學表達式子串&#xff0c;字符串長度最長的&#xff0c;并計算表達式的值&#xff0c;如果沒有返回0。簡單數學表達式只能包含以下內容0-9 數字&#xff0c;符號* 說明: 1.所有數字&#xff0c;計算結果都不超過 long 2.如果有多個長…

遞歸實現n的k次方(C語言)

編寫一個函數實現n的k次方&#xff0c;使用遞歸實現。 下面來說一下思路 5的3次方&#xff1a;就是5*(5的3-1次方) 7的4次方&#xff1a;就是7*&#xff08;7的4-1次方&#xff09; 以此類推 n的k次方就是&#xff1a;n* n的&#xff08;k-1&#xff09;次方 int Func(int n,…

HOOPS Communicator對3D大模型輕量化加載與渲染的4種解決方案

今天給大家介紹一些關于3D Web輕量化引擎HOOPS Commuicator的關鍵概念&#xff0c;這些概念可以幫您在HOOPS Communicator流緩存服務器之上更好地構建您自己的模型流服務器。如果您是有大型數據集&#xff0c;那么&#xff0c;使用流緩存服務器可以極大地幫助您最大限度地減少內…

Unity-PDF分割器(iTextSharp)

PDF分割器 Unity-PDF分割器前言核心思路解決過程一、Unity安裝iTextSharp二、運行時計算將要生成文件的大小三、分割核心代碼四、使用StandaloneFileBrowser五、其他的一些腳本六、游戲界面主體的構建MainWindowWarningPanel & FinishPanel By-Round Moon Unity-PDF分割器 …

VMware虛擬機安裝詳細指南

在多任務和多環境開發的需求日益增長的當下&#xff0c;虛擬機技術憑借其靈活性和高效性成為了IT行業的一大利器。VMware作為虛擬化技術的領軍者&#xff0c;其提供的VMware Workstation Pro軟件允許用戶在一臺物理機上運行多個獨立的虛擬機&#xff0c;每個虛擬機都可以擁有自…