久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 4423|回復(fù): 1
收起左側(cè)

MS5837-30BA壓力傳感器的使用

[復(fù)制鏈接]
ID:408946 發(fā)表于 2018-10-13 11:36 | 顯示全部樓層 |閱讀模式
碩士畢業(yè)設(shè)計(jì)做的是水下機(jī)器人。深度計(jì)就是測量水下機(jī)器人垂直方向位置的重要傳感器。
目前,常用的航模級(jí)水下壓力深度計(jì)是MS5837-30BA壓力傳感器,該傳感器I2C接口,量程為絕壓0~30Bar(0~3Mpa),內(nèi)部AD分辨率達(dá)24位,傳感器配上防水外殼就成為一款分辨率達(dá)2mm測量深度200米的深度傳感器。此外該傳感器還具有壓力值溫漂修正的功能,也可以作為溫度計(jì)使用。
該款傳感器是I2C接口的,(地址:1110110X WRITE:0,READ:1),通過這一通信模式,可以得到出產(chǎn)標(biāo)定的參數(shù)、實(shí)時(shí)檢測的壓力值和溫度值。
標(biāo)定參數(shù)這個(gè)傳感器有個(gè)優(yōu)點(diǎn),每個(gè)傳感器出廠時(shí),都進(jìn)行了標(biāo)定,標(biāo)定的參數(shù)會(huì)固化保存在傳感器的寄存器中,以便使用者進(jìn)行讀取,從而進(jìn)行修正。標(biāo)定參數(shù)如下表:
TIM%E6%88%AA%E5%9B%BE20180415232429-1024x226.png
表1 內(nèi)部參數(shù)
IIC地址指令如下,C0~C6對(duì)應(yīng)0xA0~0xAE,其中C0指令得到的16位數(shù)據(jù),前4位是CRC校驗(yàn)位,后12位是出產(chǎn)編號(hào),其余的就是參數(shù)對(duì)應(yīng)的地址指令。
TIM%E6%88%AA%E5%9B%BE20180415233340.png
通過I2C讀取了標(biāo)定參數(shù):
C0 0xB001  45057D  B-1011是四位CRC校驗(yàn)位
C1 0x857C  34172D                                              SENS
C2 0x872B  34603D                                              OFF
C3 0x4E6E  20078D                                               TCS
C4 0x5327  21287D                                               TCO
C5 0x665A  26202D                                               T_REF
C6 0x661E  26142D                                               TEMPSENS
crc校驗(yàn)程序如下:
  1. unsigned char crc4(unsigned int n_prom[]) // n_prom defined as 8x unsigned int (n_prom[8])
  2. {
  3. int cnt; // simple counter
  4. unsigned int n_rem=0; // crc remainder
  5. unsigned char n_bit;
  6. n_prom[0]=((n_prom[0]) & 0x0FFF); // CRC byte is replaced by 0
  7. n_prom[7]=0; // Subsidiary value, set to 0
  8. for (cnt = 0; cnt < 16; cnt++) // operation is performed on bytes
  9. { // choose LSB or MSB
  10. if (cnt%2==1) n_rem ^= (unsigned short) ((n_prom[cnt>>1]) & 0x00FF);
  11. else n_rem ^= (unsigned short) (n_prom[cnt>>1]>>8);
  12. for (n_bit = 8; n_bit > 0; n_bit--)
  13. {
  14. if (n_rem & (0x8000)) n_rem = (n_rem << 1) ^ 0x3000;
  15. else n_rem = (n_rem << 1);
  16. }
  17. }
  18. n_rem= ((n_rem >> 12) & 0x000F); // final 4-bit remainder is CRC code
  19. return (n_rem ^ 0x00);
  20. }
復(fù)制代碼

求解步驟
由于得到的標(biāo)定參數(shù)都是固化的,所以只需在初始化的時(shí)候讀一次即可。在獲取標(biāo)定參數(shù)之后,分為兩個(gè)步驟,第一步是利用標(biāo)定參數(shù)和測量的值,獲取壓力和溫度值,通過標(biāo)定參數(shù)進(jìn)行軟件補(bǔ)償;第二步是對(duì)壓力值進(jìn)行溫度補(bǔ)償。
第一步 壓力和溫度獲取和軟件補(bǔ)償
如圖1,在得到固定的校驗(yàn)參數(shù)以后,結(jié)合得到的標(biāo)定參數(shù) 可得到獲取24位精度的壓力(D1)和溫度(D2)
1
2
3
4
5
6
7
8
// Terms called
dT = D2-(uint32_t)(C[5])*256L;
SENS = (int64_t)(C[1])*32768L+((int64_t)(C[3])*dT)/256L;
OFF = (int64_t)(C[2])*65536L+((int64_t)(C[4])*dT)/128L;
     
