[wpfp-link] 

8051 kullanan temassız dijital takometre

Bu projede 8051 mikrodenetleyicisi ile çalışan temassız dijital takometre uygulaması yapıldı. Dijital takometre devresinde 3 hane 7 segment display kullanıldı. Dijital takometre ile bir diskin, şaftın, tekerleğin veya bunlar gibi birçok malzemenin dönme hızını ölçebilirsiniz. Takometrenin ölçebilme kapasitesi oldukça tatmin edici. Saniyede; 1 devirden 255 devire kadar ölçebiliyor.  Takometre sensörünü devrini ölçeceğiniz cihaza yaklaştıracaksınız. Ama dönen cihaza yansıtıcı bir kağıt veya bant yapıştırmalısınız. (beyaz bir kağıt bu işi çözer. ) Displayden saniyedeki dönme hızını okuyabilirsiniz. Dijital termometre devre şeması aşağıda:

dijital takomometre devresi
dijital takomometre devresi (Resmi büyütmek için üzerine tıklayın.)

Devrede kullanılan displayler ortak anottur.

Devrenin çalışması:

Devrenin ilk kısmı optik kısmında bulunan Q4 transistörü ve D4 kırmızı ledidir. Sensörün önünden yansıtıcı bant her geçtiğinde foto transistörün üzerine düşen ışık şiddeti değişiyor. Her seferinde kollektör gerilimi sıfıra düşüyor. Bu durumu osilaskop ile izlediğinizde aşağıdaki gibi bir dalga şeklini görürsünüz:

Devrenin diğer kısmında bu sinyal LM324 opampı ile işleniyor. Bu opampın görevi yukarıdaki dalga formunu kare dalga haline getirip 8051 mikrodenetleyicisine gönderir. (LM324, R16 ve R17 dirençleri ile 3,5 V referans gerilimine ayarlanıyor. Opamp devrede karşılaştırıcı olarak kullanılıyor.  ) Transistörün kollektör gerilimi ne zaman 3,5 V un altına inse opamp negatif dalga , üstüne çıktığında ise pozitif dalga üretiyor. Dalga formu aşağıdaki gibi oluyor:

Devrede 8051 denetleyicisinin 2 görevi var:

1- Negatif sinyalleri saymak.T1 pin (pin15).

2- 3 digit 7 segmet display için gereken matematiksel hesapları yapmak ve bunu displaylerde görüntülemek.

Program:

ORG 000H
MOV DPTR,#LUT // moves the addres of LUT to DPTR
MOV P1,#00000000B // Sets P1 as an output port
MOV P0,#00000000B // Sets P0 as an output port
MAIN: MOV R6,#14D
SETB P3.5
MOV TMOD,#01100001B // Sets Timer1 as Mode2 counter & Timer0 as Mode1 timer
MOV TL1,#00000000B //loads initial value to TL1
MOV TH1,#00000000B //loads initial value to TL1
SETB TR1 // starts timer(counter) 1
BACK: MOV TH0,#00000000B //loads initial value to TH0
MOV TL0,#00000000B //loads initial value to TH0
SETB TR0 //starts timer 0
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 Timer(counter)1
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 current 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 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 secong digit of the count
CLR P1.0
SETB P1.1
ACALL DISPLAY // converts the 2nd digit to 7 seg pattern
MOV P0,A
ACALL DELAY
ACALL DELAY
MOV A,B // moves the last digit of the count to accumulator
CLR P1.1
SETB P1.2
ACALL DISPLAY // converts the 3rd digit to 7 seg 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 // 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 // (See Note 1)
RET
LUT: DB 3FH // Look up table (LUT) starts here
DB 06H
DB 5BH
DB 4FH
DB 66H
DB 6DH
DB 7DH
DB 07H
DB 7FH
DB 6FH
END

 Notlar:

Entegre yerleşimi için bakınız: Entegreler hakkında bilgiler

Bakınız: Baskı devre hazırlamak

Bakınız: Transistörler nasıl kullanılır?

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz