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;}
- 这段代码是一个函数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函数将所有报告的输入事件同步到输入设备。
- 例如要将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
相关文章:
RK3568 android11 调试陀螺仪模块 MPU6500
一,MPU6500功能介绍 1.简介 MPU6500是一款由TDK生产的运动/惯性传感器,属于惯性测量设备(IMU)的一种。MPU6500集成了3轴加速度计、3轴陀螺仪和一个板载数字运动处理器(DMP),能够提供6轴的运动…...
【HTML】HTML基础6.1(表格以及常见属性)
目录 表格介绍 表格标签 表格标签的常见属性 案例 知识点总结 表格介绍 在浏览器中,我们经常见到形如 这样的表格形式,一般来说,表格是为了让数据看起来更加清晰,增强数据的可读性 有的程序员也会用表格进行排版 表格标签 &…...
数字电路三宝:锁存器、寄存器和触发器
在数字电路设计中,很多电子工程师经常会用到锁存器、寄存器和触发器,它们各自承担着不同的功能,但共同为数字电路的稳定性和高效性提供了坚强保障,下面将谈谈这三大元件,希望对小伙伴们有所帮助。 1、锁存器࿰…...
VLC相关资源及使用方法
资源 VLC源码: VLC的源码,与VLC Contrib配合使用可以编译相应的库、程序等,如果没有Contrib,可以使用源码下面的contrib文件夹下对应程序自动下载,单独编译,但是速度很慢。 下载地址: 官网&…...
4_相机透镜畸变
理论上讲,是可能定义一种透镜而不引入任何畸变的。然而现实世界没有完美的透镜。这主要是制造上的原因,因为制作一个“球形”透镜比制作一个数学上理想的透镜更容易。而且从机械方面也很难把透镜和成像仪保持平行。下面主要描述两种主要的透镜畸变并为他…...
微信小程序(四十六)登入界面-进阶版
注释很详细,直接上代码 上一篇 此文使用了vant组件库,没有安装配置的可以参考此篇vant组件的安装与配置 新增内容: 1.手机号与验证码格式验证 2.验证码的网络申请和校验 wechat-http模块在好几篇以前已经讲了咋安装的,不记得的友…...
CSP-201712-2-游戏
CSP-201712-2-游戏 解题思路 初始化变量:定义整数变量n和k,分别用来存储小朋友的总数和淘汰的特定数字。然后定义了num(用来记录当前报的数)和peopleIndex(用来记录当前报数的小朋友的索引)。 初始化小朋…...
记录SSM项目集成Spring Security 4.X版本 之 加密验证和记住我功能
目录 前言 一、用户登录密码加密认证 二、记住我功能 前言 本次笔记的记录是接SSM项目集成Spring Security 4.X版本 之 加入DWZ,J-UI框架实现登录和主页菜单显示-CSDN博客https://blog.csdn.net/u011529483/article/details/136255768?spm1001.2014.3001.5502 文章之后补…...
[AutoSar]BSW_Com09 CAN driver 模块FULL(BASIC)CAN、FIFO选择
目录 关键词平台说明一、FULL CAN 和Basic CAN 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector ,芯片厂商TI 英飞凌编程语言C,C编译器HighTec (GCC)autosar版本4.3.1 >>>>>回到总目录<&…...
WPF真入门教程30--顺风物流单据管理系统
1、教程回顾 到现在为止,真入门系列教程已完成了29刺由浅入深地讲解,当然不可能讲到了WPF的所有技能点,但读者看到了wpf的内部各种功能及之间的联系,在此基础上,提供一个完整有效的综合项目,本项目采用的是…...
Elasticsearch:向量相似度计算 - 可笑的速度
作者:Chris Hegarty 任何向量数据库的核心都是距离函数,它确定两个向量的接近程度。 这些距离函数在索引和搜索期间执行多次。 当合并段或在图表中导航最近邻居时,大部分执行时间都花在比较向量的相似性上。 对这些距离函数进行微观优化是值…...
两数相加的问题
题目是:给两个非空的链表,表示两个非负整数。它们每位数都是按照逆序的方式存储,并且每一个节点只能存储一位数字。现在两个数相加,并且以相同的形式返回一个表示和的链表。 首先回顾一下,什么是链表?链表…...
微信小程序的单位
在小程序开发中,rpx是一种相对长度单位,用于在不同设备上实现自适应布局。它是微信小程序特有的单位,表示屏幕宽度的 1/750。 rpx单位的好处在于可以根据设备的屏幕宽度进行自动换算,使得页面在不同设备上保持一致的显示效果。例…...
软考通过率真的低吗?
软考通过率有多少?高项有必要找培训机构吗? 相对来说软考的通过率的确比其他考试要低,因为它的知识点有点杂,专业知识、政策、计算机系统各个方面的知识都需要去掌握。根据以往的数据来说高项(信息系统项目管理师&…...
国际视频编解码标准提案下载地址
H.266 相关提案下载地址:http://phenix.it-sudparis.eu/jvet/ 更新的地址:https://jvet-experts.org/ H.265 提案下载地址:http://phenix.int-evry.fr/jct/ 标准文档下载地址:http://www.itu.int/rec/T-REC-H.265 H.264 提案下载…...
程序员是如何看待“祖传代码”的?
文章目录 每日一句正能量前言祖传代码的历史与文化价值祖传代码的技术挑战与机遇祖传代码与现代开发实践的融合祖传代码的管理与维护策略后记 每日一句正能量 黎明时怀着飞扬的心醒来,致谢爱的又一天,正午时沉醉于爱的狂喜中休憩,黄昏时带着感…...
Python爬虫之爬取并下载哔哩哔哩视频
亲自使用过,太好用了 # 导入requests模块,模拟发送请求 import requests # 导入json import json # 导入re import re# 定义请求头 headers {Accept: */*,Accept-Language: en-US,en;q0.5,User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6…...
python 脚本设置输出颜色
在Python脚本中设置输出颜色,通常可以使用colorama库,它可以在Windows、Linux和macOS等平台上工作。colorama库扩展了Python的标准库,使得在控制台输出彩色文本更加简单。 首先,你需要安装colorama库。如果你还没有安装ÿ…...
安卓websocket(客服端和服务端写在app端) 案例
废话不多说直接上代码 首选导入 implementation "org.java-websocket:Java-WebSocket:1.4.0" package com.zx.qnncpds.androidwbsocket;import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button;import a…...
C++面试宝典第34题:整数反序
题目 给出一个不多于5位的整数, 进行反序处理。要求: 1、求出它是几位数。 2、分别输出每一位数字。仅数字间以空格间隔, 负号与数字之间不需要间隔。如果是负数,负号加在第一个数字之前, 与数字没有空格间隔。注意:最后一个数字后没有空格。 3、按逆序输出各位数字。逆序后…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...
