陀螺仪小球_软件详解|学习笔记

简介: 快速学习陀螺仪小球_软件详解。

开发者学堂课程【HaaS 物联网应用开发课程陀螺仪小球_软件详解】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/801/detail/13850


陀螺仪小球_软件详解

 

内容介绍:

一、陀螺仪小球的应用代码入口

二、主页面逻辑

三、MPU6050驱动

 

一、陀螺仪小球的应用代码入口

陀螺仪小球的应用层的代码是放在 application/example 应用程序下面,在 edu-demo/k1-apps/gyroscope/ gyroscope.c 这个文件里面。

它也是 edu-demo 的一个子页面,所有的页面都需要实现一个叫 MENU-TYP 的结构体,在 HaaS EDU K1 上之后,按左右也就是 K1,K2键进行切换应用的时候,切换到陀螺仪小球的页面,这两个 API 就会被一次的呼叫,在进入这个页面的时候, gyroscope-init 这个函数就会被呼叫,退出这个页面的时候,gyroscope-uninit 这个函数就会被呼叫

设定是在下面结构体里面进行设定的。

 

二、主页面逻辑

image.png

在 gyroscope-uninit 的函数里边,它首先会对 MPU6050进行初始化,清空 OLED 的屏幕目的是将之前显示的信息部清除掉,不要影响这次陀螺仪小球的绘制过程,再有它会启动 gyroscope-task,这个函数就退出了。

gyroscope-task 里边,它首先会读取加速度传感器在 xyz 这三个方向的重力加速度值,计算出来之后,会先在屏幕的外圈画一个大的空心圆,再根据×方向和 Y 方向的重力加速位置,确定画的实心小球的一个圆心的位置确定好之后开始画一个实心圆,画好之后把这些数据都给它放到屏幕的输出缓冲区里边,再将数据刷新到 OLED 屏幕上,之后休眠20毫秒,进行下一次测量,重复刚刚的测量、计算、画图,休眠的这么一个过程。

在 gyroscope-uninit 里边它会把 gyroscope-task 给结束掉,在结束 gyroscope-task 之前它要确保这次的读取加速度值,计算画圆圆心以及划到 OLED 这个过程是必须要执行完成才能把它退出掉。

在 gyroscope-init 里它会呼叫 mpu6050,对 mpu6050进行初始化,接下来呼叫 oled-clear 来清空屏幕,再aos-task-new,创建一个 gyroscope-task ,这里面有四个参数,第一个参数代表要创建 task 的名字,第二个参数则是创建的 task 之后要去执行哪个函数,第三个参数代表说在创建 task 执行它的函数之后,是否要给他传一些参数过来,这边不需要传任何参数。

第四个参数,1000代表是在创建 task 的时候,给它分配的 gyroscope-task 是多大的,接下来 gyroscope-init 就会退出

再加入 gyroscope-task。这个任务里边它是一个外部循环,首先它会呼叫 OLED clear 清空屏幕,

再去呼叫 MPU-Get-Accelerometer 这个函数,来获取 xyz 这三个方向的重力加速度的实时信息。

在下一部分则是呼叫 OLED-Icon-Drow,把屏幕两边的向向右的按键的图标给它画出来。接下来绘制一个外圈的空心圆,再根据×方向以及 Y 方向的加速度为一定偏移量,画一个实心小球,接下来再呼 oled- refresh-GRAM,将上面填入的这些显示数据,把它刷新到屏幕上,接下来休眠20毫秒之后再去重复这个过程。

在 gyroscope-uninit 里边它就是会呼叫 aos-task -delete 这个函数,退出 gyroscope -task 的主任务

 

三、MPU6050驱动

在初始化 npu6050的时候呼叫的是 npu-init 这个函数,这个函数里边它的实现逻辑主要是首先通过呼叫 hal-i2c-init,对&i2c-dev控制器进行初始化,这里有5个参数,第一个参数 port 代表 i2C 通道,因为知道 mpu6050和 &i2c-dev 进行连接,也就是说它的通道排第十一。

image.png

这边的 address-width 代表的是 i2c 设备地址模式,frequency 则是主设备和从设备之间通信的时候,采用的频率这边设定是100K, mode 则是 i2C 控制器它的一个工作模式,因为它是主设备,所以这个地方就设 I2c-mode-master

dev-addr 则是从设备的地址,也就是 mpu6050的 addr ,在前边的原理图上有看到它是0X69,在初始化完 i2C 控制器之后,这会先向 power management1计算机写入0X80,就是对mpu6050进行复位,休眠一段时间等它复位完成,再向计算机写入零代表让 MPU6050开始工作。接下来会呼叫 mpu set , general fsr 设定它的陀螺仪传感器的工作范围在±2000度每秒,是通过 mpu set a salary fsr ,设计加速度传感器的量程±2g,再通过 mpu set rate 设定参数频率50,接下来会关闭所有的中断,也关闭 i2C 主模式,因为 mpu6050没有外部其他的第三方传感器,这个时候是要把它的 i2C 主控制器给它关掉的,也没有用到 FIFO 功能,所以就把 FIFO 功能关掉就好了,这个地方它虽然有设定 int 引脚的低电有效,但是没有实际使用,所以也不用管它。

接下来他会去读取 npo6050内部的一个 device-id-reg,如果读出0X68的话,是代表 i2C 是正常工作的,这时再去 power management one 计算机写入0X1来设定它的工作的时钟源,再power management 二这个计算机写入0,则代表让加速度和陀螺仪传感器都开始工作,再设立一个它的采样频率,mpu-init 个函数数就完成了。

MPU-GYRO-CFG-REG 就是像 general conflict 计算机写入FSR向左移三位,也就是它的 bit 三和 bit 的四,这两个 byte 选用的是三,所以代表它的最大两种是±2000度毎秒,这个 MPU-SET-ACCEL-FSR 就是像 accelerate conflict 计算机写入加速度传感器的测量量程,这个地方写入的是0,所以它是±2g。

Mpu-Set-Rate 则是设定 Mpu 6050加速度传感器的一个采样频率。看到 rate 如果是在1000和4之外的话,它会把它限最小值限定在4,最大值限定在1000,计算写入 sample rate 寄存器的值的时候,有1000除以 rate 再减去一,再呼叫 Mpu-set LPF,设定 LPF这边还有一个 mpu get accelerometer 这个函数则是通过呼叫 Mpu-read len 这个函数,从 XOUTH 这个计算机开始读取6个 byte,都会在这6个 byte 两两 byte 进行组合,就可以得到 xyz3个轴方向的加速度值。

上边这几个函数里边用到的几个基础的函数,像 Mpu write byte 则是regs 和 data 放的这个 write -buf 里边,呼叫hal-i2C master send,把这两个 byte 送到从设备

Mpu-read len 这个函数则是register 这个地址写到了 write -buf,第一个 byte,把后面的 buf 指向的数据 cpy 到 write -buf 后面的 buf 里面去,再呼叫还有 hal-i2C master send 这个函数,将 register 以及要写入的 buf,送到mpu6050

这边的 Mpu read byte 涉及到两次 i2C 数据传输的过程,首先是呼叫还有 hal-i2C master send,将在寄存器的地址,要读取的计算机的地址传给 mpu6050,接下来等一小段时间呼叫 hal-i2C master recv。将 mpu6050里边这个计算机里面读回来放在 data 里边,再把 data 反馈。

image.png

同样的 mpu read 这个函数也是会涉及到两次。同样的 Mpu-read len 这个函数也是会涉及到两次 i2C 数据传输的过程,第一次是将它要读取的 register 的地址,通过一个i2C操作发送给 mpu6050,接下来发起连续的读操作,是呼叫hal-i2C master recv。

将读取的 buffer 指针以及要读取的 len 传给 has1000的驱动,在驱动里面就会把从 mpu6050里读取回来的数据放到buffer 指向的 memory 里面去

相关文章
|
6月前
|
流计算
泡泡龙游戏开发实战教程(3):泡泡如何发射,反弹,移动,停靠
泡泡龙游戏开发实战教程(3):泡泡如何发射,反弹,移动,停靠
102 0
|
物联网 Linux Android开发
圆曾经的小车梦,造一台智能小车(一)
圆曾经的小车梦,造一台智能小车(一)
103 1
|
2月前
|
计算机视觉
摄像头的宽度为640 巡线
【9月更文挑战第24天】
35 7
|
5月前
|
图形学
【unity小技巧】FPS游戏实现相机的偏移震动、武器射击后退和后坐力效果
【unity小技巧】FPS游戏实现相机的偏移震动、武器射击后退和后坐力效果
56 1
|
5月前
|
算法 图形学
【实现100个unity特效之3】使用PerlinNoise(柏林噪声)实现平滑的灯光闪烁效果
【实现100个unity特效之3】使用PerlinNoise(柏林噪声)实现平滑的灯光闪烁效果
95 0
|
Go Android开发
圆曾经的小车梦,造一台智能小车(三)之小车前进后退左右转基本框架
圆曾经的小车梦,造一台智能小车(三)之小车前进后退左右转基本框架
311 0
|
传感器 IDE 开发工具
圆曾经的小车梦,造一台智能小车(二)
圆曾经的小车梦,造一台智能小车(二)
128 1
|
C语言
圆曾经的小车梦,造一台智能小车(四)之QT上位机控制小车
圆曾经的小车梦,造一台智能小车(四)之QT上位机控制小车
245 0
|
存储 传感器 编解码
红外热成像仪 -红眼睛相机
现在自己在做红外成像仪的越来越多了,两年前有个井下机电设备运行状态的科研项目,当时使用了 AMG8833(8*8 像素),科研毕竟就是科研,后来也没有听说成果得到应用的消息, 我想也是, 8*8 能干什么,也就能做个红外测温枪吧。 前段时间因为公司生产电路板测试需要,打算买一台红外成像仪测量电路板发热是否正常,商用的价格还是有些小贵的,我们电路板都不大所以就找了一台便宜的先用着,无意中发现了 MLX90640 这个东西, 32*24像素, 768 个测温点,基本上可以成像用了。
红外热成像仪  -红眼睛相机
|
传感器 算法 物联网
5_3_2_陀螺仪小球_硬件讲解|学习笔记
快速学习5_3_2_陀螺仪小球_硬件讲解。
139 0
5_3_2_陀螺仪小球_硬件讲解|学习笔记