日韩在线不卡免费视频一区,日韩欧美精品一区二区三区经典,日产精品码2码三码四码区,人妻无码一区二区三区免费,日本feerbbwdh少妇丰满

電子工程師聯(lián)盟
認(rèn)證:VIP會員
作者動態(tài)
一文了解PCB材質(zhì)及其應(yīng)用特性,總有一種你沒見過!
4天前
閂鎖效應(yīng):芯片的"自毀開關(guān)",從EMC誘因到板級防護(hù)措施一文說清
3星期前
PCB布局布線的基本原則
3星期前
淺談車門把手觸摸開鎖實(shí)現(xiàn)原理
08-12 09:18
Altium Designer18 Gerber 文件的生成方法
08-11 11:50

基于NTC電阻的溫度采集軟硬件設(shè)計(jì)與實(shí)現(xiàn)

一、NTC測溫原理

NTC熱敏電阻測溫,本質(zhì)是將溫度變化轉(zhuǎn)化為可測量的電阻變化,再通過電路和算法轉(zhuǎn)換為溫度讀數(shù)。

1. NTC的核心特性 - 負(fù)溫度系數(shù)

 NTC由對溫度敏感的半導(dǎo)體金屬氧化物材料制成。其內(nèi)部的導(dǎo)電機(jī)制是“躍遷”導(dǎo)電。當(dāng)溫度升高時(shí),材料中被束縛的電子獲得更多能量,更容易掙脫束縛成為自由電子參與導(dǎo)電,同時(shí)材料本身也會產(chǎn)生更多的電子-空穴對。這導(dǎo)致材料的導(dǎo)電能力急劇增強(qiáng),電阻值(Rt)呈指數(shù)規(guī)律顯著下降。這種電阻隨溫度升高而減小的特性稱為負(fù)溫度系數(shù)(NTC)。

2. 電路實(shí)現(xiàn) - 分壓測量

為了測量NTC的電阻變化,最常用的方法是將其與一個(gè)精度和溫漂都很好的固定參考電阻(Rs)串聯(lián),接入穩(wěn)定的直流電壓源(Vcc),形成一個(gè)分壓器。NTC電阻(Rt)上的分壓(Vout)即為測量點(diǎn)電壓:Vout = Vcc * (Rt / (Rs + Rt))。

3. 信號采集 - ADC轉(zhuǎn)換

使用微控制器(MCU)或其他數(shù)據(jù)采集系統(tǒng)內(nèi)置的模數(shù)轉(zhuǎn)換器(ADC) 通道,采集NTC兩端的電壓Vout。這個(gè)模擬電壓值被ADC轉(zhuǎn)換為數(shù)字量(ADC Code)。

4. 數(shù)學(xué)轉(zhuǎn)換 - 溫度計(jì)算

得到ADC值后,結(jié)合已知的Vcc、Rs和ADC的參考電壓/分辨率,可以計(jì)算出當(dāng)前的Rt值。最關(guān)鍵的一步是將Rt值轉(zhuǎn)換為溫度值。 由于NTC的Rt-T關(guān)系是高度非線性的,不能簡單地用線性公式。通常采用精度較高的Steinhart-Hart方程:1/T = A + B * ln(Rt) + C * (ln(Rt))^3其中,T是絕對溫度(單位:開爾文K),A, B, C 是NTC元件特定的常數(shù)(可從廠家數(shù)據(jù)手冊獲?。??;蛘呤褂镁壬缘偷?jì)算更簡單的B值方程(β值方程):1/T = 1/T0 + (1/B) * ln(Rt/R0)其中,T0是參考溫度(通常為25°C=298.15K),R0是NTC在T0溫度下的標(biāo)稱電阻值,B是材料常數(shù)(B值)。MCU通過程序執(zhí)行這些數(shù)學(xué)計(jì)算,最終得到精確的溫度值(通常轉(zhuǎn)換為攝氏度℃)。

二、NTC溫度采集實(shí)現(xiàn)

1、理論計(jì)算

我選用了一個(gè)B值是3950,25℃下阻值為10KΩ,精度為1%的NTC電阻,來實(shí)現(xiàn)溫度采集。首先是電路設(shè)計(jì),使用3.3V供電,考慮到我的主要應(yīng)用場景就是測室溫,所以分壓電阻選擇10K,目的是為了讓常溫下的ADC阻值剛好落在整個(gè)測溫范圍的中間。C16用來濾除電源上過來的干擾。如下圖所示:

下圖是該NTC電阻所匹配的溫度阻值對照表,一般NTC廠家均可提供。

下圖是根據(jù)溫度阻值表中各個(gè)溫度值對應(yīng)的實(shí)時(shí)阻值、串聯(lián)電阻的阻值、ADC滿量程的數(shù)字值,計(jì)算出來對應(yīng)溫度值的ADC數(shù)值。

2、代碼實(shí)現(xiàn)

然后使用查表及二分法實(shí)現(xiàn)溫度采集后的計(jì)算,以下代碼經(jīng)過測試驗(yàn)證。

/********************************************************************
* name:        : TspBinaryTableSearch( uint16_t adc_val )
* description  : Calculation of NTC temperature by binary table lookup method (二分法)
* Input   : adc_val  current adc value 
* Output   : uint16_t  tempdat
* Return   : None
********************************************************************/
static uint16_t TspBinaryTableSearch( uint16_t adc_val )
{
  uint16_t start = 0U, end = 0U, mid = 0U,tempdat = 0U;
  /* Get the arry length */
  end = ( sizeof( NTC_adc_table )/ sizeof( NTC_adc_table[0] ) ) - 1U;
  /* Data anomaly judgment */
  if( adc_val <= TSP_SHORT_CIRCUIT_THRESHOLD )
  {  
    return 1U;
  }
  else if( adc_val >= TSP_OPEN_CIRCUIT_THRESHOLD )
  {  
    return 2U;
  }  
  else if( adc_val > NTC_adc_table[0] )
  {
    return 3U;
  }  
  else if( adc_val < NTC_adc_table[end - 1U] )
  {
    return 4U;
  }
  while ( start <= end )
  {
    /* Get the mid value */
    mid = (start + end) >> 1; 
    /* Just find */
    if( adc_val ==  NTC_adc_table[mid] )
    {
      break;
    }
    /* Right in between two temperature points */
    if( ( adc_val < NTC_adc_table[mid] ) && ( adc_val > NTC_adc_table[mid+1U] ) )
    {
      break;
    }
    /* The current AD value less than the middle of the array indicates 
    /* the second half of the number to look for 
    */
    if( adc_val < NTC_adc_table[mid] )
    {
      start = mid + 1U; 
    }
    /* The current AD value greater than the middle of the array indicates 
     * that the number to be found is in the first half 
    */
    else if( adc_val > NTC_adc_table[mid] )
    {
      end = mid - 1U;  
    }
  }
  tempdat = ( NTC_Temperature_table[mid] + (float)( NTC_adc_table[mid] - adc_val ) / (float)( NTC_adc_table[mid] - NTC_adc_table[mid+1] ) + 0.5)*10;

  return  tempdat;
}

以上就是今天的內(nèi)容,書不盡言,難免有疏漏之處,還請多加斟酌,這里做個(gè)記錄。

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 3
收藏 4
關(guān)注 51
成為作者 賺取收益
全部留言
0/200
成為第一個(gè)和作者交流的人吧