Seminarska naloga pri predmetu: MIKROPROFESORJI V ELEKTRONIKI
Avtorja: JOŽE DEDIČ & MARKO VRBNJAK, 5. letnik UNI-ELEKTRONIKA
Šolsko leto 2000/2001, naloga zaključena 5.2.2001
Po polletnem poslušanju predmeta MPE (mimogrede to je eden izmed redkih za kaj uporabnih predmetov) sva se s kolegom odločila izdelati merilnik kapacitivnosti s pomočjo HC11. Prva ideja je temeljila na enačbi:
Toda kaj hitro sva ugotovila, da ne bo ravno preprosto zagotoviti, konstantnih tokov pri spreminjanju napetosti na kondenzatorju (osnovne vezave tokovnih zrcal niso zagotovile konstantnega toka med polnjenjem kondenzatorja), pa tudi rang tokov je bil problem (1m...100mA). Zato sva se odločila za drug pristop; kondenzator sva polnila preko znanega upora.
Po principu superpozicije lahko zapišemo:
Sledi končna formula, kjer vidimo, da sploh ni pomembna napetost kondenzatorja pred polnjenjem, le da je pod nivojem ULO:
Tako zasnova je dana, obdelajmo še vezje in software.
Hardware (=železnina) je razmeroma preprost; uporabila sva OC invertor s pomočjo katerega vklopiva praznjenje ali pa polnjenje kondenzatorja preko posameznega upora. Za detekcijo dveh nivojev skrbi komparator LM393, ki ima rahlo povratno vezavo (da ni oscilacij). Na vezju je še tipka ter LCD display (uporabila sva LM016). DBB file (sch in pcb) v PROTEL99 SP05 formatu je tu: Cap meter.zip (special thankz to the author)
POMEMBNO: za vse morebitne navdušence - EPB (expansion port B) je na LCD data vodilo zaradi hardwarske izvedbe priklučen zrcalno (EPB0 na D7 in podobno)!!!!
Tehnični podatki potrebni za izračune:
UG=12V16 (7812 ni ravno biser)
ULO=0V994 (pri polnjenju)
UHI=8V48 (pri polnjenju)
R2=100E
R6=100E
R10=2k
R13=51k
R16=10M
Še beseda zakaj taki upori (to so bili prvi upori, ki sva jih določila in jih tudi imela pri roki). Pravi upori bi si morali slediti v geometrijskem zaporedju: (100E, 1k778, 31k62, 562k in 10M... če ne točno pa vsaj približno, najbolje z MF upori).
Ne da bi se hvalila, ampak to je res bil kar dober zalogaj dela (več kot 1000 vrstic asemblerja ni kar tako). Največ problemov sva imela pri preračunavanju, saj HC11 ni ravno nek matematik (na nekih mestih sva imela tudi 6 bitne vrednosti + dekadni floating point).
MERJENJE ČASA: to je najpomembnejši del najinega programa. HC11 omogoča na 4/fosc natančno merjenje dogodkov. Uporabila sva dva INPUT CAPTURE registra (ob želeni fronti prehoda na vhodu shranita vrednost 16 bitnega free running counterja), ki posnameta čas ob prehodu napetosti na kondenzatorju čez ULO in UHI. Daljše čase sva natančno izmerila tako, da sva upoštevala še TOF-e (timer overflov-e). Rutina štetja TOF-ov nama je vzela kar nekaj časa, saj se je treba zavedati, da TOF lahko nastopi kadarkoli v poteku izvajanja programa in če je ravno nesrečna situacija, se lahko zgodi, da odčitamo TOF preveč ali premalo. Potreben je bil premislek, da sva čas merila ponovljivo enako.
AVTORANGE FUNKCIJA: najina avtorange funkcija deluje tako:
najprej kondenzator polni preko najmanjšega upora in če je čas med prehodom preko ULO in UHI dovolj velik potem je treba rezultat samo preveriti ali je v območju pravilne merljivosti TOF-ov (če ni meritev ponovimo z istim območjem, a drugim startnim časom (vrednostjo free runing counterja)),
če je čas premajhen, meritev ponovimo preko manjšega upora in zgodbo ponovimo.
če se je kondenzator polnil preko največjega upora (10M), potem je čas, ki ga izmerimo, že kar najboljši možni, preverimo samo še pravilno merljivost TOF.
IZRAČUNAVANJE KAPACITIVNOSTI: za to je bilo potrebnih kar nekaj rutin. Kapacitivnost sva določevala po že omenjeni formuli:
Za določeno območje (R) lahko to enačbo prevedemo na množenje števila v counterju (ki šteje čas) s konstanto. C = N * 7332*10-12 (pri R=100E), C = N * 36659*10-14 (pri R=2k), C = N * 14376*10-15 (pri R=51k) in C = N * 7332*10-17(pri R=10M). Vsi ti rezultati veljajo pri fosc = 4M9152Hz. Vse konstante so predstavljene tako, da jih lahko opišemo s 16 biti, eksponent pa si zapomnimo posebej in ga upoštevamo kasneje pri pretvorbi BIN->BCD->končni izpis. Ker je čas predstavljen s 24 biti (TIC je 16 biten + 1 byte v katerem štejemo TOF-e) je bilo potrebno realizirati 24x16 bitno množenje (40 biten rezultat).
POVPREČENJE: uporabnik lahko nastavi tudi 3 različne načine merjenja: 1 samo meritev, 4 meritve, 16 meritev. To sva realizirala s seštevanjem in deljenjem (ker je primerno število meritev sva deljenje realizirala s shiftanjem).
PRETVORBA BIN V BCD: 40 biten rezultat, ki ga dobimo pri zgornji operaciji je potrebno še pretvoriti v BCD cifro (in nato v ASCII), ki bo primerna za prikaz na LCD displayu. To sva storila z metodo shiftanja in pregledovanja četvorčkov (grupa s po štirimi biti), če je kakšen četvorček >4 potem je potreben popravek +3. Po zadnjem shiftanju ni popravka. Po končani operaciji dobimo 13 BCD cifer.
BCD + EKSPONENT -> IZPIS NA DISPLAY: BCD zapis rezultata množenja dobimo v zgornji operaciji, upoštevati je še potrebno eksponent konstante in lahko naredimo izpis na display. Izpis sva realizirala v 4 mestnem tehničnem formatu (npr: 1n234, 12n34 ali 123n4).
MERJENJE LASTNE KAPACITIVNOSTI: zaradi izvedbe tiskanega vezja in priključnega konektorja (predvsem) ima merilnik upoštevanja vredno lastno kapacitivnost (ca 95pF). To kapacitivnost po zagonu programa vedno izmerimo (princip 16-ih meritev in povprečenja) in si zapomnimo. To kapacitivnost kasneje odštejemo vsaki izmerjeni vrednosti.
TIPKA: tipko sva si omislila eno samo, zato je nastavljanje različnih meritev realizirano s kombinacijo dolgih in kratki pritiskov:
kratek pritisk v osnovnem meniju - ponovimo meritev z istimi nastavitvami kot so veljale predhodno,
dolg pritisk v osnovnem meniju - skok ve meni nastavitev
kratek pritisk - menjava merilnih možnosti: 1 meritev, 4 meritve, 16 meritev, merjenje lastne kapacitivnosti, prezentacija (o avtorjih)
dolg pritisk - vrnitev v osnovni meni, kjer se nastavljena funkcija izvrši.
Na vsa morebitna vprašanja bova odgovorila: |
@ 1024x768 |
Copyrights can be bought, we accept: |
|
kuuuulega | |||
...če bova le znala |