在线时间828 小时
UID3079326
注册时间2015-2-11
NXP金币29
TA的每日心情 | 奋斗 2025-5-7 09:07 |
---|
签到天数: 353 天 连续签到: 1 天 [LV.8]以坛为家I
金牌会员
 
- 积分
- 5786
- 最后登录
- 2025-5-7
|
本帖最后由 wambob 于 2015-11-26 16:09 编辑
MMA8451Q是具有14位数据精度的智能低功耗3轴电容式微机械加速度传感器。这款加速度传感器具有灵活的、用户可编程的嵌入式功能,可对两个中断引脚进行配置。嵌入式中断功能可以节省整体功耗,使主处理器不必连续轮询数据。可以存取低通滤波数据,也可以存取高通滤波数据,从而最大限度地减少了颠簸检测对数据分析的需求,实现更快的数据转换。该器件经过配置,能够将可配置的嵌入式功能进行自由组合,生成惯性唤醒中断信号,这样使MMA8451Q能够在非活动期间保持低功耗模式不变,但仍可对事件进行监控。
特性:
主要特性- 1.95至3.6v电源电压
- 1.6至3.6v接口电压
- 全量程动态可选:±2g/±4g/±8g
- 输出数据频率(ODR)范围:1.56 Hz至800 Hz
- 99 μg/√Hz噪声
- 14位和8位数字输出
- I²C数字输出接口(采用4.7kΩ上拉电阻时,运行频率可达2.25 MHz)
- 两个可编程中断引脚,支持7个中断源
- 3个嵌入式通道用于运动检测
- 自由落体或运动检测:一个通道
- 脉冲检测:一个通道
- 颠簸检测:一个通道
- 方向(纵向/横向)检测,可设定滞后补偿
- ODR自动变化,自动唤醒并返回到睡眠状态
- 32采样FIFO
- 每个采样均以FIFO方式提供高通滤波数据
- 自检
- 电耗:6 μA–165 μA
FRDM-KL02板上有MMA8451Q加速度传感器。
作为I2C从器件,首先确定地址。板上的SA0=1。
MMA8451有待机和激活两种模式。大部分设置可以在待机模式改变,但是只有激活后才更新或使能。动态范围只能在待机模式下改变。
读取过程:1:进入激活模式 这个通过写0x2A 寄存器的bit0为1。
2:读状态寄存器0x00,判断有没有新的数据更新。
3:读X、y、Z轴数据寄存器0x01、0x02;0x03、0x04;0x05,0x06。
- #include <stdio.h>
- #include <string.h>
- #include "gpio.h"
- #include "common.h"
- #include "i2c.h"
- #include "uart.h"
- #include "at24cxx.h"
- int16_t accel_x, accel_y, accel_z;
- uint8_t ret,ret0,ret1,ret2;
- uint8_t x1,x2,y1,y2,z1,z2;
- int main(void)
- {
-
- /* 开机延时 */
- DelayInit();
- /* UART 初始化 */
- GPIO_QuickInit(HW_GPIOB, 6, kGPIO_Mode_OPP);
- UART_QuickInit(UART0_RX_B2_TX_B1, 9600);
- UART_ITConfig(HW_UART0, kUART_IT_Rx, true);
- I2C_QuickInit(I2C0_SCL_PB03_SDA_PB04, 576000);
- I2C_ReadSingleRegister(HW_I2C0, 0x1d, 0x0d, &ret) ;
- printf("WHO_AM_I:%x\r\n",ret);
- I2C_ReadSingleRegister(HW_I2C0, 0x1d, 0x0e, &ret1) ;
- printf("WHO_AM_I:%x\r\n",ret1);
-
- I2C_ReadSingleRegister(HW_I2C0, 0x1d, 0x2a, &ret2);
- I2C_WriteSingleRegister(HW_I2C0, 0x1d, 0x2a, ret2|0x01);
-
- while(1)
- {
- I2C_ReadSingleRegister(HW_I2C0, 0x1d, 0x00, &ret0) ; //读状态寄存器0x00,判断有没有新的数据更新
- if(ret0&0f)
- {
- I2C_ReadSingleRegister(HW_I2C0, 0x1d, 0x01, &x1);
- I2C_ReadSingleRegister(HW_I2C0, 0x1d, 0x02, &x2);
- I2C_ReadSingleRegister(HW_I2C0, 0x1d, 0x03, &y1);
- I2C_ReadSingleRegister(HW_I2C0, 0x1d, 0x04, &y2);
- I2C_ReadSingleRegister(HW_I2C0, 0x1d, 0x05, &z1);
- I2C_ReadSingleRegister(HW_I2C0, 0x1d, 0x06, &z2);
-
- accel_x=x1<<8;
- accel_x|=x2;
- accel_x>>=2;
-
- accel_y=y1<<8;
- accel_y|=y2;
- accel_y>>=2;
-
- accel_z=z1<<8;
- accel_z|=z2;
- accel_z>>=2;
-
- printf("accel_x:%d\r\n",accel_x);
- printf("accel_y:%d\r\n",accel_y);
- printf("accel_z:%d\r\n",accel_z);
- printf(" \r\n");}
-
- GPIO_ToggleBit(HW_GPIOB, 6);
- DelayMs(1000);
- }
-
- }
复制代码
|
评分
-
查看全部评分
|