Digitalni merilnik vrtljajev motorja
 

Ste slučajno lastnik starejšega avta, ali pa morda tudi novejšega, ki nima »obratomerja«? Predstavil vam bom varianto digitalnega obratomerja z LED prikazovalniki, ki si ga lahko sestavite v zelo kratkem času in z minimalnimi stroški. Tudi montaža senzorja je enostavna, saj malo tuljavico enostavno prilepite kar na vžigalno tuljavo v avtomobilu.

Delovanje naprave
Izdelava naprave
Vgradnja in nastavitev
Program
Spisek materiala
Za konec
Datoteke


Delovanje naprave

Kot lahko vidite iz sheme je naprava dokaj enostavna, saj razen mikrokontrolerja in nekaj okoliških elementov, ne ostane kaj dosti drugega. Jedro naprave je zopet mikrokontroler AT89C2051, ki direktno poganja štiri LED prikazovalnike z multipleksiranjem, zaradi česar je potrebno uporabiti displeje z visoko svetilnostjo in skupno anodo. Mikrokontroler šteje impulze na nogici 6, ki je konfigurirana kot prekinitev Int0. Morda je še najbolj zanimivo vhodno vezje, ki ga lahko uporabite na več načinov. Če boste vezje uporabili v avtomobilu za merjenje obratov, je dovolj, da na vhod priključite ploščato tuljavico s približno 100 ovoji. Inducirana napetost se bo najprej ojačala s prvim operacijskim ojačevalnikom z ojačanjem 470, ki ga določata upora R17 in R18. R15 in R16 tvorita delilnik napetosti, ki služi za ustvarjanje navidezne mase za operacijski ojačevalnik. Tako ZD1 kot obe diodi služita za zaščito operacijskega ojačevalnika pred uničenjem zaradi previsoke napetosti. Ojačan signal nato peljemo na komparator, katerega posebnost je ta, da se sam prilagaja nivoju enosmerne vhodne komponente napetosti, v stabilno stanje logične enke, ko je brez signala, pa ga sili upor R13. Brez tega upora bi v stanju brez signala na izhodu dobili šum velike amplitude, ki bi prožil naš obratomer povsem nekontrolirano. Mikrokontroler šteje impulze in jih prikazuje na LED prikazovalnikih. Zadnji prikazovalnik vedno kaže ničlo, razen če obratomer uporabite kot frekvenc meter. Predupori za LED prikazovalnike so lahko tudi nekaj manjši od 180?, vendar prekomernega zmanjševanja upornost ne priporočam zaradi preobremenitve samega mikrokontrolerja. Vsekakor naj ne bi bili manjši od 100?. Kot sem že omenil, lahko to vezje uporabite tudi kot frekvenc meter, kateri pa direktno meri frekvenco tja do 3kHz. V tem primeru pa sploh ni nujno, da uporabite vgrajeni predojačevalnik z LM358, ampak digitalni signal pripeljete direktno na nogico 6 IC3.

Slika 1: Shema obratomerja


Izdelava naprave

Naprava je narejena iz dveh osnovnih delov in sicer iz tiskanega vezja z displeji in tiskanega vezja z ostalimi komponentami. Ploščici sta zelo majhni, za deljenje na dva dela pa sem se odločil zato, ker v avtomobilu ni vedno prostora, kamor bi lahko namontirali prikazovalnik skupaj z ostalo elektroniko. Ploščici sta med sabo povezani s ploščatim (flat) kablom z enajstimi žilami. Košček takega kabla lahko naredite iz kabla npr. od računalniške disketne enote. Tiskano vezje lahko brez problema naredite doma, za kar vam bo prišla prav predloga, ki se nahaja v ZIP datoteki pa tudi na moji domači strani ali domači strani revije jo bo moč najti, skupaj z vsemi ostalimi potrebnimi datotekami in izvorno kodo. Kot vedno v svojih projektih sem tudi sedaj uporabil nekaj SMD elementov, katerih pa se, prosim, ne ustrašite, saj je spajkanje le-teh veliko enostavnejše, kot si mislite. Izjedkano ploščico tiskanega vezja izvrtajte, očistite z acetonom in posprejajte s FLUX-om. Ko se ta vsaj deloma posuši, lahko začnete s spajkanjem SMD komponent, pri čemer si lahko pomagate s pinceto, kar še posebej velja za tranzistorje. Na tiskanini prikazovalnika se nahajajo samo štirje LED prikazovalniki LD1 do LD4.


 
Slika 2: Razpored elementov prikazovalnika

Na drugo ploščico najprej prispajkajte vse SMD elemente. Za tiste, ki vas zelo skrbi, kako priti do elementov, naj namignem, da jih lahko za domačo uporabo odspajkate kar iz odsluženih elektronskih enot (CD-ROM enote, razne računalniške kartice…). Problem bo le s keramičnimi kondenzatorji, ki ponavadi niso označeni, težko pa jih je doma izmeriti.

Slika 3: Razpored SMD komponent na strani spajkanja

Nato sledi prevezava, tuljavica L1, podnožje za IC3, »jumperji«, kristal, vrstna sponka in napetostni regulator 7805, na katerega je priporočljivo priviti manjši košček pločevine.

Slika 4: Razpored komponent na nasprotni strani spajkanja

Na koncu še povežete obe tiskanini s ploščatim 11 žilnim kablom, katerega dolžina je odvisna od vaših potreb in naprava je gotova. Še enkrat preverite postavitev in polariteto komponent, nato pa lahko napravo že priključite. Če ste vse pravilno prispajkali, se vam bo na displeju takoj izpisalo stanje 0000. Če imate na voljo funkcijski generator, lahko takoj preizkusite delovanje, ne pozabite pa, da je prikazan rezultat odvisen od nastavitve jumperjev. Če vam nobena nastavitev ne odgovarja, pa se lahko poigrate s programom, ki je solidno komentiran.


Vgradnja in nastavitev

Priporočam, da naprave ne vgrajujete v posebno ohišje. Malo bolj iznajdljivim pa bo morda uspelo displej namontirati celo v armaturno ploščo. Pozorni bodite na to, da bo displej v senci in da bo pred njim filtersko rdeče steklo, sicer bo čitljivost slaba. Do motorja potegnite dve žički, na koncu katerih je prispajkana tuljavica, katero priključite na napravo na priključka IN1 in IN2. Najlažje to tuljavico dobite iz kake odslužene disketne enote ali iz kakega podobnega sinhronskega motorja s ploščatim rotorjem. Take tuljavice so običajno prilepljene pod rotor in jih je šest v enem motorju. So samostoječe in imajo ovoje zlepljene med sabo, tako da ne razpadejo. Če je nikjer med svojo ropotijo ne najdete (kar dvomim), jo lahko navijete na ozek in visok tuljavnik in sicer cca 100 ovojev lakirane žice premera okrog 0,2mm. V skrajnem primeru mi lahko pišete po elektronski pošti in vam jo bom poslal brezplačno. Predhodno izolirano tuljavico prilepite nekam na vžigalno tuljavo, po možnosti na mesto, kjer je stresano magnetno polje najmočnejše (pod glavni steber EI jedra). Pomembno pa je tudi, da ni magnetno polje premočno, saj lahko napravo proži tudi iznihavanje vžigalne tuljave, zaradi česar bi lahko dobili napačen očitek. Jaz sem napravo preizkusil na Zastavini Yugo Floridi, kjer je delovala brez težav in mislim, da bi morala tudi v drugih avtomobilih.

Slika 5: Montaža senzorske tuljavice


Program

Program za mikrokontroler je napisan tako, da si lahko obratomer kar se da prilagodimo svojim potrebam. V pomoč so nam tudi t.i. »jumperji«, s katerimi nastavimo njegovo delovanje. Z JP1 nastavimo osveževanje zaslona. Če je zaprt, potem zaslon osvežuje vsake pol sekunde z dvakrat večjim korakom, če je odprt pa vsako sekundo. JP2 in JP3 določata množenje rezultata, kar je pomembno za pravilen prikaz pri različnih vrstah vozil. Množenje je določeno po spodnji tabeli (O = odprt, Z = zaprt):
 
JP1 JP2 JP3 Faktor Opomba
O O O 30 2 imp/obrat (večina)
O O Z 15 4 imp/obrat
O Z O 60 1 imp/obrat
O Z Z 1 Uporabno za merjenje f
Z O O 60 2 imp/obrat (večina)
Z O Z 30 4 imp/obrat
Z Z O 120 1 imp/obrat
Z Z Z 2 Merjenje f z napako +-1Hz

Rezultat se bo prikazoval v korakih, ki jih določa zgoraj omenjeni faktor. Poglejmo si program s komentarjem, da nam bo vse skupaj bolj jasno. Naj ponovim, da program dobite na internetu in ga ni treba tipkati. Program je napisan in preveden v DEMO verziji Bascom-a 8051.

Za začetek povemo prevajalniku, s kakšnim procesorjem in taktom ima opravka.

$crystal = 12000000
$regfile = 89c2051.dat

Nato definiramo potrebne spremenljivke, katere bodo bolj jasne, če boste temeljito preučili program.

Dim Clock As Byte , Clock1 As Byte , Mux As Byte
Dim Cnter As Integer , Cnter2 As Integer
Dim Pomozna_v As Integer , 7seg(10) As Byte , Ostanek As Integer
Dim Enice As Byte , Desetice As Byte , Stotice As Byte , Tisocice As Byte
Dim Prikaz As Bit , Izracun As Bit , Osvezi As Byte , Mnozi As Byte

Nato konfiguriramo časovnik (Timer0) in prekinitev (Int0).

Config Timer0 = Timer , Gate = Internal , Mode = 2
On Timer0 Timer_0_int           'Podveja Timerja 0
On Int0 Int0_int                'Podveja prekinitve 0
Load Timer0 , 250               'Timer naložimo z vrednostjo 250,
Priority Set Int0               'Int0 nastavimo najvišjo prioriteto,
Enable Interrupts               'Omogočimo prekinitve,
Enable Timer0                   'Omogočimo Timer0,
Enable Int0                     'Omogočimo Int0,
Set Tcon.0                      'Nastavimo, da se prekinitev zgodi samo ob negativni fronti signala ter
Start Timer0                    'zaženemo tudi Timer0.

V spremenljivko 7seg naložimo podatke o segmentih iz tabele. To storimo zato, da je med izvajanjem zanke dostop do podatkov hitrejši.

Restore Tabela                  'Pokažemo na tabelo s podatki
For Pomozna_v = 1 To 10         'in jih naložimo v spremenljivko.
   Read 7seg(pomozna_v)         'Podatki nam služijo za izpis
Next Pomozna_v                  'na LED displeje.
Postavimo spremenljivke na izhodišče.

Clock = 0 : Clock1 = 0 : Cnter = 0
Cnter2 = 0 : Izracun = 1

Določimo način prikazovanja na LED displeju (glej tabelo).

If P3.1 = 1 Then                'Določi faktor množenja
   If P3.0 = 1 Then             'glede na nastavitev
      Mnozi = 30                'posameznih "jumperjev".
   Else
      Mnozi = 60
   End If
Else
   If P3.0 = 1 Then
      Mnozi = 15
   Else
      Mnozi = 1
   End If
End If

If P1.0 = 1 Then                'Osveževanje na 1s
   Osvezi = 199
Else
   Osvezi = 99                  'Potrebno je rezultat
   Mnozi = Mnozi * 2            'podvojiti za osveževanje
End If                          'na 0,5s.

Tu se začne neskončna zanka, kjer se izvajajo izračuni in multipleksiran prikaz na prikazovalnikih. Opazite lahko, da se izračuni izvajajo po korakih med multipleksiranjem, in da se pri vsakem izpisu na displej izvrši tudi rutina za izračun naslednje vrednosti. Na ta način se izognemo utripanju displejev med izračunavanjem.

