Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
CAPITOLUL 1
Din ce în ce mai utilizate în lume, lifturile sunt un element important pentru aplicaţiile din
construcţii precum şi pentru modernizarea construcţiilor existente.
Piaţa românească a reuşit într-un interval relativ redus să promoveze serii ale acestor produse
din ce în ce mai performante.
Fig.1.1.Ascensor complet
Conceptul modular, flexibilitatea, noile metode de proiectare au permis realizarea unor
produse de înaltă performanţă. Realizând astfel de produse de o acurateţe deosebită, lifturile
realizate sunt atractive, durabile, elegante. Finisajele din materiale noi, uşoare şi cu colorit deosebit
permit realizarea unui interior plăcut.
Disponibile în variante constructive potrivite pentru destinaţii cum ar fi:
- imobile birou, imobile locuit
- hoteluri, centre de afaceri, complexe comerciale, aeroporturi, centre industriale, hale,
depozite, etc.
Flexibilitatea compoziţiei interioare precum şi a legăturilor acestora cu zonele de acces
conduc la arhitecturi deosebite, noi, inedite.
Iată câteva din caracteristicile componentelor lifturilor:
- uşile de acces sunt silenţioase, sigure şi realizate din materiale finisate cu grijă acordând
atenţie deosebită detaliilor, sunt echipate cu sisteme şi mecanisme deosebit de fiabile.
Rezistente în timp acestea funcţionează astfel încât deplasarea se face cu deschidere şi
închidere controlată de module alectronice ce permit acţionarea rapidă. Întotdeauna echipate
cu senzori electronici de prezenţă care protejează persoanele aflate în zona de închidere a
acestora.
Fig.1.2. Panoul de comandă al unui ascensor
- Sistemele de iluminat din interiorul cabinei se diferenţiază prin simplitate şi eleganţă.
Iluminatul este în armonie cu interiorul cabinelor şi asigurăo iluminare potrivită cu lumina
din zona de acces. Corpurile de iluminat moderne permit un consum economic.
- Seriile noi de panouri de semnalizare şi comandă sunt foarte plăcute şi elegante. Afişoarele
LCD grafice şi alfanumerice sau cele cu afişaj cu cristale lichide (LCD) de tip matricial şi cu
segmente sunt deasemenea foarte utilizate. Aceste panouri sunt uşor vizibile şi permit
informarea rapidă a utilizatorului indicând poziţia şi sensul de mers. Butoanele de comandă
sunt totodată şi foarte rezistente. Panourile de semnalizare de pe palierede tip afişaj cu
cristale lichide (LCD) grafice şi cele de tip matricial sunt programabile cu ajutorul
ordinatorului şi pot fi foarte uşor personalizate. Acestea pot fi comandate şi cu sistem de
control acces cu chei ce asigură restricţionarea accesului în lift prin blocarea electronică a
comenzilor.
Ascensoare electrice
Caracteristici tehnice
Nr. persoane Viteza (m/s) Nr.staţii Dimensiuni puţ
2 - 18 0,6 - 1,6 4 - 18 la tema
Aceste tipuri de ascensoare pot avea comanda cu însoţitor permanent sau fără însoţitor;
În funcţie de sarcină, transmisia poate fi directă sau indirectă;
Sunt destinate pentru transportul de materiale, alimente, pentru tărgi în spitale precum şi
pentru persoane cu handicap;
Finisajele cabinei pot fi în funcţie de tipul încărcării.
Caracteristici tehnice
Sarcina (kg) Viteza (m/s) Nr.staţii Dimensiuni puţ
500 – 4000 0,3 - 0,8 2 - 12 la tema
Ascensoare hidraulice
Avantajele ascensoarelor hidraulice:
- Fiabilitatea funcţionarii instalaţiilor se poate face prin reglaje hidraulice;
- Silenţiozitate în deplasare;
- Camera maşinii poate fi amplasată la o distanţă de maxim 10 m de puţul
ascensorului;
- Prin costuri reduse se poate asigura coborârea cabinei la o staţie definită şi deschiderea
uşilor automate;
Caracteristici tehnice
Nr. Persoane Viteza (m/s) Nr.staţii Dimensiuni puţ
5 – 4000 0,3 - 0,8 2 - 12 la tema
Ascensoarele cargo hidraulice au aceeaşi destinaţie de transport ca şi ascensoarele electrice;
Acest tip de ascensoare au posibilitatea de a realiza nivelarea în staţie automat, chiar în
timpul încărcării sarcinii.
Caracteristici tehnice
Sarcina (kg) Viteza (m/s) Nr.staţii Dimensiuni puţ
500 – 4000 variabila 2-8 la tema
Trotuarul rulant este soluţia ideala pentru parcurgerea distanţelor lungi. Ca şi trotuar rulant
orizontal, în aeroporturi sau centre de expoziţii, elimină mersul pe jos şi de asemenea conduce
călătorii în direcţia corectă. Cu o înclinaţie de 12°, facilitează accesul clienţilor cu cărucioarele de
cumpărături către etajele superioare.
Destinaţii (în interior): Mall-uri, aeroporturi, centre de afaceri, expoziţii.
Detalii tehnice: Eficienţă maximă datorită întreţinerii uşoare, mod opţional de economisire a
energiei care reduce costurile cu până la 30%.
Siguranţă: Coordonarea dispozitivelor de siguranţă cu ajutorul sistemului de siguranţă al
mişcării ThyssenKrupp, circuit dual de franare cu doi saboţi independenţi de frânare, înălţime
continuă de 1000 mm a balustradelor şi opţional, iluminatul trotuarului pentru accesul în siguranţă.
Design: Culori diferite ale mâinii curente mobile, balustrade din sticlă în diferite forme, finisaj
perfect într-un design modern, sistem de iluminare opţional.
Ergonomie: Nivel redus de zgomot, dispozitiv direct al mâinii curente mobile pentru
sincronizarea mişcării dintre mâna curentă mobila şi trotuar, rulare silenţioasă.
Protecţia mediului: Echipare opţională cu "Echo-chain" pentru lubrifiere de lungă durată,
consum redus datorită sistemelor opţionale de economisire a energiei, fricţiunea minimă între
componentele originale conduce la standarde înalte de calitate.
Usurinţa în servisare: Echiparea opţională cu telecomanda pentru toate funcţiile de bază,
display multilingvistic, interfaţă infraroşu (IR) pentru transferul de date către laptop-ul de servisare.
Finisaje
Atât pentru ascensoarele electrice cât şi pentru cele hidraulice, cabinele pot fi oferite în
diverse forme de finisaj:
- tablă vopsită
- tablă grunduită
Pereţii cabinei
- plastic melaminat (culoare la algere)
- inox, diverse modele şi nuanţe
- suprafaţă cauciucată
- mochetă
Podeaua
- marmură
- linoleum
- iluminat fluorescent
Tavan
- iluminat indirect, diverse combinaţii
Unitatea de memorie
Memoria este o parte a microcontrolerului a cărei funcţie este de a înmagazina date.
Cel mai uşor mod de a explica este de a-l descrie ca un dulap mare cu multe sertare. Dacă
presupunem că am marcat sertarele într-un asemenea fel încât să nu fie confundate, oricare din
conţinuturile lor vor fi atunci uşor accesibile. Este suficient să se ştie desemnarea sertarului şi astfel
conţinuturile lui ne vor fi cunoscute în mod sigur.
Bus-ul
Calea este numită "bus"-magistrală. Fizic, el reprezintă un grup de 8, 16, sau mai multe fire.
Sunt două tipuri de bus-uri : bus de adresă şi bus de date. Primul constă din atâtea linii cât este
cantitatea de memorie ce dorim să o adresăm, iar celălalt este atât de lat cât sunt datele, în cazul
nostru 8 biţi sau linia de conectare. Primul serveşte la transmiterea adreselor de la CPU la memorie,
iar cel de al doilea la conectarea tuturor blocurilor din interiorul microcontrolerului.
Comunicaţia serială
Cu aceasta am adăugat la unitatea deja existentă posibilitatea comunicării cu lumea de afară.
Totuşi, acest mod de comunicare are neajunsurile lui. Unul din neajunsurile de bază este numărul de
linii ce trebuie să fie folosite pentru a transfera datele. Ce s-ar întâmpla dacă acestea ar trebui
transferate la distanţă de câţiva kilometri? Numărul de linii şi numărul de kilometri nu promite
costuri eficiente pentru proiect. Nu ne rămâne decât să reducem numărul de linii într-un aşa fel
încât să nu afectăm funcţionalitatea. Să presupunem că lucrăm doar cu 3 linii, şi că o linie este
folosită pentru trimiterea de date, alta pentru recepţie şi a treia este folosită ca o linie de referinţă
atât pentru partea de intrare cât şi pentru partea de ieşire. Pentru ca aceasta să funcţioneze, trebuie
să stabilim regulile de schimb ale datelor.
Aceste reguli sunt numite protocol. Protocolul este de aceea definit în avans ca să nu fie nici o
neîţelegere între părţile ce comunică una cu alta. De exemplu, dacă un om vorbeşte în franceză, şi
altul vorbeşte în engleză, este puţin probabil că ei se vor înţelege repede şi eficient unul cu altul. Să
presupunem că avem următorul protocol. Unitatea logică "1" este setată pe linia de transmisie până
ce incepe transferul. Odată ce începe transferul, coborâm linia de transmisie la "0" logic pentru o
perioadă de timp (pe care o vom desemna ca T), aşa că partea receptoare va şti că sunt date de
primit, aşa că va activa mecanismul ei de recepţie. Să ne întoarcem acum la partea de transmisie şi
să începem să punem zero-uri şi unu-uri pe linia de transmisie în ordinea de la un bit a celei mai de
jos valori la un bit a celei mai de sus valori. Să lăsăm ca fiecare bit să rămână pe linie pentru o
perioadă de timp egală cu T, şi la sfârşt, sau după al 8-lea bit, să aducem unitatea logică "1" înapoi
pe linie ce va marca sfârşitul transmisiei unei date. Protocolul ce tocmai l-am descris este numit în
literatura profesională NRZ (Non-Return to Zero).
Fig.1.8.Transmiterea informaţiilor microcontrolerului
Pentru că aven linii separate de recepţie şi de transmitere, este posibil să recepţionăm şi să
transmitem date (informaţii) în acelaşi timp. Blocul ce permite acest mod de comunicare este numit
blocul de comunicare serială. Spre deosebire de transmisia paralelă, datele sunt mutate aici bit cu
bit, sau într-o serie de biţi, de unde vine şi numele de comunicaţie serială. După recepţia de date
trebuie să le citim din locaţia de transmisie şi să le înmagazinăm în memorie în mod opus
transmiterii unde procesul este invers. Datele circulă din memorie prin bus către locaţia de trimitere,
şi de acolo către unitatea de recepţie conform protocolului.
Unitatea de timer
Acum că avem comunicaţia serială, putem recepţiona, trimite şi procesa date.
Watchdog-ul
Încă un lucru ce necesită atenţia noastră este funcţionarea fără defecte a microcontrolerului
în timpul funcţionării. Să presupunem că urmare a unei anumite interferenţe (ce adesea se întâmplă
în industrie) microcontrolerul nostru se opreşte din executarea programului, sau şi mai rău, începe
să funcţioneze incorect.
Fig.1.10.Funcţionarea Watchdog-ului
Bineînţeles, când aceasta se întâmplă cu un computer, îl resetăm pur şi simplu şi va continua
să lucreze. Totuşi, nu există buton de resetare pe care să apăsăm în cazul microcontrolerului care să
rezolve astfel problema noastră. Pentru a depăşi acest obstacol, avem nevoie de a introduce încă un
bloc numit watchdog-câinele de pază. Acest bloc este de fapt un alt contor liber unde programul
nostru are nevoie să scrie un zero ori de câte ori se execută corect. În caz că programul se
"înţepeneşte", nu se va mai scrie zero, iar contorul se va reseta singur până la obţinerea valorii sale
maxime. Aceasta va duce la rularea programului din nou, şi corect de această dată pe toată durata.
Acesta este un element important al fiecărui program ce trebuie să fie fiabil fără supravegherea
omului.
Convertorul Analog-Digital
Pentru că semnalele de la periferice sunt substanţial diferite de cele pe care le poate înţelege
(zero şi unu), ele trebuie convertite într-un mod care să fie înţeles de microcontroler. Această
sarcină este îndeplinită de un bloc pentru conversia analog-digitală sau de un convertor AD. Acest
bloc este responsabil pentru convertirea unei informaţii despre o anumită valoare analogă într-un
număr binar şi pentru a o urmări pe tot parcursul la un bloc CPU aşa ca blocul CPU să o poată
procesa.
Programul
Scrierea programului este un domeniu special de lucru al microcontolerului şi este denumit
"programare". Să încercăm să scriem un mic program ce îl vom crea singuri şi pe care oricine va fi
în stare să-l înţeleagă.
START
REGISTER1=MEMORY LOCATION_A
REGISTER2=MEMORY LOCATION_B
PORTA=REGISTER1 + REGISTER2
END
Programul adaugă conţinuturile a două locaţii de memorie, şi vede totalul lor la portul A.
Prima linie a programului este pentru mutarea conţinuturilor locaţiei de memorie "A" într-unul din
regiştri unităţii centrale de procesare. Pentru că avem nevoie şi de celelalte date de asemenea, le
vom muta de asemenea în celălalt registru al unităţii centrale de procesare. Următoarea instrucţiune
instruieşte unitatea centrală de procesare să adauge conţinuturile celor doi regiştri şă să trimită un
rezultat obţinut la portul A, încât suma acestei adăugări să fie vizibilă pentru toată lumea de afară.
Programarea poate fi făcută în câtava limbaje ca Assembler, C şi Basic care sunt cele mai
folosite limbaje.
În momentul actual, sursele de alimentare liniare sunt mai rar utilizate. În locul acestora se
folosesc surse în comutaţie care au randamente mai bune şi preţ mai scăzut mai ales în cazul
puterilor mari. Totuşi, sursele liniare prezintă o serie de avantaje dintre care pot fi menţionate:
fiabilitate sporită;
zgomot redus pe tensiunile furnizate;
perturbaţii de înaltă frecvenţă aproape inexistente;
separare excelentă a consumatorului de reţea.
Din aceste motive, sursele liniare sunt recomandate pentru alimentarea circuitelor cu consum
redus (de pâna la 10..25W) sau a acelora care sunt sensibile la zgomote (amplificatoare audio,
receptoare radio, etc.).
Sursa simplă de tensiune
Sursele simple generează o singură tensiune de alimentare. Schema unei astfel de surse este
următoarea:
Stabilizatorul trebuie ales astfel încât să aibă tensiunea de ieşire egală cu cea dorită şi curentul
maxim mai mare decât cel la care va fi utilizat.
La modul cel mai general, un motor pas cu pas este alcătuit dintr-un rotor constituit de regulă
dintr-un magnet permanent şi dintr-o serie de înfăşurări fixe dispuse ordonat în jurul rotorului pe
ceea ce se cheamă în literatura de specialitate, stator. Aceste înfăşurări reprezintă, în final, o serie de
poli magnetici.
În mod curent, rezoluţia motoarelor pas cu pas este de 200 paşi/rotaţie, tensiunea la care
lucrează. este cuprinsă între 5 şi 24 V. Curentul absorbit de înfăşurări este de ordinul 100 mA sau
chiar mai mult, până la ordinul amperilor.
Acest tip de motoare se regăsesc în imprimante, faxuri, scanere şi fotocopiatoare, etc. Dacă nu
este depăşit momentul nominal prescris de către fabricant, motorul pas cu pas are o precizie foarte
bună, la un ciclu de lucru nepierzând paşi.
O dată cu dezvoltarea tehnicii numerice de calcul, a sistemelor numerice de reglare automată
a proceselor industriale, a roboticii şi a altor domenii noi, a apăut necesitatea introducerii unor
elemente de executie electromecanice capabile să realizeze conversia directă a informaţei în
deplasarea mecanică. Eforturile depuse în acest sens au rezultat în apariţia unei categorii noi de
maşini electrice şi anume motoarele pas cu pas (MPP).
Motoarele pas cu pas pot fi văzute ca motoare electrice fără comutare. Tipic, toate
înfăşurările motorului fac parte din stator, iar rotorul ori este un magnet permanent, ori, în cazul
motoarelor cu reluctanţă variabilă, un bloc cu dinţi realizat dintr-un fel de material magnetic. Toate
comutaţiile motorului trebuie să fie manipulate extern de către controller-ul motorului care este
special proiectat pentru ca motorul să-şi păstreze poziţia sau să se rotească într-un sens sau în altul.
În funcţie de aplicaţie se poate opta între un motor pas cu pas sau un servomotor. Ambele tipuri de
motoare oferă oportunităţi similare pentru o poziţionare precisă, dar circuitul de comandă diferă.
Servomotoarele necesită feedback, pentru pentru a putea fi controlate şi de aceea circuitul este mai
complex. Dacă ar trebui să alegem între un servomotor sau un motor pas cu pas, va trebui să luăm
în calcul şi căteva considerente, acestea depinzând de fiecare aplicaţie în practică. Spre exemplu
repetabilitatea în poziţionare realizată cu un motor pas cu pas depinde de geometria rotorului, în
timp ce repetabilitatea în poziţionare realizat cu un servomotor depinde de componentele analogice
din bucla feedback.
Motoarele pas cu pas pot fi utilizate în sisteme de control în buclă deschisă şi sunt potrivite
pentru acceleraţii mici şi sarcini statice, în timp ce controlul în buclă închisă, este adecvat pentru
acceleralii mai mari care implică sarcini variabile.
Un motor pas cu pas este un dispozitiv electromagnetic care converteşte impulsurile electrice
în mişcări mecanice discrete. Rotorul unui motor pas cu pas se roteşte în paşi discreţi incrementaţi
când pulsurile de comandă îi sunt aplicate în secvenţe regulate. Rotaţia motorului este în relaţie
directă cu aceste pulsuri aplicate. Secvenţele acestor pulsuri aplicate depind de sensul de rotire dorit
al rotorului. Viteza rotorului este şi ea direct proporţională cu frecvenţa pulsurilor de intrare iar
lungimea rotaţiei este proporţională cu numărul pulsurilor aplicate.
Avantaje şi dezavantaje
Avantaje:
asigură univocitatea conversiei impuls-deplasare şi pot fi utilizate în circuit deschis;
gamă largă de frecvenţe de comandă;
precizie şi rezoluţie mare (număr de paşi pe rotaţie), ceea ce simplifică lanţul cinematic
motor-sarcină;
permit porniri, opriri, reversibilităţi, fără pierderi de paşi;
memorează poziţia;
sunt compatibile cu tehnica numerică;
motoarele pas cu pas au cuplul maxim când au o înfăşurare alimentată;
precizia de poziţionare şi repetabilitate a mişcării sunt foarte bune (erorile sunt de
aproximativ 3 - 5% pe un pas, aceste erori neacumulându-se însă la trecerea de la un pas
efectuat la următorul);
nu există contact de perii în interiorul motorului, de aceea viaţa motorului pas cu pas este
direct proporţională cu durata de viaţă a rulmentului;
răspunsul motorului la impulsurile de intrare digitale dă naştere unui ciclu de control
deschis, ceea ce face ca acţionarea motoarelor pas cu pas să fie mai simplă şi mai puţin
costisitoare;
are posibilitatea de a realiza viteze de rotaţie sincronă foarte reduse, având o sarcină cuplată
direct la arbore;
pot realiza un domeniu larg de viteze de rotaţie, deoarece viteza este proporţională cu
frecvenţa impulsurilor de comandă.
Dezavantaje:
unghi de pas, deci increment de rotaţie, de valoare fixă pentru un motor dat;
randament scăzut;
capacitate limitată în ceea ce priveşte acţionarea unor sarcini cu inerţie mare;
viteza de rotaţie relativ scăzută;
dacă nu sunt bine comandate, pot apărea rezonanţe în funcţionare;
necesită o schemă de comandă adaptată la tipul constructiv respectiv şi relativ complexă,
pentru funcţionarea la viteze relativ mari.
Dezvoltarea motorului pas cu pas, precum şi interesul manifestat faţă de aceste motoare au
determinat dezvoltarea unei game largi de tipuri de motoare pas cu pas.
Este un motor relativ ieftin dar şi „slab" ca performanţe, fiind caracterizat de un unghi de pas
cuprins între 7,5° şi 15° (48 - 24 paşi pe o rotaţie completă).
Avantajul acestui motor constă în faptul că memorează poziţia fără ca fazele să fie alimentate.
Dezavantajul principal constă în aceea că este unidirecţional, frecvenţa limită de comandă este
scăzută, iar o modificare a proprietăţilor magnetului permanent îi modifică performanţele.
Aceste motoare au în rotor un magnet permanent, care magnetizează rotorul radial. Fazele pot
fi dispuse pe rotor, ca în figura 1.15, sau pe stator.
Când se alimentează fazele de comandă, se creează un flux ce interacţionează cu fluxul
magnetului permanent, ceea ce face ca rotorul să ocupe o poziţie ce corespunde reluctanţei minime
a circuitului magnetic.
Acest tip de motor pas cu pas, dintr-un anumit punct de vedere, este cel mai simplu şi uşor de
înţeles ca principiu de funcţionare.
În această categorie există două tipuri de bază: MPP cu o singură unitate stator-rotor
(monostatoric) şi MPP cu mai multe unităţi stator-rotor (polistatoric). Ambele tipuri pot fi cu
întrefier axial sau radial. De asemenea aceste motoare pot fi cu mişcare liniară (MPP liniare).
Comutând alimentarea pe faza următoare, se realizează o rotaţie a rotorului, şi o deplasare a dinţilor
rotorici faţă de cei statorici, astfel încât nu vor mai fi aliniaţi. Apare astfel un cuplu electromagnetic
reactiv, care creşte cu unghiul de decalaj între poziţia dinţilor statorici şi rotorici. Prin creşterea
cuplului electromagnetic se atinge un maxim, după care cuplul scade din nou la zero. Aceasta
reprezintă poziţia instabilă, când dinţii rotorici sunt aliniaţi între cei statorici.
Acest motor este relativ simplu de controlat. Un simplu numărător (circuit de contorizare)
poate genera secvenţele de pas necesare, comanda fiind cu un tranzistor pe fiecare înfăşurare.
Motoarele pas cu pas unipolare sunt caracterizate prin înfăşurările lor aşezate central. O schemă de
conductori comună este aceea de a lua toate aceste ramificaţii centrale de înfăşurări şi de a le
alimenta, cu +UM (tensiunea motorului). Circuitul de comandă şi control va împământa apoi fiecare
înfăşurare pentru a o alimenta.
Fig. 1.17. Circuit tipic de comandă a unui motor pas cu pas unipolar.
11
o singură fază alimentată la un moment dat
Motoarele unipolare pas cu pas sunt recunoscute datorită ramificaţiilor centrale ale
înfăşurărilor. Numărul fazelor este de 2 ori numărul bobinelor, din moment ce fiecare bobină este
împărţită în două. Astfel, diagrama de mai jos, care are 2 bobine poziţionate central, reprezintă
conexiunile unui motor pas cu pas unipolar.
inde 1 1 2 2
x a b a b
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
4 0 0 0 1
5 1 0 0 0
6 0 1 0 0
7 0 0 1 0
8 0 0 0 1
Fig. 1.18. Setarea bobinei motorului unipolar pas cu pas şi comanda unei faze.
În secvenţa de cupluri ridicate, 2 înfăşurări sunt active în acelaşi timp pentru fiecare motor pas
cu pas. Această combinaţie de 2 înfăşurări dă un cuplu de până la 1,5 ori mai mare decât secvenţa
standard, dar consumă de 2 ori mai mult curent.
Jumătăţile de pas sunt realizate prin combinarea celor două secvenţe. Mai întâi, una dintre
înfăşurări este activată, apoi două, apoi una, etc. Aceasta practic dublează numărul paşilor pe care
motorul îi va face când va avansa, pentru fiecare revoluţie (360°), şi reduce numărul gradelor pentru
fiecare pas la jumătate.
Spre deosebire de motoarele pas cu pas unipolare, cele bipolare necesită un circuit de
comandă şi control mai complex, deoarece acestea nu au în înfăşurările lor ramificaţie centrală. De
aceea, pentru a schimba direcţia câmpului produs de către o înfăşurare a motorului, este necesar să
inversăm curentul prin înfăşurare.
Motoarele bipolare sunt cunoscute pentru raportul excelent mărime/cuplu, oferind cuplu mai
mare pentru mărimea lor decât motoarele unipolare. Motoarele bipolare sunt proiectate cu bobine
separate care trebuie să fie comandate în orice direcţie2 pentru o bună funcţionare. Motoarele
bipolare pas cu pas folosesc acelaşi control binar de bază ca şi un motor unipolar, numai că
semnalele „0" şi „1" corespund polarităţii voltajului folosit la bobine, nu numai simple semnale
„deschis/închis". Figura 1.21. ne prezintă setarea unei bobine de motor bipolar în 4 faze şi secvenţa
de comandă şi control sensul acelor de ceasornic.
Index 1a 1b 2a 2b
1 + - - -
2 - + - -
3 - - + -
4 - - - +
5 + - - -
6 - + - -
Fig. 1.21. Setarea bobinei motorului bipolar pas cu pas. 7 - - + -
8 - - - +
Pentru inversarea curentului prin înfăşurare putem folosi un pol dublu conectat, efectuând
această schimbare electromecanic. Electronica echivalentă a unui astfel de „întrerupător" poartă
denumirea de punte H şi este prezentată în figura 1.23.
Este folosit pentru controlul motoarelor pas cu pas bipolare, dar şi al motoarelor de curent
continuu, solenoizilor3 şi la multe alte aplicaţii.
Fiecare bobină a motorului pas cu pas are nevoie de propriul circuit de comandă de tip punte
H. Motoarele tipice pas cu pas bipolare au 4 legături, conectate la 2 bobine izolate în motor. Astfel,
sunt disponibile circuite integrate proiectate special pentru comanda motoarelor bipolare pas cu pas
2
polaritatea trebuie să fie inversată în timpul operaţiei.
3
sondelor cu magnet permanent.
sau a celor de curent continuu. Un mic circuit logic XOR a fost adăugat în figura 2.9, pentru a
împiedica de a fi văzute amândouă intrările ca „l"-uri de către tranzistor.
O altă caracteristică, a circuitelor de tip punte H, este că ele au întreruperi electrice care pot fi
aplicate pentru a încetini sau chiar pentru a opri motorul de a se roti liber, când nu se mişcă sub
controlul circuitului de comandă şi control. Acest lucru este realizat în esenţă prin micşorarea
bobinelor motorului, făcând ca tensiunile produse în bobine pe durata rotaţiei să se repercuteze
asupra lor, făcând astfel dificilă modificarea sensului de rotaţie al rotorului. Cu cât se roteşte mai
repede rotorul, cu atât mai mult frânele electrice se strâng.
polaritate
A B
0 0 0 0
0 1 - +
1 0 + -
1 1 0 0
Obiectivul alegeri motoarelor pas cu pas, a acţionării este acela de a identifica ”pachetul”
economic, de acţionare ce va efectua eficient toate mişcările solicitate într-o aplicaţie dată. Aceasta
poate fi o sarcină provocatoare, întrucât utilizarea sistemelor cu motoare pas cu pas convenţionale
este totdeauna o procedură simplă. Motoarele pas cu pas pot pierde sincronizarea (calarea), ce
cauzează o pierdere a preciziei de poziţionare ceea ce duce la o mişcare nereuşită sistemele cu
motor pas cu pas se vor opri (cala) atunci când necesarul de moment al mişcării executate plus
momentul pierdut în vibraţiile „copleşitoare”, depăşeşte momentul disponibil al motorului. Una din
cauzele principale ale calării motoarelor pas cu pas o reprezintă un fenomen numit rezonanţă.
La sistemele cu motoare pas cu pas, convenţionale, necesarul de moment, datorat rezonanţei
scade performanţa motorului pe toată gama de viteze a motorului, din cauza unei reduceri a
momentului util ce accelerează sarcina. Această reducere a momentului util fie poate limita serios
performanţa sistemului, ducând la un randamentscăzut, fie poate face cu sistemul de mişcare pas cu
pas să nu mai funcţioneze deloc. La sistemele Microstepping, rezonanţa este deosebit de
supărătoare în gama de viteze a motorului de 10 – 15 rps, unde este numită în mod obişnuit
instabilitate pe interval mediu. Acţionările Microstepping ale IDC-urilor elimină problema
rezonanţei prin circuitele antirezonanţă şi prin acestea oferă utilizatorului valoarea maximă de
moment posibil pe toată gama de viteze a motorului. Pentru a ilustra impactul negativ al rezonanţei
asupra performanţelor motoarelor convenţionale pas cu pas şi pentru a arăta că acelaşi sistem va
lucra mai bine cu o acţionare Microstepping IDC, ar trebui aruncată o privire la cauzele şi la
efectele rezonanţei asupra sistemelor microstepping cu subatenuare (amortizare slabă).
Senzori de proximitate
Un captor de proximitate se prezintă decât un pixel, adică o singură zonă sensibilă
echivalentă funcţional cu un punct.
Dacă nu utilizăm posibilitatea acestui captor pentru a îmbunătăţi informaţia preluată din
mediu, el ne poate furniza decât două tipuri de informaţii:
- prezenţa sau absenţa unui obiect în raza sa de acţiune;
- o mărime a distanţei captor-obiect, dacă acesta este în raza sa de acţiune (de la câţiva mm
sau centimetrii până la câtiva metrii) cu o anumită precizie.
Mai mult sunt numiţi captori de vedere locală făcând aluzie la raza de acţiune mică şi la
suprafaţa pe care o examinează.
Cel mai frecvent întâlnim două tipuri de captori: ultrasunete şi infraroşu.
Captorii cu ultrasunete
Distanţa lor minină de detecţie nu scade sub 30 – 50 cm, distanţa maximă atingând mai
mulţi metrii. Sunt destul de obişnuiţi după dezvoltarea aparatelor foto în intregime automate care
prezintă acest tip de captor.
Unghiul lor de deschidere, mai degrabă mare asociat unei distanţe minime de detecţie destul
de mare conduc în principal la funcţionarea în siguranţă a roboţilor mobili pentru a evita
obstacolele.
Captorii cu infraroşu
Un emiţător (de obicei o diodă) trimite un fascicol infra-roşu de lumină pe obiect prin
intermediul unei lentile. Fascicolul reflectat este captat de un receptor (de obicei fototranzistor)
figura 4.4. Pentru a evita buruiajul posibil de la lumina mediului ambiant, fascicolul de emisie este
modulat sau mărit (câţiva kHz). La recepţie fiind filtrat.
Printre avantajele acestui tip de captor, atragem atenţia asupra mărimii foarte mici (câţiva
centimetri cubi) care permite intergrareasa în orice parte a robotului şi de asemenea distanţa minimă
de detecţie care scade sub câţiva centimetri.
distanţe captor – obiect diferite: l1 şi l2 . Pentru a mări indeterminarea, a mai mult de o informaţie de
obicei, va trebui să dăm mai înainte sau să tragem înapoi captorul. De fapt pantele l1 şi l2 detectabile
prin această metodă sunt de semne contrare.
2) Forma curbei va fi dată de orientarea obiectului în funcţie de axa captorului. Trebuie deci
sa ne asigurăm de această orientare şi de posibilitatea de reproducere a sa.
3) În ultimul rând, amplitudinea curbei depinde puternic de coeficientul de reflexie la infra –
roşu a obiectului.
Fig.1.29. Forma şi amplitudinea curbei de oscilaţie.
CAPITOLUL 2
Date tehnice:
1. Grupul de acţionare trebuie să fie similar cu cel al unui sistem real de tip ascensor
(elementul de acţionare al ascensorului de tip troliu)
2. Macheta trebuie să aibă cel puţin două nivele plus parter pentru a avea nivelul de
combinaţii şi comanda asemănătoare unui sistem real.
3. Softul trebuie să includă modulele:
modul de comandă ascensor
modul de monitorizare pentru existenţa defectelor.
Conditii tehnice ce trebuie respectate la rezolvarea temei tehnice:
1. Utilizarea modului CAD SolidWorks pentru proiectarea mecanica a sistemului;
2. Utilizarea limbajului de asamblare MPLab pentru programarea blocului electronic;
3. Utilizarea logicii tranzistorizate pentru realizarea blocului electronic de comanda si
control;
4. Pentru aplicatia numerica a suitei de calcule mecanice se vor lua in considerare
urmatoarele date:
CAPITOLUL 3
Breviar de calcule mecanice
Piesele solicitate prin forţe de inerţie se studiază la fel cu cele solicitate static, dacă se adaugă
forţele de inerţie după care se determină eforturile, prin metodele cunoscute.
În cablul de ascensor, efortul cel mai mare are loc în perioada de pornire de jos în sus (figura
de mai jos). Dacă mişcarea are loc cu acceleraţie a, forţa axială în capătul superior al cablului este:
N=P+ qx+ Fi=P+qx + p+qx / g⋅a=( P+ qx )⋅( 1+ a/ g )
Când greutatea cablului este mică în comparaţie cu greutatea cabinei, q se neglijează.
Bara în mişcare de rotaţie
Tija OA din figura alăturată de greutate p daN/cm şi lungime l, are în capăt o bilă de greutate
G şi se roteşte, în plan orizontal cu viteza unghiulară în jurul punctului O.
Se cere să se determine forţa axială maximă din tijă.
Această forţă are loc în punctul O şi este egală cu forţa centrifugă a bilei plus forţa centrifugă
a tijei.
2
F1 =G/ g⋅lω
Ipoteza: Considerăm că Re1 =Re2 =Q/ 2 pentru cazul în care cablul se află la jumătatea
distanţei dintre capetele tamburului (troliului).
∑ Fz=0
∑ Mrul=0
−Q+Re1 + Re2 =0 (1)
Q(d /2)−Re2⋅d=0 (2)
Q (d /2+ x )
Re2 = =0
Din (2) ⇒ d
d +2 x d +2 x d −2 x
Re1 =Q−Re2=Q−Q⋅ =Q(1− )=Q
Din (1) ⇒ 2d 2d 2d
Pentru cazul considerat în ipoteza simplificatoare de mai sus:
x=0 şi Re1 =Re2 =Q/2
Calculul lui Q
Q=G+F i +6 F f
G=m max⋅g
mmax =mcabinei +m utila=500 kg
mcabinei =150 kg
mutila =350 kg
Fi =mmax⋅a max
max
a max =V cablu / Δ t acc
V max
cablu =ωmax⋅Rtroliu
D troliu 120
Rtroliu = = =60 mm
2 2
π⋅n max
ω max =
30 ¿ ⇒ω max ≈5 rad / s ¿
⟩ n max =50 rot /min
¿
max
V cablu =5 rad /s⋅0 , 06 m=0,3 m/s
0,3
a max = =0 ,15 m/s2
2
Fi =500⋅0 , 15=75 N
Deci:
Dimensionarea cablului
2
σ tr admisibil =250 N /mm (pentru oţel)
Q
σ cablu = ≤σ admisibil
πd 2
4
4Q
d min =
πσ tractiune
d=
√ 4Q
πσ admisibil
=
√ π⋅250 √
4⋅5100 20400
=
785
=√ 25 , 987≈5 mm
S-a ales diametru cablu de tracţiune lift d=11 mm sau echivalent cablu multifilar.
raportul
i⋅F a /C 0 , unde i reprezintă numărul de rânduri de bile iar C0 - capacitatea statică de
în funcţie de acest raport se alege mărimea „e” faţă de care se compară raportul
F a/ R .
Dacă
F a / R≤e , rezultă X =1, Y =0 .
Dacă
F a / R>e , se determină X şi Y prin interpolare lineară (conf. STAS 7160-82).
Rulmenţii radiali – axiali se montează pe arbore, întotdeauna perechi şi poate fi realizat în „O”
pentru arbori cu roţi în consolă şi în „X” pentru arbori care au roţile situate între lagăre. Forţa axială
()
p
C
L=
P [milioane rotaţii]
unde:
p=¿ {3 − pentru rulmenti cu bile¿¿¿¿
În funcţie de durabilitatea efectivă şi de turaţia arborelui se stabileşte durata efectivă de
funcţionare:
6
L⋅10
Lh = ≥Lha
60⋅n [ore]
Dacă rulmentul ales nu se verifică, atunci se schimbă acesta cu un rulment cu acelaşi diametru
al inelului interior, însă de serie superioară de dimensiuni.
Rulmenţii aleşi în final trebuie să facă parte din clasa întâi de utilizare, care se fabrică în mod
curent. După efectuarea calculului de verificare al rulmenţilor, proiectantul trebuie să decidă asupra
alegerii ajustajelor realizate între rulment şi carcasă, respectiv între rulment şi arbore. Alezajul
rulment – carcasă este de tipul alezaj unitar. Acest lucru se datorează faptului că rulmentul este un
subansamblu independent şi, deci, câmpurile de toleranţă pentru diametrele d şi D sunt impuse de
fabricant. Astfel, execuţia rulmenţilor, conform STAS 4207-89, stabileşte 5 clase de precizie pentru
rulmenţi, simbolizate cu P0 – precizie normală, P6, P5, P4, P2 – cea mai precisă clasă.
O altă problemă, căreia proiectantul trebuie să-i găsească rezolvare, este aceea legată de
modul de ungere, răcire şi etanşare a lagărelor cu rulmenţi. Trebuie aleasă o soluţie de ungere care
să reducă pierderile prin frecare, să permită evacuarea căldurii generate prin frecare, să protejeze
rulmentul împotriva pătrunderii de particole abrazive din exterior, precum şi a umezelii.
Ca materiale de ungere, în cazul rulmenţilor folosiţi în construcţia reductoarelor de turaţie, se
recomandă cu precădere uleiurile minerale de transmisie, folosite dealtfel şi pentru ungerea
angrenajelor. Într-o astfel de situaţie, nu se admite ca elementul de rostogolire, aflat în poziţia cea
mai de jos, să fie cufundat în ulei mai mult de jumătate. Dacă rulmentul este situat deasupra băii de
ulei, ungerea acestuia se realizează prin canale colectoare sau cu ajutorul unor „buzunare”,
practicate în carcasa superioară. In aceste buzunare se colectează uleiul scurs pe peretele interior al
carcasei care, apoi, este dirijat către rulment, realizând atât răcirea rulmentului, cât şi ungerea
acestuia.
Pentru calculul durabilităţii rulmenţilor de la arborele reductor (numărul de milioane de rotaţii
efectuate până la apariţia primelor semne de oboseală) am ales doi rulmenţi radiali cu role cilindrice
NUP 210 ISO/R15 STAS 3041-68 cu capacitatea de încărcare C = 43 kN şi următoarele dimensiuni
principale:
- d = 50 mm
- D = 90mm
- B = 20 mm
- r = 2 mm
Aşadar:
10
L=
P() ( ) (
C p C p 43000
=
Q /2
=
5100 /2 ) 3 =12295 , 917
[milioane rotaţii]
6 6
L⋅10 12295 , 917⋅10
Lh = = =4098639
60⋅n 60⋅50 [ore]
Macheta (proiect) a fost realizată din diferite materiale de natură metalică sau plastică care pot
imita într-o oarecare măsură un caz real. Astfel structura machetei este realizată din ţeavă PVC cu
diametrul de 40 şi respectiv 25 mm, palierele sunt realizate din PVC alb de 5 mm, iar casa liftului
din PVC alb de 3mm.
În mod practic, pentru deplasarea liftului în plan vertical, sunt utilizate ghidaje din oţel tras
care oferă o calitate a căilor de rulare suficient de bună pentru experimentarea sistemului
mecatronic de tip ascensor.
Motorul de acţionare al cabinei este un motor grup reductor, alcătuit dintr-un motor pas cu pas
şi un reductor cu angrenaj melcat, care oferă suficientă forţă pentru deplasarea cabinei liftului.
Datorită grupului motoreductor nu este permisă nici deplasarea în gol a cabinei când motorul nu
este în funcţiune astfel imitând cu succes aspectul şi comportamentul unui ascensor real, ducând
deci la o mai bună funcţionare şi oferind posibilitatea de a face toate testele aferente proiectului.
Acest tip de reductor având gradul de reducţie de 4/1 este suficient pentru a nu putea fi dat în
sens invers de greutatea cabinei când motorul nu este alimentat şi astfel nu a mai fost nevoie de
sistem de frânare şi putând să păstreze o viteză de deplasare între nivele suficient de bună pentr a
imita cazul real.
CAPITOLUL 4
Algoritmi software şi harware de funcţionare ai aplicaţiei
Pentru a determina poziţia şi sensul de deplasare ale liftului trebuie să ştim următoarele informaţii:
- dacă liftul se deplasează - cu viteză mică
- cu viteză mare
- dacă liftul ar trebui să se mişte ( buton apăsat dar liftul este încă în repaus )
- dacă una din uşi este deschisă atunci liftul trebuie oprit în regim de urgenţă deoarece se pot
produce accidente
- dacă liftul se mişcă şi poziţia s-a modificat trebuie să verificăm dacă poziţia actuală nu
cumva este poziţia în care trebuie să ajungă.
Fig.2.4.Algoritmul de afişare al cifrelor pe display
3. Panou comandă – butoane – pentru simulare senzori poziţie etaj şi între etaj
5. Bloc comandă al motoarelor - în această aplicaţie motoarele sunt reprezentate prin 2 LED-
uri:
- de viteză mare
- de viteză mică
CAPITOLUL 5
Programe utilizate
Urmând procedura de instalare, veţi obţine un ecran al programului însuşi. După cum vedeţi,
MPLAB arată ca cele mai multe programa Windows. În apropierea zonei de lucru este un "menu"
(în partea de sus colorat în albastru cu opţiunile File, Edit…etc.), "toolbar" (o zonă cu ilustraţii de
mărimea unor pătrate mici), şi linia de stare în partea de jos a ferestrei. Este o regulă în Windows de
a lua cele mai frecvent folosite opţiuni de programe şi de a le plasa mai jos de menu, de asemenea.
Astfel le putem accesa mai uşor şi să grăbim lucrul. Cu alte cuvinte, ceea ce aveţi în în toolbar aveţi
de asemenea în menu.
Pregătirea unui program de a fi citit într-un microcontroler se poate rezuma în câţiva paşi:
Setarea unui mod dezvoltare este necesară aşa ca MPLAB să poată şti ce instrumente vor fi
folosite pentru a executa programul scris. În cazul nostru, avem nevoie să setăm simulatorul ca un
instrument ce este folosit. Făcând clic pe OPTIONS---> DEVELOPMENT MODE, o nouă fereastră
apare ca în figura 3.1:
Când partea "proiect" a lucrului este terminată, trebuie să începem să scriem un program.
Cu alte cuvinte, un nou fişier trebuie deschis, şi se va denumi "test.asm". În cazul nostru, fişierul
trebuie denumit "test.asm" pentru că în proiecte ce au doar un fişier ( ca al nostru), numele
proiectului şi numele fişierului sursă trebuie să fie aceleaşi.
Un nou fişier este deschis făcând clic pe FILE>NEW. Astfel obţinem o fereastră
text(fig.3.6) în interiorul spaţiului de lucru MPLAB.
Fig.3.6.Fereastră text nouă în spaţiul de lucru
Fereastra nouă reprezintă un fişier unde va fi scris programul. Pentru că fişierul nostru trebuie
denumit "test.asm", îl vom denumi aşa. Denumirea se face (ca la toate programele Windows) prin
clic pe FILE>SAVE AS. Obţinem apoi o fereastră ca în figura 3.7:
Simulatorul MPSIM
Simulatorul este o parte a mediului MPLAB care dă o mai bună imagine a lucrărilor unui
microcontroler. Printr-un simulator, putem monitoriza valorile curente ale variabilelor, valorile
registrului şi starea pinilor portului. Este adevărat, simulatorul nu are aceeaşi valoare în toate
programele. Dacă un program este simplu ( ca cel dat aici ca exemplu), simulrea nu este foarte
importantă pentru că setarea pinilor portului B la unu logic nu este o sarcină dificilă. Totuşi,
simulatorul poate fi de mare de mare ajutor la programele mai complicate ce includ timer-i, condiţii
diferite unde ceva se întâmplă , şi alte cerinţe similare (în special cu operaţii matematice).
Simularea, după cum indică numele " simulează lucrul unui microcontroler". În timp ce simulatorul
este conceput ca microcontrolerul să execute instrucţiunile una câte una, programatorul se mişcă
într-un program pas-cu-pas (linie-cu-linie) şi urmăreşte ce se întâmplă cu datele în microcontroler.
Când scrierea s-a terminat, este un obicei bun ca programatorul să-şi verifice mai întâi programul
său în simulator, şi apoi să-l ruleze într-o situaţie reală (fig.3.9).
Primul lucru pe care trebuie să-l facem este, ca într-o situaţie reală, este de a reseta un
microcontroler cu comanda DEBUG > RUN > RESET. Această comandă rezultă în linia îngroşată
poziţionată la începutul unui program, şi contorul programului este poziţionat la zero ceea ce poate
fi observat în linia de stare (pc: 0x00).
Fig.3.9 Fereastra de simulare şi rulare a programului
Una din principalele caracteristici a simulatorului este abilitatea de a vedea starea regiştrilor
din microcontroler. Aceşti regiştri sunt numiţi regiştri de funcţie specială, sau SFR. Putem obţine o
fereastră cu regiştri SFR (fig.3.10.) făcând clic pe WINDOW->SPECIAL FUNCTION
REGISTERS, sau pe icon-ul SFR. În afară de regiştrii SFR, este util de a avea o avea o privire în
interiorul fişierului regiştrilor. Fereastra cu fişierul regiştrilor poate fi deschisă făcând clic pe
WINDOW->FILE REGISTERS. Dacă sunt variabile în program, este bine de a le vedea de
asemenea. Fiecărei variabile îi este desemnată o fereastră (Watch Windows) făcând clic pe
WINDOW->WATCH WINDOWS.
Dacă o piesă electronică utilizată în proiect nu are corespondenţă în bazele de date utilizatorul
are două variante: să aleagă manual din baza de date o corespondenţă pentru piesa dată, iar în cazul
în care nu găseşte nimic trebuie să creeze singur o nouă piesă (numai distanţele între pini nu şi piesa
fizic) sau poate termina programul fără a realiza cablajul şi să modifice în CaptureCIS piesa folosită
(fig.3.17.).
Fig.3.17.Fereastra pentru modificarea unei piese noi
În figura următoare se poate vedea figura 3.18. cu fereastra pentru crearea unei noi piese:
CAPITOLUL 6
Descrierea aplicaţiei
R eleu 1N 40 07
12 V C C
2
J 17 1 10K 1 0K 1N 4 007
3
4 J1
3 3 B C 1 07 2
2 5 1
1 2
3
1 0K
2 B C 1 07 2 1N 4 007 CON2
1
CON3 B C 10 7
1 0K 10K
1
12 V C C 5 VC C
R eleu 1 N 400 7
2
J 18 1 4k7 U2
3
4 J 14
3 3 B C 1 07 2 1 40 10K
2 MC LR R B7 1 R andul1
5 2 39 10K
1 R A0 R B6 2 R andul2
1 0K 3 38 10K
R A1 R B5 3 R andul3
4 37 10K
R andul4
1
CON3 5 R A2 R B4 36 10K 4
R A3 R B3 5 R andul5
6 35 10K
R A4 R B2 6 R andul6
7 34 10K
R A5 R B1 7 R andul7
8 33 10K
R E0 R B0 8 R andul8
9 32
C7 10 R E1 VD D 31 J 15
11 R E2 VSS 30 10K
5 VC C VD D RD7 1 C oloan a8
22 p F Y1 12 29 10K
VSS RD6 2 C oloan a7
4 MH z 13 28 10K
OSC 1 RD5 3 C oloan a6
C8 14 27 10K
OSC 2 RD4 4 C oloan a5
15 26
RC0 RC7 5 C oloan a4
22 p F 16 25
RC1 RC6 6 C oloan a3
17 24
RC2 RC5 7 C oloan a2
18 23
RC3 RC4 8 C oloan a1
10K 1 9 22 10K
10K 2 0 RD0 RD3 21 10K
RD1 RD2
P IC 16 F 8 77A
330
330
330
330
330
330
330
330
4
3
2
1
4
3
2
1
A B C D E F G DP
În schema principală s-au folosit următoarele piese care au roluri bine definite în
funcţionarea machetei ascensorului, aceste piese sunt:
- Y1 (cuarţ de 4Mhz)
- C7, C8 (condensatori de 22pF...33pF)
Acest cuarţ şi cele două condensatoare sunt folosite pentru realizarea oscilatorului
microcontrolerului, oscilator pe bază de cuart cu frecvenţa de oscilaţie de 4Mhz (ceea ce înseamnă
că microcontrolerul execută 1.000.000 instrucţiuni pe secundă).
- s-a folosit o rezistenţă de 10k pentru a se lega pinul 1 (MCLR) la 5VCC obligatoriu
pentru buna funcţionare a microcontrolerului.
- Pinul 11 este legat la 5 V c.c
- Pinul 12 este legat la minusul sursei de alimentare
Pe pinii 9, 10 ai microcontrolerului s-au cuplat două relee prin intermediul a doi tranzistori,
două rezistenţe care comandă cei doi tranzistori şi două diode de protecţie care protejeaza cei doi
tranzistori împotriva curenţilor autoinduşi care apar în momentul în care bobina este cuplată s-au
decuplată.
Releul este un dispozitiv electromecanic care transformă un semnal electric într-o mişcare
mecanică. El este alcătuit dintr-o bobină din conductori izolaţi înfăşuraţi pe un nucleu metalic şi o
armătură metalică cu unul sau mai multe contacte. În momentul în care o tensiune de alimentare
este aplicată la bornele unei bobină, curentul circulă şi va fi produs un câmp magnetic care mişcă
armătura pentru a închide un set de contacte şi/sau pentru a deschide un alt set. Când alimentarea
este dezactivată din releu, cade fluxul magnetic din bobină şi se produce o tensiune înaltă în direcţia
opusă. Această tensiune poate strica tranzistorul de comandă şi de aceea este conectată o diodă cu
polarizare inversă de-a lungul bobinei pentru a scurtcircuita vârfurile de tensiune în momentul în
care apar.
Multe microcontrolere nu pot comanda un releu direct şi de aceea un tranzistor de comandă
este necesar. Un HIGH pe baza tranzistorului activează tranzistorul şi acesta la rândul lui activează
releul. Releul poate fi conectat la orice dispozitiv electric prin intermediul contactelor. Rezistenţa de
10K din baza tranzistorului limitează curentul dinspre microcontroler la o valoare solicitată de
tranzistor. Rezistenţa de 10K dinspre bază şi bara negativă previne ca tensiunile de zgomot aplicate
în baza tranzistorului să activeze releul. De aceea numai un semnal clar de la microcontroler va
activa releul.
Aceste două relee sunt folosite pentru inversarea sensului de mişcarea a motorului, motor
care este de tip universal iar releele schimbă polaritatea curentului care trece prin rotor în felul
acesta schimbând de fapt sensul de rotaţie al motorului.
Pentru o mai mare protecţie a microcontrolerului se poate folosi pe liniile de ieşire un
optocuplor care să realizeze separarea optică între circuitul comandat şi circuitul de comandă.
Un releu poate fi de altfel activat prin intermediul unui optocuplor care în acelaşi timp
amplifică curentul provenit de la ieşirea microcontrolerului şi oferă un grad înalt de izolare.
Optocuploarele HIGH CURRENT deobicei conţin un tranzistor cu o ieşire „Darlington” pentru a
oferi curent mare de ieşire. Conectarea prin intermediul unui optocuplor este recomandată în mod
special pentru aplicaţiile cu microcontroler unde motoarele sunt activate şi zgomotele de comutaţie
provenite de la motor pot ajunge în microcontroler prin intermediul liniilor de alimentare.
Optocuplorul comandă un releu iar releul activează motorul.
În figura următoare se poate vedea conectarea unui consumator la un microcontroler prin
intermediul unui optocuplor.
- Pe portul C al microcontrolerului am conectat un afişaj numeric cu doi digiţi în felul
următor:
- Pinul 0 --- segmentul A
- Pinul 1 --- segmentul B
- Pinul 2 --- segmentul C
- Pinul 3 --- segmentul D
- Pinul 4 --- segmentul E
- Pinul 5 --- segmentul F
- Pinul 6 --- segmentul G
- Pinul 7 --- punctual decimal (care de fapt afişează cifra 1 pe primul digit “zece”)
Pe pinii 2,3 sunt conectaţi doi tranzistori care au rol de a seta viteza de deplasare a
ascensorului cu ajutorul blocului de comandă, bloc de comandă pe care pot fi reglate mai multe
viteze în funcţie de rezistenţa de comandă dar pentru acest proiect au fost de ajuns 2 astfel de
comenzi.
GN D
+ C3
2
3
1 T1 3 U4
L M 78 0 5/ TO
J 11 2 - + 4 1 3
V IN VOU T 5 VC C
2 2 0V F6
2 2 4 + C5 + C6
22 0 V 1
GN D
F U SE
2
Sursa de alimentare folosită la acest proiect este compusă din:
1. Conectorul J1 care are rolul de a face legatura între sursa de alimentare (priză) şi montaj
2. Siguranta F6 are rolul de protecţie la supracurenţi
3. Conectorul J1 este conectat la transformatorul T1 prin intermediul siguranţei F6 care este un
transformator coborâtor de tensiune de la 220V la 12V
4. Puntea redresoare 1 are rolul de a transforma curentul alternativ de pe pinii 1,3 în curent
continuu la pinii 2 (-) şi 4 (+)
5. Condensatorul C5 are rol de filtraj şi se leagă între pinii 2 şi 4 ai punţii redresoare
6. La condensatorul C5 se leagă şi stabilizatorul LM7805 care are rolul de stabilizare şi reglare
a tensiunii de ieşire la borna 3 a stabilizatorului găsindu-se un condensator de filtraj, la
bornele acestui condensator găsindu-se o tensiune stabilizată de 5V CC care este necesară
pentru alimentarea microcontrolerului şi a tuturor elementelor de mică putere
7. Sursa LM7812 se leagă la C5 şi are ca scop împreună cu condensatorul C3 obţinerea unei
tensiuni de 12V CC necesară pentru alimentarea releelor.
1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
SW 9 S W 16 S W 17 S W 18 S W 19 S W 20 S W 21 S W 22
1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
S W 10 S W 23 S W 24 S W 25 S W 26 S W 27 S W 28 S W 29
1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
S W 11 S W 30 S W 35 S W 40 S W 45 S W 50 S W 55 S W 60
J13 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
8
7
6
5 S W 12 S W 31 S W 36 S W 41 S W 46 S W 51 S W 56 S W 61
4
3 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
2
1
CON8
S W 13 S W 32 S W 37 S W 42 S W 47 S W 52 S W 57 S W 62
1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
S W 14 S W 33 S W 38 S W 43 S W 48 S W 53 S W 58 S W 63
1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
S W 15 S W 34 S W 39 S W 44 S W 49 S W 54 S W 59 S W 64
1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
Pentru citirea tuturor senzorilor s-a folosit multiplexarea unei tastaturi de 8 linii x 8 coloane
liniile fiind legate pe pinii portului B iar coloanele fiind legate pe pinii portului D rezultând în total
8*8=64 butoane.
Sunt necesare atâtea butoane (senzori) din următoarele motive:
- 12 butoane în lift (P.....10 + urgenţă)
- 11 butoane pe paliere (P....10)
- 12 butoane uşi deschise (uşa internă la cabină + cele 11 uşi de pe paliere)
- 11 butoane poziţie lift la etaj
- 12 butoane poziţie lift între etaje + urgenţă (mai jos de parter sau mai sus de et. 10)
- total 58 butoane
CISC, RISC
S-a spus deja că PIC1684 are o arhitectură RISC. Acest termen este adeseori găsit în
literatura despre computere, şi are nevoie să fie explicat aici mai în detaliu. Arhitectura Harvard este
un concept mai nou decât von-Neumann`s. S-a născut din nevoia de mărire a vitezei
microcontrolerului. În arhitectura Harvard, bus-ul de date şi bus-ul de adrese sunt separate. Astfel
un mare debit de date este posibil prin unitatea de procesare centrală, şi bineînţeles, o viteză mai
mare de lucru. Separând un program de memoria de date face posibil ca mai departe instrucţiunile
să nu trebuiască să fie cuvinte de 8 biţi. PIC16F877 foloseşte 14 biţi pentru instrucţiuni ceea ce
permite ca toate instrucţiunile să fie instrucţiuni de un cuvânt. Este de asemenea tipic pentru
arhitectura Harvard să aibă mai puţine instrucţiuni decât von-Newmann şi să aibă instrucţiuni
executate uzual intr-un ciclu.
Microcontrolerele cu arhitectură Harvard sunt de asemenea numite "microcontrolere RISC".
RISC înseamnă Reduced Instruction Set Computer. Microcontrolerele cu arhitectura von-Newmann
sunt numite "microcontrolere CISC". Titlul CISC înseamnă Complex Instruction Set Computer.
Pentru că PIC16F877 este un microcontroler RISC, aceasta înseamnă că are un set redus de
instrucţiuni, mai precis 35 de instrucţiuni (de ex. microcontrolerele INTEL şi Motorola au peste 100
de instrucţiuni). Toate aceste instrucţiuni sunt executate într-un ciclu cu excepţia instrucţiunilor
jump şi branch. Conform cu ceea ce spune constructorul, PIC16F877 ajunge la rezultate de 2:1 în
compresia cod şi 4:1 în viteză în comparaţie cu alte microcontrolere de 8 biţi din clasa sa.
Aplicaţii
PIC16F877 se potriveşte perfect în multe folosinţe, de la industriile auto şi aplicaţiile de
control casnice la instrumentele industriale, senzori la distanţă, mânere electrice de uşi şi
dispozitivele de securitate. Este de asemenea ideal pentru cardurile smart ca şi pentru aparatele
alimentate de baterie din cauza consumului lui mic.
Memoria EEPROM face mai uşoară aplicarea microcontrolerelor la aparate unde se cere
înmagazinarea permanentă a diferitor parametri (coduri pentru transmiţătoare, viteza motorului,
frecvenţele receptorului, etc.). Costul scăzut , consumul scăzut, mânuirea uşoară şi flexibilitatea fac
PIC16F877 aplicabil chiar şi în domenii unde microcontrolerele nu au fost prevăzute înainte
(exemple:funcţii de timer, înlocuirea interfeţei în sistemele mari, aplicaţiile coprocesor, etc.)
Programabilitatea sistemului acestui cip (împreună cu folosirea a doar doi pini în transferul de date)
face posibilă flexibilitatea produsului, după ce asamblarea şi testarea au fost terminate. Această
capabilitate poate fi folosită pentru a crea producţie pe linie de asamblare, de a înmagazina date de
calibrare disponibile doar după testarea finală, sau poate fi folosit pentru a îmbunătăţi programele la
produse finite.
Fig.4.4.
TYCO citeşte instrucţiunea MOVLW 55h (nu are importanţă pentru noi ce instrucţiune a fost
executată, ce explică de ce nu este un dreptunghi în partea de jos).TCYI execută instrucţiunea
MOVLW 55h şi citeşte MOVWF PORTB.
TCY2 execută MOVWF PORT şi citeşte CALL SUB_1.TCY3 execută o apelare a unui
subprogram CALL SUB_1, şi citeşte instrucţiunea BSF PORTA, BIT3. Pentru că instrucţiunea
aceasta nu este aceea de care avem nevoie, sau nu este prima instrucţiune a unui subprogram
SUB_1 a cărui execuţie este următoarea în ordine, instrucţiunea trebuie citită din nou. Acesta este
un bun exemplu a unei instrucţiuni având nevoie de mai mult de un ciclu.
TCY4 ciclul instrucţiunii este total folosit pentru citirea primei instrucţiuni dintr-un
subprogram la adresa SUB_1. TCY5 execută prima instrucţiune dintr-un subprogram SUB_1 şi
citeşte următoarea.
Semnificaţia pinilor
PIC16F84 are un număr total de 18 pini. Cel mai adesea se găseşte într-o capsulă de tip DIP18
dar se poate găsi de asemenea şi într-o capsulă SMD care este mai mică ca cea DIP. DIP este
prescurtarea de la Dual In Package. SMD este prescurtarea de la Surface Mount Devices sugerând
că găurile pentru pini unde să intre aceştia , nu sunt necesare în lipirea acestui tip de componentă.
Fig.4.5.Semnificaţia pinilor la PIC 16F877
Pinii microcontrolerului PIC16F84 au următoarea semnificaţie:
Pin nr. 1 MCLR Resetează intrarea şi tensiunea de programare Vpp a microcontrolerului.
Pin nr. 2 RA0 Primul pin la portul A. Poate fi configurat ca intrare analogică AN0.
Pin nr. 3 RA1 Al doilea pin la portul A. Poate fi configurat ca intrare analogică AN1.
Pin nr. 4 RA2 Al treilea pin la portul A. Poate fi configurat ca intrare analogică AN2 sau ca referinţă
de tensiune negativă.
Pin nr. 5 RA3 Al patrulea pin la portul A. Poate fi configurat ca intrare analogică AN3 sau ca
referinţă de tensiune pozitivă.
Pin nr. 6 RA4 Al cincelea pin la portul A. TOCK1 care funcţionează ca timer se găseşte de
asemenea la acest pin.
Pin nr. 7 RA5 Al şaselea pin la portul A. Poate fi configurat ca intrare analogică AN4 sau ca selectie
slave pentru portul serial sincron de date.
Pin nr. 8 RE0 Primul pin la portul E. Poate fi configurat ca intrare analogică AN5.
Pin nr. 9 RE1 Al doilea pin la portul E. Poate fi configurat ca intrare analogică AN6.
Pin nr. 10 RE2 Al treilea pin la portul E. Poate fi configurat ca intrare analogică AN7.
Pin nr. 11 Vdd Polul pozitiv al sursei.
Pin nr. 12 VSS Alimentare, masă.
Pin nr. 13 OSC1 Pin desemnat pentru conectarea la un oscilator.
Pin nr. 14 OSC2 Pin desemnat pentru conectarea la un oscilator.
Pin nr. 15 RC0 Primul pin la portul C. Timer1.
Pin nr. 16 RC1 Al doilea pin la portul C. Poate fi configurat ca port de captură sau ca ieşire PWM.
Pin nr. 17 RC2 Al treilea pin la portul C. Poate fi configurat ca port de captură sau ca ieşire PWM.
Pin nr. 18 RC3 Al patrulea pin la portul C. Poate fi configurat ca ceas serial pentru transmisie date.
Pin nr. 19 RD0 Primul pin la portul D. Nu are funcţie adiţională.
Pin nr. 20 RD1 Al doilea pin la portul D. Nu are funcţie adiţională.
Pin nr. 21 RD2 Al treilea pin la portul D. Nu are funcţie adiţională.
Pin nr. 22 RD3 Al patrulea pin la portul D. Nu are funcţie adiţională.
Pin nr. 23 RC4 Al cincelea pin la portul C. Poate fi configurat ca SPI data IN.
Pin nr. 24 RC5 Al şaselea pin la portul C. Poate fi configurat ca SPI data OUT.
Pin nr. 25 RC6 Al şaptelea pin la portul C. Poate fi configurat ca transmitator USART.
Pin nr. 26 RC7 Al optulea pin la portul C. Poate fi configurat ca receptor USART.
Pin nr. 27 RD4 Al cincelea pin la portul D. Nu are funcţie adiţională.
Pin nr. 28 RD5 Al şaselea pin la portul D. Nu are funcţie adiţională.
Pin nr. 29 RD6 Al şaptelea pin la portul D. Nu are funcţie adiţională.
Pin nr. 30 RD7 Al optulea pin la portul D. Nu are funcţie adiţională.
Pin nr. 31 VSS Alimentare, masă.
Pin nr. 32 Vdd Polul pozitiv al sursei.
Pin nr. 33 RB0 Primul pin la portul B. Intrarea întreruptă este o funcţie adiţională.
Pin nr. 34 RB1 Primul pin la portul B. Nu are funcţie adiţională.
Pin nr. 35 RB2 Al doilea pin la portul B. Nu are funcţie adiţională.
Pin nr. 36 RB3 Al treilea pin la portul B. Functionează şi ca selecţie pentru programarea la tensiune
redusă.
Pin nr. 37 RB4 Al patrulea pin la portul B.Întrerupere la schimbarea stării.
Pin nr. 38 RB5 Al cincilea pin la portul B. Întrerupere la schimbarea stării.
Pin nr. 39 RB6 Al şaselea pin la portul B. Întrerupere la schimbarea stării. Linia de 'Clock' în mod
programare.
Pin nr. 40 RB7 Al şaptelea pin la portul B. Întrerupere la schimbarea stării. Linia 'Dată' în mod
programare.
PUSH MACRO
MOVWF W_TEMP
SWAPF W_TEMP,F
BANK1
SWAPF OPTION_REG,W
MOVWF OPTION_TEMP
BANK0
SWAPF STATUS,W
MOVWF STATUS_TEMP
ENDM
POP MACRO
SWAPF STATUS_TEMP,W
MOVWF STATUS
BANK1
SWAPF OPTION_TEMP,W
MOVWF OPTION_REG
BANK0
SWAPF W_TEMP,W
ENDM
Deoarece în programe este necesar cateodata o întârziere variabila şi destul de lungă putem
folosi macrourile de intarziere Wait.inc conţine două macrouri: WAIT şi WAITx. Prin intermediul
acestor macrouri este posibil să repartizăm întârzieri de timp în intervale variate. Amândouă
macrouri folosesc depăşirea contorului TMR0 ca un interval de timp de bază. Prin schimbarea
prescaler-ului putem schimba lungimea intervalului depăşirii contorului TMR0.
; Declararea constantelor
CONSTANT PRESCstd = b'00000001' ;Valoarea standard pentru TMR0
; Macrouri
WAIT macro timeconst_1
movlw timeconst_1
call WAITstd
endm
WAITX macro timeconst_2, PRESCext
movlw timeconst_2
movwf WCYCLE
movlw PRESCext
call WAIT_x
endm
; Subprograme
WAITstd
movwf WCYCLE
movlw PRESCstd
WAIT_x
clrf TMR0
BANK1
movwf OPTION_REG
BANK0
WAITa
bcf INTCON,2
WAITb
btfss INTCON,2
goto WAITb
decfsz WCYCLE,1
goto WAITa
RETURN
Dacă folosim un oscilator (rezonator) de 4MHz, pentru valorile prescaler-ului 0,1 şi 7 care
divid ceasul de bază al oscilatorului, intervalul urmat de o depăşire a contorului TMR0 va fi 0.512,
1.02 şi 65.3ms. Practic, aceasta înseamnă că cea mai mare întârziere va fi 256x65.3ms care este
egală cu 16.72 secunde.
Pentru a utiliza macrouri în programul principal este necesar să declarăm variabilele wcycle
şi prescWAIT după cum vom vedea în exemplele ce vor urma acestui capitol. Macroul WAIT are
un singur argument. Valoarea standard atribuită prescaler-ului acestui macro este 1 (1.02ms), şi nu
poate fi schimbată.
WAIT timeconst_1
timeconst_1 este un număr de la 0 la 255. Prin multiplicarea acestui număr cu perioada de timp de
depăşire (overflow) vom obţine durata totală a întârzierii:
Exemplul arată cum să obţinem o întârziere de 100x1.02ms, sau durata totală de 102ms.
Spre deosebire de macroul WAIT, macroul WAITX mai are un argument care poate atribui o
valoare prescaler-ului. Macroul WAITX are două argumente:
timeconst_2 este un număr de la 0 la 255. Prin multiplicarea acestui număr cu perioada de timp de
depăşire (overflow) vom obţine durata totală a întârzierii: TIME = timeconst_1 x 1.02ms x
PRESCext.
PRESCext este un număr de la 0 la 7 care setează relaţia dintre tact şi timer-ul TMR0.
Exemplul arată cum să obţinem o întârziere de 100x65.3ms, sau durata totală de 6,53s.
Segmentele într-un afişaj cu 7 segmente sunt aranjate astfel încât să formeze un singur digit
de la 0 la F, după cum se observă în desen:
Putem afişa un număr pe mai mulţi digiţi prin conectarea de afişaje adiţionale. Chiar dacă
este mult mai confortabil să lucrăm cu LCDuri, afişajele cu 7 segmente sunt încă un standard în
industrie. Aceasta din cauza rezistenţei la temperatură, vizibilităţii şi unghiului larg de observare.
Segmentele sunt marcate cu litere mici: a, b, c, d, e, f, g şi dp, unde dp este punctul zecimal. Cele 8
LEDuri din cadrul fiecărui afişaj pot fi aranjate cu catod comun sau cu anod comun. La un afişaj cu
catod comun, catodul comun trebuie să fie conectat la linia de 0v şi LEDurile sunt activate cu unu
logic. Afişajele cu anod comun trebuie să prezinte anodul comun conectat la linia de +5v.
Segmentele sunt activate cu zero logic. Dimensiunea afişajului este măsurată în milimetri; se
măsoară doar înălţimea digitului (nu carcasa, doar digitul!). Afişajele sunt disponibile cu digiţi de
înălţimi de 7, 10, 13.5, 20 sau 25 milimetri. Sunt de diferite culori incluzând: roşu, portocaliu şi
verde. Cea mai simplă metodă pentru a comanda un afişaj este prin intermediul unui driver de
afişaj. Acestea sunt disponibile pentru până la 4 afişaje. Alternativ, afişajele pot fi comandate de un
microcontroler, şi, dacă este necesar mai mult decât un afişaj, metoda de comandare se numeşte
„multiplexare”. Principala diferenţă dintre cele două metode este numărul de linii de comandă. Un
driver special poate avea numai o singură linie de tact şi integratul de comandă va accesa toate
segmentele şi va incrementa afişajul. Dacă avem doar un singur afişaj de comandat de către
microcontroler, vor fi necesare 7 linii plus una pentru punctul zecimal. Pentru fiecare afişaj zecimal,
este necesară doar câte o linie în plus. Pentru a produce un afişaj cu 4, 5 sau 6 digiţi, toate afişajele
cu 7 segmente vor fi conectate în paralel. Linia comună (linia catodului comun) este conectată
separat şi această linie este conectată la zero logic pentru o perioadă scurtă de timp pentru a activa
afişajul. Fiecare afişaj este activat de 100 ori pe secundă şi vor da impresia că toate afişajele sunt
active în acelaşi timp. În timp ce fiecare afişaj este activat, informaţia trebuie livrată astfel încât el
va afişa informaţia corectă. Pot fi accesate până la 6 afişaje în acest mod fără ca strălucirea fiecărui
afişaj să fie afectată. Fiecare afişaj este activat efectiv pentru 1/6 din timp şi persistenţa vizuală a
ochilor dă impresia că afişajul este pornit tot timpul. Toate semnalele de sincronizare pentru afişaj
sunt produse de program, avantajul unui afişaj controlat de un microcontroler este flexibilitatea.
Afişajul poate fi configurat ca un contor crescător, contor descrescător, şi poate produce un număr
de mesaje folosind literele alfabetului care pot fi uşor de afişat. In continuare prezint macroul folosit
pentru afisarea informatiei pe cei 2 digiti ai displyului.
LED_Init macro
call InitTimers
endm
InitTimers
movlw b'00010110'
movwf T2CON
BANK1
movlw .50
movwf PR2
bsf PIE1,TMR2IE
BSF INTCON,6
BSF INTCON,7
BANK0
return
LedTable
andlw 0FH
addwf PCL,F
retlw B'11010111' ;0
retlw B'00010100' ;1
retlw B'11001110' ;2
retlw B'01011110' ;3
retlw B'00011101' ;4
retlw B'01011011' ;5
retlw B'11011011' ;6
retlw B'00010110' ;7
retlw B'11011111' ;8
retlw B'01011111' ;9
ISR
PUSH ;salvam variabele temporare
BCF PIR1,TMR2IF ;curatam bitul de intrerupere pe timer 2
clrf PORTE ;curatam portula
CLRF PORTA ;curatam portulb
;avem 2 digiti
;testam daca trebuie actualizat digitul 1
BTFSSADIG,0 ;testam daca trebuie actualizat digitul 1
GOTO DIG2 ;nu atunci ne ducem la digitul 2
RLF ADIG,1 ;da rotim adig un element la stanga
BCF PORTD,1 ;oprim digitul 6
MOVFW Dig1 ;mutam valoarea lui dig1 in W
MOVWF PORTA ;afisam valoarea pe porta
btfsc Dig1,6 ;facem impartirea pe porturi
bsf PORTE,1 ;afisam si valoarea lui porte
BSF PORTC,0 ;pornim digitul 1
GOTO EX ;iesim din intrerupere
;testam daca trebuie actualizat digitul 2
DIG2
BTFSSADIG,1 ;testam daca trebuie actualizat digitul 2
GOTO EX ;NU ATUNCI IESIM DIN RUTINA
bsf ADIG,0 ;da
BCF PORTC,0 ;oprim digitul 1
MOVFW Dig2 ;mutam valoarea lui dig2 in W
MOVWF PORTA ;afisam valoarea pe porta
btfsc Dig1,6 ;facem impartirea pe porturi
bsf PORTE,1 ;afisam si valoarea lui porte
BSF PORTC,1 ;pornim digitul 2
GOTO EX
;pe aici se face iesirea din intrerupere
EX
POP ;restauram variabelele temporare
RETFIE
Multiplexarea tastaturii
Pentru tastatura am folosit o rutina de multiplexare pe 8 pini patru linii si patru coloane,
realizand multiplexarea pe portulb deoarece acest port suporta multiplexarea unei tasturi intrucat are
incorporate si rezistentele de mentinere in 5V atata timp cat butonul nu este apasat reducand
numarul de piese externe necesare pentru executia acestui cablaj.
In continuare se poate vedea rutina de citire a butoanelor care lucreaza in felul urmator: se
activeaza una din liniile de citire (numai cate una niciodata mai multe simultan intrucat ar putea
aparea citiri eronate) si se testeaza rand pe rand toate cele 4 butone de pe acea linie iar in cazul in
care se intalneste un buton apasat se executa codul necesar acelui buton.
BUTOANE_INT
BANK1
BCF OPTION_REG,7 ;ACTIVAM PUL-UP
MOVLW B'00000001' ;PORTB,0 INTRARE
MOVWF TRISB
BANK0
MOVLW B'11111110'
MOVWF PORTD
WAIT .1
BTFSSPORTB,0
CALL BUTTON_P
MOVLW B'11111101'
MOVWF PORTD
WAIT .1
BTFSSPORTB,0
CALL BUTTON_1
MOVLW B'11111011'
MOVWF PORTD
WAIT .1
BTFSSPORTB,0
CALL BUTTON_2
MOVLW B'11110111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,0
CALL BUTTON_3
MOVLW B'11101111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,0
CALL BUTTON_4
MOVLW B'11011111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,0
CALL BUTTON_5
MOVLW B'10111111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,0
CALL BUTTON_6
MOVLW B'01111111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,0
CALL BUTTON_7
BANK1
BCF OPTION_REG,7 ;ACTIVAM PUL-UP
MOVLW B'00000010' ;PORTB,1 INTRARE
MOVWF TRISB
BANK0
MOVLW B'11111110'
MOVWF PORTD
WAIT .1
BTFSSPORTB,1
CALL BUTTON_8
MOVLW B'11111101'
MOVWF PORTD
WAIT .1
BTFSSPORTB,1
CALL BUTTON_9
MOVLW B'11111011'
MOVWF PORTD
WAIT .1
BTFSSPORTB,1
CALL BUTTON_10
RETURN
; BUTON CHEMARE LIFT LA PARTER
BUTTON_P
call PARTER
WAITX .15,7
MOVLW D'2'
MOVWF POZ_DOR
RETURN
; BUTON CHEMARE LIFT LA ETAJUL 1
BUTTON_1
CALL ETAJ1
WAITX .15,7
MOVLW D'4'
MOVWF POZ_DOR
RETURN
RESET
BANK1 ;SELECTAM BANCUL 1
MOVLW B'00000111'
MOVWF ADCON1
CLRF TRISB
CLRF TRISC
CLRF TRISD
clrf TRISE
BANK0 ;REVENIM IN BANCUL 0
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF POZ_ACT
CLRF POZ_DOR
CLRF STARE
call MISCARE
CALL TEST
START
CALL BUTOANE_INT
CALL SENZORI_ETAJ
CALL BUTTOANE_ETAJ
goto START
MISCARE
MOVFW POZ_DOR
MOVWF POZ_DOR_T
;verificam daca trebuie sa oprim
MOVFW POZ_ACT ;MUTAM POZ_ACT IN W
SUBWF POZ_DOR_T,F ;SCADEM POZ ACT DIN POZ_DOR_T
MOVFW POZ_DOR_T ;MUTAM POZ_DOR_T IN W
sublw 0 ;VERIFICAM DACA E EGAL CU ZERO
btfss STATUS,0
goto miscare1
BCF PORTE,1
BCF PORTE,2
RETURN
miscare1
MOVFW POZ_DOR
MOVWF POZ_DOR_T
MOVFW POZ_ACT ;mutam POZ_ACT in W
subwf POZ_DOR_T,f ;SCADEM POZ_ACT DIN POZ DORITA
btfsc STATUS,0 ;facem verificarea
GOTO SUS ;SUS
;afisam directia de deplasare (JOS)
CLRF STARE ;JOS
BSF STARE,0
;setam releele pe viteza mare
BCF PORTE,2
BSF PORTE,1
;mutam POZ_DOR in POZ_DOR_T
MOVFW POZ_DOR
MOVWF POZ_DOR_T
;verificam daca trebuie viteza mica
DECF POZ_ACT,F ; INCREMENTAM VALOAREA POZ_ACT
MOVFW POZ_ACT ;MUTAM POZ_ACT IN W
SUBWF POZ_DOR_T,F ;SCADEM POZ ACT DIN POZ_DOR_T
MOVFW POZ_DOR_T ;MUTAM POZ_DOR_T IN W
sublw 0 ;VERIFICAM DACA E EGAL CU ZERO
btfss STATUS,0
return ;NU ESTE EGAL CU ZERO
;SETAM RELEELE PE VITEZA MICA
BCF PORTE,1
BSF PORTE,2
RETURN
SUS
;afisam directia de deplasare (sus)
CLRF STARE
BSF STARE,1
;setam releele pe viteza mare
BCF PORTE,2
BSF PORTE,1
;mutam POZ_DOR in POZ_DOR_T
MOVFW POZ_DOR
MOVWF POZ_DOR_T
;verificam daca trebuie viteza mica
INCF POZ_ACT,F ; INCREMENTAM VALOAREA POZ_ACT
MOVFW POZ_ACT ;MUTAM POZ_ACT IN W
SUBWF POZ_DOR_T,F ;SCADEM POZ ACT DIN POZ_DOR_T
MOVFW POZ_DOR_T ;MUTAM POZ_DOR_T IN W
sublw 0 ;VERIFICAM DACA E EGAL CU ZERO
btfss STATUS,0
return ;NU ESTE EGAL CU ZERO
;SETAM RELEELE PE VITEZA MICA
BCF PORTE,1
BSF PORTE,2
RETURN
ERR
MOVLW B'01111001'
MOVWF PORTC
BCF PORTE,1
BCF PORTE,2
RETURN
END
Circuite imprimate
Din principiul de funcţionare rezultă că traseele pot fi transpuse pe folia PnP folosind numai
imprimanta laser sau xerocopiatorul.
A se curăţa cablajul cu ajutorul unui praf de curăţat sau cu o hârtie abrazivă fină. Se poate
curăţa şi printr-o cufundare de 30 secunde într-o baie de corodare. Astfel suprafaţa va fi pregătită
pentru transferul desenului.
Folia PnP poate fi folosită doar cu xerocopiatoare sau imprimante laser ce folosesc hârtie
normală de xerox. Pentru desenarea traseelor se poate folosi orice program CAD care are
posibilitatea să imprime pe o imprimanta laser. Cablajele apărute în publicaţii sau cele imprimate cu
alte tipuri de imprimante decât cele laser, pot fi copiate pe folia PnP cu ajutorul unui xerocopiator.
Imprimanta sau xerocopiatorul trebuie reglate pe contrastul maxim, dar astfel încât pe zonele ce
trebuie să se corodeze să nu fie depuneri de toner.
Desenul cablajului trebuie astfel realizat încât traseele (deci părţile ce nu se vor coroda) să
fie desenate cu negru. Deci spunem că desenul este în pozitiv. Desenul cablajului ce îl vedem pe
folia PnP ieşită din imprimantă trebuie să arate ca şi cum am vedea traseele (prin transparenţă)
dinspre partea cu piese. Deci oglindit. Imprimarea sau xerocopierea se va face pe partea mai
lucioasă a foliei PnP (nu pe partea din spate pe care are inscripţii).
Folia se dispune în imprimantă sau în xerocopiator exact ca şi foile normale de hârtie. Se
recomandă punerea doar a unei singure folii în imprimantă.
Desenul ce apare pe folie trebuie decupat, lăsind o bordură de cca 0,5 cm. Luăm călcătorul
de haine şi îl încingem la o temperatură (de pornire) ce corespunde pentru nylon. Temperatura
călcătorului trebuie aleasă experimental, ea depinzând şi de tipul tonerului.
Plasăm folia PnP (cu faţa desenată în jos) pe placuţa curăţată, pe faţa cu cupru. Deci desenul
să atingă cuprul. Acest ansamblu îl plasăm pe o placa de bachelită, lemn sau orice alt termoizolator
(pentru a nu se pierde repede căldura călcătorului). Cu călcătorul încins apăsăm peste folie,
începând de la mijlocul ei, pâna se lipeşte şi venim progresiv spre margini. Acest proces poate să
dureze cca 2...3 minute la o placă de 10x10cm, depinzând şi de temperatura călcătorului.
Desenul traseelor va transpare şi se va vedea la un moment dat şi pe spatele foliei, adică
unde plimbăm călcătorul. Verificăm dacă traseele transpar peste tot şi ne asigurăm astfel dacă am
dat peste tot cu călcătorul.
După răcire îndepărtăm încet folia de pe cablaj, începând de la un colţ. Eventualele greşeli
pot fi reparate cu vopsea sau o cariocă specială.
Plăcuţa astfel pregătită poate fi pusă în baia de corodare formată din clorură ferică sau acid
clorhidric cu apă oxigenată, care trebuie pregătită conform prescripţiilor producătorului. După
corodare se îndepărtează tonerul cu un solvent organic, cu praf de curăţat sau cu hârtie abrazivă
fină.
După ce în prealabil a fost lăsat la uscat cablajul se introduce în "baia" de corodare - un vas
din material plastic sau sticlă în care se află agentul coroziv: clorură ferică.
Atenţie! Clorura ferică este o substanţă toxică şi trebuie manipulată cu grijă.
Când tot cuprul nedorit a fost îndepărtat prin coroziune se scoate placa din baia de corodare şi
se spală foarte bine în multă apă pentru a îndepărta urmele de agent coroziv ce ar putea distruge mai
tarziu cablajul.
Se inspectează cu grijă placa pentru a detecta eventuale greşeli de trasare a cablajului sau
conexiuni nedorite rămase după corodare. Acestea se înlătură prin zgâriere sau polizare.
Cu alcool tehnic se îndepărtează stratul protector de vopsea, curăţând cu grijă traseele cu o
cârpă moale.
Se dau găurile necesare componentelor. Găurile se dau dinspre partea placată cu cupru pentru
că altfel s-ar putea exfolia stratul subţire de cupru la ieşirea burghiului. Bormaşina folosită trebuie
să fie de dimensiuni reduse pentru a nu rupe burghiul.
Înainte de începerea plantării pieselor se verifică din nou corectitudinea traseelor, a găurilor.
CAPITOLUL 7
TOTAL 5.411.700
CAPITOLUL 8
Concluzii şi observaţii
Proiectul de faţă şi-a propus sa demonstreze fiabilitatea si performanţele ridicate care pot fi
obţinute prin utilizarea unui microcontroler pentru comanda si controlul unui lift.
- Implementare rapida a sistemului necesitând foarte puţine componente auxiliare.
- Cost redus faţă de un sistem clasic
- Fiabilitate sporită întrucât un uC este garantat o perioadă foarte lungă de timp în
condiţiile unei exploatări corespunzatoare.
- Consum redus de energie electrică deoarece uC-ul poate intra în modul sleep (când
consumul este de aproximativ 1mA) si un pic mai mare in timpul functionarii si datorita cuplarii
diverselor elemente de comanda (relee, amplificatoare etc. care in modul sleep sunt oprite).
- Posibilitatea de conectare a diferitelor tipuri de senzori care pot fi folositi pentru citirea
pozitiei:
senzori magnetici
senzori incrementali
senzori de proximitate
senzori absoluti
- in acelasi timp uC poate comanda şi sisteme complexe cum ar fi invertoare de mare
putere dotate cu frane dinamice in felul acesta fiind redus substantial riscul de accidente prin
simplul motiv ca uC sau chiar si unele tipuri de invertoare pot lua decizii în timp real de oprire sau
frânare a liftului in conditii extreme: cădere de tensiune, suprasarcina pe motor, supraîncalzire a
bobinajului motorului;
- uC poate fi conectat la un dispozitiv de transmisie date (PC, telefon mobil, retea CAN,
retea TCP/IP, retea ethernet), în felul acesta liftul poate fi monitorizat tot timpul sau numai periodic
în functie de necesitate, sau în caz de avarie liftul poate contacta dispecerul fara interventia unei
persoane binevoitoare economisindu-se în acest fel timp (în momentul în care echipa de interventie
ajunge, ştie deja care este problema).
ANEXĂ
POP MACRO
SWAPF STATUS_TEMP,W
MOVWF STATUS
BANK1
SWAPF OPTION_TEMP,W
MOVWF OPTION_REG
BANK0
SWAPF W_TEMP,W
ENDM
TSTLIFT
RETURN
TSTETAJE
RETURN
SENZORI
RETURN
BUTTOANE_ETAJ
BANK1
BCF OPTION_REG,7 ;ACTIVAM PUL-UP
MOVLW B'00001000' ;PORTB,3 INTRARE
MOVWF TRISB
BANK0
MOVLW B'11111011'
MOVWF PORTD
WAIT .1
BTFSSPORTB,3
CALL PARTER
MOVLW B'11110111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,3
CALL ETAJ1
MOVLW B'11101111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,3
CALL ETAJ2
MOVLW B'11011111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,3
CALL ETAJ9
MOVLW B'10111111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,3
CALL ETAJ10
RETURN
BUTOANE_INT
BANK1
BCF OPTION_REG,7 ;ACTIVAM PUL-UP
MOVLW B'00000001' ;PORTB,0 INTRARE
MOVWF TRISB
BANK0
MOVLW B'11111110'
MOVWF PORTD
WAIT .1
BTFSSPORTB,0
CALL BUTTON_P
MOVLW B'11111101'
MOVWF PORTD
WAIT .1
BTFSSPORTB,0
CALL BUTTON_1
MOVLW B'11111011'
MOVWF PORTD
WAIT .1
BTFSSPORTB,0
CALL BUTTON_2
MOVLW B'11110111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,0
CALL BUTTON_3
MOVLW B'11101111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,0
CALL BUTTON_4
MOVLW B'11011111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,0
CALL BUTTON_5
MOVLW B'10111111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,0
CALL BUTTON_6
MOVLW B'01111111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,0
CALL BUTTON_7
BANK1
BCF OPTION_REG,7 ;ACTIVAM PUL-UP
MOVLW B'00000010' ;PORTB,1 INTRARE
MOVWF TRISB
BANK0
MOVLW B'11111110'
MOVWF PORTD
WAIT .1
BTFSSPORTB,1
CALL BUTTON_8
MOVLW B'11111101'
MOVWF PORTD
WAIT .1
BTFSSPORTB,1
CALL BUTTON_9
MOVLW B'11111011'
MOVWF PORTD
WAIT .1
BTFSSPORTB,1
CALL BUTTON_10
RETURN
; BUTON CHEMARE LIFT LA PARTER
BUTTON_P
call PARTER
WAITX .15,7
MOVLW D'2'
MOVWF POZ_DOR
RETURN
; BUTON CHEMARE LIFT LA ETAJUL 1
BUTTON_1
CALL ETAJ1
WAITX .15,7
MOVLW D'4'
MOVWF POZ_DOR
RETURN
; BUTON CHEMARE LIFT LA ETAJUL 2
BUTTON_2
CALL ETAJ2
WAITX .15,7
MOVLW D'6'
MOVWF POZ_DOR
RETURN
; BUTON CHEMARE LIFT LA ETAJUL 3
BUTTON_3
CALL ETAJ3
WAITX .15,7
MOVLW D'7'
MOVWF POZ_DOR
RETURN
; BUTON CHEMARE LIFT LA ETAJUL 4
BUTTON_4
CALL ETAJ4
WAITX .15,7
MOVLW D'8'
MOVWF POZ_DOR
RETURN
; BUTON CHEMARE LIFT LA ETAJUL 5
BUTTON_5
CALL ETAJ5
WAITX .15,7
MOVLW D'9'
MOVWF POZ_DOR
RETURN
; BUTON CHEMARE LIFT LA ETAJUL 6
BUTTON_6
CALL ETAJ6
WAITX .15,7
MOVLW D'10'
MOVWF POZ_DOR
RETURN
; BUTON CHEMARE LIFT LA ETAJUL 7
BUTTON_7
CALL ETAJ7
WAITX .15,7
MOVLW D'11'
MOVWF POZ_DOR
RETURN
; BUTON CHEMARE LIFT LA ETAJUL 8
BUTTON_8
CALL ETAJ8
WAITX .15,7
MOVLW D'12'
MOVWF POZ_DOR
RETURN
; BUTON CHEMARE LIFT LA ETAJUL 9
BUTTON_9
CALL ETAJ9
WAITX .15,7
MOVLW D'14'
MOVWF POZ_DOR
RETURN
; BUTON CHEMARE LIFT LA ETAJUL 10
BUTTON_10
CALL ETAJ10
WAITX .15,7
MOVLW D'16'
MOVWF POZ_DOR
RETURN
Buton macro HiLo, Port, Bit, Delay, Adress, CallGoto
Local Ex
Local Lop
if HiLo == 0
btfsc Port,Bit
else
btfss Port,Bit
endif
goto Ex
WAIT Delay
Lop if HiLo == 0
btfss Port,Bit
else
btfsc Port,Bit
endif
goto Lop
WAIT Delay
call Adress
Ex
Endm
EEPROMR MACRO AD
MOVLW AD ; SCRIEM ADRESA DE PE
BANK2 ; SELECTAM BANCUL 2
MOVWF EEADR ; CARE FACEM CITIREA
BANK3 ; SELECTAM BANCUL 3
BCF EECON1,EEPGD ; POINT TO DATA MEMORY
BSF EECON1,RD ; INCEPE OPERATIUNEA DE CITIRE
BANK2 ; SELECTAM BANCUL 2
MOVF EEDATA,W ; W = VALOAREA CITITA DIN EEPROM
BANK0
ENDM
EEPROMRW MACRO ADDR,VALUE
WAITX .50,2
BANK3 ; SELECTAM BANCUL 3
BTFSC EECON1,WR ; ASTEPTAM SA SE
GOTO $-1 ; TERMINE SCRIEREA PRECEDENTA
BANK0 ; SELECTAM BANCUL 1
MOVLW ADDR ; ADRESA CARE
BANK2
MOVWF EEADR ; TREBUIE SCRISA
BANK0
MOVF VALUE,W ; INFORMATIA CARE
BANK2
MOVWF EEDATA ; TREBUIE SCRISA
BANK3 ; SELECTAM BANCUL 3
BCF EECON1,EEPGD ; POINT TO DATA MEMORY
BSF EECON1,WREN ; PERMITEM SCRIEREA
BCF INTCON,GIE ; DEZACTIVAM INTRERUPERILE
MOVLW 0X55 ; SCRIEM 0X55
MOVWF EECON2 ; IN EECON2
MOVLW 0XAA ; SCRIEM 0XAA
MOVWF EECON2 ; IN EECON2
BSF EECON1,WR ; INCEPEM OPERATIA DE SCRIERE
BSF INTCON,GIE ; ACTIVAM INTRERUPERILE
BCF EECON1,WREN ; NU MAI PERMITEM SCRIEREA
(ACCIDENTALA)
BANK0
ENDM
PARTER
MOVLW B'01110011'
MOVWF PORTC
RETURN
ETAJ1
MOVLW B'00000110'
MOVWF PORTC
RETURN
ETAJ2
MOVLW B'01011011'
MOVWF PORTC
RETURN
ETAJ3
MOVLW B'01001111'
MOVWF PORTC
RETURN
ETAJ4
MOVLW B'01100110'
MOVWF PORTC
RETURN
ETAJ5
MOVLW B'01101101'
MOVWF PORTC
RETURN
ETAJ6
MOVLW B'01111101'
MOVWF PORTC
RETURN
ETAJ7
MOVLW B'00000111'
MOVWF PORTC
RETURN
ETAJ8
MOVLW B'01111111'
MOVWF PORTC
RETURN
ETAJ9
MOVLW B'01101111'
MOVWF PORTC
RETURN
ETAJ10
MOVLW B'10111111'
MOVWF PORTC
RETURN
LedTable
andlw 0FH
addwf PCL,F
retlw B'00111111' ;0
retlw B'00000110' ;1
retlw B'01011011' ;2
retlw B'01001111' ;3
retlw B'01100110' ;4
retlw B'01101101' ;5
retlw B'01111101' ;6
retlw B'00000111' ;7
retlw B'01111111' ;8
retlw B'01101111' ;9
SENZORI_ETAJ ;SENZORI PREZENTA ETAJ + SENZORI
USA + SENZORI INTRE ETAJE
BANK1
BCF OPTION_REG,7 ;ACTIVAM PUL-UP
MOVLW B'00000010' ;PORTB,1 INTRARE
MOVWF TRISB
BANK0
MOVLW B'11110111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,1
CALL BUTTON_PP
MOVLW B'11101111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,1
CALL USA_PARTER
MOVLW B'11011111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,1
CALL BUTTON_P1
MOVLW B'10111111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,1
CALL USA_ETAJ1
MOVLW B'01111111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,1
CALL BUTTON_P2
BANK1
BCF OPTION_REG,7 ;ACTIVAM PUL-UP
MOVLW B'00000100' ;PORTB,1 INTRARE
MOVWF TRISB
BANK0
MOVLW B'11111110'
MOVWF PORTD
WAIT .1
BTFSSPORTB,2
CALL USA_ETAJ2
MOVLW B'11111101'
MOVWF PORTD
WAIT .1
BTFSSPORTB,2
CALL BUTTON_P9
MOVLW B'11111011'
MOVWF PORTD
WAIT .1
BTFSSPORTB,2
CALL USA_ETAJ9
MOVLW B'11110111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,2
CALL BUTTON_P10
MOVLW B'11101111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,2
CALL USA_ETAJ10
MOVLW B'11011111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,2
CALL PARTER_
MOVLW B'10111111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,2
CALL PARTER_ETAJ1
MOVLW B'01111111'
MOVWF PORTD
WAIT .1
BTFSSPORTB,2
CALL ETAJ1_ETAJ2
BANK1
BCF OPTION_REG,7 ;ACTIVAM PUL-UP
MOVLW B'00001000' ;PORTB,2 INTRARE
MOVWF TRISB
BANK0
MOVLW B'11111110'
MOVWF PORTD
WAIT .1
BTFSSPORTB,3
CALL ETAJ8_ETAJ9
MOVLW B'11111101'
MOVWF PORTD
WAIT .1
BTFSSPORTB,3
CALL ETAJ9_ETAJ10
RETURN
; SENZOR URGENTA PARTER
PARTER_
MOVLW B'00110110'
MOVWF PORTC
RETURN
; SENZOR PREZENTA PARTER
BUTTON_PP
MOVLW D'2'
MOVWF POZ_ACT
CALL MISCARE ;RUTINA PENTRU VERIFICAREA
POZITIEI LIFTULUI
BTFSSSTARE,0 ;verificam daca liftul merge in jos
GOTO PP_ ;nu liftul merge in sus
MOVLW B'00011110' ; da liftul merge in jos
MOVWF PORTC ; PE AFISAJ
WAITX .15,7 ; PENTRU O SECUNDA
CALL PARTER ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
PP_ ; DA LIFTUL MERGE IN SUS
MOVLW B'01101101' ; AFISAM A
MOVWF PORTC ; PE AFISAJ
WAITX .15,7 ; PENTRU O SECUNDA
CALL PARTER ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
; SENZOR PREZENTA INTRE PARTER SI ETAJ 1
PARTER_ETAJ1
MOVLW D'3'
MOVWF POZ_ACT
CALL MISCARE ;RUTINA PENTRU VERIFICAREA
POZITIEI LIFTULUI
BTFSSSTARE,0 ;verificam daca liftul merge in jos
GOTO P_ET1 ;nu liftul merge in sus
MOVLW B'00011110' ; da liftul merge in jos
MOVWF PORTC ; PE AFISAJ
WAITX .15,7 ; PENTRU O SECUNDA
CALL PARTER ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
P_ET1 ; DA LIFTUL MERGE IN SUS
MOVLW B'01101101' ; AFISAM A
MOVWF PORTC ; PE AFISAJ
WAITX .15,7 ; PENTRU O SECUNDA
CALL ETAJ1 ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
; SENZOR PREZENTA ETAJ 1
BUTTON_P1
MOVLW D'4'
MOVWF POZ_ACT
CALL MISCARE ;RUTINA PENTRU VERIFICAREA
POZITIEI LIFTULUI
BTFSSSTARE,0 ;verificam daca liftul merge in jos
GOTO P1_ ;nu liftul merge in sus
MOVLW B'00011110' ; da liftul merge in jos
MOVWF PORTC ; PE AFISAJ
WAITX .15,7 ; PENTRU O SECUNDA
CALL ETAJ1 ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
P1_ ; DA LIFTUL MERGE IN SUS
MOVLW B'01101101' ; AFISAM A
MOVWF PORTC ; PE AFISAJ
WAITX .15,7 ; PENTRU O SECUNDA
CALL ETAJ1 ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
; SENZOR PREZENTA INTRE ETAJ 1 SI ETAJ 2
ETAJ1_ETAJ2
MOVLW D'5'
MOVWF POZ_ACT
CALL MISCARE ;RUTINA PENTRU VERIFICAREA
POZITIEI LIFTULUI
BTFSSSTARE,0 ;verificam daca liftul merge in jos
GOTO ET1_ET2 ;nu liftul merge in sus
MOVLW B'00011110' ; da liftul merge in jos
MOVWF PORTC ; PE AFISAJ
WAITX .15,7 ; PENTRU O SECUNDA
CALL ETAJ1 ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
ET1_ET2 ; DA LIFTUL MERGE IN SUS
MOVLW B'01101101' ; AFISAM A
MOVWF PORTC ; PE AFISAJ
WAITX .15,7 ; PENTRU O SECUNDA
CALL ETAJ2 ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
; SENZOR PREZENTA ETAJ 2
BUTTON_P2
MOVLW D'6'
MOVWF POZ_ACT
CALL MISCARE ;RUTINA PENTRU VERIFICAREA
POZITIEI LIFTULUI
BTFSSSTARE,0 ;verificam daca liftul merge in jos
GOTO P2_ ;nu liftul merge in sus
MOVLW B'00011110' ; da liftul merge in jos
MOVWF PORTC ; PE AFISAJ
WAITX .15,7 ; PENTRU O SECUNDA
CALL ETAJ2 ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
P2_ ; DA LIFTUL MERGE IN SUS
MOVLW B'01101101' ; AFISAM A
MOVWF PORTC ; PE AFISAJ
WAITX .15,7 ; PENTRU O SECUNDA
CALL ETAJ2 ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
; SENZOR PREZENTA INTRE ETAJ 8 SI ETAJ 9
ETAJ8_ETAJ9
MOVLW D'13'
MOVWF POZ_ACT
CALL MISCARE ;RUTINA PENTRU VERIFICAREA
POZITIEI LIFTULUI
BTFSSSTARE,0 ;verificam daca liftul merge in jos
GOTO ET8_ET9 ;nu liftul merge in sus
MOVLW B'00011110' ; da liftul merge in jos
MOVWF PORTC ; PE AFISAJ
WAITX .15,7
CALL ETAJ8 ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
ET8_ET9 ; DA LIFTUL MERGE IN SUS
MOVLW B'01101101' ; AFISAM A
MOVWF PORTC ; PE AFISAJ
WAITX .15,7 ; PENTRU O SECUNDA
CALL ETAJ9 ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
; SENZOR PREZENTA ETAJ 9
BUTTON_P9
MOVLW D'14'
MOVWF POZ_ACT
CALL MISCARE ;RUTINA PENTRU VERIFICAREA
POZITIEI LIFTULUI
BTFSSSTARE,0 ;verificam daca liftul merge in jos
GOTO P9_ ;nu liftul merge in sus
MOVLW B'00011110' ; da liftul merge in jos
MOVWF PORTC ; PE AFISAJ
WAITX .15,7 ; PENTRU O SECUNDA
CALL ETAJ9 ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
P9_ ; DA LIFTUL MERGE IN SUS
MOVLW B'01101101' ; AFISAM A
MOVWF PORTC ; PE AFISAJ
WAITX .15,7 ; PENTRU O SECUNDA
CALL ETAJ9 ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
; SENZOR PREZENTA INTRE ETAJ 9 SI ETAJ 10
ETAJ9_ETAJ10
MOVLW D'15'
MOVWF POZ_ACT
CALL MISCARE ;RUTINA PENTRU VERIFICAREA
POZITIEI LIFTULUI
BTFSSSTARE,0 ;verificam daca liftul merge in jos
GOTO ET9_ET10 ;nu liftul merge in sus
MOVLW B'00011110' ; da liftul merge in jos
MOVWF PORTC ; PE AFISAJ
WAITX .15,7 ; PENTRU O SECUNDA
CALL ETAJ9 ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
ET9_ET10 ; DA LIFTUL MERGE IN SUS
MOVLW B'01101101' ; AFISAM A
MOVWF PORTC ; PE AFISAJ
WAITX .15,7 ; PENTRU O SECUNDA
CALL ETAJ10 ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
; SENZOR PREZENTA ETAJ 10
BUTTON_P10
MOVLW D'16'
MOVWF POZ_ACT
CALL MISCARE ;RUTINA PENTRU VERIFICAREA
POZITIEI LIFTULUI
BTFSSSTARE,0 ;verificam daca liftul merge in jos
GOTO P10_ ;nu liftul merge in sus
MOVLW B'00011110' ; da liftul merge in jos
MOVWF PORTC ; PE AFISAJ
WAITX .15,7 ; PENTRU O SECUNDA
CALL ETAJ10 ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
P10_ ; DA LIFTUL MERGE IN SUS
MOVLW B'01101101' ; AFISAM S
MOVWF PORTC ; PE AFISAJ
WAITX .15,7 ; PENTRU O SECUNDA
CALL ETAJ10 ; AFISAM POZITIA ACTUALA
WAITX .15,7 ; PENTRU O SECUNDA
RETURN
; USA DESCHISA LA PARTER
USA_PARTER
MOVLW B'00111110'
MOVWF PORTC
WAITX .15,7 ; PENTRU O SECUNDA
call ERR
RETURN
; USA DESCHISA LA ETAJUL 1
USA_ETAJ1
MOVLW B'00111110'
MOVWF PORTC
WAITX .15,7 ; PENTRU O SECUNDA
call ERR
RETURN
; USA DESCHISA LA ETAJUL 2
USA_ETAJ2
MOVLW B'00111110'
MOVWF PORTC
WAITX .15,7 ; PENTRU O SECUNDA
call ERR
RETURN
; USA DESCHISA LA ETAJUL 9
USA_ETAJ9
MOVLW B'00111110'
MOVWF PORTC
WAITX .15,7 ; PENTRU O SECUNDA
call ERR
RETURN
; USA DESCHISA LA ETAJUL 10
USA_ETAJ10
MOVLW B'00111110'
MOVWF PORTC
WAITX .15,7 ; PENTRU O SECUNDA
call ERR
RETURN
TEST
CALL PARTER
WAITX .40,7
CALL ETAJ1
WAITX .40,7
CALL ETAJ2
WAITX .40,7
CALL ETAJ3
WAITX .40,7
CALL ETAJ4
WAITX .40,7
CALL ETAJ5
WAITX .40,7
CALL ETAJ6
WAITX .40,7
CALL ETAJ7
WAITX .40,7
CALL ETAJ8
WAITX .40,7
CALL ETAJ9
WAITX .40,7
CALL ETAJ10
WAITX .40,7
CALL ETAJ10
WAITX .40,7
CALL ETAJ9
WAITX .40,7
CALL ETAJ8
WAITX .40,7
CALL ETAJ7
WAITX .40,7
CALL ETAJ6
WAITX .40,7
CALL ETAJ5
WAITX .40,7
CALL ETAJ4
WAITX .40,7
CALL ETAJ3
WAITX .40,7
CALL ETAJ2
WAITX .40,7
CALL ETAJ1
WAITX .40,7
CALL PARTER
WAITX .40,7
RETURN
; Declararea constantelor
CONSTANT PRESCstd = b'00000001' ;Valoarea standard pentru TMR0
; Macrouri
WAIT macro timeconst_1
movlw timeconst_1
call WAITstd
endm
WAITX macro timeconst_2, PRESCext
movlw timeconst_2
movwf WCYCLE
movlw PRESCext
call WAIT_x
endm
; Subprograme
WAITstd
movwf WCYCLE
movlw PRESCstd
WAIT_x
clrf TMR0
BANK1
movwf OPTION_REG
BANK0
WAITa
bcf INTCON,2
WAITb
btfss INTCON,2
goto WAITb
decfsz WCYCLE,1
goto WAITa
RETURN