色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

聚豐項目 > 基于STM32的高精度氣體傳感器的設計

基于STM32的高精度氣體傳感器的設計

本項目應用電調制紅外光源,根據朗伯—比爾(Lambert-Beer)吸收定律,采用熱釋電紅外傳感器,主要設計了一款高精度的氣體傳感器,用于檢測煤炭經過燃燒以后均勻氣體中CO2、CO、SO2、H2的濃度,從而達到檢測煤炭中含C和S的百分比。

h1654155909.0656 h1654155909.0656

分享
1 喜歡這個項目
團隊介紹

h1654155909.0656 h1654155909.0656

團隊成員

陳新喜 副教授

分享
項目簡介
本項目應用電調制紅外光源,根據朗伯—比爾(Lambert-Beer)吸收定律,采用熱釋電紅外傳感器,主要設計了一款高精度的氣體傳感器,用于檢測煤炭經過燃燒以后均勻氣體中CO2、CO、SO2、H2的濃度,從而達到檢測煤炭中含C和S的百分比。
硬件說明

一:熱釋電紅外傳感器的組成和工作原理

           0b3a1c086b03f4e963d98615

圖1雙探測元熱釋電紅外傳感器內部結構圖  圖2:雙探測元熱釋電紅外傳感器實物圖

熱釋電紅外傳感器和熱電偶都是基于熱電效應原理的熱電型紅外傳感器。不同的是熱釋電紅外傳感器的熱電系數遠遠高于熱電偶,其內部的熱電元由高熱電系數的鐵鈦酸鉛汞陶瓷以及鉭酸鋰、硫酸三甘鐵等配合濾光鏡片窗口組成,其極化隨溫度的變化而變化。為了抑制因自身溫度變化而產生的干擾 該傳感器在工藝上將兩個特征一致的熱電元反向串聯或接成差動平衡電路方式,因而能以非接觸式檢測出物體放出的紅外線能量變化并將其轉換為電信號輸出。

熱釋電紅外傳感器在結構上引入場效應管的目的在于完成阻抗變換。由于熱電元輸出的是電荷信號,并不能直接使用,因而需要用電阻將其轉換為電壓形式 該電阻阻抗高達104MΩ,故引入的N溝道結型場效應管應接成共漏形式 即源極跟隨器 來完成阻抗變換。熱釋電紅外傳感器由傳感探測元、干涉濾光片和場效應管匹配器三部分組成。

1是一個雙探測元熱釋電紅外傳感器的結構示意圖。使用時D端接電源正極,G端接電源負極,S端為信號輸出。該傳感器將兩個極性相反、特性一致的探測元串接在一起,目的是消除因環境和自身變化引起的干擾。

二:電調制非分光紅外傳感器氣體分析機理:

當紅外光通過待測氣體時,氣體分子對特定波長的紅外光有吸收作用,其吸收關系服從朗伯—比爾(Lambert-Beer)吸收定律:設平行入射光的強度為I0,出射光的強度為I1,氣體介質的厚度為L,氣體的濃度為c,氣體的吸收系數為,則其關系表達式為:

                                    --1

其中是表示不同氣體的吸收系數,是表示不同氣體的濃度。

當為多種混合氣體時,為了分析特定特定的氣體組分,需要在傳感器或者紅外光源前安裝一個適合分析氣體吸收波長的窄帶濾光片,使傳感器的信號變化只反映被測氣體的濃度變化。

  三:硬件電路設計

     根據系統的設計要求,本系統的主要由一下幾個模塊組成:

圖3:系統硬件框圖

3.1  STM32主控電路圖

 

         圖4:STM32主控電路及平臺硬件圖

3.2  A/D轉換電路

圖5:A/D轉換電路原理圖

3.3:信號處理電路

 

     圖6:信號處理電路圖


軟件說明

4.1上位機監控軟件

4.2 下位機控制程序

#include

#include "absacc.h"

#include "intrins.h"

//#include "string.h"

//#include "math.h"

#include

//#include

 

#define  sum    (2)   //108   (76)  (140)//(28)   (22)      (240)

#define  Average        (10)

#define  Full_Scale     (65000)   //TBD adjust volatile resistance to get the value

#define  Coefficient    (6500)    //TBD

#define  nCHANNEL       (2)

 

bit              sample_flag,sampling_enabled;

//uint xdata signal_buffer[10],temp_buffer[10];

uchar    data   count,channel,Txd_count;

uint     xdata   sample_value[3][sum],average[3],adjust_value ;  //signal_value[3],temp_value[3];

 

//uint     xdata   signal_average,temp_average;

uint     xdata   concentration;

//longint  xdata   signal_sum,temp_sum;

 

unsigned long int data sampling_buffer,sample_value24;

void data_processing(void)

