曰本女人与公拘交酡,成人毛片100免费观看,动漫AV网站免费观看,亚洲国产成人精品无码区二本

聯(lián)系方式
聯(lián)系人:黃小姐
聯(lián)系電話:0755-25848978, 83738778
傳真號(hào)碼:0755-83738639
公司地址:深圳市寶安區(qū)西鄉(xiāng)街道寶源路深圳市名優(yōu)工業(yè)產(chǎn)品展示采購中心B座1區(qū)五樓508號(hào)
Email:sales@sandat.com
郵編:518102
公司網(wǎng)址:http://www.sandat.com
文章詳情

SMT16030溫度傳感器如何與MCS51單片機(jī)連接

日期:2025-04-30 18:31
瀏覽次數(shù):12418
摘要:

用英特爾MCS-51 單片機(jī)測量占空因數(shù)

Paul C. de Jong and Ferry N. Toth

測量占空因數(shù)*快的方法是借助硬件的幫助。MCS-51單片機(jī)因?yàn)檠b備了兩個(gè)內(nèi)部計(jì)時(shí)器/計(jì)數(shù)器,因此為這樣使用提供了可能性。

端口INT0 (P3.2)INT1 (P3.3)能通過硬件直接控制計(jì)時(shí)器/計(jì)數(shù)器。因此我們把它們看作“快速輸入”其他所有引腳只能通過軟件來控制計(jì)時(shí)器/計(jì)數(shù)器。包括傳感器SMT 160在內(nèi)的內(nèi)部硬件結(jié)構(gòu)如圖1所示。

                 圖1  8051內(nèi)部硬件結(jié)構(gòu)

此應(yīng)用指南描述了:A)四個(gè)通過硬件測量占空因數(shù)的匯編程序。B)一個(gè)通過軟件測量的程序。*后我們將討論哪種情況可以改善分辨率。

A1通過INT0 引腳實(shí)現(xiàn)硬件控制的測量

當(dāng)使用硬件測量占空因數(shù)時(shí),關(guān)于CPU的任務(wù)執(zhí)行方面會(huì)有一些限制:計(jì)時(shí)器TIMER0 TIMER1都被占用,通常TIMER1為通訊產(chǎn)生波特率。測量時(shí),CPU不允許發(fā)送或接收任何數(shù)據(jù)。

使用這種快速**的測量方法還有另一個(gè)限制,通過CPU空閑前的中斷信號(hào)來實(shí)現(xiàn)。這很重要,因?yàn)樵谥噶钐幚頃r(shí)會(huì)觸發(fā)中斷,而觸發(fā)中斷的指令首先被完成而且不同指令執(zhí)行時(shí)間不一樣。在空閑期間CPU不動(dòng)作。兩個(gè)計(jì)時(shí)器對(duì)空閑指令不動(dòng)作,這是MCS-51的一個(gè)重要特性。CPU 將通過中斷信號(hào)再次啟動(dòng)。這樣,CPU在中斷信號(hào)下會(huì)作出迅速反映。這種特殊的測量方法要求CPU不能運(yùn)行其他任何后臺(tái)程序,那樣會(huì)使測量和后臺(tái)程序均出錯(cuò)。

計(jì)時(shí)器/計(jì)數(shù)器選擇工作在16-bits計(jì)時(shí)模式下。因此,計(jì)時(shí)器/計(jì)數(shù)器模式控制寄存器當(dāng)值是19H時(shí)啟動(dòng)。這種模式下TIMER0只有當(dāng)P3.2是邏輯1時(shí)才工作,而TIMER1只能由軟件來控制。TIMER1用來測量總的測量時(shí)間。一次測量完成后占空因數(shù) P由下面公式來決定。

 

contents of TIMER0

p=  ---------------------------

contents of TIMER1

當(dāng)使用中斷信號(hào)使測量開始和停止時(shí),在信號(hào)跳變處可探測到的分辨率在1μs以內(nèi)。在輸入信號(hào)下降沿產(chǎn)生一個(gè)中斷信號(hào)(當(dāng)中斷標(biāo)志是激活的)。

用流程圖(fig. 2)說明測量。首先,設(shè)定兩個(gè)計(jì)時(shí)器的內(nèi)容。當(dāng)檢測到0-1跳變時(shí),初始部分開始傳輸。然后,中斷信號(hào)使能標(biāo)記被賦值并且調(diào)用空閑模式。此刻處理器等待中斷。當(dāng)輸入信號(hào)產(chǎn)生下一個(gè)1-0跳變時(shí),產(chǎn)生中斷,設(shè)定計(jì)數(shù)器控制寄存器內(nèi)的TR0 TR1(TCON)?,F(xiàn)在只有當(dāng)P3.2變?yōu)楦唠娖綍r(shí)TIMER0才運(yùn)行。因此它測量輸入信號(hào)是1的時(shí)間。TIMER1在整個(gè)測量過程中都處于工作狀態(tài)。注意TIMER1啟動(dòng)3μs太遲了,因?yàn)橐粋€(gè)中斷處理要花費(fèi)3μs。但在停止時(shí)同樣也采用這種方式,所以在*后結(jié)果中消除了延遲。