//Temp and P conversion
Ms5837_Temp = 2000L+(int64_t)(dT)*C[6]/8388608LL;
Ms5837_P = (D1*SENS/(2097152L)-OFF)/(8192l);






TIM%E6%88%AA%E5%9B%BE20180416195656.png
圖1 壓力和溫度讀取以及軟件補(bǔ)償
第二步 溫度補(bǔ)償
在得到第一步的溫度和壓力后,對(duì)壓力值進(jìn)行溫度補(bǔ)償,步驟如圖2。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Second order compensation
  if((Ms5837_Temp/100)<20){         //Low temp
    Ti = (3*(int64_t)(dT)*(int64_t)(dT))/(8589934592LL);
    OFFi = (3*(Ms5837_Temp-2000)*(Ms5837_Temp-2000))/2;
    SENSi = (5*(Ms5837_Temp-2000)*(Ms5837_Temp-2000))/8;
    if((Ms5837_Temp/100)<-15){    //Very low temp
      OFFi = OFFi+7*(Ms5837_Temp+1500l)*(Ms5837_Temp+1500l);
      SENSi = SENSi+4*(Ms5837_Temp+1500l)*(Ms5837_Temp+1500l);
    }
  }
  else if((Ms5837_Temp/100)>=20){    //High temp
    Ti = 2*(dT*dT)/(137438953472LL);
    OFFi = (1*(Ms5837_Temp-2000)*(Ms5837_Temp-2000))/16;
    SENSi = 0;
  }
   
  OFF2 = OFF-OFFi;           //Calculate pressure and temp second order
  SENS2 = SENS-SENSi;
   
  Ms5837_Temp = (Ms5837_Temp-Ti);
  Ms5837_P = (((D1*SENS2)/2097152l-OFF2)/8192l);





TIM%E6%88%AA%E5%9B%BE20180512203115.png

TIM%E6%88%AA%E5%9B%BE20180512205050.png
圖2 溫度補(bǔ)償流程

I2C接口讀取流程流程圖如圖3所示,先是讀取標(biāo)定值,然后依次對(duì)壓力和溫度的24位數(shù)據(jù)進(jìn)行讀取。讀取前,需要對(duì)其進(jìn)行轉(zhuǎn)換(conversion),不同采樣率和采樣對(duì)象,對(duì)應(yīng)不同的指令,指令如圖4。不同的采樣率對(duì)應(yīng)不同的轉(zhuǎn)換時(shí)間(見圖5)。

TIM%E6%88%AA%E5%9B%BE20180512205739.png
圖3 IIC讀取流程圖
TIM%E6%88%AA%E5%9B%BE20180512205728.png
圖4 指令
圖5 采樣率與轉(zhuǎn)換時(shí)間
每個(gè)步驟I2C具體流程見datasheet P10-11

datasheetENG_DS_MS5837-30BA_B1
學(xué)習(xí),學(xué)習(xí),還是學(xué)習(xí)

回復(fù)

使用道具 舉報(bào)

ID:586837 發(fā)表于 2019-7-19 13:11 | 顯示全部樓層
最近我也在做這個(gè),但是在stm32讀i2c上碰見了問題,沒有stm32的基礎(chǔ),不會(huì)用
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久热中文字幕 | 黄色录像免费看 | 四虎黄色网址 | 欧美黄色网 | 黄色三级在线观看 | 日韩福利在线 | 毛片资源| 国产激情 | 黄视频网站在线观看 | 国产一区二区三区在线 | 韩日欧美 | 一级黄色片免费观看 | 日韩欧美色 | 一区在线观看视频 | 免费的黄色网址 | 成人高潮片免费网站 | 免费国产精品视频 | 成年人网站在线免费观看 | 精品久久久久久久久久久久久久 | 国产美女福利 | 天天曰天天干 | 欧美一级网站 | 欧美一区在线视频 | 日本www在线观看 | 神马午夜嘿嘿 | 久久在线免费观看 | 久久久久亚洲精品 | 国产av一级毛片 | 国产91久久婷婷一区二区 | 永久免费看片在线播放 | 久久婷婷网 | 婷久久| 欧美激情一区二区 | 天天天天天干 | 激情综合久久 | 成人日韩在线 | 欧美成人精品欧美一级乱黄 | 久久久久久久影院 | 麻豆一区二区三区四区 | 亚洲一区二区在线播放 | 久久99精品久久久久久琪琪 |