Do
   If Prikaz = 1 Then           'Prikaz je omogočen,
      Prikaz = 0
      P3 = 255                  'ugasni displej,

      If Mux = 0 Then           'če je na vrsti 1. displej,
         Pomozna_v = Enice + 1  'določi vrednost prej. izpisa,
         P1 = 7seg(pomozna_v)   'postavi port na ustrezno stanje,
         P3.4 = 0               'vključi ustrezni displej.
         If Izracun = 1 Then    'Izračun je omogočen,
            Tisocice = Cnter / 1000     'izračunaj tisočice
            Pomozna_v = Tisocice * 1000 'za naslednji izpis
            Ostanek = Cnter - Pomozna_v
         End If
      End If

      If Mux = 1 Then           'Enako velje za desetice,
         Pomozna_v = Desetice + 1
         P1 = 7seg(pomozna_v)
         P3.5 = 0
         If Izracun = 1 Then
            Stotice = Ostanek / 100
            Pomozna_v = Stotice * 100
            Ostanek = Ostanek - Pomozna_v
         End If
      End If

      If Mux = 2 Then           'stotice
         Pomozna_v = Stotice + 1
         P1 = 7seg(pomozna_v)
         P3.3 = 0
         If Izracun = 1 Then
            Desetice = Ostanek / 10
            Pomozna_v = Desetice * 10
            Enice = Ostanek - Pomozna_v
         End If
      End If

      If Mux = 3 Then           'in tisočice.
         Pomozna_v = Tisocice + 1
         P1 = 7seg(pomozna_v)
         P3.7 = 0
      End If
End If

Loop

End

Sledijo le še podrutine Timer_0_int in Int0_int ter na koncu tabela s podatki o segmentih.

Timer_0_int:                    'podveja Timer0

   Incr Clock                   'Povečaj vrednost Clock.(vsakih 250 us)
       If Clock > 19 Then       'Če je 20,
          Clock = 0             'postavi na 0,
          Prikaz = 1            'prikaži digit.

          Incr Mux              'Povečaj vrednost Mux.(vsakih 5ms)
          If Mux > 3 Then       'Ko je 4,
             Mux = 0            'ga postavi na 0 in
             Izracun = 0        'končaj izračune.
          End If

          Incr Clock1               'Povečaj Clock1.
          If Clock1 > Osvezi Then   'Ko je 200 (vsako sekundo)
             Clock1 = 0             'ga postavi na 0,
             Cnter = Cnter2 * Mnozi 'določi vrednost za displej
             Cnter2 = 0             'in resetiraj števec.
             Izracun = 1            'Opravi izračune.
          End If
       End If
Return

Int0_int:                       'Podveja Int0
Incr Cnter2
Return

Tabela:                         'Podatki o segmentih za LED
Data 16 , 124 , 34 , 40 , 76 , 136 , 128 , 60 , 0 , 8


Spisek materiala
 
 
Oznaka Vrednost Kos Opomba
R1-R7 180W 7 SMD 1206 ALI 0805
R8, R18 10k 2 SMD 1206 ALI 0805
R9-12, R15, R16 4k7 6 SMD 1206 ALI 0805
R13 2M2 1 SMD 1206 ALI 0805
R14 100k 1 SMD 1206 ALI 0805
R17 4M7 1 SMD 1206 ALI 0805
C1 22m F/16V 1 SMD tantal
C2, C3, C6, C8, C9 100n 5 SMD 1206 ALI 0805
C4, C5 33p 2 SMD 0805
L1 470m H 1  
C7 470n 1 SMD 1206
D1, D2 1N4148 2 SMD
ZD1 5,1V 1 SMD
T1-T4 BC857  4 Ali podoben SMD SOT23 PNP tr.
IC1 7805 1 Napetostni regulator TO220
IC2 LM358 1 SMD SO8
IC3 AT89C2051 1 DIL20 s programom
X1 12MHz 1 Quartz kristal
DP1-DP4 LED displej 4 Skupna ANODA, visoka svetilnost
JP1-JP3 Letvica 2x3 1 Skupaj s pripadajočim jumperjem
CN1 Vrstna sp. 2 kon. 2 Raster 5,08mm
Ostalo Podnožje DIL20 1 Profi
TIV Tiskani vezji 2 Po predlogi
Senzor Tuljavica 1 GLEJ TEKST!

 


Za konec

Naprava ki sem jo opisal lahko dejansko služi kot obratomer v avtomobilu ali v delavnici, lahko pa jo uporabite kot frekvencmeter, katerega merilno območje razširite s delilnikom frekvence. Če malce spremenite program pa lahko iz njega naredite števec impulzov ali kaj podobnega. Moj namen je bil tudi pokazati, da se da z zelo malo elementi in nekaj več programa narediti koristno napravico za v naš avto ali delavnico.


Datoteke

Tiskano vezje, izvorna koda v Bascom-u 8051 in HEX datoteka  
 

Avtor: Srečko Lavrič

Zadnja sprememba, 27. junij 2002