關(guān)于測量時(shí)間,需要選擇固定周期數(shù)或固定測量時(shí)間。因?yàn)橹芷诳梢栽?/font>300μs800μs之間變化,所以固定周期數(shù)是一個(gè)低效率的選擇。對(duì)周期短的信號(hào)的測量時(shí)間也會(huì)很短所以結(jié)果會(huì)受到取樣噪聲的干擾。因此對(duì)應(yīng)于16bits的機(jī)器周期選擇一個(gè)固定的測量時(shí)間。測量將在TIMER1產(chǎn)生溢出之后完成。這樣獲得17bits的結(jié)果,這些結(jié)果還需要復(fù)雜的軟件處理。使用帶有一個(gè)偏移的TIMER1初始化(測量前)解決了這個(gè)問題。這個(gè)偏移與兩個(gè)周期傳感器信號(hào)的*大長度相符合(時(shí)間上大概是1.6ms)。從17bits的結(jié)果中減去偏移量,就得到16bits的數(shù)據(jù)。

當(dāng)TIMER1產(chǎn)生一個(gè)溢出時(shí),測量必須停止(見圖2中右邊的分支)。傳感器信號(hào)的下一個(gè)1-0跳變發(fā)生時(shí),中斷使能標(biāo)志位被重置并且空閑模式再次被調(diào)用。中斷發(fā)生之后,TCON寄存器中的 TR0  TR1被清零。

對(duì)TIMER1中的偏移修正之后,利用兩個(gè)計(jì)時(shí)器中的內(nèi)容來計(jì)算占空比。

圖2  分辨率為一個(gè)機(jī)器周期的占空因數(shù)測量的流程圖

A2. 通過INT0 引腳串行通信測量 

上一節(jié)所介紹的方法是使用8051空閑模式在中斷的瞬間(輸入信號(hào)的下降沿)和對(duì)TIMER0開始取樣的瞬間之間來產(chǎn)生一個(gè)恒定延遲(中斷反映時(shí)間)。這是必須的,因?yàn)橹噶钐幚碛|發(fā)中斷時(shí),這個(gè)指令首先被完成,并且不是所有指令的執(zhí)行時(shí)間都是相同的。

在空閑模式期間,任何指令都不被執(zhí)行,因?yàn)榇藭r(shí)8051的執(zhí)行模塊不可用。但中斷計(jì)時(shí)器和串行模塊在運(yùn)行。這種模式下功耗顯著減少。

為了實(shí)現(xiàn)恒定的反映時(shí)間。只能有一個(gè)中斷源是可用的(像圖一中所示的)。但有時(shí)我們需要同時(shí)測量溫度和實(shí)現(xiàn)串行通信。可能需要串行通信像計(jì)時(shí)器一樣中斷它自己來產(chǎn)生波特率。使用33MHz 8051能同時(shí)實(shí)現(xiàn)1200波特通信和占空因數(shù)測量,而不需要增加加硬件,如圖3所示。

這樣,Timer 1的溢出率需要用來產(chǎn)生波特率。使用32.9856 MHz的晶體計(jì)時(shí)器TIMER1需要計(jì)數(shù)859個(gè)時(shí)鐘才能溢出。假定使用16位模式,Timer 1溢出位產(chǎn)生一個(gè)中斷(TF1)重載分配器的值。因?yàn)槲覀兪褂玫氖且粋€(gè)快速的處理器,所以同樣的中斷處理器能夠在短時(shí)間內(nèi)為軟件計(jì)數(shù)器增量。軟件計(jì)數(shù)器與Timer 1的實(shí)際值相結(jié)合作為一個(gè)時(shí)間基準(zhǔn)來決定SMT160輸出信號(hào)的周期。

Timer 0保留其功能來累計(jì)周期信號(hào)的高電平。

當(dāng)然,由于我們使用了三個(gè)中斷處理器(INT0, TF1, Serial)中斷反應(yīng)時(shí)間不再是連續(xù)的。因此測量結(jié)果的分辨率將會(huì)衰減三倍。然而,這可以通過采用較高時(shí)鐘速度的處理器來進(jìn)行補(bǔ)償。

