找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5249|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

MMA8451中文資料手冊下載

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
#
ID:416135 發(fā)表于 2018-10-27 08:44 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
這是我最近找到的三軸加速度MMA8451的中文手冊和操作流程,現(xiàn)在發(fā)上來分享給大家

MMA8451三軸加速度傳感器,16引腳,QFN封裝,數(shù)字I2C輸出,8位/14位精度可選,量程2g/4g/8g可選,電源供電1.95v~3.6v可選。輸出數(shù)據(jù)速率從1.56到800Hz。有兩個可編程的中斷引腳,7個中斷源?蓹z測自由落體、運動、脈沖、振動等、傾角等。
32個采樣FIFO,每次采樣都通過高通濾波后傳入FIFO。
典型應(yīng)用有:電子羅盤,靜態(tài)姿態(tài)、運動檢測,筆記本電子書等便攜設(shè)備的翻滾、自由落體檢測,實時的方向檢測可用于虛擬現(xiàn)實設(shè)備或3d游戲中的位置檢測,便攜設(shè)備的節(jié)能應(yīng)用中的運動檢測等等。
芯片外形
              不同姿態(tài)下X、Y、Z三軸對應(yīng)的重力輸出
典型連接
引腳定義如下:
引腳編號
引腳名稱
引腳描述
引腳狀態(tài)
1
VDDIO
內(nèi)部電源供電(1.62~3.6v)
輸入
2
BYP
旁路電容
輸入
3
NC
懸空引腳
開路
4
SCL
I2C串行時鐘
漏極開路
5
GND
接地
輸入
6
SDA
I2C串行數(shù)據(jù)
漏極開路
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量程下,可達(dá)4096/g,4g量程下,可達(dá)2048/g,8g量程下,可達(dá)1024/g
MMA8451狀態(tài)轉(zhuǎn)換圖
MMA8451內(nèi)部框圖,分為數(shù)字部分和模擬部分
在OFF模式下,數(shù)字部分和模擬部分都不工作
在STANDBY模式下,IIC通信照常進(jìn)行,但模擬模塊被禁止,內(nèi)部時鐘停止
在ACTIVE模式下(WAKE或SLEEP),IIC通信照常進(jìn)行,數(shù)字和模擬模塊都正常工作
I2C串行通信
MMA8451使用I2C串行通信和外部交換數(shù)據(jù),MMA8451可通過中斷信號指示新的采樣序列可用,也可通過設(shè)置使用中斷信號指示設(shè)備的移動、自由落體、瞬變、方向、單/雙擊。
I2C總線使用三根信號線進(jìn)行通信,分別是SCL、SDA和SA0,外部上拉電阻需要將SDA和SCL接到VDDIO上,當(dāng)總線空閑時,這兩根線表現(xiàn)為高電平狀態(tài)。MMA8451的I2C接口可工作在快速模式400KHz或普通模式100KHz。
總線傳輸開始由START信號觸發(fā),START信號定義為,當(dāng)數(shù)據(jù)線從高電平跳變到低電平,而時鐘線SCL仍然保持高電平。由主機發(fā)送START信號過后,I2C總線被認(rèn)為從空閑(free)狀態(tài)進(jìn)入忙(busy)狀態(tài)。緊接著START信號后主機發(fā)送的字節(jié),前7位用于指示從機地址,第8位用于指示數(shù)據(jù)方向是讀出(1數(shù)據(jù)從從機到主機)還是寫入(0數(shù)據(jù)從主機到從機)。地址發(fā)送完畢后,總線上的所有從機將自己的地址和總線上接收到的地址進(jìn)行比較,地址匹配的設(shè)備即為主機選中設(shè)備。第9個脈沖為應(yīng)答響應(yīng),發(fā)送設(shè)備必須在這個ACK周期內(nèi)釋放數(shù)據(jù)線,而接收設(shè)備則需要在ACK周期的時鐘高電平期間將數(shù)據(jù)線拉低。
SCL 線是高電平時,SDA 線由低電平向高電平切換,這個情況表示停止條件。停止條件將終止發(fā)送器的發(fā)送。
主機也可重復(fù)發(fā)出起始(START)條件,對于MMA8451,重復(fù)的起始條件可用于讀取一些特殊的寄存器。
MMA8451的地址被設(shè)置為0x1c或0x1d,可用引腳7(SA0)的高低電平來選擇。當(dāng)SA0為高電平時,0x1d地址被選中有效,當(dāng)SA0為低電平時,0x1c地址被選中有效。
重點概念:
START條件:時鐘線SCL為高電平期間,數(shù)據(jù)線從高電平跳變到低電平
START代碼,使用IO口模擬IIC
/*******************************************
I2C START信號
時鐘脈沖高電平期間,數(shù)據(jù)線負(fù)跳變
********************************************/
void IIC_start(void)
{
  IIC_SCL=0;//時鐘線低
  IIC_SDA=1;//數(shù)據(jù)線高
  _asm(nop);
  IIC_SCL=1;//時鐘線高
  _asm(nop);
  IIC_SDA=0;//數(shù)據(jù)線從高跳變到低
  _asm(nop);
  IIC_SCL=0;//時鐘線低
}
STOP條件: 時鐘線SCL為高電平期間,數(shù)據(jù)線從低電平跳變到高電平
/*******************************************
I2C STOP信號
時鐘脈沖高電平期間,數(shù)據(jù)線正跳變
********************************************/
void IIC_stop(void)
{
IIC_SCL=0;//時鐘線低
  _asm(nop);
IIC_SDA=0;//數(shù)據(jù)線低
  _asm(nop);
IIC_SCL=1; //時鐘線高
  _asm(nop);
IIC_SDA=1;//數(shù)據(jù)線正跳變
_asm(nop);
IIC_SCL=0;//時鐘線低
}
ACK:確認(rèn),由地址匹配成功的從機在第9個脈沖周期內(nèi)發(fā)出,這時主機釋放數(shù)據(jù)線,從機在時鐘高電平期間將數(shù)據(jù)線置為低電平。
MMA8451的I2C操作:
  •                                                                                                                                          單個字節(jié)讀
