Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >蓝桥杯嵌入式之MEME传感器(LIS302DL、三轴加速度传感器)讲解

蓝桥杯嵌入式之MEME传感器(LIS302DL、三轴加速度传感器)讲解

作者头像
用户5935416
发布于 2019-08-01 02:12:00
发布于 2019-08-01 02:12:00
2K00
代码可运行
举报
文章被收录于专栏:IT界的小白帽IT界的小白帽
运行总次数:0
代码可运行

扩展板提供了一个三轴加速度传感器(LIS302DL)。由于该模块的知识非常多,所以可以参考网上的教程。在这里只是讲解如何使用。

LIS302DL可以进行IIC通信和SPI通信,但因为线路的连接而只能使用IIC通信。LIS302DL的电路连接图为

由于P2中的5—6和7—8引脚是LIS302DL中断引脚,例程中并没有使用,所以本次讲解也没有使用到。

IIC初始化

由于在比赛的时候会给IIC的驱动代码,但是因为EEPROM的通信方式也是IIC通信,所以在LIS302DL中使用IIC通信的话需要修改I/O的选择。IIC和SPI的通信方式由CS引脚选择,但是CS的引脚接成高电平,所以默认为IIC的通信方式,只需对IIC进行初始化即可。

IIC初始化代码为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//I2C总线初始化
void i2c_init()
{
  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  GPIO_InitStructure.GPIO_Pin = SDA_Pin | SCL_Pin;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   // **

  GPIO_Init(I2C_PORT, &GPIO_InitStructure);
}

由于IIC的通信方式需要I/O既做输入,又做输出,需要不断的转换,所以不能只修改IIC初始化的I/O选择,而应该设置宏定义或者所有的地方都进行修改。

LIS302DL的初始化

LIS302DL的初始化代码为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void LIS302DL_Config(void)
{
  LIS302DL_Write(CTRL_REG1,0x47);
  LIS302DL_Write(CTRL_REG2,0x00);
  LIS302DL_Write(CTRL_REG3,0xC1);
  LIS302DL_Write(FF_WU_THS_1,0x28);    
  LIS302DL_Write(FF_WU_DURATION_1,40);    
//  LIS302DL_Write(FF_WU_CFG_1,0x10);    
}

只需第一句的代码也可以正常使用LIS302DL。这些代码都是对一些寄存器进行赋值,具体的寄存器使用说明可以参考LIS302DL的使用手册。其中相关的宏定义为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define CTRL_REG1       0x20
#define CTRL_REG2       0x21
#define CTRL_REG3       0x22
#define FF_WU_THS_1     0x32
#define FF_WU_DURATION_1   0x33
#define FF_WU_CFG_1     0x30

下面是对一些寄存器赋值的说明(依据LIS302DL初始化代码为例)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void LIS302DL(void)
{
  LIS302DL_Write(CTRL_REG1,0x47);
  //DR=0,加速度的采集频率为 200Hz;
  //PD=1,LIS302DL工作在普通功耗模式;
  //FS=0,最大测量范围为 2g(2.3g),灵敏度为 18mg/LSB(16.2),受温度影响为 0.01%, 在0加速度时.飘移为 40mg;
  //STP=0,STM=0,表示 LIS302DL 工作在普通模式,即非自检模式;
  //Zen=1,表示使能 Z 轴方向加速度采集; 
  //Yen=1,表示使能 Y 轴方向加速度采集; 
  //Xen=1,表示使能 X 轴方向加速度采集; 
  LIS302DL_Write(CTRL_REG2,0x00);
  //SIM=0,表示 SPI 口为 4 总线;(这个要先看cs决定)
  //BOOT=0,表示不要刷新存储器的内容,为普通模式;
  //FDS=0,表示禁用高通滤器;
  //HP_FF_W_U2=0, 禁用自由落体/唤醒高通滤波器 2;
  //HP_FF_W_U1=0, 禁用自由落体/唤醒高通滤波器 1;
  //HP_coeff2=0,HP_coeff1=0,DR=0, 表示自由落体/唤醒高通滤波器的输出截止频率为 2Hz;
  LIS302DL_Write(CTRL_REG3,0xC1);
  //IHL=1,表示在中断发生时,中断脚(INT1 和 INT2)输出低电平;
  //PP_OD=1,表示中断脚开漏输出;
  //I2CFG2=0,I2CFG1=0,I2CFG0=0,表示 INT2 脚输出低电平;
  //I1CFG2=0,I1CFG1=0,I1CFG0=1,表示 INT1 脚是根据自由落体/唤醒 1 寄存器的输出而发生变化;
  LIS302DL_Write(FF_WU_THS_1,0x28);
  //DCRM=0,表示在不再有中断发生时,持续时间计数器会被复位到初值;
  //THS0~THS6,用来设置自由落体/唤醒的下限值--720mg;  
  LIS302DL_Write(FF_WU_DURATION_1,40);  
  //当 DR=1 时,加速度的采集频率为 ;  
  LIS302DL_Write(FF_WU_CFG_1,0x10);    
  //AOI=1,表示所有中断事件相或后输出;
  //LIR=0,表示将中断请求不锁存;
  //ZHIE=0,表示在 Z 输出寄存器的值大于 Z 轴的设置值时,将不会使能 Z 轴中断;
  //ZLIE=1,表示在 Z 输出寄存器的值小于 Z 轴的设置值时,将不使能中断请求;
  //YHIE=0,表示在 Y 输出寄存器的值大于 Y 轴的设置值时,将不会使能 Y 轴中断;
  //YLIE=1,表示在 Y 输出寄存器的值小于 Y 轴的设置值时,将不会使能 Y 轴中断;
  //XHIE=1,表示在 X 输出寄存器的值大于 X 轴的设置值时,将不会使能 X 轴中断;
  //XLIE=0,表示在 X 输出寄存器的值小于 X 轴的设置值时,将不会使能 X 轴中断;
}