圖3同步測量和串行通信

A3.利用Timer 2測量占空因數(shù)捕獲寄存器

許多8051派生處理器,包括805216 bit 8051XA,都有一個(gè)附加的計(jì)時(shí)器,Timer 2 (. 4),Timer 2是一個(gè)**的16位的計(jì)時(shí)器/計(jì)數(shù)器,帶有一個(gè)捕獲/重載寄存器。在我們的應(yīng)用中,捕獲寄存器的功能是瞬時(shí)載入Timer 2(捕獲)的值,并將值保存起來,直到中斷處理器讀取它。消除了中斷反應(yīng)時(shí)間的影響,規(guī)定中斷反應(yīng)時(shí)間要小于中斷比率。

圖4 利用計(jì)時(shí)器2和計(jì)時(shí)器0測量占空因數(shù)

使用計(jì)時(shí)器2測量SMT160信號(hào)周期,Timer 0則用來測量高電平的時(shí)間。Timer 1用做串行接口波特率發(fā)生器。有時(shí),TIMER0不能為測量SMT16030的高電平時(shí)間留做備用,例如當(dāng)采用實(shí)時(shí)操作系統(tǒng)(RTOS)。實(shí)時(shí)操作系統(tǒng)的調(diào)度程序常需要一個(gè)時(shí)鐘信號(hào)來產(chǎn)生每個(gè)處理過程的時(shí)間片。在這種情況下Timer 0被實(shí)時(shí)操作系統(tǒng)使用,通過外加一個(gè)異或門(. 5),Timer2就足以測量SMT160的占空因數(shù),通過將觸發(fā)器的OUT端接到Timer 2的中斷處理器,上升沿和下降沿都可以獲取。

圖5  只用計(jì)時(shí)器2測量占空因數(shù)

A4.使用可編程記數(shù)器陣列(PCA)測量占空因數(shù) 

8051FX派生系列有一個(gè)附加硬件:可編程記數(shù)器陣列。包括一個(gè)計(jì)時(shí)器和5個(gè)捕獲寄存器。計(jì)時(shí)器可以通過編程運(yùn)行在頻率Osc/12  Osc/4下。與普通8051相比,使用FX類型能夠在同樣測量時(shí)間里達(dá)到三倍的測量分辨率。

圖6 使用PCA測量占空因數(shù)

此外,捕獲寄存器可以通過編程來捕獲信號(hào)的上升沿或下降沿轉(zhuǎn)換,或兩者同時(shí)捕獲。所以不需要一個(gè)附加的異或門。因?yàn)榇瞬东@寄存器同時(shí)可用于上升沿和下降沿,所以使用這個(gè)系列的處理器中斷反應(yīng)時(shí)間不是必需的(. 6)。這意味著中斷處理器能夠可以通過**程序語言,如C語言,來控制寫入。下面給出了通過中斷處理器測量SMT160信號(hào)n個(gè)周期的例子。

void PCAHandler(void) interrupt 6 using 1 {

   static union Word2Byte CaptureUp, CaptureDo;

   if (PCAOverFlow) { /* PCA Overflow? */

      PCAOverFlow = FALSE;

      if (!Ready) {

         if (OverFlow > 3) { /* 3 overflows => error */

            SetCaptureOff(); /* Capture off */

            PCACapture0 = FALSE; /* Clear flags */

            PCACapture1 = FALSE;

            Ready = TRUE; /* measurement done */

    Error = TRUE;

         } else {

            OverFlow++;

              };

         };

    } else {

      if (PCACapture1) { /* rising edge? */

         PCACapture1 = FALSE; /* Clear flag */

         if (!Ready) {

            CaptureDo.Byte.Hi = CCAP1H; /* save PCA value */

            CaptureDo.Byte.Lo = CCAP1L;

            HiTime += (CaptureDo.Word - CaptureUp.Word);

         }; /* determine low period */

      } else {

         PCACapture0 = FALSE;

         if (!Ready) {

            CaptureUp.Byte.Hi = CCAP0H;   /* save PCA counter */

            CaptureUp.Byte.Lo = CCAP0L;

            if (First) {

st

               First = FALSE; /* 1  time just caputure value */

       HiTime = LoTime = 0;

               SetPCA1NegEdge(); /* enable falling edges */

            } else {

               LoTime += (CaptureUp.Word - CaptureDo.Word);

               if (--Count == 0) { /* when Count = 0 ready */

                  SetCaptureOff(); /* capture off */

                  PCACapture0 = FALSE; /* clear flags */

                  PCACapture1 = FALSE;

                  PCAOverFlow = FALSE;

                  Ready = TRUE; /* measurement ready */

               };

            }; /* determine high period */

         };

      };

      if (!Ready) {

      };

      OverFlow = 0; /* we have a signal */

   };

   return;

}