主機發(fā)送START,緊接著主機給出7位地址(0x1d或0x1c),并置第8位為0,表示數(shù)據(jù)從主機到從機。從機匹配地址后,返回確認(rèn)ACK信號,接著主機傳輸8位寄存器地址,從機返回確認(rèn)ACK。主機再次發(fā)出START,并給出7位從機地址,并置第8位為1,表示數(shù)據(jù)從從機到主機,從機確認(rèn)后返回8位寄存器數(shù)據(jù)。主機不確認(rèn),并發(fā)出STOP。
注意:除了START,STOP,ACK以外,其它數(shù)據(jù)在時鐘高電平期間必須維持不變。
單個字節(jié)讀時序
主機發(fā)送八位數(shù)據(jù)或地址代碼如下(使用IO口模擬)
//*************************************************
//字節(jié)發(fā)送程序
//發(fā)送c(可以是數(shù)據(jù)也可是地址),送完后接收從應(yīng)答
//不考慮從應(yīng)答位
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; //發(fā)送1
else IIC_SDA=0;  //發(fā)送0
_asm(nop);
IIC_SCL=1;//時鐘高電平
_asm(nop);
IIC_SCL=0;//時鐘低電平
}
_asm(nop);//第9個脈沖
IIC_SDA=1; //發(fā)送完8bit,釋放總線準(zhǔn)備接收應(yīng)答位
_asm(nop);
IIC_SCL=1;
_asm(nop); //sda上數(shù)據(jù)即是從應(yīng)答位
IIC_SCL=0; //不考慮從應(yīng)答位,但要控制好時序
}
**注意:發(fā)送設(shè)備地址時,MMA8451地址為0011100(0x1c,SA0=0)或0011101(0x1d,SA0=1),可將SA0引腳直接接地或接高電平,以接高電平為例,地址為7位,高位在前,地位在后,第8位為數(shù)據(jù)方向選擇,若后續(xù)數(shù)據(jù)為主機到從機,則為0,若后續(xù)數(shù)據(jù)為從機到主機,則為1。
以單個字節(jié)讀為例,地址設(shè)為0x1d,見時序圖,START信號過后,則應(yīng)發(fā)送00111010,即0x3A
可先如下定義,#define MMA8451_ADD   0X3A
第二次發(fā)送地址,則后續(xù)數(shù)據(jù)為從機到主機,第8位為1,可發(fā)送MMA8451_ADD+1即可

  •                                                                                                                                          多字節(jié)讀