{

     uchar idata         i,j,checkout;

//  uint xdata          tmp;

//  longint  xdata         signal_sum;

//  float idata         tmp_val;

    EA=false;

    EX0=false;       

//  SCLK=true;  //reset the a/d chip       

 

 /*    for ( i=0;i<sum-1;i++ )

        {       

               for ( j=i+1;j<sum;j++ )

                      {

                             if ( sample_value[i]<sample_value[j] )

                                   {

                                          tmp=sample_value[i];

                                             sample_value[i]=sample_value[j];

                                             sample_value[j]=tmp;

                                      }

                         }              

           }    */

 

   // signal_sum=0;

/*        for ( i=6;i<sum-6;i++ )

        {

               signal_sum+=sample_value[i];

           }

 

 

    average[!channel]=signal_sum/(sum-12);      */

//////////////////////////////////////////////////

  /*   for ( i=0;i<sum;i++ )

        {

               signal_sum+=sample_value[0][i];

           }

 

 

    average[0]=signal_sum/sum;                                    //use

   */

//  sample_value24=sample_value24/sum;             

    //average[0]=average[0]*2;  //test

 

/*        signal_sum=0;  

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

        {

               signal_sum+=sample_value[1][i];

           }

 

 

    average[1]=signal_sum/sum;           */

    //average[1]=average[1]*2;  //test                       

  ////////////////////////////////////////////

   /*  if ( sample_value[0][0]>0x7000 )

        {

            adjust_value=sample_value[0][0]-0x7000; 

           

            sample_value[2][0]=sample_value[1][0]+adjust_value;

        } */

 

  ////////////////////////////////////////////

 

    sample_flag=false;

        

 

    //if ( !channel )

       {

             Txd_count++;

 

               Send_Disp(0x55);

 

            i=0;

            j=0;

                  checkout=0;//i^j;

 

                  i=sample_value[0][0]>>8;     

                  j=sample_value[0][0]&0x00ff;

             checkout=i^j;

 

            Send_Disp(i);

            Send_Disp(j);    //       so2

 

                  i=sample_value[1][0]>>8;     

                  j=sample_value[1][0]&0x00ff;

             checkout=checkout^i^j;

 

            Send_Disp(i);

            Send_Disp(j);    //co2         h2o

 

             Send_Disp(Txd_count);

            Send_Disp(0);

 

             checkout=checkout^Txd_count^0;

            

          /*     i=sample_value[2][0]>>8;     

                  j=sample_value[2][0]&0x00ff;

             checkout=checkout^i^j;

 

            Send_Disp(i);

            Send_Disp(j);    //H2O         check   temp

         */   

            Send_Disp(checkout);       

          }

 

 

 

    //SCLK=false;

    _nop_();

    LED_Green=Txd_count/128;  //!LED_Green;

    EA=true;

    //EX0=true;

    

 

    /*

    maximal=sample_value[0];

    minimal=sample_value[0];

 

    for ( i=1;i<Filter_times;i++ )

        {

               if ( maximal<sample_value[i] )   

                     {

                               serial_number[0]=i;

                               maximal=sample_value[i];

                        }

                  else if ( minimal>sample_value[i] )

                     {

                            serial_number[0]=i;

                               minimal=sample_value[i];

                        }

                  

           }     */

    /* float idata nVoltage;

 

     sample_flag=false;

     count++;

    if ( count>Filter_times )   

       {

                 //signal_sum += adjust_signal();  //sample_value[0];      

                       

            nVoltage=signal_sum/Average;               

                 nVoltage=Full_Scale/nVoltage;

                 nVoltage=log(nVoltage);

                 concentration=nVoltage*Coefficient;

                

                 //ES=false;

                 Send_Disp(concentration&0x00ff);

                 Send_Disp(concentration>>8);

            //ES=true;

 

                 signal_sum=0;

                 temp_sum=0;

                 count=0;

          }

    else

       {

              ;//signal_sum += adjust_signal();  //sample_value[0];

                 //temp_sum   += adjust_signal(1);  //sample_value[1];

          }

          */

    

}

/*

uchar rec_len;

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

void Main(void)

{

   _nop_();

   _nop_();

   _nop_();

   Mcu_Init();

   Variable_Init();

   delay(1000);       //for a/d chip reset

   SCLK=false;

   EA=true;

   //EX0=true;

 

   while(1)

     {

       Watch_Dog=!Watch_Dog;

      scout();

      if ( sample_flag ) data_processing();

     }

}


演示效果

 經過軟硬件的設計,將測試到的信號上傳到上位機監控窗口,監測到的信號如圖8和圖9所示。

常溫放箱體里(10HZ)

                   圖8:信號波形(箱體內常溫)

海綿隔熱恒溫

              圖9:圖8:信號波形(48度恒溫箱體內檢測)

由上面的測試數據可以看出,信號變化大概在130uV;測試精度高。


評論區(2 )
  • 動心忍性1234: 您好我是無線電雜志的編輯,我們對您的項目十分感興趣,請問您有興趣投稿嗎?成為我們的作者除稿費外還有其他優厚條件。敬請參與。投稿請聯系QQ260534978.

    回復

  • 可樂_47480004: 看不見圖片

    回復

主站蜘蛛池模板: 把极品白丝班长啪到腿软| 成人公开免费视频| 抽插性奴中出乳精内射| 国产制服丝袜91在线| 美女的避毛| 国产剧情福利AV一区二区| 久久免费精品一区二区| 日日噜噜大屁股熟妇| 一二三四在线播放免费观看中文版视频| 神马老子影院午夜伦| 一个人的免费高清影院| 东日韩二三区| 久久婷五月综合色啪首页| 色多多污污在线播放免费| 长泽梓黑人初解禁bdd07| 国产a级午夜毛片| 国产精品人妻99一区二| 玖玖爱这里只有精品视频| 四房色播手机版| 99爱在线精品视频免费观看9| 国产欧美一区二区精品性色tv| 你是淫荡的我的女王| 亚洲 成人网| 伧理片午夜伧理片| 久久免费高清| 亚洲 欧美 另类 中文 在线| JK白丝校花爽到娇喘视频| 九九99亚洲精品久久久久| 私人玩物黑丝| np高h肉辣一女多男| 久久精品免费电影| 亚洲AV成人无码999WWW| yy4408午夜场理论片| 久久综久久美利坚合众国| 亚洲AV美女成人网站P站| 成人小视频在线免费观看| 麻美ゆま夫の目の前で犯| 亚洲欧美综合在线中文| 国产精品99久久久久久AV色戒 | 成年人视频在线免费| 六月婷婷国产精品综合|