找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4843|回复: 4
收起左侧

MMA8451中文资料手册下载

[复制链接]
ID:416135 发表于 2018-10-27 08:44 | 显示全部楼层 |阅读模式
这是我最近找到的三轴加速度MMA8451的中文手册和操作流程,现在发上来分享给大家

MMA8451三轴加速度传感器,16引脚,QFN封装,数字I2C输出,8位/14位精度可选,量程2g/4g/8g可选,电源供电1.95v~3.6v可选。输出数据速率从1.56到800Hz。有两个可编程的中断引脚,7个中断源。可检测自由落体、运动、脉冲、振动等、倾角等。
32个采样FIFO,每次采样都通过高通滤波后传入FIFO。
典型应用有:电子罗盘,静态姿态、运动检测,笔记本电子书等便携设备的翻滚、自由落体检测,实时的方向检测可用于虚拟现实设备或3d游戏中的位置检测,便携设备的节能应用中的运动检测等等。
芯片外形
              不同姿态下X、Y、Z三轴对应的重力输出
典型连接
引脚定义如下:
引脚编号
引脚名称
引脚描述
引脚状态
1
VDDIO
内部电源供电(1.62~3.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.95~3.6v)
输入
15
NC
悬空引脚
开路
16
NC
悬空引脚
开路
灵敏度由count/g表示,2g量程下,可达4096/g,4g量程下,可达2048/g,8g量程下,可达1024/g
MMA8451状态转换图
MMA8451内部框图,分为数字部分和模拟部分
在OFF模式下,数字部分和模拟部分都不工作
在STANDBY模式下,IIC通信照常进行,但模拟模块被禁止,内部时钟停止
在ACTIVE模式下(WAKE或SLEEP),IIC通信照常进行,数字和模拟模块都正常工作
I2C串行通信
MMA8451使用I2C串行通信和外部交换数据,MMA8451可通过中断信号指示新的采样序列可用,也可通过设置使用中断信号指示设备的移动、自由落体、瞬变、方向、单/双击。
I2C总线使用三根信号线进行通信,分别是SCL、SDA和SA0,外部上拉电阻需要将SDA和SCL接到VDDIO上,当总线空闲时,这两根线表现为高电平状态。MMA8451的I2C接口可工作在快速模式400KHz或普通模式100KHz。
总线传输开始由START信号触发,START信号定义为,当数据线从高电平跳变到低电平,而时钟线SCL仍然保持高电平。由主机发送START信号过后,I2C总线被认为从空闲(free)状态进入忙(busy)状态。紧接着START信号后主机发送的字节,前7位用于指示从机地址,第8位用于指示数据方向是读出(1数据从从机到主机)还是写入(0数据从主机到从机)。地址发送完毕后,总线上的所有从机将自己的地址和总线上接收到的地址进行比较,地址匹配的设备即为主机选中设备。第9个脉冲为应答响应,发送设备必须在这个ACK周期内释放数据线,而接收设备则需要在ACK周期的时钟高电平期间将数据线拉低。
SCL 线是高电平时,SDA 线由低电平向高电平切换,这个情况表示停止条件。停止条件将终止发送器的发送。
主机也可重复发出起始(START)条件,对于MMA8451,重复的起始条件可用于读取一些特殊的寄存器。
MMA8451的地址被设置为0x1c或0x1d,可用引脚7(SA0)的高低电平来选择。当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为高电平期间,数据线从低电平跳变到高电平
/*******************************************
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操作:
  •                                                                                                                                          单个字节读
主机发送START,紧接着主机给出7位地址(0x1d或0x1c),并置第8位为0,表示数据从主机到从机。从机匹配地址后,返回确认ACK信号,接着主机传输8位寄存器地址,从机返回确认ACK。主机再次发出START,并给出7位从机地址,并置第8位为1,表示数据从从机到主机,从机确认后返回8位寄存器数据。主机不确认,并发出STOP。
注意:除了START,STOP,ACK以外,其它数据在时钟高电平期间必须维持不变。
单个字节读时序
主机发送八位数据或地址代码如下(使用IO口模拟)
//*************************************************
//字节发送程序
//发送c(可以是数据也可是地址),送完后接收从应答
//不考虑从应答位
void send_byte(unsigned char c)
{
unsigned char i;
for(i=0;i<8;i++)
{
IIC_SCL=0;
if((c<<i) & 0x80)IIC_SDA=1; //发送1
else 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(0x1c,SA0=0)或0011101(0x1d,SA0=1),可将SA0引脚直接接地或接高电平,以接高电平为例,地址为7位,高位在前,地位在后,第8位为数据方向选择,若后续数据为主机到从机,则为0,若后续数据为从机到主机,则为1。
以单个字节读为例,地址设为0x1d,见时序图,START信号过后,则应发送00111010,即0x3A
可先如下定义,#define MMA8451_ADD   0X3A
第二次发送地址,则后续数据为从机到主机,第8位为1,可发送MMA8451_ADD+1即可

  •                                                                                                                                          多字节读

多字节读和单字节读基本相同,如果读完单字节后,主机不发送NAK和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_ack无需应答
_asm(nop);
IIC_SCL=1;
_asm(nop);
IIC_SCL=0;
}

  •                                                                                                                                          单个字节写
单个字节写入和单个字节读略有不同,区别在于发送为寄存器地址后,主机不再重复发送START信号和设备地址,而是直接给出写入的数据。代码如下:
  •                                                                                                                                          多个字节写
多个字节写和单个字节写类似,只要主机发送STOP信号,则可以连续写入,写入的寄存器地址自动增加。

MMA8451寄存器:
  •                                                                                                                                          状态寄存器STATUS/F_STATUS 地址0x00
  •                                                                                                                                          控制寄存器CTRL_REG1,地址0x2a
7
6
5
4
3
2
1
0
ASLP_RATE1
ASLP_RATE0
DR2
DR1
DR0
LNOISE
F_READ
ACTIVE
ASLP_RATE[1:0]:设置睡眠模式采样频率,默认00
DR[2:0]:数据速率选择。默认为000,800Hz
DR2
DR1
DR0
数据速率Hz
周期ms
0
0
0
800
1.25
0
0
1
400
2.5
0
1
0
200
5
0
1
1
100
10
1
0
0
50
20
1
0
1
12.5
80
1
1
0
6.25
160
1
1
1
1.56
640
注意:当设备在睡眠模式下,数据输出速率以ASLP_RATE[1:0]为准,DR设置速率无效。
LNOISE:

  •                                                                                                                                          XYZ数据设置寄存器XYZ_DATA_CFG,地址0x0e
7
6
5
4
3
2
1
0
0
0
0
HPF_OUT
0
0
FS1
FS0
HPF_OUT:高通滤波器数据输出使能。
HPF_OUT=1:使能;
HPF_OUT=0:禁止。
FS1:FS0:XYZ量程设置。
如下表所示:

FS1
FS0
量程
0
0
2g
0
1
4g
1
0
8g
1
1
保留


完整的Word格式文档51黑下载地址:
MMA8451中文参考资料.doc (264 KB, 下载次数: 27)
回复

使用道具 举报

ID:424721 发表于 2019-3-3 23:33 | 显示全部楼层

好资料,谢谢分享。
回复

使用道具 举报

ID:414975 发表于 2018-11-1 19:54 | 显示全部楼层
好资料,谢谢分享。
回复

使用道具 举报

ID:1 发表于 2018-11-1 15:47 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:1 发表于 2018-11-1 15:47 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表