多字節(jié)讀和單字節(jié)讀基本相同,如果讀完單字節(jié)后,主機不發(fā)送NAK和STOP,并對從機響應(yīng)AK,則從機設(shè)備會自動將主機發(fā)送的寄存器地址加1,并發(fā)送對應(yīng)的寄存器內(nèi)容,直到主機響應(yīng)NAK和STOP。

主機響應(yīng)AK或NAK程序代碼如下
//************************************************
//主應(yīng)答(包含ack:SDA=0和no_ack:SDA=1)
//入口參數(shù):ack_main:1,應(yīng)答ack,0,無需應(yīng)答nak
//注:ack:scl高電平期間,數(shù)據(jù)線低
//    nak:scl高電平期間,數(shù)據(jù)線高
void IIC_ack_main(unsigned char ack_main)
{
IIC_SCL=0;
if(ack_main)IIC_SDA=0; //ack主應(yīng)答
else IIC_SDA=1; //no_ack無需應(yīng)答
_asm(nop);
IIC_SCL=1;
_asm(nop);
IIC_SCL=0;
}

  •                                                                                                                                          單個字節(jié)寫
單個字節(jié)寫入和單個字節(jié)讀略有不同,區(qū)別在于發(fā)送為寄存器地址后,主機不再重復(fù)發(fā)送START信號和設(shè)備地址,而是直接給出寫入的數(shù)據(jù)。代碼如下:
  •                                                                                                                                          多個字節(jié)寫
多個字節(jié)寫和單個字節(jié)寫類似,只要主機發(fā)送STOP信號,則可以連續(xù)寫入,寫入的寄存器地址自動增加。

MMA8451寄存器:
  •                                                                                                                                          狀態(tài)寄存器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]:設(shè)置睡眠模式采樣頻率,默認(rèn)00
DR[2:0]:數(shù)據(jù)速率選擇。默認(rèn)為000,800Hz
DR2
DR1
DR0
數(shù)據(jù)速率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
注意:當(dāng)設(shè)備在睡眠模式下,數(shù)據(jù)輸出速率以ASLP_RATE[1:0]為準(zhǔn),DR設(shè)置速率無效。
LNOISE:

  •                                                                                                                                          XYZ數(shù)據(jù)設(shè)置寄存器XYZ_DATA_CFG,地址0x0e
7
6
5
4
3
2
1
0
0
0
0
HPF_OUT
0
0
FS1
FS0
HPF_OUT:高通濾波器數(shù)據(jù)輸出使能。
HPF_OUT=1:使能;
HPF_OUT=0:禁止。
FS1:FS0:XYZ量程設(shè)置。
如下表所示:

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


完整的Word格式文檔51黑下載地址:
MMA8451中文參考資料.doc (264 KB, 下載次數(shù): 27)



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

地板
ID:424721 發(fā)表于 2019-3-3 23:33 | 只看該作者

好資料,謝謝分享。
回復(fù)

使用道具 舉報

板凳
ID:414975 發(fā)表于 2018-11-1 19:54 | 只看該作者
好資料,謝謝分享。
回復(fù)

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2018-11-1 15:47 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

樓主
ID:1 發(fā)表于 2018-11-1 15:47 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表