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 4
          rotations 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 requested
          orientation is reversed.  Normally, the model is that landscape is

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

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

相关文章

【毛毛讲书】【端粒:年轻、健康、长寿的新科学】是什么决定了我们的寿命?

重磅推荐专栏&#xff1a; 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域&#xff0c;包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用&#xff0c;以及与之相关的人工智能生成内容&#xff…

es获取某个索引下字段的分词结果

//查看某个索引下字段的分词结果 GET /haha/_analyze { "field": "title", "text":"哈哈。" }

云尚办公-0.1.0

二、用户管理接口 1. 建表 角色与用户是多对多的关系&#xff0c;所以除了角色表和用户表外&#xff0c;还需要第三张表表示这两者间的对应关系。关系表中的用户id和角色id分别以对应表中的id作为外键。 CREATE TABLE sys_user (id BIGINT(20) NOT NULL AUTO_INCREMENT COM…

Vue3切换路由白屏刷新后才显示页面内容

1.首先检查页面路由以及页面路径配置是否配置错误。 在router-view 中给路由添加key标识。 &#xff01;&#xff01;注意&#xff1a;有使用layout封装布局的&#xff0c;是在layout下的主页面中的 router-view 添加标识&#xff0c;不是在src根目录下main.vue中修改&#xf…

[云原生] K8s之pod进阶

一、pod的状态说明 &#xff08;1&#xff09;Pod 一直处于Pending状态 Pending状态意味着Pod的YAML文件已经提交给Kubernetes&#xff0c;API对象已经被创建并保存在Etcd当中。但是&#xff0c;这个Pod里有些容器因为某种原因而不能被顺利创建。比如&#xff0c;调度不成功(…

【rust】11、所有权

文章目录 一、背景二、Stack 和 Heap2.1 Stack2.2 Heap2.3 性能区别2.4 所有权和堆栈 三、所有权原则3.1 变量作用域3.2 String 类型示例 四、变量绑定背后的数据交互4.1 所有权转移4.1.1 基本类型: 拷贝, 不转移所有权4.1.2 分配在 Heap 的类型: 转移所有权 4.2 Clone(深拷贝)…

linux系统Jenkins的安装

Jenkins安装 安装上传安装包解压包首次登录要去服务器查看密码&#xff0c;更改密码选择需要安装的插件设置Admin用户和密码安装完成 安装 上传安装包 上传 jdk17 tomcat jenkins.war的安装包 . 上传 tomcat安装包解压包 解压jdk tar xf jdk-11.0.18_linux-x64_bin.tar.gz解…

甲级!亚信安全再次荣膺CNCERT国家级网络安全应急服务支撑单位称号

再获认可 近日&#xff0c;国家计算机网络应急技术处理协调中心&#xff08;CNCERT&#xff09;正式公布第十届CNCERT网络安全应急服务支撑单位遴选结果&#xff0c;亚信安全凭借创新技术实力&#xff0c;以及重大突发网络安全事件的应对能力&#xff0c;再次荣获CNCERT甲级网…

AI新秀Mistral:“Open AI“ 新时代

最近互联网出现不少类似“下一代openai”、“GPT-4最强竞品”、“法国AI独角兽”、“欧洲的OpenAI”、“微软新宠儿”.... 的文章&#xff0c;都会附带一张图片&#xff0c;就是下面这张&#xff1a; 那么到底发生了什么&#xff0c;出来个什么东西呢&#xff1f;就是本文的主…

深入英伟达盈利中心,反思一个正被“忽视”的Web3.0赛道

出品&#xff5c;欧科云链研究院 作者&#xff5c;Hedy Bi 最近&#xff0c;英伟达&#xff08;Nvidia&#xff09;发布了2023年第四季度财报&#xff0c;超出了华尔街预期&#xff0c;并在美国股市的延时交易中表现出色。欧科云链研究院通过分析英伟达的财报&#xff0c;我们…

前端架构: 脚手架包管理工具之lerna的全流程开发教程

Lerna 1 &#xff09;文档 Lerna 文档 https://www.npmjs.com/package/lernahttps://lerna.js.org [请直达这个链接] 使用 Lerna 帮助我们做包管理&#xff0c;并不复杂&#xff0c;中间常用的命令并不是很多这里是命令直达&#xff1a;https://lerna.js.org/docs/api-referen…

Unity 佳能SDK 及数据获取

1. 填写信息跟官方申请SDK,大概1-2个工作日会邮件回复你 佳能(中国)- 佳定制(佳能影像产品),SDK,EDSDK,CCAPI,软件开发包下载 2. 将SDK这两个文件放到 Unity Plugins文件夹 3. 把CameraControl 下面只要是绿色的 .cs 文件都复制到Unity 中

新闻网站封锁AI爬虫 AI与新闻媒体博弈继续

随着ChatGPT等新兴AI模型的兴起&#xff0c;它们所依赖的网络爬虫正面临来自全球主流新闻网站的大规模封锁。Richard Fletcher博士团队对十个国家主流新闻网站的统计发现&#xff0c;到2023年底&#xff0c;48%的网站屏蔽了OpenAI的爬虫&#xff0c;24%屏蔽了Google的爬虫。那么…

浅析前端的堆栈原理以及深浅拷贝原理

浅析前端的堆栈原理以及深浅拷贝原理 首先来看一个案例 const obj {name:hzw,age:18 } let objName2 obj objName2.age 12 console.log(obj,objName2) // {name: hzw, age: 12} {name: hzw, age: 12}这里是不是很奇怪&#xff0c;为什么&#xff0c;为什么我改变objName2的…

type may not be empty [type-empty]

Git提交失败原因分析 原因是使用了规范commit信息的工具&#xff0c;你的提交信息不符合规范&#xff0c;所以被拒绝了 commit规范工具 commitlinthusky 我这个项目使用husky&#xff0c;提交规范比较严格。 解决方式一&#xff1a; 修改提交信息&#xff0c; 使其符合规范…

代码里没有报错,但是java编译报错找不到符号

问题分析&#xff1a; 最近在尝试maven编译&#xff0c;所以不小心点了mvn clean的命令&#xff0c;将之前编译的工程清除了&#xff0c;导致后边再编译项目上的时候就报了一堆错误。代码没问题&#xff0c;但编译不通过&#xff0c;报找不到符号的错误&#xff0c;搜了下这样解…

Windows安装VNC连接工具并结合cpolar实现远程内网Ubuntu系统桌面

文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…

Linux测试端口开放

Linux测试端口开放 Linux测试端口是否开放有多种命令&#xff0c;如nc、telnet、ssh、curl、wget nc nc&#xff08;netcat&#xff09;可用于创建 TCP 或 UDP 连接、扫描端口、传输文件等 扫描指定端口&#xff1a; nc -zv ip port-z 使用0输入/输出模式&#xff0c;只在…

【C#】SixLabors.ImageSharp和System.Drawing两者知多少

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握。…

Docker数据集与自定义镜像:构建高效容器的关键要素

目录 博客前言 一.数据卷 1.数据卷介绍 2.实战 宿主机和容器共享目录 容器和容器之间共享目录 二.自定义镜像 1.自定义镜像介绍 2.实战 2.1自定义centos&#xff0c;具备vim及ifconfig作用 构建镜像 通过镜像运行一个容器进行测试 2.2自定义tomact&#xff08;文件为…