LIS302DL的读写函数

LIS302DL的写函数为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void LIS302DL_Write(unsigned char reg,unsigned char info)
{  
  I2CStart(); 
  I2CSendByte(0x38);  
  I2CWaitAck();     
  I2CSendByte(reg);  
  I2CWaitAck(); 
  I2CSendByte(info); 
  I2CWaitAck();
  I2CStop();
}

由于LIS302DL的地址选择都接地,所以LIS302DL的地址为0x38。

LIS302DL的读函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
uint8_t LIS302DL_Read(uint8_t address)
{
  unsigned char val;
  I2CStart(); 
  I2CSendByte(0x38);  
  I2CWaitAck();     
  
  I2CSendByte(address);  
  I2CWaitAck(); 
  
  I2CStart();
  I2CSendByte(0x39); 
  I2CWaitAck();
  val = I2CReceiveByte(); 
  I2CSendNotAck();
  I2CStop();
  
  return(val);
}

读指令为0x39。

其读写代码和EEPROM的差不多,但是指令不一样,容易混淆。

LIS302DL是否存在判断

在使用前先判断LIS302DL是否存在,虽然代码非常简单,但是其重要性不言而喻的。模块不存在而直接使用的话会有一些错误的数据,造成错误的行为。

LIS302DL是否存在的代码为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(LIS302DL_Check() == 1)
{
  LCD_DisplayStringLine(Line3, (u8 *)" MEMS STATUS: OK");
}
else
{
  LCD_DisplayStringLine(Line3, (u8 *)" MEMS STATUS: ERROR");        
}

函数LIS302DL_Check的定义为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
uint8_t LIS302DL_Check(void)
{
  if(LIS302DL_Read(0x0f))
  {
    return 1;
  }
  else
  {
    return 0;
  }
}

LIS302DL显示讲解

LIS302DL显示的代码为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ptr = Lis302DL_Output();
      
snprintf((char *)str, sizeof(str), " X Reg:%d    ", ptr[0]);
LCD_DisplayStringLine(Line6,str);
snprintf((char *)str, sizeof(str), " Y Reg:%d    ", ptr[1]);
LCD_DisplayStringLine(Line7,str);
snprintf((char *)str, sizeof(str), " Z Reg:%d    ", ptr[2]);
LCD_DisplayStringLine(Line8,str);  
Delay_Ms(200);

指针ptr的定义为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
u8 *ptr;

函数Lis302DL_Output的定义为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
u8* Lis302DL_Output(void)
{
  if((LIS302DL_Read(0x27) & 0x08) != 0)
  {
    
    alz[0] = (LIS302DL_Read(0x29));  //x
    alz[1] = (LIS302DL_Read(0x2B));  //y
    alz[2] = (LIS302DL_Read(0x2D));  //z
  }

  return alz;
}

其分别读出相应寄存器的值,这些寄存器的使用说明为

测试各个方向的加速度的话需要将读取到的数据除以18。如果只测偏移度的话,数组ptr的值不变。

