《MMA8451加速度使用笔记》由会员分享,可在线阅读,更多相关《MMA8451加速度使用笔记(7页珍藏版)》请在金锄头文库上搜索。
1、MMA8451 三轴加速度传感器,16 引脚,QFN 封装,数字 I2C 输出,8 位/14 位精度可选,量程 2g/ 4g/ 8g 可 选,电源供电 1.95v3.6v 可选。输出数据速率从 1.56 到 800Hz。有两个可编程的中断引脚,7 个中断源。可检测自由落体、运动、脉冲、振动等、倾角等。32 个采样 FIFO,每次采样都通过高通滤波后传入 FIFO。典型应用有:电子罗盘,静态姿态、运动检测,笔记本电子书等便携设备的翻滚、自由落体检测,实时的方向检测可用于虚拟现实设备或 3d 游戏中的位置检测,便携设备的节能应用中的运动检测等等。芯片外形不同姿态下 X、Y 、Z 三轴对应的重力输出
2、典型连接引脚定义如下:引脚编号 引脚名称 引脚描述 引脚状态1 VDDIO 内部电源供电(1.623.6v) 输入2 BYP 旁路电容 输入3 NC 悬空引脚 开路4 SCL I2C 串行时钟 漏极开路5 GND 接地 输入6 SDA I2C 串行数据 漏极开路7 SA0 I2C 最低有效位地址 输入8 NC 悬空引脚 开路9 INT2 中断请求引脚 2 输出10 GND 接地 输入11 INT1 中断请求引脚 1 输出12 GND 接地 输入13 NC 悬空引脚 开路14 VDD 电源(1.953.6v) 输入15 NC 悬空引脚 开路16 NC 悬空引脚 开路灵敏度由 count/g 表示
3、,2g 量程下,可达 4096/g,4g 量程下,可达 2048/g,8g 量程下,可达 1024/gMMA8451 状态转换图MMA8451 内部框图,分为数字部分和模拟部分在 OFF 模式下,数字部分和模拟部分都不工作在 STANDBY 模式下,IIC 通信照常进行,但模拟模块被禁止,内部时钟停止在 ACTIVE 模式下( WAKE 或 SLEEP) ,IIC 通信照常进行,数字和模拟模块都正常工作I2C 串行通信MMA8451 使用 I2C 串行通信和外部交换数据,MMA8451 可通过中断信号指示新的采样序列可用,也可通过设置使用中断信号指示设备的移动、自由落体、瞬变、方向、单/双击。
4、I2C 总线使用三根信号线进行通信,分别是 SCL、SDA 和 SA0,外部上拉电阻需要将 SDA 和 SCL 接到 VDDIO 上,当总线空闲时,这两根线表现为高电平状态。MMA8451 的 I2C 接口可工作在快速模式 400KHz 或普通模式 100KHz。总线传输开始由 START 信号触发,START 信号定义为,当数据线从高电平跳变到低电平,而时钟线 SCL 仍然保持高电平。由主机发送 START 信号过后,I2C 总线被认为从空闲(free)状态进入忙(busy)状态。紧接着 START 信号后主机发送的字节,前 7 位用于指示从机地址,第 8 位用于指示数据方向是读出( 1 数
5、据从从机到主机)还是写入(0 数据从主机到从机) 。地址发送完毕后,总线上的所有从机将自己的地址和总线上接收到的地址进行比较,地址匹配的设备即为主机选中设备。第 9 个脉冲为应答响应,发送设备必须在这个 ACK 周期内释放数据线,而接收设备则需要在 ACK 周期的时钟高电平期间将数据线拉低。SCL 线是高电平时,SDA 线由低电平向高电平切换,这个情况表示停止条件。停止条件将终止发送器的发送。主机也可重复发出起始(START)条件,对于 MMA8451,重复的起始条件可用于读取一些特殊的寄存器。MMA8451 的地址被设置为 0x1c 或 0x1d,可用引脚 7(SA0)的高低电平来选择。当
6、SA0 为高电平时,0x1d 地址被选中有效,当 SA0 为低电平时,0x1c 地址被选中有效。重点概念:START 条件:时钟线 SCL 为高电平期间,数据线从高电平跳变到低电平START 代码,使用 IO 口模拟 IIC/*I2C START 信号时钟脉冲高电平期间,数据线负跳变*/void IIC_start(void)IIC_SCL=0;/时钟线低IIC_SDA=1;/数据线高_asm(nop);IIC_SCL=1;/时钟线高_asm(nop);IIC_SDA=0;/数据线从高跳变到低_asm(nop);IIC_SCL=0;/时钟线低STOP 条件: 时钟线 SCL 为高电平期间,数据
7、线从低电平跳变到高电平/*I2C STOP 信号时钟脉冲高电平期间,数据线正跳变*/void IIC_stop(void)IIC_SCL=0;/时钟线低_asm(nop);IIC_SDA=0;/数据线低_asm(nop);IIC_SCL=1; /时钟线高_asm(nop);IIC_SDA=1;/数据线正跳变_asm(nop);IIC_SCL=0;/时钟线低ACK:确认,由地址匹配成功的从机在第 9 个脉冲周期内发出,这时主机释放数据线,从机在时钟高电平期间将数据线置为低电平。MMA8451 的 I2C 操作:1. 单个字节读主机发送 START,紧接着主机给出 7 位地址(0x1d 或 0x1
8、c) ,并置第 8 位为 0,表示数据从主机到从机。从机匹配地址后,返回确认 ACK 信号,接着主机传输 8 位寄存器地址,从机返回确认 ACK。主机再次发出 START,并给出 7位从机地址,并置第 8 位为 1,表示数据从从机到主机,从机确认后返回 8 位寄存器数据。主机不确认,并发出STOP。注意:除了 START,STOP,ACK 以外,其它数据在时钟高电平期间必须维持不变。单个字节读时序主机发送八位数据或地址代码如下(使用 IO 口模拟)/*/字节发送程序/发送 c(可以是数据也可是地址),送完后接收从应答/不考虑从应答位void send_byte(unsigned char c)
9、unsigned char i;for(i=0;i8;i+)IIC_SCL=0;if(ci) & 0x80)IIC_SDA=1; /发送 1else IIC_SDA=0; /发送 0_asm(nop);IIC_SCL=1;/时钟高电平_asm(nop);IIC_SCL=0;/时钟低电平_asm(nop);/第 9 个脉冲IIC_SDA=1; /发送完 8bit,释放总线准备接收应答位_asm(nop);IIC_SCL=1;_asm(nop); /sda 上数据即是从应答位IIC_SCL=0; /不考虑从应答位,但要控制好时序*注意:发送设备地址时,MMA8451 地址为 0011100(0x1
10、c,SA0=0)或 0011101(0x1d,SA0=1) ,可将 SA0 引脚直接接地或接高电平,以接高电平为例,地址为 7 位,高位在前,地位在后,第 8 位为数据方向选择,若后续数据为主机到从机,则为 0,若后续数据为从机到主机,则为 1。以单个字节读为例,地址设为 0x1d,见时序图,START 信号过后,则应发送 00111010,即 0x3A可先如下定义,#define MMA8451_ADD 0X3A第二次发送地址,则后续数据为从机到主机,第 8 位为 1,可发送 MMA8451_ADD+1 即可2. 多字节读多字节读和单字节读基本相同,如果读完单字节后,主机不发送 NAK 和
11、STOP,并对从机响应 AK,则从机设备会自动将主机发送的寄存器地址加 1,并发送对应的寄存器内容,直到主机响应 NAK 和 STOP。主机响应 AK 或 NAK 程序代码如下/*/主应答(包含 ack:SDA=0 和 no_ack:SDA=1)/入口参数:ack_main:1,应答 ack,0 ,无需应答 nak/注:ack:scl 高电平期间,数据线低/ nak:scl 高电平期间,数据线高void IIC_ack_main(unsigned char ack_main)IIC_SCL=0;if(ack_main)IIC_SDA=0; /ack 主应答else IIC_SDA=1; /no
12、_ack 无需应答_asm(nop);IIC_SCL=1;_asm(nop);IIC_SCL=0;3. 单个字节写单个字节写入和单个字节读略有不同,区别在于发送为寄存器地址后,主机不再重复发送 START 信号和设备地址,而是直接给出写入的数据。代码如下:4. 多个字节写多个字节写和单个字节写类似,只要主机发送 STOP 信号,则可以连续写入,写入的寄存器地址自动增加。MMA8451 寄存器:1. 状态寄存器 STATUS/F_STATUS 地址 0x002. 控制寄存器 CTRL_REG1,地址 0x2a7 6 5 4 3 2 1 0ASLP_RATE1 ASLP_RATE0 DR2 DR1
13、 DR0 LNOISE F_READ ACTIVEASLP_RATE1:0:设置睡眠模式采样频率,默认 00DR2:0:数据速率选择。默认为 000,800HzDR2 DR1 DR0 数据速率 Hz 周期 ms0 0 0 800 1.250 0 1 400 2.50 1 0 200 50 1 1 100 101 0 0 50 201 0 1 12.5 801 1 0 6.25 1601 1 1 1.56 640注意:当设备在睡眠模式下,数据输出速率以 ASLP_RATE1:0为准,DR 设置速率无效。LNOISE:3. XYZ 数据设置寄存器 XYZ_DATA_CFG,地址 0x0e7 6 5 4 3 2 1 00 0 0 HPF_OUT 0 0 FS1 FS0HPF_OUT:高通滤波器数据输出使能。HPF_OUT=1:使能;HPF_OUT=0:禁止。FS1:FS0:XYZ 量程设置。如下表所示:FS1 FS0 量程0 0 2g0 1 4g1 0 8g1 1 保留