日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

HX720/HX711 数据采集及处理姿态解析(公式及源码)

發(fā)布時(shí)間:2024/4/13 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HX720/HX711 数据采集及处理姿态解析(公式及源码) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.由于世面上面普及HX711,單HX720有更大的優(yōu)勢(shì)!

?

2.驅(qū)動(dòng)源碼

//管腳定義 #define HX720_RCC RCC_APB2Periph_GPIOB //HX720時(shí)鐘引腳 #define HX720CLK_Port GPIOB //HX720時(shí)鐘引腳 #define HX720CLK_Pin GPIO_Pin_15 //HX720時(shí)鐘引腳 #define HX720_RCC RCC_APB2Periph_GPIOB //HX720數(shù)據(jù)引腳 #define HX720Read_Port GPIOB //HX720數(shù)據(jù)引腳 #define HX720Read_Pin GPIO_Pin_14 //HX720數(shù)據(jù)引腳 //定義 #define HX720_CLK_H() (GPIO_SetBits(HX720CLK_Port,HX720CLK_Pin)) //時(shí)鐘線置高電平 #define HX720_CLK_L() (GPIO_ResetBits(HX720CLK_Port,HX720CLK_Pin))//時(shí)鐘線置低電平 #define GetDataPinState() (GPIO_ReadInputDataBit(HX720Read_Port,HX720Read_Pin))//獲取引腳狀態(tài)//管腳初始化 // 稱引腳初始化 void BalancePortInit(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(HX720_RCC, ENABLE);GPIO_InitStructure.GPIO_Pin = HX720CLK_Pin; //時(shí)鐘 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(HX720CLK_Port, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = HX720Read_Pin;//數(shù)據(jù)GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(HX720Read_Port, &GPIO_InitStructure); }//機(jī)器周期延時(shí) __NOP(); 1個(gè)us void DelayHX720us() {__NOP();__NOP(); }//獲取HX720數(shù)據(jù) uint32_t GetHX720Data(void) { volatile uint32_t Count= 0;uint8_t i;HX720_CLK_L(); //使能AD(SCK置低)Count=0;while(GetDataPinState()); //AD轉(zhuǎn)換未結(jié)束則等待。否則開始讀取for (i=0;i<24;i++){HX720_CLK_H(); //SCK 置高(脈沖)//DelayHX720us();Count=Count<<1; //下降沿來(lái)時(shí)變量Count左移一位,右側(cè)補(bǔ)HX720_CLK_L(); //PD_SCK 置低//DelayHX720us();if(GetDataPinState()) Count++;//最右側(cè)補(bǔ)1}//測(cè)量128增益 10HZHX720_CLK_H();Count = Count^0x800000;//第25個(gè)脈沖下降沿來(lái)時(shí),轉(zhuǎn)換數(shù)據(jù) 異或//Count = Count & 0x7FFFFF; //恢復(fù)//DelayHX720us();HX720_CLK_L();//DelayHX720us();//測(cè)量VBAT-VOUTHX720_CLK_H();//DelayHX720us();HX720_CLK_L();//DelayHX720us();//128增益 40HZ HX720_CLK_H();//DelayHX720us();HX720_CLK_L();//DelayHX720us();return(Count);//輸出的數(shù)據(jù)是帶符號(hào)的輸出,處理數(shù)據(jù)的時(shí)候需要把符號(hào)去掉 }

3.數(shù)據(jù)分析

  • 數(shù)據(jù)手冊(cè)寫 輸出數(shù)據(jù)在0x800000 - 7FFFFF之間。

  • 這個(gè)數(shù)據(jù)大家很迷惑估計(jì),上面說(shuō)的是 是以二進(jìn)制補(bǔ)碼的方式輸出的
  • 0x800000 BIT=?1000 0000 0000 0000 0000 0000?? (24位)
  • 0x7FFFFF BIT=??011111111111111111111111??? (24位)
  • 那下面看下 補(bǔ)碼的定義:計(jì)算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼來(lái)表示和存儲(chǔ)。原因在于,使用補(bǔ)碼,可以將符號(hào)位和數(shù)值域統(tǒng)一處理;同時(shí),加法和減法也可以統(tǒng)一處理,符號(hào)位都是用0表示“正”,用1表示“負(fù)”
  • 這樣就不難理解了,0x800000 最高位代表負(fù)數(shù),這樣 會(huì)出現(xiàn)1111 1111 1111 1111 1111 1111 - 7FFFFF 到 + 7FFFFF,這就出現(xiàn)一個(gè)問(wèn)題 最小不是 0X800000,而是 帶符號(hào)的 FFFFFF。這是我對(duì)數(shù)據(jù)的理解
  • 有個(gè)Blog也有講數(shù)據(jù)分析的? 傳送門 可以看一下
  • 這樣數(shù)據(jù)如果 異或? ^0x800000?? (相同為0 相異為1)? 這樣數(shù)據(jù)就會(huì)從 0x000000 ---? FFFFFF;
  • 數(shù)據(jù)這樣分析就應(yīng)該理解了

4.數(shù)據(jù)的處理

  • 由于 數(shù)據(jù) ^0x800000,這樣處理數(shù)據(jù)的時(shí)候最高位 就要小心處理,避免過(guò)零點(diǎn),如果 INP<INN,這樣數(shù)據(jù)是相反的,具體

  • ?因此想數(shù)據(jù)直接轉(zhuǎn)換為 采集的電壓就必須注意這一點(diǎn),如果 INP > INN 簡(jiǎn)單的去掉符號(hào)位,保留有效位就得到實(shí)際值了;反之就要去掉符號(hào)位,拿7FFFFF去減有效位,得到的是實(shí)際值

5.數(shù)據(jù)的計(jì)算方式

  • 看手冊(cè)是增益128? 手冊(cè)分辨率24bit,實(shí)際無(wú)噪聲是 16bit,不過(guò)算的話還是 24bit。如果采集的數(shù)據(jù)小的話 這樣可以用 16bi以下的數(shù)據(jù)就可以了,數(shù)據(jù)會(huì)準(zhǔn)確很多吧
  • 理論精度:
  • 計(jì)算方式:
  • 例 :INP - INN = 2Mv? (Vref單位也是Mv)

6.測(cè)量的數(shù)據(jù)轉(zhuǎn)化為溫度,誤差還是可以接受的

總結(jié)

以上是生活随笔為你收集整理的HX720/HX711 数据采集及处理姿态解析(公式及源码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。