C總線協(xié)議與MPU6050 - others->bit型變量的強(qiáng)制類(lèi)型轉(zhuǎn)換規(guī)則:
在keil c里bit是一位的,屬于對(duì)標(biāo)準(zhǔn)c擴(kuò)展的數(shù)據(jù)類(lèi)型。我舉個(gè)例子說(shuō)明bit的強(qiáng)制轉(zhuǎn)換規(guī)則,例如有變量unsigned char num,變量bit tmp,那么tmp =(bit) num就是把unsigned char型變量強(qiáng)制轉(zhuǎn)換為bit型,不過(guò)規(guī)則有點(diǎn)和一般的強(qiáng)制轉(zhuǎn)換不一樣,bit進(jìn)行強(qiáng)制轉(zhuǎn)換時(shí),只要num不等于0(或者0x00),那么tmp =(bit) num的結(jié)果就是1,自然地如果num=0,那么tmp=0。 - intrins.h里面包含這樣一個(gè)函數(shù):_nop_();,代表延時(shí)一個(gè)機(jī)器周期。
機(jī)器周期=晶振周期*12; C總線傳輸?shù)睦蹋?/font>
從機(jī)整個(gè)有一個(gè)地址OP,從機(jī)內(nèi)部有多個(gè)寄存器,所以地址要寫(xiě)兩個(gè),即先寫(xiě)整個(gè)的,再寫(xiě)寄存器的。 MPU6050的R/W位是最低位,如圖SPI Address format SPI Data format MPU-60X0的Slave地址為b110100X,7位字長(zhǎng),最低有效位X由AD0管腳上的邏輯電平?jīng)Q定。這樣就可以允許兩個(gè)MPU-60X0連接到同一條I2C總線,此時(shí),一個(gè)設(shè)備的地址為b1101000(AD0為邏輯低電平),另一個(gè)為b1101001( AD0為邏輯高)。 MPU6050的默認(rèn)SLAVE地址的高七位是1101000(),最低位默認(rèn)為0,有需要時(shí)置1; WHO_AM_I寄存器的低七位的高6位存放的是110100,最低位存放的是AD0引腳電平,它的最高位(第八位)沒(méi)有任何作用,不用管。 WHO_AM_I 的寄存器地址為0x75,默認(rèn)值就是0x68 陀螺儀角速度量程:?jiǎn)挝粸?度每秒(°/s),指的是如果陀螺儀每秒轉(zhuǎn)動(dòng)不超過(guò)多少度則陀螺儀可以測(cè)量。比如±125,就是在每秒轉(zhuǎn)動(dòng)125°之內(nèi)的能測(cè)出來(lái)。陀螺儀量程越大,精度越低。 陀螺儀加速度量程:?jiǎn)挝粸橛?jì)數(shù)單位為g(重力加速度). 陀螺儀角速度靈敏度:?jiǎn)挝粸?LSB/(°/s),LSB是數(shù)字輸出方式下的最小有效位,在這里就是一個(gè)二進(jìn)制位。 所以靈敏度=65536/量程的區(qū)間長(zhǎng)度(比如量程為 100°/s,則除以200); 陀螺儀的加速度靈敏度:可以用LSB/g來(lái)表示,則靈敏度可以表示為: 65536/加速度量程區(qū)間長(zhǎng)度(比如量程是 g,則除以4) 加速度:1g代表一個(gè)重力加速度,即以9.8m/s為單位大小。 在數(shù)字輸出方式下,陀螺儀靈敏度可用mg/LSB來(lái)表示。 陀螺儀輸出的ADC角速度值與°/s(角速度)之間的換算:輸出的ADC值的單位是LSB,則 某一個(gè)軸的角速度=ADC值/角速度靈敏度; 陀螺儀輸出的ADCRx加速度值與g之間的換算: 某一個(gè)軸的加速度=ADCRx值/加速度靈敏度; MPU6050的重要寄存器: - WHO_AM_I: 地址0x75,默認(rèn)值0x68
WHO_AM_I寄存器的低七位的高6位存放的是110100,最低位存放的是AD0引腳電平,它的最高位(第八位)沒(méi)有任何作用,不用管。 - PWR_MGMT_1: 地址0x6b,默認(rèn)值0x40,使用時(shí)置0x00
用于配置電源模式和時(shí)鐘源。提供了一位用來(lái)重置整個(gè)儀器,以及一位用來(lái)禁用溫度傳感器。 Register(Hex) | Register(Decimal) | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | 6B | 107 | DEVICE _RESET | SLEEP | CYCLE | - | TEMP_DIS | CLKSEL[2:0] |
位7:置1時(shí)所有寄存器復(fù)位,然后自動(dòng)置0. 位6:置1時(shí)進(jìn)入低電壓休眠狀態(tài);當(dāng)SLEEP置1時(shí),若CYCLE置1,則進(jìn)入循環(huán)模式。在循環(huán)模式下,儀器將在睡眠和活動(dòng)狀態(tài)下來(lái)回轉(zhuǎn)換來(lái)從活動(dòng)狀態(tài)的傳感器獲取一個(gè)數(shù)據(jù)樣本,其頻率由LP_WAKE_CTRL決定。為了配置喚醒頻率,需要配合使用LP_WAKE_CTRL和兩個(gè)電源管理寄存器。 位3:置1時(shí)禁用溫度傳感器。 位2,1,0:選擇時(shí)鐘源。 CLKSEL | Clock Source | 000 | 內(nèi)部8MHZ振蕩器,平時(shí)用這個(gè)即可 | 001 | 具有X軸陀螺基準(zhǔn)的鎖相環(huán) | 010 | 具有Y軸陀螺基準(zhǔn)的鎖相環(huán) | 011 | 具有Z軸陀螺基準(zhǔn)的鎖相環(huán) | 100 | PLL with external 32.768kHz reference | 101 | PLL with external 19.2MHz reference | 110 | 儲(chǔ)存保留 | 111 | 停止時(shí)鐘并讓計(jì)時(shí)發(fā)生器保持重置狀態(tài) |
- SMPLRT_DIV:地址0x19,默認(rèn)值0x00
Register(Hex) | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | 19 | SMPLRT_DIV[7:0] |
用于指定陀螺儀的采樣率。 采樣速率=陀螺儀輸出速率/(1+SMPLRT_DIV) 其中,當(dāng)DLPF_CFG=000或111時(shí)(詳情見(jiàn)CONFIG寄存器),陀螺儀輸出速率=8KHZ;當(dāng)數(shù)字低通濾波器(DLPF)被禁用時(shí),陀螺儀輸出頻率是1KHZ(平時(shí)禁用就行了); 注意:加速度計(jì)的輸出頻率是1KHZ。這意味著當(dāng)采樣速率高于1KHZ時(shí),同樣的加速度計(jì)采樣江北輸出到FIFO,DMP,和不止一個(gè)寄存器中。 3:CONFIG:地址0x1a,默認(rèn)值0x00 Register(Hex) | Register(Decimal) | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | 1A | 26 | - | - | EXT_SYNC_SET[2:0] | DLPF_CFG[2:0] |
此寄存器用于配置外部幀同步引腳采樣,以及 陀螺儀和加速度計(jì)的 數(shù)字低通濾波器的相關(guān)設(shè)置。 與FSYNC引腳鏈接的外部信號(hào)可以被EXT_SYNC_SET采樣。 FSYNC引腳的信號(hào)變化會(huì)被鎖存,這樣就可以獲得很短的頻閃信號(hào)。被鎖存的FSYNC引腳數(shù)據(jù)會(huì)被認(rèn)為是采樣率,就像SMPLRT_DIV里定義的那樣。采樣過(guò)后,鎖存器會(huì)重置成當(dāng)前的FSYNC信號(hào)狀態(tài)。 采樣值將被反饋到由EXT_SYNC_SET的值決定的傳感器的數(shù)據(jù)寄存器的最低有效位。 位5,4,3:EXT_SYNC_SET EXT_SYNC_SET | FSYNC Bit Location | 0 | 禁止輸入,平時(shí)用這個(gè) | 1 | TEMP_OUT_L[0] 溫度傳感器的低八位寄存器的最低有效位 | 2 | GYRO_XOUT_L[0] 陀螺儀X軸 | 3 | GYRO_YOUT_L[0] 陀螺儀Y軸 | 4 | GYRO_ZOUT_L[0] 陀螺儀Z軸 | 5 | ACCEL_XOUT_L[0] 加速度計(jì)X軸 | 6 | ACCEL_YOUT_L[0] 加速度計(jì)Y軸 | 7 | ACCEL_ZOUT_L[0] 加速度計(jì)Z軸 |
位2,1,0:DLPF_CFG,用于設(shè)置陀螺儀和加速度計(jì)的數(shù)字低通濾波頻率(DLPF) ,如下表: DLPF_CFG | 加速度計(jì) (Fs = 1kHz) | 陀螺儀 | Bandwidth(帶寬)(Hz) | Delay (ms) | Bandwidth (Hz) | Delay (ms) | Fs (kHz) | 000 | 260 | 0 | 256 | 0.98 | 8 | 001 | 184 | 2.0 | 188 | 1.9 | 1 | 010 | 94 | 3.0 | 98 | 2.8 | 1 | 011 | 44 | 4.9 | 42 | 4.8 | 1 | 100 | 21 | 8.5 | 20 | 8.3 | 1 | 101 | 10 | 13.8 | 10 | 13.4 | 1 | 110,平時(shí)用這個(gè) | 5 | 19.0 | 5 | 18.6 | 1 | 111 | RESERVED(保留) | RESERVED(保留) | 8 |
- GYRO_CONFIG: 地址0x1b,默認(rèn)值0x00
| Register(Decimal) | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | 1B | 27 | XG_ST | YG_ST | ZG_ST | FS_SEL[1:0] | - | - | - |
這個(gè)寄存器用于觸發(fā)陀螺儀自檢,以及配置陀螺儀量程。 陀螺儀自檢的作用:允許用戶檢測(cè)陀螺儀的機(jī)械和電氣部分。陀螺儀的每個(gè)軸的自檢可以通過(guò)控制XG_ST,YG_ST和ZG_ST來(lái)激活。每個(gè)軸的自檢可以同時(shí)獨(dú)立運(yùn)行。 當(dāng)自檢被激活時(shí),在線的電氣部分將會(huì)驅(qū)動(dòng)合適的傳感器。這種驅(qū)動(dòng)將移動(dòng)傳感器的依據(jù)質(zhì)量在相當(dāng)于一個(gè)預(yù)先定義的科里奧利力的距離。這個(gè)依據(jù)質(zhì)量的取代將會(huì)導(dǎo)致傳感器輸出的變化,而這又將導(dǎo)致輸出信號(hào)被反射。輸出信號(hào)被用來(lái)觀察自檢響應(yīng)情況。平時(shí)不用自檢。 自檢響應(yīng)的定義如下: 自檢響應(yīng)=自檢允許情況下的傳感器輸出值-自檢不允許情況下的傳感器輸出值 當(dāng)自檢響應(yīng)值被限制在最小或者最大產(chǎn)品規(guī)格時(shí),該部分已通過(guò)自檢。當(dāng)自檢響應(yīng)超過(guò)產(chǎn)品規(guī)格文檔中指定的最小/最大值時(shí),該部分被視為自檢失敗。 位4,3(FS_SEL):是用來(lái)選擇陀螺儀的量程的,具體見(jiàn)下表: FS_SEL | Full Scale Range | 00 | ± 250 °/s | 01 | ± 500 °/s | 10 | ± 1000 °/s | 11 | ± 2000 °/s,平時(shí)用這個(gè) |
- ACCEL_CONFIG:地址0x1c,默認(rèn)值0x00
Register(Hex) | Register(Decimal) | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | 1C | 28 | XA_ST | YA_ST | ZA_ST | AFS_SEL[1:0] | ACCEL_HPF[2:0] |
此寄存器用于啟動(dòng)加速度計(jì)自檢以及配置加速度計(jì)的量程。也用于配置數(shù)字高通濾波器(DHPF)。 (說(shuō)明同GYRO_CONFIG,平時(shí)不自檢) 位4,3(AFS_SEL):用于設(shè)置加速度計(jì)量程,具體如下表: AFS_SEL | Full Scale Range | 00 | ± 2g,平時(shí)用這個(gè) | 01 | ± 4g | 10 | ± 8g | 11 | ± 16g |
位2,1,0(ACCEL_HPF):用于配置數(shù)字高通濾波器(DHPF)的路徑可用并導(dǎo)致運(yùn)動(dòng)探測(cè)器(自由落體,運(yùn)動(dòng)閾值和零運(yùn)動(dòng))。高通濾波器的輸出對(duì)于數(shù)據(jù)寄存器來(lái)說(shuō)并不可用(詳情見(jiàn)產(chǎn)品規(guī)格說(shuō)明書(shū)第八部分)。 高通濾波器有三種模式: 1.Reset: 濾波器輸出在一個(gè)采樣中歸零。這可以有效的禁用高通濾波器。此模式可以切換快速解決濾波器。 2.On: 數(shù)字高通濾波器會(huì)讓頻率高過(guò)截止頻率的信號(hào)通過(guò)。 3.Hold: 切換到此模式時(shí),濾波器將保持現(xiàn)有采樣。濾波器輸出將會(huì)是輸入采樣和保持采樣之間的區(qū)別。 具體如下表: ACCEL_HPF | Filter Mode | Cut-off Frequency(高通濾波頻率) | 000 | Reset | None | 001 | On | 5Hz,平時(shí)用這個(gè) | 010 | On | 2.5Hz | 011 | On | 1.25Hz | 100 | On | 0.63Hz | 111 | Hold | None |
ACCEL_XOUT_H:地址0x3b:加速度計(jì)X軸高八位 ACCEL_XOUT_L: 0x3c: 加速度計(jì)X軸低八位 ACCEL_YOUT_H: 0x3d: 加速度計(jì)Y軸高八位 ACCEL_YOUT_L: 0x3e: 加速度計(jì)Y軸低八位 初始值0x00 ACCEL_ZOUT_H: 0x3f: 加速度計(jì)Z軸高八位 ACCEL_ZOUT_L: 0x40: 加速度計(jì)Z軸低八位 用于存儲(chǔ)加速度計(jì)的最近測(cè)量值,所記錄的數(shù)據(jù)是以LSB為單位的加速度值。 加速度傳感器內(nèi)部寄存器組中的數(shù)據(jù)總是以采樣速率更新,同時(shí),當(dāng)串行接口空閑時(shí),面向用戶的讀寄存器組重復(fù)內(nèi)部寄存器組的數(shù)據(jù)值,這保證了傳感器寄存器的突發(fā)讀取將讀取來(lái)自同一采樣時(shí)刻的測(cè)量。 每一個(gè)加速度計(jì)測(cè)量器偶有一個(gè)在ACCEL_FS寄存器里定義的滿刻度。對(duì)于每一個(gè)滿刻度設(shè)置,每LSB的加速度計(jì)靈敏度如下表: AFS_SEL | 量程 | LSB 靈敏度 | 00 | ±2g | 16384 LSB/mg | 01 | ±4g | 8192 LSB/mg | 10 | ±8g | 4096 LSB/mg | 11 | ±16g | 2048 LSB/mg |
TEMP_OUT_H:地址0x41:溫度傳感器測(cè)量值寄存器高八位 初始值0x00 TEMP_OUT_L:地址0x42:溫度傳感器測(cè)量值寄存器低八位 GYRO_XOUT_H:地址0x43GYRO_XOUT_L: 0x44 GYRO_YOUT_H: 0x45 用于記錄陀螺儀各軸測(cè)量值,默認(rèn)值0x00 GYRO_YOUT_L: 0x46 GYRO_ZOUT_H: 0x47 GYRO_ZOUT_L: 0x48 同加速度計(jì)測(cè)量值寄存器,量程與LSB表示的靈敏度關(guān)系如下表: FS_SEL | Full Scale Range | LSB Sensitivity | 0 | ± 250 °/s | 131 LSB/°/s | 1 | ± 500 °/s | 65.5 LSB/°/s | 2 | ± 1000 °/s | 32.8 LSB/°/s | 3 | ± 2000 °/s | 16.4 LSB/°/s |
這幾個(gè)寄存器的數(shù)據(jù)的含義是以LSB為單位的角速度值。
完整的Word格式文檔51黑下載地址:
|