SPI实验-ICM20608测量值计算与IMX6ULL开启硬件浮点

news/2024/11/27 23:27:10/

一.  SPI 实验

SPI实验:学习如何使用 I.MX6U 的 SPI 接口来驱动 ICM-20608,读取 ICM-20608 的六轴数据。

ICM20608 传感器包括陀螺仪与加速度计,还有温度值。本篇文章来学习 通过ADC的值,来转换为实际的值。例如,通过陀螺仪的 X,Y,Z轴转化为角速度值。通过加速度计的 X,Y,Z值转换为 加速度计的加速度值。

二.    测试值计算与硬件浮点开启

1.  测试值计算

由于陀螺仪的角速度是浮点型数,所以,可能需要保存数据的小数点后一两位。所以,这里采取将数据扩大 100倍,取的小数点后的数据后,最后打印再缩小 100倍的方法。

新增或更新 bsp_icm20608.c文件的几个函数如下:

/*获取 ICM20608的内部数据*/
void icm20608_get_data(void)
{unsigned char buffer[15] = {0}; unsigned short accel_scale = 0;float gyro_scale = 0.0;accel_scale = icm20608_accel_scaleget();gyro_scale = icm20608_gyro_scaleget();icm20608_read_len(ICM20_ACCEL_XOUT_H, buffer, 14);//ADC传感器数据icm20608_dev.accel_x_adc = (signed short)((buffer[0] << 8) | buffer[1]);icm20608_dev.accel_y_adc = (signed short)((buffer[2] << 8) |buffer[3]);icm20608_dev.accel_z_adc = (signed short)((buffer[4] << 8) | buffer[5]);icm20608_dev.temp_adc = (signed short)((buffer[6] << 8) | buffer[7]);icm20608_dev.gyro_x_adc = (signed short)((buffer[8] << 8) | buffer[9]);icm20608_dev.gyro_y_adc = (signed short)((buffer[10] << 8) |buffer[11]);icm20608_dev.gyro_z_adc = (signed short)((buffer[12] << 8) | buffer[13]);//计算实际值,实际数据扩大100倍(0.01扩大100后,为 1)icm20608_dev.accel_x_act = ((float)(icm20608_dev.accel_x_adc) / accel_scale) * 100;icm20608_dev.accel_y_act = ((float)(icm20608_dev.accel_y_adc) / accel_scale) * 100;icm20608_dev.accel_z_act = ((float)(icm20608_dev.accel_z_adc) / accel_scale) * 100;icm20608_dev.gyro_x_act = ((float)(icm20608_dev.gyro_x_adc) / gyro_scale) * 100;icm20608_dev.gyro_y_act = ((float)(icm20608_dev.gyro_y_adc) / gyro_scale) * 100;icm20608_dev.gyro_z_act = ((float)(icm20608_dev.gyro_z_adc) / gyro_scale) * 100;icm20608_dev.temp_act = (((float)(icm20608_dev.temp_adc) - 25 ) / 326.8 + 25) * 100;
}/*获取陀螺仪的分辨率 */
float icm20608_gyro_scaleget(void)
{unsigned char data;float gyroscale;data = (icm20608_read_byte(ICM20_GYRO_CONFIG) >> 3) & 0X3;switch(data) {case 0: gyroscale = 131;break;case 1:gyroscale = 65.5;break;case 2:gyroscale = 32.8;break;case 3:gyroscale = 16.4;break;}return gyroscale;
}/*获取加速度计的分辨率 */
unsigned short icm20608_accel_scaleget(void)
{unsigned char data;unsigned short accelscale;data = (icm20608_read_byte(ICM20_ACCEL_CONFIG) >> 3) & 0X3;switch(data) {case 0: accelscale = 16384;break;case 1:accelscale = 8192;break;case 2:accelscale = 4096;break;case 3:accelscale = 2048;break;}return accelscale;
}

2.  硬件浮点开启

我们在使用浮点计算的时候程序卡死了。卡死的原因如下:

(1)  IMX6ULL芯片没有开启硬件浮点运算。

(2)  在编译的时候没有使用浮点编译选项。

下面具体介绍 Cortex-A系列芯片硬件浮点的开启与编译时开启方法。

开启硬件浮点运算

"ARM ArchitectureReference Manual ARMv7-A and ARMv7-R edition.pdf "文档 与 " Cortex-A7 Technical ReferenceManua.pdf " 文档

添加浮点编译选项


http://www.ppmy.cn/news/487379.html

相关文章

ATKCK红队评估实战靶场(二)-简记

001# 信息收集 nmap -sS -v 192.168.0.80 //端口探测 open &#xff1a; 80、135、139、445、1433、3389、7001、49152、49153、49154 445 -》smb ms17_010 139-》samba->爆破/未授权访问/远程命令执行 1433-》mssql-》爆破/注入/SA弱口令 7001-》weblogic-》反序列…

AI热门垂直领域大模型盘点(附论文)

上回分享了一些通用大模型的使用感受&#xff0c;今天咱们就来聊聊垂直领域大模型&#xff0c;照旧附上论文资料&#xff0c;同学们自取哈&#xff01; 其实照目前的趋势来看&#xff0c;垂直领域大模型的未来发展是要比通用大模型好的&#xff0c;一是通用大模型有GPT4这座难…

Pandas数据清洗常用函数

构造一个数据集&#xff0c;便于演示这些函数。 import pandas as pd df {姓名: [漩涡鸣人, 宇智波佐助, 旗木卡卡西, 春野樱, 宇智波鼬],性别: [男, 男, men, women, 男],身份证: [463895200003128433, 429475199912122345, 420934199110102311, 431085200005230122, 420953…

Python数据挖掘入门与实践-第9章-古腾堡计划网站书籍资料下载

由于python版本以及网站更新等原因&#xff0c;导致了书上的代码没有用了。因此自己试着修改了代码。 下面就来讲讲修改中遇到的主要问题 问题&#xff1a;网站URL变更 # 书上的代码 url_base "http://www.gutenberg.myebook.bg/"fixes[1044] url_base "1…

js基础5 事件的传播/拖拽/键盘事件/div移动

事件的传播 事件的传播关于事件的传播网景公司和微软公司有不同的理解微软公司认为事件应该是由内向外传播&#xff0c;也就是当事件触发时&#xff0c;应该先触发当前元素上的事件&#xff0c;然后再向当前元素的祖先元素上传播&#xff0c;也就说事件应该在冒泡阶段执行。网…

locust学习教程(3)- 编写locust脚本

前言 一句话总结&#xff1a;并发的用户执行了第一类测试任务、第二类测试任务&#xff0c;设置所有类的测试前置、测试后置&#xff0c;设置每一类测试任务的测试前置&#xff0c;测试后置。 1、概念 1.1、一个完整的脚本示例 from locust import task, HttpUser, constant…

el-tree的使用,懒加载数据

前段时间碰到项目需要使用el-tree&#xff0c;由于未接触过还是花费了一段时间&#xff0c;特此记录一下。 需求 要初始化树形数据&#xff0c;点击展开时请求后端数据返回&#xff0c;组装成新树再渲染展示。 来吧展示 <el-form-item label"实体类型" prop&quo…

后端一次返回过多数据,前端应该如何优化处理?

我们可以采用延迟加载的策略&#xff0c;根据用户的滚动位置动态渲染数据。 创建一个server.js const http require(http) const port 8000;let list [] let num 0// create 100,000 records for (let i 0; i < 100_000; i) {numlist.push({src: https://miro.medium.…