合宙Air103

2023-11-12

基础资料

基于Air103开发板:Air103 - LuatOS 文档

上手:开发上手 - LuatOS 文档

探讨重点

对官方I2C demo中功能的复现,进行相关内容的学习及探讨。

实现功能

功能2:三轴加速度陀螺仪-MPU6050模块;

硬件准备

Air103开发板1块,面包板1块,mpu6050三轴加速度陀螺仪,导线若干。

软件版本

AIR103:LuatOS@AIR103 base 22.10 bsp V0013

软件使用

接口文档可参考:MPU6050

功能2:mpu6050三轴加速度陀螺仪

-- mpu6050 7位地址 寄存器的默认值为 0x68,即0110 1000
--[[ WHO_AM_I 的内容是 MPU-60X0 的 7 位 I2C 地 址的头 6 位。最后一位地址由 AD0 引脚确定。AD0 引脚的值跟寄存器无关。位 0 和 7 保留。(硬编码为 0)。 WHO_AM_I
包含 MPU-60X0 的 6 位 I2C 地址。 上电复位的值从位 6 到位 1 为:110100。The Power-On-Reset value of Bit6:Bit1 is 位 0+110 100+位 7=0110 1000=0x68]]
i2cSlaveAddr = 0x68
-- Air103 硬件i2c ID
i2cId = 0