数组在相应文件的定义为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
u8 alz[3] ;
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT界的小白帽 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
姿态传感器mpu6050_六轴陀螺仪原理
陀螺仪是用高速回转体的动量矩敏感壳体相对惯性空间绕正交于自转轴的一个或二个轴的角运动检测装置。利用其他原理制成的角运动检测装置起同样功能的也称陀螺仪。 从力学的观点近似的分析陀螺的运动时,可以把它看成是一个刚体,刚体上有一个万向支点,而陀螺可以绕着这个支点作三个自由度的转动,所以陀螺的运动是属于刚体绕一个定点的转动运动。更确切地说,一个绕对称铀高速旋转的飞轮转子叫陀螺。将陀螺安装在框架装置上,使陀螺的自转轴有角转动的自由度,这种装置的总体叫做陀螺仪。 陀螺仪的原理就是,一个旋转物体的旋转轴所指的方向在不受外力影响时,是不会改变的。人们根据这个道理,用它来保持方向,制造出来的东西就叫陀螺仪。我们骑自行车其实也是利用了这个原理。轮子转得越快越不容易倒,因为车轴有一股保持水平的力量。陀螺仪在工作时要给它一个力,使它快速旋转起来,一般能达到每分钟几十万转,可以工作很长时间。然后用多种方法读取轴所指示的方向,并自动将数据信号传给控制系统。
全栈程序员站长
2022/11/19
2K0
姿态传感器mpu6050_六轴陀螺仪原理
MPU9250传感器
MPU9250 内部包括 3 轴陀螺仪、3 轴加速度计和 3 轴磁力计,这3个功能输出都是 16 位的数字量; 可以通过常用的数据总线( IIC) 接口和单片机进行数据交互,传输速率 400 kHz /s。陀螺仪的角速度测量范围±2000(° /s),具有良好的动态响应特性。加速度计的测量范围最大为±16g( g 为重力加速度),静态测量精度高。磁力计采用高灵度霍尔型传感器进行数据采集,磁感应强度测量范围为±4800μT,可用于对偏航角的辅助测量。 MPU9250 自带的数字运动处理器DMP硬件加速引擎,可以整合九轴传感器数据,向应用端输出完整的 9 轴融合演算数据。 有了 DMP,我们可以使用运动处理库非常方便的实现姿态解算,降低了运动处理运算对操作系统的负荷,同时大大降低了开发难度。
全栈程序员站长
2022/07/23
1.8K0
MPU9250传感器
国产加速度传感器QMA6100P使用
本文聊聊上海矽睿产的加速度传感器QMA6100P的使用。 1、特性 高集成,小尺寸封装:2 x 2 x 0.95 mm LGA 14位数模转化,低噪声 · 具有标准模式和快速模式,支持I2C和SPI接口 内置self-test 大范围操作电压1.7V-3.6V,与低功耗2~50μA 集成64位FIFO存贮器,符合RoHS标准,无卤素添加 内置运动算法 ,尤其是硬件计步算法 可在-40°C~85°C的温度中工作 2、引脚说明 可以看出提供了两个外部中断引脚,支持SPI或I2C通信。 3、I2C读写地址
ManInRoad
2022/12/22
2.3K0
国产加速度传感器QMA6100P使用
Linux驱动开发-编写MMA7660三轴加速度传感器
MMA7660FC 是 ± 1.5 克的三轴数字输出、超低功率、紧凑型电容式微电机的三轴加速度计,是非常低功耗,小型容性 MEMS 的传感器。具有低通滤波器,用于偏移和增益误差补偿, 以及用户可配置的转换成 6 位分辨率,用户可配置输出速率等功能。MMA7660芯片可以通过中断引脚(INT)向外通知传感器数据变化、方向、姿态识别等信息。模拟工作电压范围是 2.4V 至 3.6V,数字工作电压范围是 1.71V 到 3.6V 。常用在手机、掌上电脑、车载导航,便携式电脑的防盗,自动自行车刹车灯、运动检测手环、数码机、自动叫醒闹钟里等等。
DS小龙哥
2022/04/08
8910
Linux驱动开发-编写MMA7660三轴加速度传感器
STM32+MPU6050设计便携式Mini桌面时钟(自动调整时间显示方向)
完整项目源码下载地址: https://download.csdn.net/download/xiaolong1126626497/18657534
DS小龙哥
2022/01/17
1K0
STM32+MPU6050设计便携式Mini桌面时钟(自动调整时间显示方向)
树莓派基础实验31:MPU6050陀螺仪加速度传感器实验
   MPU6050是世界上第一款也是唯一一款专为智能手机、平板电脑和可穿戴传感器的低功耗、低成本和高性能要求而设计的6轴运动跟踪设备。    它集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器 DMP( DigitalMotion Processor),可用I2C接口连接一个第三方的数字传感器,比如磁力计。扩展之后就可以通过其 I2C或SPI接口输出一个9轴的信号( SPI接口仅在MPU-6000可用)。 MPU-60X0也可以通过其I2C接口连接非惯性的数字传感器,比如压力传感器。
