<progress id="jlsnq"><code id="jlsnq"></code></progress>

<strong id="jlsnq"><del id="jlsnq"></del></strong>
    <mark id="jlsnq"></mark>

    <legend id="jlsnq"><table id="jlsnq"></table></legend>
    <small id="jlsnq"></small>
  • <ruby id="jlsnq"><table id="jlsnq"></table></ruby>

      <strong id="jlsnq"></strong>

      24小時聯系電話:18217114652、13661815404

      中文

      您當前的位置:
      首頁>
      電子資訊>
      技術專題>
      單片機開發之HX711的...

      技術專題

      單片機開發之HX711的計算


      最近接了一個單片機開發項目,需要使用HX711芯片來處理稱重傳感器的值。作為一個多年老司機,在HX711官網上沒找到稱重值的計算方法,網上的資料也不全。因此在調試出HX711的稱重值之后,將項目過程做一個記錄,為后面開發的人提供微薄的幫助。

      硬件電路在此略過不提了,簡略說下HX711STM32單片機開發的過程。

      1、初始化硬件HX711_init;

      2、實現HX711 AD值讀取函數HX711_Read_AD;

      3、記錄沒有物品時HX711_Read_AD讀取的ADadj;

      4、編譯燒錄運行程序,將一個質量為M的物品放到托盤上,HX711_Read_AD讀出物品的AD值A1??捎嬎愕玫椒Q重系數 γ=M/(A1-adj);

      5、將γ常量系數寫入到代碼中,實現HX711_Read_Weight函數,例如HX711_Read_AD讀取待測物的AD值是A,待測物品質量m=(A-adj)*γ = M*(A-adj)/(A1-adj);

      以下代碼是HX711在STM32F103上的代碼實現,已經過驗證:

      #define HX711_SCK       PBout(13)  //SCK

      #define HX711_READ_SDA  PBin(12)   //輸入SDA

      static u32 adj = 0;//無物稱重時HX711讀出的AD

      /*初始化硬件*/

      void HX711_init(void)

      {

            u32 sum=0;

            int i=0;

             GPIO_InitTypeDef GPIO_InitStructure;

            RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE ); 

            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;

            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //推挽輸出

            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

            GPIO_Init(GPIOB, &GPIO_InitStructure);

             GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;

            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ;     //浮空輸入

            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

            GPIO_Init(GPIOB, &GPIO_InitStructure);

             HX711_Read_AD();

             for(i=0;i<10;i++){

                  delay_ms(100);

                  sum+=HX711_Read_AD();

            }

            adj = sum/10;

      }

      /**************************************************************

      24bit HX711讀取AD

      ***************************************************************/

      u32 HX711_Read_AD(void)

      {

            u32 count;

            u8 i;

            HX711_SCK = 0; //使能ADPD_SCK 置低)

            count=0;

            while(HX711_READ_SDA); //AD轉換未結束則等待,否則開始讀取

            delay_us(1);

            for (i=0;i<24;i++)

            {

                  HX711_SCK=1; //PD_SCK 置高(發送脈沖)

                  count=count<<1; //下降沿來時變量count左移一位,右側補零

                  if(HX711_READ_SDA) count++;

                  delay_us(1);

                  HX711_SCK=0; //PD_SCK 置低

                  delay_us(1);

            }

            HX711_SCK=1;

            delay_us(1);

            HX711_SCK=0;

            count=count^0x800000;//25個脈沖下降沿來時,轉換數據 

            return count;

      } 

      /*讀取物品質量,單位0.1g*/

      u32 HX711_Read_Weight(void)

      {

            u32 weight = 0;

            u32 count = HX711_Read_AD();     

            weight=((count-adj)*0.029017+5)/10;//5是為了四色五入,0.029017是稱重系數 ,這里的單位是0.1g,如果想更換單位,請將系數乘以或除以10

            return weight;

      }

      計算方法依據是通過HX711讀出AD值與物品質量程線性關系。另注意:每個HX711空載時的AD都不一樣,所以每個設備的HX711模塊都需要校零。

      作者:Winston

      轉載請注明出處:http://m.856024.com/TechnologyNews/c5a0fe24-4fa2-a112-54b6-3a8a33050b89.shtml

      請輸入搜索關鍵字

      確定
      色鲁99热99re超碰精品_91精品一区二区三区无码吞精_亚洲国产欧洲综合997久久_一级a性色生活片久久无
      <progress id="jlsnq"><code id="jlsnq"></code></progress>

      <strong id="jlsnq"><del id="jlsnq"></del></strong>
        <mark id="jlsnq"></mark>

      <legend id="jlsnq"><table id="jlsnq"></table></legend>
      <small id="jlsnq"></small>
    1. <ruby id="jlsnq"><table id="jlsnq"></table></ruby>

        <strong id="jlsnq"></strong>