我們通過主程序與中斷處理器連接。使用下列程序。

#include <pca.h>

#include <stdio.h>

#define PERIODS 25

struct DoubleByte {

  unsigned char Hi, Lo;

};

union Word2Byte {

  unsigned short Word;

  struct DoubleByte Byte;

};

static volatile bit First, Ready, Error;

static volatile unsigned int Count = 0, Periods = 51;

static volatile unsigned char OverFlow;

static volatile unsigned long HiTime, LoTime;

void StartCount(void) {

   First = TRUE; /* Initializes all varialbes */

   OverFlow = 0;

   Count = Periods;

   Ready = FALSE;

   Error = FALSE;

   SetPCA0PosEdge(); /* Enable capture */

}

void SetPeriods(unsigned APeriods) {

   Periods = APeriods;

}

bit IsReady(void) {

   return(Ready);

}

bit IsError(void) {

   return(Error);

}

float GetDutyCycle(void) {

   return (float)HiTime / (HiTime + LoTime);

}

主程序需要初始化中斷處理器一次,然后重復(fù)測量,直到測量完成。檢測誤差并顯示結(jié)果。

main() {

   SetPeriods(51);

   while(TRUE) {

      StartCount();

      while(!IsReady()); continue;

      if(IsError()) printf("An error has occured\n");

      else printf(!°The termperature is %f\n!

         (GetDutycycle() - 0.32) / 0.0047));

   }

}

B. 軟件測量

只有I/ O端口P3.2 P3.3可以用來檢測中斷。因此,當(dāng)傳感器與其他I/ O端口相連,只有使用軟件才能測量占空因數(shù)。此外還需要兩個(gè)計(jì)數(shù)器。雖然是軟件控制,但也可能用到一個(gè)硬件計(jì)時(shí)器。TIMER0能夠計(jì)算測量時(shí)間??焖俚能浖绦蛴脕頊y量傳感器信號(hào)為“1”的狀態(tài)。結(jié)果儲(chǔ)存在名字為HIGH_COUNTER的計(jì)數(shù)器中。計(jì)時(shí)器TIMER0每個(gè)機(jī)器周期都增加,機(jī)器周期需要花費(fèi)1μs,軟件取樣率花費(fèi)3μs。要獲得占空因數(shù)p,依據(jù)等式HIGH_COUNTER需要乘3。

 

HIGH COUNTER X 3

p=---------------------------

TIMER0

通常HIGH_COUNTER 應(yīng)該存儲(chǔ)的數(shù)據(jù)多于8位,因此需要兩個(gè)8位寄存器。這就減小了取樣速度,因?yàn)?,需要兩個(gè)命令把這兩個(gè)寄存器連接起來(低字節(jié)溢出檢測,根據(jù)測試結(jié)果對(duì)高字節(jié)增量)。提供了可供選擇的方案:當(dāng)輸入信號(hào)是低電平時(shí),HIGH_COUNTER等待直到信號(hào)變?yōu)楦唠娖?。這個(gè)時(shí)間可以用來計(jì)算HIGH_COUNTER( 7)。圖中展示了一個(gè)被稱作TEMPORARY_HIGH_COUNTER的暫存器的使用。此暫存器包含了一個(gè)周期內(nèi)輸入信號(hào)為高電平時(shí)的取樣數(shù)目。當(dāng)輸入信號(hào)變?yōu)榈碗娖剑瑫捍嫫鱐EMPORARY_HIGH_COUNTER中的值被累加到HIGH_COUNTER中,在這個(gè)計(jì)算時(shí)段,傳感器信號(hào)不再被取樣。

這對(duì)占空因數(shù)有一個(gè)限制。但計(jì)算只花費(fèi)15μs,對(duì)一個(gè)周期在600μs左右的信號(hào)來說,即使占空因數(shù)等于0.95,也不會(huì)出現(xiàn)問題。測量時(shí)間的計(jì)算存儲(chǔ)在硬件計(jì)時(shí)器/計(jì)數(shù)器TIMER0中,TIMER0使用軟件在輸入信號(hào)1-0跳變時(shí)來啟動(dòng)和停止。

圖7 a)占空因數(shù)軟件測量流程圖(測量高電平的部分)

b) 7a中的時(shí)間圖.。時(shí)間間隔時(shí)通過**高速存儲(chǔ)器計(jì)算HIGH_COUNTER

暫存器不需要計(jì)算,所以這個(gè)動(dòng)作對(duì)采樣率沒有影響。暫存器增量的速度是3μs。  