--[[
I2C0
I2C0_SDA(SDA,ADC1,GPIO04) (PA4,7#),黄色 D1(SDA)
I2C0_SCL(SCK,ADC0,GPIO01) (PA1,8#),绿色 D0(SCL)
]]

sys.taskInit(function()
    if i2c.setup(0, i2c.FAST, 0x68) == 1 then
        log.info("i2c", "存在 i2c0")   -- I/user.i2c	存在 i2c0
    else
        i2c.close(0) -- 除非i2c的id错误,通常不会失败
        return
    end
    i2c.send(0, 0x68,117)--发送器件地址 确认#define MPU6050_RA_WHO_AM_I  0x75。
                         --格式:0, 0x68, string.char(0x75)  Register(Hex) 75,Register (Decimal):117,均可识别
    sys.wait(50)
    local revData = i2c.recv(0, 0x68, 1)--读器件地址
    log.info("recv",revData:toHex())--打印   I/user.recv	68	2
    i2c.close(0)
end)

初始化硬件i2c

代码如下

-- mpu6050 7位地址 寄存器的默认值为 0x68,即0110 1000
--[[ WHO_AM_I 的内容是 MPU-60X0 的 7 位 I2C 地 址的头 6 位。最后一位地址由 AD0 引脚确定。AD0 引脚的值跟寄存器无关。位 0 和 7 保留。(硬编码为 0)。 WHO_AM_I
包含 MPU-60X0 的 6 位 I2C 地址。 上电复位的值从位 6 到位 1 为:110100。The Power-On-Reset value of Bit6:Bit1 is 位 0+110 100+位 7=0110 1000=0x68]]
i2cSlaveAddr = 0x68
-- Air103 硬件i2c ID
i2cId = 0

--[[
I2C0
I2C0_SDA(SDA,ADC1,GPIO04) (PA4,7#),黄色 D1(SDA)
I2C0_SCL(SCK,ADC0,GPIO01) (PA1,8#),绿色 D0(SCL)
]]

sys.taskInit(function()
    if i2c.setup(0, i2c.FAST, 0x68) == 1 then
        log.info("i2c", "存在 i2c0")   -- I/user.i2c	存在 i2c0
    else
        i2c.close(0) -- 除非i2c的id错误,通常不会失败
        return
    end
    i2c.send(0, 0x68,117)--发送器件地址 确认#define MPU6050_RA_WHO_AM_I  0x75。
                         --格式:0, 0x68, string.char(0x75)  Register(Hex) 75,Register (Decimal):117,均可识别
    sys.wait(50)
    local revData = i2c.recv(0, 0x68, 1)--读器件地址
    log.info("recv",revData:toHex())--打印   I/user.recv	68	2
    i2c.close(0)
end)

示例

--支持mpu6500,mpu6050,mpu9250,icm2068g,icm20608d,自动判断器件id,只需要配置i2c id就可以
--注意:因使用了sys.wait()所有api需要在协程中使用
-- 用法实例
local mpu6xxx = require "mpu6xxx"
i2cid = 0
i2c_speed = i2c.FAST
sys.taskInit(function()
    i2c.setup(i2cid,i2c_speed)
    mpu6xxx.init(i2cid)--初始化,传入i2c_id
    while 1 do
        sys.wait(100)
        local temp = mpu6xxx.get_temp()--获取温度
        log.info("6050temp", temp)
        local accel = mpu6xxx.get_accel()--获取加速度
        log.info("6050accel", "accel.x",accel.x,"accel.y",accel.y,"accel.z",accel.z)
        local gyro = mpu6xxx.get_gyro()--获取陀螺仪
        log.info("6050gyro", "gyro.x",gyro.x,"gyro.y",gyro.y,"gyro.z",gyro.z)
    end
end)

LOG

[2022-11-27 09:18:12.727] I/user.Device i2c id is: MPU6050
[2022-11-27 09:18:12.929] I/user.mpu6xxx init_ok
[2022-11-27 09:18:13.038] I/user.6050temp	26.84412
[2022-11-27 09:18:13.038] I/user.6050accel	accel.x	-498.0469	accel.y	130.2490	accel.z	738.4033
[2022-11-27 09:18:13.038] I/user.6050gyro	gyro.x	-2.213740	gyro.y	-1.068702	gyro.z	-0.6870229
[2022-11-27 09:18:13.148] I/user.6050temp	26.84412
[2022-11-27 09:18:13.148] I/user.6050accel	accel.x	-520.7520	accel.y	136.1084	accel.z	765.3809
[2022-11-27 09:18:13.148] I/user.6050gyro	gyro.x	-2.213740	gyro.y	-1.145038	gyro.z	-0.6870229
[2022-11-27 09:18:13.257] I/user.6050temp	26.84412
[2022-11-27 09:18:13.257] I/user.6050accel	accel.x	-520.8740	accel.y	136.7188	accel.z	764.6484
[2022-11-27 09:18:13.257] I/user.6050gyro	gyro.x	-2.213740	gyro.y	-1.068702	gyro.z	-0.6870229

后期工作

六轴MPU6050输出欧拉角,DMP库应用

DMP是什么?

引自链接:https://www.zhihu.com/question/38173997/answer/81954770

DMP就是指 MPU6050内部集成的处理单元,可以直接运算出四元数和姿态,而不再需要另外进行数学运算。DMP的使用大大简化了代码设计。DMP是数字运动处理器的缩写,顾名思义mpu9150(mpu6050)并不单单是一款传感器,其内部还包含了可以独立完成姿态解算算法的处理单元。如在设计中使用DMP来实现传感器融合算法优势很明显。首先,invensense官方提供的姿态解算算法应该比一般的小白要可靠的多。其次,由DMP实现姿态解算算法将单片机从算法处理的压力中解放出来,单片机所要做的是等待DMP解算完成后产生的外部中断,在外部中断里去读取姿态解算的结果。这样单片机有大量的时间来处理其他任务,提高了系统的实时性。

经过 DMP你就可以得到四元数,四元数就是4个数,可以表征姿态,经过几个数学公式之后就可以的出姿态,姿态包括pitch,roll,yaw。

综上,dmp之后直接出结果,可以直接用,当然你如果有特殊需要自己还要加滤波也没有问题。

具体怎么用我直接上附件吧,在论坛以前收藏的一个帖子,基本包含所有的技术细节,无论是自己软解,还是直接用DMP都有说明。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

合宙Air103 的相关文章

  • python: more Layer Architecture and its Implementation in Python

    sql server 学生表 DROP TABLE DuStudentList GO create table DuStudentList StudentId INT IDENTITY 1 1 PRIMARY KEY StudentName
  • python操作图像处理

    绘制图形方式一 1 图像读取 img cv imread C Users asus Desktop QQ jpg source cv cvtColor img cv COLOR BGR2RGB 2 均值滤波 blur cv blur img
  • AcWing 99. 激光炸弹(二维前缀和)

    输入样例 2 1 0 0 1 1 1 1 输出样例 1 解析 二维前缀和 枚举每个正方形区间的最大值即可 本题只能开一个5000的二维数组 两个会MLE 代码 include
  • flask+APScheduler定时任务的使用

    APScheduler定时任务使用以及在flask中的调用 APScheduler简介 组成部分 调度器 安装 普通使用安装 结合flask使用安装 使用 添加job add job参数详解 interval 间隔时间 每隔一段时间执行 d
  • Linux下实现编写汇编程序

    本学期的微机原理课程上机使用的是MASM汇编器 上课时使用的是Windows上的DOS 而Linux中的汇编工具是nasm 具体的可以点击链接 http os 51cto com art 201101 243138 htm 这里写代码片 下
  • C++11智能指针的基本原理及使用

    介绍 智能指针是一个类 用来存储指向动态分配对象的指针 负责自动释放动态分配的对象 防止堆内存泄漏 动态分配的资源 交给一个类对象去管理 当类对象声明周期结束时 自动调用析构函数释放资源 分类 auto ptr 已弃用 使用unique p

随机推荐

  • 神经网络算法和遗传算法,数据挖掘神经网络算法

    神经网络算法与进化算是什么关系 应该没有太大的关系吧 我对遗传算法了解一点 遗传算法主要用来优化神经网络第一次运行时所用的连接权值 因为随机的连接权值往往不能对针对的问题有比较好的收敛效果 Matlab神经网络工具箱自动生成的初始权值其实已
  • Tracy 小笔记 Vue - 网络模块封装(axios)

    安装 axios 和 引入 安装 npm install axios save 引用 import axios from axios 网络请求可以测试的几个接口地址 http httpbin org get http 123 207 32
  • Linux中的JDK安装和配置

    Linux中的JDK安装和配置 1 查看是否已安装JDK yum list installed grep java 2 卸载系统Java环境 yum y remove java 1 8 0 openjdk 3 卸载tzdata java y
  • 那年的夏天很笛子

    原文 salance moon spaces live com 在某个阶段 我想应该是时候把至今为止影响自己走上美工 设计 程序之路的历程整理一下了 但是下笔的时候才发现 其实这几乎成了我童年的回忆录 因为程序暂且不算 美工 设计就是我人格
  • Connect函数阻塞

    1 采用select 在学习嵌入式Linux网络编程中 很多同学都发现了一个问题 那就是调用connect函数时 如果服务端关闭 客户 端调用connect 函数时 发现阻塞在那里 而且利用ctrl c信号去停止客户端程序时 需要等待一个较
  • git:一次回滚多个commit

    说明 独立分散的commit共同回滚 git revert n sha 1 git 单次commit对应的sha 1值 sha 1 sha 1 ps n代表不会生成新的commit 如果想直接生成commit请去掉 n 最近连续的coomi
  • hr谈薪资后说请示领导_如何巧妙回答面试中的薪资问题呢?

    好不容易挺过了群面 单面 没想到在HR面被薪资问题打个措手不及 你的期望薪资是多少 说低了总觉得委屈自己 说高了又怕offer不保 好不容易在前面几轮面试积攒的自信 在这个问题上就变成 emm差不多就行吧 然后面试一结束就开始无限后悔 对于
  • 【ML特征工程】第 1 章 :机器学习管道

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • STM32F407 单片机+DMA+环形缓冲区+GPS报文解析

    本文采用DMA 环形缓冲区对GPS报文进行解析 思路是通过DMA中断接收到GPS报文后 存放到环形缓冲区 然后在主程序中解析GPS报文 解析GPS报文的关键是 将环形缓冲区中的字节转换成字符串 然后在字符串中查找GPS报文头标识 例如 GP
  • Block头部解析

    Block解析介绍了Block的各个组成部分 魔法数 块大小 块头部 交易个数 交易 本文将详细介绍块魔法数和块头部的各个组成部分 魔法数 魔法数是比特币客户端解析Block数据时的识别码 比特币正式网络的魔法数是0xD9B4BEF9 不同
  • 地图标识符号大全_资源小结:分省地图查询(9.1版)

    公众号首页回复关键字 分省地图 或通过菜单栏可以快速找到本页 本页内容不断更新 建议收藏起来备查 北京市 北京市最新行政区划图 行政统计表 图集下载 北京市地图集 分区 北京市人文地图 高清版 北京经典旅游线路图 北京城区地图 一亿像素高清
  • vue3和ts使用

    Vue3和TypeScript是两个非常流行的前端技术 它们都有着自己的优点和特点 Vue3是Vue js的最新版本 它带来了很多新的特性和改进 包括更好的性能 更好的开发体验和更好的可维护性 TypeScript是一种静态类型语言 它可以
  • 一文搞懂STM32 PWM配置

    本文主要介绍通过CubeMX对STM32G070CBT6进行配置生成PWM波 内容包括PWM的基本概念 PWM的应用 PWM产生的方法 STM32 PWM波配置详解 1 PWM PWM 英文名Pulse Width Modulation 是
  • 02-不得不了解的js特性

    一 回顾js特性 针对浏览器端js 它有哪些特性 弱类型 解释型 1 弱类型 所谓强类型 就意味着在声明变量的时候 需要确定数据类型 一经确定就不能改变 而弱类型 在声明变量的时候 是无需声明变量的类型 变量的类型有其值来决定 并且是可以随
  • 使用pyecharts出现 'ModuleNotFoundError: No module named 'pyecharts_snapshot' 异常

    使用pyecharts时 出现 ModuleNotFoundError No module named pyecharts snapshot 试了几次都无法解决 突然想到 pyecharts snapshot 会不会也是一个第三方库 毕竟异
  • MySQL 列属性修改操作

    1 mysql中修改字段长度 sql view plain copy ALTER TABLE tb article MODIFY COLUMN NAME VARCHAR 50 这里的tb article为表名 NAME为字段名 50为修改后
  • Vue 组件的单元测试

    1 基本的示例 单元测试是软件开发非常基础的一部分 单元测试会封闭执行最小化单元的代码 使得添加新功能和追踪问题更容易 Vue 的单文件组件使得为组件撰写隔离的单元测试这件事更加直接 它会让你更有信心地开发新特性而不破坏现有的实现 并帮助其
  • [docker]笔记-网络管理

    1 docker网络原理 docker安装完成后 会在宿主机中创建一个虚拟网桥 用于容器之间和容器与外部网络的连接 虚拟网桥通常名称为docker0 可以使用ip link show命令进行查看 在docker中 各个容器是通过这个dock
  • 虚拟+现实

    随着现代信息技术与软硬件技术的快速发展 嵌入式系统的功能日益强大 嵌入式设备和软件应用领域越来越宽泛 近年来 嵌入式软件代码量呈爆炸式增长 对测试的要求越来越高 尤其是涉及防务 航空 汽车等安全关键领域 半实物仿真测试系统的研制难度适中 投
  • 合宙Air103

    基础资料 基于Air103开发板 Air103 LuatOS 文档 上手 开发上手 LuatOS 文档 探讨重点 对官方I2C demo中功能的复现 进行相关内容的学习及探讨 实现功能 功能2 三轴加速度陀螺仪 MPU6050模块 硬件准备