基於微控制器的系統設計


微處理器和微控制器可以用來設計一些工具或系統來執行一些特殊任務。使用微控制器,我們可以製作不同型別的模組或系統。以下是一些可以使用微控制器設計的系統列表:

  • 電子投票機

  • 基於RFID的訪問控制系統

  • 心率監測系統

  • 自動植物澆水系統

  • 超聲波測距系統

  • 水位控制系統

  • 燃氣洩漏檢測系統

  • 頻率計

  • 溫度測量系統

還有許多其他可以使用微控制器製作的系統。

為了設計一個系統,我們必須遵循一些基本步驟。我們必須設計系統的概述,以及一些功能模組設計,以便輕鬆構建系統。然後,我們必須設計電路圖,並在進行一些計算後應用元件值。然後,在檢查整個電路圖之後,最後我們應該開始實際工作。在這個階段,我們將使用所需的元件來實現電路。

在本文中,我們將瞭解如何使用微控制器設計數字轉速錶。這裡我們使用的是Intel 8051微控制器。

轉速錶基本上是一個可以測量某些旋轉輪、圓盤、軸等的每秒轉數的系統。我們的轉速錶可以以每秒1轉的精度測量高達每秒255轉的轉速。

現在讓我們看看這個數字轉速錶的電路圖。

我們可以將此電路分為幾個部分。在第一部分中,我們將瞭解電路如何物理地獲取資訊。有兩個元件Q4和D4。Q4是一個光電電晶體(2N5777),D4是一個紅色LED。如果光線進入這個光電電晶體,它的集電極電流會降至0。首先,我們必須在軸上安裝一個旋轉圓盤,上面有一個衝孔。當圓盤旋轉時,LED安裝在圓盤的上部,光電電晶體安裝在下部。當圓盤處於同一條線上時,光線照射到光電電晶體上,集電極電流下降到零。下圖顯示了使用示波器觀察到的情況。

在下一部分中,我們可以看到電路中有一個運算放大器(OPAMP)。對於運算放大器,我們使用了LM234晶片。該晶片包含四個運算放大器,但這裡我們只使用了一個。在這個電路中,運算放大器連線為電壓比較器。這裡的參考電壓為3.5V。因此,如果光電電晶體的輸出電壓大於3.5V,則它將產生高脈衝,否則將產生0電平訊號。從這個比較器我們將得到前面輸出的方波脈衝。

從這個下降沿我們可以理解孔已經出現,所以有一次旋轉。這個時鐘脈衝被送入微控制器。此訊號可用於計算旋轉次數。

在第三部分,微控制器正在工作。這個微控制器同時執行兩項任務。這兩項任務是:

  • 計算來自比較器輸出的負邊沿的數量。

  • 進行必要的數學運算,並在七段顯示陣列上顯示計數。

為了計算轉速,我們使用了8085的兩個定時器(Timer0和Timer1)。這裡Timer1配置為自動過載8位計數器,用於將進入的零的數量儲存到Timer0中。Timer0設定為16位定時器,它為Timer1計數生成必要的1秒時間跨度。

8051數字轉速錶程式

ORG 000H
MOV DPTR,#LUT ; Loads the address of LUT to DPTR
MOV P1,#00000000B ; Sets P1 and P0 as an output port
MOV P0,#00000000B
MAIN: MOV R6,#14D
SETB P3.5
MOV TMOD,#01100001B ; Sets Timer1 as Mode2 & Timer0 as Mode1
timer
MOV TL1,#00000000B ; loads starting value to TL1
MOV TH1,#00000000B ; loads starting value to TH1
SETB TR1 ; starts Timer1 (counter)
BACK: MOV TH0,#00000000B ; loads starting value to TH0
MOV TL0,#00000000B ; loads starting value to TL0
SETB TR0 ; starts Timer0
HERE: JNB TF0,HERE ; checks for Timer 0 roll over
CLR TR0 ; stops Timer0
CLR TF0 ; clears Timer Flag 0
DJNZ R6,BACK
CLR TR1 ; stops Timer1 (counter)
CLR TF0 ; clears Timer Flag 0
CLR TF1 ; clears Timer Flag 1
ACALL DLOOP ; Calls subroutine DLOOP for displaying
the count
SJMP MAIN ; jumps back to the main loop
DLOOP: MOV R5,#100D
BACK1: MOV A,TL1 ; loads the count to the accumulator
MOV B,#100D
DIV AB ; isolates the first digit of the count
SETB P1.0
ACALL DISPLAY ; converts the 1st digit to 7 seg-display
pattern
MOV P0,A ; puts the pattern to Port 0
ACALL DELAY ; 1mS delay
ACALL DELAY
MOV A,B
MOV B,#10D
DIV AB ; isolates the second digit of the count
CLR P1.0
SETB P1.1
ACALL DISPLAY ; converts the 2nd digit to 7 seg-display
pattern
MOV P0,A
ACALL DELAY
ACALL DELAY
MOV A,B ; Loads the last digit of the count to
accumulator
CLR P1.1
SETB P1.2
ACALL DISPLAY ; converts the 3rd digit to 7 seg-display
pattern
MOV P0,A
ACALL DELAY
ACALL DELAY
CLR P1.2
DJNZ R5,BACK1 ; repeats the subroutine DLOOP 100 times
RET
DELAY: MOV R7,#250D ; Subroutine to generate 1mS delay
DEL1: DJNZ R7,DEL1
RET
DISPLAY: MOVC A,@A+DPTR ; gets 7 seg digit drive pattern for
current value in A
CPL A
RET
LUT: DB 3FH ; Look up table for 7-seg-display
DB 06H
DB 5BH
DB 4FH
DB 66H
DB 6DH
DB 7DH
DB 07H
DB 7FH
DB 6FH
END

更新於:2019年7月30日

2K+ 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.