例:占空因數(shù)調(diào)制信號(hào)的采樣噪聲的標(biāo)準(zhǔn)偏差可以用下面的等式計(jì)算。

where: t連續(xù)采樣間隔時(shí)間

      T輸入信號(hào)周期

      T測量時(shí)間 (=N *T p)

      N = 一次測量內(nèi)的周期數(shù)

 

輸入信號(hào)的周期在300μs (40)800μs (-40   120 )之間。測量時(shí)間大約64 ms

 (因?yàn)榇嬖谄扑孕∮?×1μs)。當(dāng)取樣率是1μs時(shí),取樣噪聲在5 ×10和10(5.7*10-5和9.33*10-5)。根據(jù)經(jīng)驗(yàn),數(shù)值的95%都分布在主值的±2σ范圍之內(nèi) (正態(tài)分布).

取樣率是3μs時(shí),取樣噪聲是它的三倍。

C.平均測量結(jié)果的理解

使用通用的A/D轉(zhuǎn)換器來平均測量結(jié)果不會(huì)提高分辨率。在特定條件下,平均測量結(jié)果可以提高占空因數(shù)測量的平均值。測量結(jié)果之間必須沒有相關(guān)性。當(dāng)SMT160信號(hào)周期不是處理器計(jì)時(shí)器周期的整數(shù)倍時(shí),這一點(diǎn)更為重要。我們可以通過使用頻率計(jì)數(shù)器測量下降沿的抖動(dòng)來確定這一點(diǎn),將閾值時(shí)間設(shè)為τms.。這種抖動(dòng)體現(xiàn)了τ的一個(gè)功能。這種效果可以在帶有數(shù)據(jù)終端緩沖器功能的示波器上顯示出來。這種功能允許在觸發(fā)后的第n個(gè)下降沿處放大。正如你所看到的一樣,抖動(dòng)隨著n的增大而增大。當(dāng)這個(gè)抖動(dòng)時(shí)間大于單片機(jī)計(jì)時(shí)器的周期時(shí),連續(xù)占空因數(shù)測量就不再具有相關(guān)性。這意味著當(dāng)檢測到連續(xù)測量之間的某一*小延遲后,分辨率將會(huì)與取樣數(shù)目的平方根成正比。

 

圖8 抖動(dòng)作為一個(gè)門時(shí)間功能

上圖是使用時(shí)鐘為1.25 MHz的微處理器實(shí)際測量的。用這種設(shè)備,量化噪聲大致等于兩次測量間隔1 ms的熱噪聲。這說明,對(duì)于不相關(guān)的占空因數(shù)測量,必須要有1 ms的時(shí)間間隔。由于具有電磁干擾等原因不同的設(shè)備噪音可能會(huì)有不同的特點(diǎn)。用圖中可以估計(jì)出使用4 MHz的微處理器(例如使用PCA的可以以16 MHz運(yùn)行的 8051FA),測量之間的零延遲也可以應(yīng)用。這樣可以獲得*大測量速度。

 

粵公網(wǎng)安備 44030602001744號(hào)

曰本女人与公拘交酡,成人毛片100免费观看,动漫AV网站免费观看,亚洲国产成人精品无码区二本

          jizz日本| 国产成人艳妇aa视频在线| 国产欧美久久久精品免费| 国产成人精品视频一区二区| 欧洲人妻丰满AV无码久久不卡| 色视频成人在线观看免| 日本少妇丰满xxxxx高潮| 精品午夜福利| 欧美激情视频一区二区| 国产欧美久久久久久| 91麻豆精品国产91久久久资源速度 | 成人性生交大免费看| 一区二区三区四区毛片| 午夜福利伦伦电影理论片在线观看| 99精品国产一区二区三区| 99久久国产露脸国语对白| 中文字幕人成人乱码亚洲| 97se亚洲国产综合自在线图片| 少妇水又多又黑又长A片动漫 | 人妻 奶水 中文字幕| 午夜福利视频欧美| 少妇精品无码一区二区三区| 性视频播放免费视频| 熟妇高潮精品一区二区三区下载| 毛片久久久久久久| 国产全是老熟女太爽了| 国产激情综合五月久久| 国产欧美久久一区二区三区| 久久久久人妻精品| 久久免费看少妇高潮a| 国产精品无码无卡无需播放器| 国产色综合久久| 国产超碰在线| 国产精品久久久久久久久免费软件 | 日韩精品一片区二区三区| 国产蜜臀AV国产传媒| 欧美亚洲视频一区| 五月婷在线| h网站在线看| 国产av高清不卡| 亚洲成人av在线|