张国平
2020/09/27
6K0
STM32 BMP280模块 获取气压温度高度传感器数据
BMP280是博世最新推出的数字气压传感器,具有卓越的性能和低廉的价格,相对精度为±0.12 hPa(相当于±1米),传感器功耗仅有2.7μA,包括压力和温度测量功能。
CoderEnd
2023/05/07
9220
STM32 BMP280模块 获取气压温度高度传感器数据
ov7725 stm32_如何给实验培养皿拍照
平台:STM32ZET6(核心板)+ST-LINK/V2+SD卡+USB串口线+鹰眼OV7725摄像头(注意,为了减少摄像头连线的麻烦,建议初学者选取单片机时选用带有摄像头接口的板子)
全栈程序员站长
2022/11/09
6620
ov7725 stm32_如何给实验培养皿拍照
STM32 AHT10温湿度传感器数据
但是DHT11的精度不是很高,湿度±5%RH,温度±1℃,而且测试的时候一般还要延时3S左右测一下,测试频率慢,而且体积大,价格大概3块多一个吧。
CoderEnd
2023/05/07
3790
STM32 AHT10温湿度传感器数据
毕业设计 – 题目:基于stm32的智能扫地机器人设计与实现
随着人口老龄化的到来和人民对提升生活品质的需要, 人们对在现实生活场景中取代人力的服务机器人有着迫切的需要。 同时, 机电、 自动控制、 计算机、 传感器等技术的发展也为制造服务机器人提供了技术支持。 扫地机器人是服务机器人中技术最成熟和最为广泛使用的机器人。 它可以自动的在室内行走, 通过刷扫和吸尘将地面上的碎屑吸收进垃圾收集装置中, 完成清洁地面的任务,有效的减少了人们清洁地面这种简单重复的家务劳动, 节约了劳动力, 提高了生活品质。 对于许多忙于工作和生的人来说,扫地机器人已经成为家庭必备的产品。
全栈程序员站长
2022/07/22
5.1K0
毕业设计 – 题目:基于stm32的智能扫地机器人设计与实现
基于单片机设计的电子指南针(LSM303DLH模块(三轴磁场 + 三轴加速度)
本项目是基于单片机设计的电子指南针,主要利用STC89C52作为主控芯片和LSM303DLH模块作为指南针模块。通过LCD1602液晶显示屏来展示检测到的指南针信息。
DS小龙哥
2023/11/18
4560
基于单片机设计的电子指南针(LSM303DLH模块(三轴磁场 + 三轴加速度)
海思35xx实现GT911触摸屏功能「建议收藏」
(1) 本文为记录所用,代码仅供参考,错误地方欢迎指正; (2) 主循环可以用轮询或中断方式 (3) 代码中gpio具体看硬件手册
全栈程序员站长
2022/06/28
1.3K0
海思35xx实现GT911触摸屏功能「建议收藏」
ST六轴传感器LSM6DSO使用记录
ST官方参考代码: https://github.com/STMicroelectronics/STMems_Standard_C_drivers/tree/master/lsm6dso_STdC,ST的传感器,基本都在这里能找到。 其他参考代码: https://github.com/arduino-libraries/Arduino_LSM6DSOX https://github.com/micropython-Chinese-Community/mpy-lib/tree/master/sensor/LSM6DSO。
ManInRoad
2021/12/21
2.1K1
ST六轴传感器LSM6DSO使用记录
STM32+雷龙SD NAND(贴片SD卡)完成FATFS文件系统移植与测试
在STM32项目开发中,经常会用到存储芯片存储数据。 比如:关机时保存机器运行过程中的状态数据,上电再从存储芯片里读取数据恢复;在存储芯片里也会存放很多资源文件。比如,开机音乐,界面上的菜单图标,字库文件,方便设备开机加载。
DS小龙哥
2023/01/30
2.5K0
全志 Tina Linux 系统资源配置 开发指南 支持百问网T113 D1-H哪吒 DongshanPI-D1s V853-Pro等开发板
Tina Linux SDK的根目录下,执行make menuconfig命令可进入Tina Linux的配置界面。
韦东山
2022/12/28
9.4K0
全志 Tina Linux 系统资源配置 开发指南 支持百问网T113 D1-H哪吒 DongshanPI-D1s V853-Pro等开发板
软件设计师复习资料「建议收藏」
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说软件设计师复习资料「建议收藏」,希望能够帮助大家进步!!!
Java架构师必看
2022/06/27
6.6K0
Improvise_a_Jazz_Solo_with_an_LSTM_Network_v3a-2
Welcome to your final programming assignment of this week! In this notebook, you will implement a model that uses an LSTM to generate music. You will even be able to listen to your own music at the end of the assignment.
列夫托尔斯昊
2020/08/25
1.5K0
Improvise_a_Jazz_Solo_with_an_LSTM_Network_v3a-2
相关推荐
姿态传感器mpu6050_六轴陀螺仪原理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验