Comanda Inteligenta a Ascensoarelor Utilizand Microcontroler
CAPITOLUL 1
Comanda ascensoarelor. Prezentare generală
Prezentare ascensor
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.
Fig.1.3. Afișoare LED din panoul de comandă
Caracteristicile tehnice sunt prezentate în variante mai uzuale cum ar fi:
lifturi electrice de persoane cu uși automate
lifturi hidraulice pentru persoane cu uși automate cu un acces sau cu două accese
lifturi hidraulice pentru materiale cu uși manuale
lifturi electrice pentru materiale cu uși manuale
Există posibilitatea dotării liftului cu o serie de sisteme opționale cum ar fi:
sistem de acumulatori pentru alimentarea iluminatului de avarie și a sistemului de alarmă
ventilator în cabină
sisteme de comunicare diverse (cu unul sau mai multe posturi)
semnalizări acustice personalizate
sistem de detecție în zona ușilor de tip perdea de fascicule în infraroșu (facilitează intrarea în lift, ideal pentru spitale)
sistem indicator suprasarcină
indicatoare sens și semnalizare palier
sistem de mentenanță și management (diagnosticare defecte)
sisteme de protejare a pereților cabinei
sistem de variație a frecvenței și control al vitezei sistemului de acționare
sistem de micșorare al ușii controlat dinamic cu encoder
Toate acestea permit performanțe specifice și o utilizare la parametrii diferiți în funcție de aplicațiile dorite de utilizatorul liftului
Clasificarea și caracterizarea principalelor tipuri de ascensoare
Ascensoare electrice
– Ascensoare electrice de interior
– Ascensoare electrice panoramice
Avantajele ascensoarelor electrice:
Ascensoarele electrice au un consum redus de energie;
Acționarea lor este în general deasupra puțului;
Deplasarea cabinei se poate realiza cu două trepte de viteză sau cu convertizor de frecvență pentru obținerea unei viteze variabile;
Pot fi echipate cu uși semiautomate sau automate.
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.
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;
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.
Ascensoare mici de materiale
Se livrează împreuna cu structura metalică a puțului;
Toate tipurile de ascensoare mici de materiale au motorul electric și panoul de comanda în interiorul puțului, nefiind necesare spații suplimentare pentru acestea;
Variantele de amplasare ale motorului de acționare pot fi: deasupra, lateral sus și lateral jos, dedesubt, față de cabină.
Acest model este destinat transportului de mărfuri ușoare cu sarcini cuprinse între 50-100 Kg. Ușile manuale sunt culisante vertical.
Sunt recomandate pentru mărfuri la nivelul podelei, cu sarcini cuprinse între 100-300 Kg. Prevăzute cu uși batante orizontal într-un canal.
Ascensoare destinate mărfurilor transportate cu europaleți. Finisajele cabinelor și ușilor pot fi din tablă zincată și inox. Prezentate în două variante cu ușă batantă și uși culisante vertical. Viteza de deplasare între 0,3-0,45 m/s.
Modelul prezentat are motorul de acționare poziționat sub cabină. În interiorul cabinei se pot monta etajere despărțitoare. Sunt recomandate în spații reduse.
Platformele de ridicare sunt instalații de ridicat utilizate exclusiv transportului de materiale.
Acționarea poate fi electrică sau hidraulică.
Se pot livra la cerere și cu structura metalică portantă.
Sarcinile disponibile sunt cuprinse între 500 și 10.000 de kg.
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:
Microcontrolere
Introducere
Circumstanțele în care ne găsim astăzi în domeniul microcontrolerelor și-au avut începuturile în dezvoltarea tehnologiei circuitelor integrate. Această dezvoltare a făcut posibilă înmagazinarea a sute de mii de tranzistoare într-un singur cip. Aceasta a fost un prerechizit pentru producția de microprocesoare, și primele computere au fost făcute prin adăugarea perifericelor ca memorie, linii intrare-ieșire, timeri și altele. Următoarea creștere a volumului capsulei a dus la crearea circuitelor integrate. Aceste circuite integrate conțin atât procesorul cât și perifericele. Așa s-a întâmplat cum primul cip conținând un microcomputer, sau ce va deveni cunoscut mai târziu ca microcontroler a luat ființă.
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.
Fig.1.4. Model simplificat de unitate de memorie
Componentele de memorie sunt exact așa. Pentru o anumită intrare obținem conținuturile unei anumite locații de memorie adresate și aceasta este totul. Două noi concepte ne sunt aduse :adresarea și locația de memorie. Memoria constă din toate locațiile de memorie, și adresarea nu este altceva decât selectarea uneia din ele. Aceasta înseamnă că noi trebuie să selectăm locația de memorie la un capăt, și la celălalt capăt trebiue să așteptăm conținuturile acelei locații. Înafară de citirea dintr-o locație de memorie, memoria trebuie de asemenea să permită scrierea în ea. Aceasta se face asigurarea unei linii adiționale numită linie de control. Vom desemna această linie ca R/W (citește /scrie). Linia de control este folosită în următorul fel : dacă r/w=1, se face citirea, și dacă opusul este adevărat atunci atunci se face scrierea în locația de memorie. Memoria este primul element, dar avem nevoie și de altele pentru ca microcontrolerul nostru să funcționeze.
Unitatea centrală de procesare
Să adăugăm alte 3 locații de memorie pentru un bloc specific ce va avea o capabilitate incorporată de înmulțire, împărțire, extragere și să-i mutăm conținuturile dintr-o locație de memorie în alta. Partea pe care tocmai am adăugat-o este numită "unitatea de procesare centrală" (CPU). Locațiile ei de memorie sunt numite regiștri.
Fig.1.5. Unitate simplificată de procesare centrală cu 3 digiți
Regiștrii sunt deci locații de memorie a căror rol este de a ajuta prin executarea a variate operații matematice sau a altor operații cu date oriunde se vor fi găsit datele. Să privim la situția curentă. Avem două entități independente (memoria și CPU) ce sunt interconectate, șI astfel orice schimb de informații este ascuns, ca și funcționalitatea sa. Dacă, de exemplu, dorim să adăugăm conținuturile a două locații de memorie și întoarcem rezultatul înapoi în memorie, vom avea nevoie de o conexiune între memorie și CPU.
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 turile lui ne vor fi cunoscute în mod sigur.
Fig.1.4. Model simplificat de unitate de memorie
Componentele de memorie sunt exact așa. Pentru o anumită intrare obținem conținuturile unei anumite locații de memorie adresate și aceasta este totul. Două noi concepte ne sunt aduse :adresarea și locația de memorie. Memoria constă din toate locațiile de memorie, și adresarea nu este altceva decât selectarea uneia din ele. Aceasta înseamnă că noi trebuie să selectăm locația de memorie la un capăt, și la celălalt capăt trebiue să așteptăm conținuturile acelei locații. Înafară de citirea dintr-o locație de memorie, memoria trebuie de asemenea să permită scrierea în ea. Aceasta se face asigurarea unei linii adiționale numită linie de control. Vom desemna această linie ca R/W (citește /scrie). Linia de control este folosită în următorul fel : dacă r/w=1, se face citirea, și dacă opusul este adevărat atunci atunci se face scrierea în locația de memorie. Memoria este primul element, dar avem nevoie și de altele pentru ca microcontrolerul nostru să funcționeze.
Unitatea centrală de procesare
Să adăugăm alte 3 locații de memorie pentru un bloc specific ce va avea o capabilitate incorporată de înmulțire, împărțire, extragere și să-i mutăm conținuturile dintr-o locație de memorie în alta. Partea pe care tocmai am adăugat-o este numită "unitatea de procesare centrală" (CPU). Locațiile ei de memorie sunt numite regiștri.
Fig.1.5. Unitate simplificată de procesare centrală cu 3 digiți
Regiștrii sunt deci locații de memorie a căror rol este de a ajuta prin executarea a variate operații matematice sau a altor operații cu date oriunde se vor fi găsit datele. Să privim la situția curentă. Avem două entități independente (memoria și CPU) ce sunt interconectate, șI astfel orice schimb de informații este ascuns, ca și funcționalitatea sa. Dacă, de exemplu, dorim să adăugăm conținuturile a două locații de memorie și întoarcem rezultatul înapoi în memorie, vom avea nevoie de o conexiune între memorie și CPU.
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.
Fig.1.6. Conectarea memoriei și unității centrale
În ceea ce privește funcționalitatea, situația s-a îmbunătățit, dar o nouă problemă a apărut de asemenea: avem o unitate ce este capabilă să lucreze singură, dar ce nu are nici un contact cu lumea de afară, sau cu noi ! Pentru a înlătura această deficiență, să adăugăm un bloc ce conține câteva locații de memorie a căror singur capăt este conectat la busul de date, iar celălat are conexiune cu liniile de ieșire la microcontroler ce pot fi văzute cu ochiul liber ca pini la componenta electronică.
Unitatea intrare-ieșire
Aceste locații ce tocmai le-am adăugat sunt numite "porți".Sunt diferite tipuri de porți :intrare, ieșire sau porți pe două-căi. Când se lucrează cu porți, mai întâi de toate este necesar să se aleagă cu ce pot urmează să se lucreze, și apoi să se trimită date la, sau să se ia date de la port.
Fig.1.7.Unitate simplificată intrare-ieșire
Când se lucrează cu el portul se comportă ca o locație de memorie. Ceva este pur și simplu scris în sau citit din el, și este posibil de a remarca ușor aceasta la pinii 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.
Fig.1.9.Schema de funcționare a unității de timer
Totuși, pentru noi ca să putem să îl folosim în industrie mai avem nevoie de câteve blocuri. Unul din acestea este blocul de timer care este important pentru noi pentru că ne dă informația de timp, durată, protocol etc. Unitatea de bază a timer-ului este un contor liber care este de fapt unregistru a cărui valoare numerică crește cu intervale egale, așa încât luându-i valoarea după intervalele T1 și T2 și pe baza diferenței lor să putem determina cât timp a trecut. Acesta este o parte foarte importantă a microcontrolerului a cărui control cere cea mai mare parte a timpului nostru.
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.
Fig.1.11.Blocul pentru convertirea semnalului analogic în digital
Astfel microcontrolerul este acum terminat, și tot ce mai rămâne de făcut este de a-l pune într-o componentă electronică unde va accesa blocurile interioare prin pinii acestei componente. Imaginea de mai jos arată cum arată un microcontroler în interior.
Fig.1.12.Imaginea unui microcontroler în interior
Liniile subțiri ce merg din interior către părțile microcontrlerului reprezintă fire conectând blocurile interioare cu pinii capsulei microcontrolerului. Schema următoare reprezintă secțiunea centrală a microcontrolerului.
Fig.1.13.Secțiunea centrală a microcontrolerului
Pentru o aplicație reală, un microcontroler singur nu este de ajuns. În afară de microcontroler, avem nevoie de un program pe care să-l execute, și alte câteva elemente ce constituie o interfață logică către elementele de stabilizare.
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.
Surse de alimentare pentru ascensor
Î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:
Fig.1.14. Schema unei surse simple de tensiune
Se utilizează un transformator pentru reducerea tensiunii rețelei de alimentare la o valoare convenabilă. Redresorul utilizat pentru transformarea tensiunii alternative generată de transformator într-o tensiune continuă este unul clasic de tip "punte". El poate fi realizat fie din 4 diode conectate conform schemei, fie se poate utiliza o punte redresoare integrată. Condensatorul conectat la ieșirea redresorului are rolul de a "netezi" tensiunea obținută din redresor. El reduce variația tensiunii care se aplică stabilizatorului la valori reduse de ordinul a 0.5…2 V. Acest condensator mai poartă denumirea de condensator de filtrare sau mai simplu filtru.
Stabilizatorul de tensiune are rolul de a asigura o valoare constantă a tensiunii furnizate de sursă indiferent de variațiile tensiunii rețelei de alimentare sau ale consumului. Stabilizatorul se poate realiza cu componente discrete sau se poate utiliza un stabilizator integrat.
Funcționarea sursei
Tensiunea la ieșirea transformatorului (din secundarul transformatorului) este o tensiune alternativă sinusoidala cu frecvența egală cu cea a rețelei de alimentare (50HZ). Valoarea acestei tensiuni este specifică fiecărui transformator și este influențată de curentul consumat. În general, pentru transformatoare, tensiunea secundarului corespunde unui curent consumat egal cu cel la care se obține puterea nominală a transformatorului.
Condensatorul de filtrare se încarcă din redresor în intervalele de timp cât tensiunea acestuia este mai mare decât cea existentă pe condensator și se descarcă pe sarcină în rest.
Sabilizatoarele de tensiune sunt disponibile în multe variante care diferă între ele prin valoarea tensiunii furnizate la ieșire și valoarea maximă a curentului pe care îl pot debita. Deasemenea ele sunt disponibile în mai multe variante de capsule.
Cele mai cunoscute și utilizate stabilizatoare de tensiune integrate sunt cele din familia 78XX. În tabelul următor sunt prezentate caracteristicile câtorva circuite din această familie.
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.
Acționarea electrică a echipamentului mecatronic
1.5.1. Descrierea motoarelor pas cu pas. Principii de funcționare
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.
1.5.2. Clasificarea motoarelor pas cu pas
Din punct de vedere constructiv, există 6 tipuri de motoare pas cu pas:
solenoid;
cu reluctanță variabilă;
cu magnet permanent în stator;
cu magnet permanent în rotor;
cu magnet permanent și reluctanță variabilă (hibrid);
motor pas cu pas electromecanic.
Motorul pas cu pas de tip solenoidal
Există două tipuri de astfel de motoare:
– Primul constă dintr-un electromagnet care pune în mișcare o armătură mobilă separate prin intermediul unor bile.
– Al doilea tip de MPP solenoidal, denumit MPP cu clichet, constă dintr-un electromagnet cu arc de rapel, conectat la un arbore prin intermediul unui mecanism cu clichet .
Avantajele acestui motor sunt:
dezvoltă un cuplu relativ mare;
la efectuarea pasului, nu apar oscilații;
nu necesită alimentarea înfășurării pentru crearea cuplului de fixare.
Dezavantaje:
are o funcționare zgomotoasă;
frecvența de execuție a pașilor este redusă;
prezintă uzură a pieselor în mișcare;
motorul este unidirecțional.
Motorul pas cu pas cu magnet permanent în stator
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.
Motorul pas cu pas cu magnet permanent în rotor
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.
Fig.1.15. Motor pas cu pas cu magnet permanent în rotor
Avantajele acestui motor sunt:
dezvoltă un cuplu de fixare a rotorului, chiar cu fazele nealimentate;
energia introdusă din exterior prin dispozitivul de comandă este mai mică;
din cauza prezenței magnetului permanent, rotația arborelui de ieșire la fiecare pas are un caracter amortizat.
Dezavantajele principale ale acestui tip de motor sunt:
performanțele motorului sunt afectate de schimbările caracteristicilor magneților;
tensiunea electromotoare indusă în fazele de comandă este mare.
Motorul pas cu pas hibrid, cu magnet permanent și reluctanță variabilă
MPP hibrid este mult mai scump decât MPP cu magnet permanent, dar are performanțe de neegalat în ce privește rezoluția, cuplul și viteza. Astfel, unghiul de pas caracteristic variază între 3,6° și 0,9° (100 – 400 pași pe rotație). El combină cele mai bune caracteristici ale motoarelor prezentate anterior (MPP cu reluctanță variabilă și MPP cu magnet permanent).
Acest motor prezintă următoarele avantaje:
în absența alimentării fazelor prezintă un cuplu de fixare a rotorului;
are un randament bun, datorită energiei înmagazinate în magnetul permanent din rotor sau stator;
poate funcționa cu o frecvență mare de comandă.
Ca dezavantaje se pot aminti:
inerția mare a rotorului;
performanțele motorului sunt afectate de schimbarea caracteristicilor magnetului permanent.
Motorul pas cu pas cu reluctanță variabilă
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.
Fig. 1.16. Motorul pas cu pas cu reluctanță variabilă.
MPP cu reluctanță variabilă are o largă utilizare și se caracterizează prin următoarele avantaje:
frecvența maximă de comandă atinge limite relativ mari și deci se pot realiza viteze mari;
construcție mecanică simplă;
poate fi realizat pentru o gamă largă de unghiuri de pas;
este bidirecțional, dacă are un număr de faze 3.
Dezavantajele MPP cu reluctanță variabilă:
nu memorează poziția și nu dezvoltă cuplu electromagnetic în lipsa curentului de comandă în fazele statorice;
în cazul alimentării în secvență simplă și în lipsa unui cuplu de frecare, rotorul efectuează unghiul de pas cu oscilații importante.
MPP cu reluctanță variabilă se realizează cu trei și patru faze, mai rar cu 5 faze. MPP cu 4 faze, spre deosebire de cele cu trei faze, sunt mai rapide, prezintă oscilații mai reduse la efectuarea pașilor, au o stabilitate mai bună în regim dinamic și dezvoltă un cuplu mai mare la alimentarea în secvență dublă.
Motorul pas cu pas unipolar
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.
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.
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.
Motorul pas cu pas bipolar
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ție 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.
Fig. 1.21. Setarea bobinei motorului bipolar pas cu pas.
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, solenoizilor ș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 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.
Fig. 1.24. Funcționarea punții H
Fig. 1.23. Circuit tipic de punte H.
1.5.3. Caracteristicile motoarelor pas cu pas
Motoarele pas cu pas nu sunt clasificate doar de tensiune. Următoarele elemente caracterizează un motor pas cu pas:
Tensiunea – uzual, motoarele au anumite rate de tensiune, care sunt ori scrise direct pe acestea, ori sunt exemplificate în manualele motorului. Este necesar să se mărească tensiunea de alimentare pentru a obține de la un motor dat un anumit cuplu, dar acest lucru duce la încălziri excesive sau la micșorarea duratei de viață a motorului.
Rezistența – rezistența pe înfășurări este o altă caracteristică a motoarelor pas cu pas. Această rezistență determină scurgerea curentului prin motor, la fel cum afectează curba cuplului motorului și viteza maximă de lucru.
Unghiul de pas – caracteristica cea mai importantă pentru alegerea motorului necesar efectuării unei aplicații. Acest factor specifică numărul de grade geometrice efectuate la un pas întreg. Funcționarea motorului cu micropășire va duce la dublarea numărului de pași pe revoluție(360°), ducând în același timp la micșorarea pe jumătate a gradelor caracteristice unui pas. Pentru motoarele care nu au specificații, se pot număra cu atenție pașii prin rotirea cu mâna. Gradele pe un pas se calculează împărțind cele 360° la numărul de pași obținuți.
1.5.4. Creșterea performanțelor motoarelor pas cu pas. Performanța motoarelor pas cu pas și randamentul acestora
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 pentru ascensor
Senzori incrementali
Senzorii optici de poziție unghiulară dată care ne dă poziția unghiulară a arborelui pe care sunt montați.
Există 2 categorii de senzori optici:
senzori incrementali;
senzori absoluți.
Senzorii incrementali. Mod de funcționare.
Pe durata funcționării aceștia variază de la un constructor la altul, ideea de bază rămânând aceeași.
O celulă fotoelectrică sau un fototranzistor detectează variația de lumină dată de un filament așezat în fața unei surse de lumină cu dungi negre de aceeași mărime cu spații între ele, desenate pe un disc.
Fig.1.25.Celulă fotoelectrică sau fototranzistor.
Această alternanță de fază luminoasă se citește printr-un tren de impulsuri. În general captorii incrementali au 2 ieșiri principale, fiecare generând un anumit număr de impulsuri pe tur, până la . Acest număr determină rezoluția captorului. Cele 2 semnale de ieșire sunt defazate cu ¼ pași decalând de exemplu cele 2 piste de ieșire astfel că diferența de fază între cele 2 semnale ne permit detrminarea sensului de rotație al arborelui motor. Mai mult , există și o a treia ieșire, numită „marcker” care produce un singur impuls pe tur și servește drept semnal de sincronizare.
Fig.1.26. Schema semnalelor de ieșire ale senzorilor
Sensul de rotație este stabilit de o logică dată de obicei de către furnizor.
Utilizare. Captorii incrementali sunt cei mai des utilizați la determinarea poziției, unde zero poate să varieze. Îi intâlnim de asemenea, frecvent în sistemele comandate ca generatorare de impulsuri în determinarea vitezei. De fapt, frecvența electrică (Hz) a unui tren de impulsuri este egală cu produsul numărului de impulsuri/tur viteza de rotație (tr/sec). Dacă știm să măsurăm această frecvență, putem calcula viteza arborelui motor.
Captorii absoluți
Ei sunt prezentați sub forma unui disc pe care sunt dispuse acoperiri, negre și albe, în totalitate sau nu, astfel că, pe o rază oarecare, succesiunea de zone negre și albe constituie reprezentarea binară a unghiului pe care îl face arborele motor cu origine cunoscută. Acest cuvânt binar este generat direct de un disc de decodare datorită unui sistem de citire optic folosind dispozitivele analogice care sunt utilizate în captorii incrementali.
Fig.1.27. Disc de decodare
Desenul pistelor este ales astfel încât să producă un cod Gray sau cod binar reflectat în care trecerea de la un număr la următorul număr se traduce prin schimbarea unui singur bit în combinația care il reprezintă.
Utilizare. Captorii absoluți permit cunoașterea valorii instantanee a ungiului de rotație a arborelui motor în comparație cu un decalaj inițial al captorului pe acest arbore.
În domeniul roboților prezintă avantajul extrem de interesant după demaraj, printr-o singură citire presupunând că aceștia sunt plasați la fiecare articulație, putem adăuga referințele de stabilizare și evitarea mișcătilor bruște ale mecanicii susceptibile la deteriorare.
Un robot echipat cu astfel de captori nu are nevoie de o poziție de instalare specială.
Controlul acestor captor se realizază ușor cu un microprocesor.
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.
Fig.1.28. Schema modului de detecție al captorului cu infraroșu.
Ca și detectorul cu ultra-sunete este este utilizat în special pentru detectarea prezenței sau absenței unui obiect și la măsuratea distanței. De fapt, se observă curba de răspuns a captorului în funcție de distanța captor – obiect. Această curbă, în mare, are forma unui clopot.
1) Totodată, se observă pe figură că pentru același semnal de ieșire putem să avem două distanțe captor – obiect diferite: . 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 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
Tema tehnică detaliată
Să se proiecteze și realizeze un stand experimental prin care să poată fi studiat un sistem mecatronic destinat prin definiție Monitorizării Gradului de Funcționalitate Aferent unui Ascensor de Persoane.
Date tehnice:
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)
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.
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:
Utilizarea modului CAD SolidWorks pentru proiectarea mecanica a sistemului;
Utilizarea limbajului de asamblare MPLab pentru programarea blocului electronic;
Utilizarea logicii tranzistorizate pentru realizarea blocului electronic de comanda si control;
Pentru aplicatia numerica a suitei de calcule mecanice se vor lua in considerare urmatoarele date:
masa utila vehiculata de lift
viteza maxima
ghidarea cabinei in casa liftului se va realiza pe un sistem de rulare cu rulmenti la care va fi prevazută o schemă de compensare a nealiniamentelor și șocurilor accidentale apărute in timpul funcționării.
CAPITOLUL 3
Breviar de calcule mecanice
3.1 Considerații generale
În foarte multe aplicații inginerești și în special în construcțiile de mașini se întâlnesc piese și sarcini care nu satisfac condițiile de solicitare statice, admise până acum. Solicitările dinamice sunt un rezultat al mișcării piesei studiate, sau a altor corpuri, care aplică asupra sarcinii dinamice.
Dacă la solicitarea statică se admite ca vitezele și accelerațiile să fie nule, la cea dinamică intervin aceste mărimi cinematice în cele mai variate feluri: constante (un volant în mișcare de rotație uniformă), variabile continuu, variabile cu discontinuități.
O sistematizare a modului de variație a acestor mărimi cinematice după efectul mecanic asupra piesei studiate, permite gruparea solicitărilor dinamice astfel:
1. Solicitări prin forțe de inerție, datorate unor accelerații mari, constante sau variabile continuu, întâlnite la: cabluri de ascensoare, volanți, discuri de șlefuit, rotori de turbine.
2. Solicitări prin șocuri, cauzate de variații bruște (discontinue) ale vitezelor și accelerațiilor.
3. Solicitări la oboseală datorate unor variații periodice (uneori aleatoare) ale eforturilor, repetate de un număr mare de ori.
3.2 Solicitări prin forțe de inerție
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.
Calculul cablului de macara sau ascensor
Î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:
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.
Pentru un element dx din tijă, la distanța x de punctul O, forța centrifugă este:
iar pentru întreaga tijă este:
3.3 Calculul de dimensionare al cablului
Ipoteza: Considerăm că pentru cazul în care cablul se află la jumătatea distanței dintre capetele tamburului (troliului).
Schema reală de calcul a reacțiunilor Re1 și Re2
(1)
(2)
Din (2)
Din (1)
Pentru cazul considerat în ipoteza simplificatoare de mai sus:
și
Calculul lui Q
Prin urmare:
Deci:
Dimensionarea cablului
(pentru oțel)
Se amplifică cu un coeficient de siguranță pentru a fi incluse și efectele altor solicitări mecanice decât cele prezentate.
Deci:
S-a ales diametru cablu de tracțiune lift sau echivalent cablu multifilar.
3.4 Verificarea rulmenților
Cauza principală a scoaterii din uz a rulmenților se datorează apariției pittingului (oboselii superficiale) pe căile de rulare ale inelelor, respectiv ale corpurilor de rostogolire.
Calculul de verificare al rulmenților constă în stabilirea duratei de funcționare care trebuie să fie mai mare decât o durată admisibilă , care pentru reductoare de turație de uz general este recomandată la valori de 12000…15000 ore, iar pentru mașini agricole de 8000….12000 ore.
Cunoscând reacțiunile radiale și axiale din lagăre, precum și sistemul de montaj al rulmenților și caracteristicile acestora (uzual, cei doi rulmenți de pe arbore sunt identici), se calculează sarcina dinamică echivalentă, preluată de fiecare rulment de pe arbore:
unde X, Y – coeficienții forței radiale, respectiv axiale; X, Y sunt dependenți de tipul și mărimea rulmentului, precum și de mărimea forțelor radiale și axiale preluate de rulment.
Valorile coeficienților X și Y se aleg din cataloage pentru rulmenți, iar în vederea alegerii corecte a acestor coeficienți, sunt precizate și soluțiile de montaj al rulmenților radiali și respectiv radiali-axiali. Soluțiile trebuie să ne permită compensarea dilatărilor axiale ale arborilor, fără a introduce solicitări suplimentare în rulmenți.
Montajul rulmenților radiali cu bile
Rulmenții radiali cu bile se pot monta în două variante.
La montajul cu rulment conducător și rulment liber se fixează axial atât pe arbore cât și în carcasă rulmentul cu sarcina radială cea mai mică (rulmentul conducător). Acesta va prelua și sarcina axială. Cel de-al doilea rulment se fixează axial fie pe arbore, fie mai rar în carcasă, putându-se descărca prin el dilatările termice axiale ale arborelui. Acest rulment (rulmentul liber) va prelua numai forța radială. Soluția se utilizează în special la arborii lungi. Este mai complicată din punct de vedere tehnologic și constructiv, necesitând prelucrări și elemente de asamblare suplimentare.
Montajul cu rulmenți flotanți se realizează prin fixarea axială a fiecărui rulment, într-un singur sens pe arbore (spre interior) și în sens opus în carcasă, prin intermediul capacelor. Forța axială este preluată în acest caz de rulmentul către care este îndreptată. Soluția de montaj este simplă, se utilizează la arbori scurți, cum sunt de exemplu, arborii reductoarelor de turație. Această soluție de montaj prezintă dezavantajul unei încărcări neuniforme a celor doi rulmenți, spre deosebire de prima variantă.
Indiferent de varianta de montaj, cunoscând rulmentul care preia forța axială, se determină raportul , unde i reprezintă numărul de rânduri de bile iar – capacitatea statică de încărcare a rulmentului. Valorile i și se aleg din catalogul firmelor producătoare de rulmenți și în funcție de acest raport se alege mărimea „e” față de care se compară raportul .
Dacă , rezultă .
Dacă , se determină X și Y prin interpolare lineară (conf. STAS 7160-82).
Montajul rulmenților radiali – axiali cu bile sau cu role conice
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ă totală de pe arbore este . Mărimea și direcția forțelor axiale, preluate de fiecare rulment , depind de montajul acestora și de forțele axiale proprii , cauzate de faptul că direcția de preluare a sarcinii este diferită față de direcția radială a reacțiunilor.
Intr-o primă etapă se alege din catalog , cu ajutorul căruia se determină forțele axiale proprii din fiecare rulment, apoi calculându-se forțele axiale totale din fiecare rulment. Valorile finale ale lui X și Y rezultă, determinând rapoartele: și , care se compară cu „e”.
Pentru rulmentul cel mai încărcat de pe arbore (cu sarcina echivalentă cea mai mare) se determină, în funcție de capacitatea dinamică a lui, durabilitatea (numărul de milioane de rotații efectuate până la apariția primelor semne de oboseală).
[milioane rotații]
unde:
În funcție de durabilitatea efectivă și de turația arborelui se stabilește durata efectivă de funcționare:
[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:
[milioane rotații]
[ore]
3.5 Proiectarea și realizarea machetei funcționale
Sistemele mecatronice de tip ascensor trebuiesc proiectate în funcție de standardul ascensorului și nivelul de calitate de care dispune instalația aferentă acestora. În acest context, trebuie ținut cont de numărul de senzori și limitatori de care dispune ascensorul și amplasate alte sisteme de semnalizare și alți senzori mult mai eficienți care să preia informația pentru o cât mai bună siguranță și fiabilitate.
Odată cu creșterea nivelului de siguranță pe care îl oferă acest sistem crește și nivelul de confort și calitatea unui sistem de tip ascensor care poate deveni un sistem mecatronic datorită componenței pe care o are.
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
4.1 Algoritmi software
Fig.2.1.Algoritmul principal de funcționare al programului
La pornirea programului principal ascensorul este în poziție de repaus și se așteaptă chemarea la unul din etaje, sau comanda de deplasare se poate da și din ascensor.
În momentul în care se face o comandă se memorează etajul dorit după care se determină viteza și direcția de deplasare.
Se pornește ascensorul cu viteza și direcția determinate până se ajunge la un sensor unde se determină din nou viteza de deplasare, iar dacă s-a ajuns la etajul dorit se oprește ascensorul.
Fig.2.2.Algoritmul de verificare al butoanelor
Pentru a verifica tastatura reprezentată prin butoane se fac următorii pași:
se activează o linie ( linia 1 ) și se verifică dacă există buton apăsat,
se determină care buton este apăsat
se activează o linie ( linia 2 ) și se verifică dacă există buton apăsat,
se determină care buton este apăsat
se activează o linie ( linia 3 ) și se verifică dacă există buton apăsat,
se determină care buton este apăsat
se activează o linie ( linia 4 ) și se verifică dacă există buton apăsat,
se determină care buton este apăsat
se activează o linie ( linia 5 ) și se verifică dacă există buton apăsat,
se determină care buton este apăsat
se activează o linie ( linia 6 ) și se verifică dacă există buton apăsat,
se determină care buton este apăsat
se activează linia 7 și se verifică dacă există buton apăsat,
se determină care buton este apăsat
se activează linia 8 și se verifică dacă există buton apăsat,
se determină care buton este apăsat
Fig.2.3.Algoritmul de determinare al poziției și sensului de deplasare ale ascensorului
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
Pentru afișarea cifrelor pe display am realizat multiplexarea celor doi digiți.
Cei doi digiți se aprind succesiv, fiecare rămânând aprins aproximativ 10 ms, rezultând în felul acesta 100 de clipiri pe secundă pentru fiecare din cei doi digiți.
Aceste clipiri sunt prea rapide pentru ochiul uman care va avea senzația de lumină continuă.
4.2 Algoritm hardware
Fig.2.5.Algoritmul harware de funcționare al ascensorului
Microcontrolerul ca să funcționeze are nevoie de o sursă stabilizată de tensiune care se obține cu ajutorul unui transformator coborâtor de tensiune, o punte redresoare, condensator de filtraj și a unei surse LM 7805 care debitează la ieșire 5 V cc.
Display-ul are 2 digiți care funcționează prin multiplexare, ambii fiind conectați pe aceeași pini de date iar comanda afișării fiind separată.
Toate butoanele sunt multiplexate pe o matrice 8 X 8
După funcție butoanele se împart în:
butoane pentru chemarea liftului (aflate pe palier)
butoane pentru alegerea etajului dorit (aflate în lift)
butoane pentru simularea senzorilor de prezență a liftului în anumite poziții (între etaje sau ajuns la etaj)
butoane pentru simularea ușilor deschise (ceea ce duce la oprerea de urgență a liftului)
Pentru comanda motorului sunt mai multe variante:
direct cu contactoare interblocate
circuite de comandă speciale
invertoare de putere.
4.3 Caracteristicile ascensorului utilizat
Blocul de alimentare
Transformator 220 V / 12 V (100 mA)
Punte redresoare (DB 108)
Surse de alimentare LM7805 și LM 7812
Condensator de filtraj de 1000 µF / 25 V
Microcontroler Pic 16F877 – commandă afișajul
– primește informații de la butoane
Panou comandă – butoane – pentru simulare senzori poziție etaj și între etaj
– pentru chemare ascensor (exterior)
– pentru comadă ascensor (interior)
Afișaj LED cu 1 digit – afișarea numărului etajului
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
MPLab – programare și simulare microcontroler
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:
Alegerea modului de dezvoltare
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:
Fig.3.1.Fereastra de setare a simulatorului
Trebuie să selectăm opțiunea 'MPLAB-SIM Simulator' pentru că acolo se va testa programul. În afară de această opțiune, este de asemenea disponibilă opțiunea 'Editor Only'. Această opțiune este folosită doar dacă dorim să scriem un program și prin programator să scriem ' hex file' într-un microcontoler. Selecția modelului microcontrolerului este făcută în partea dreaptă. Pentru că această carte este bazată pe PIC16F84, trebuie selectat acest model.
De obicei când începem să lucrăm cu microcontrolere, folosim un simulator. După cum nivelul cunoașterii va crește, programul se va scrie într-un microcontroler imediat după translare. Sfatul nostru este ca să folosiți totdeauna simulatorul. Chiar dacă programul va părea că se dezvoltă lent, se va merita la sfârșit.
Conceperea unui proiect
Pentru a începe să scrieți un program aveți nevoie să creați mai intâi un proiect. Făcând clic pe PROJECT –> NEW PROJECT puteți să vă denumiți proiectul și să-l memorați într-un director pe care-l doriți. În figura de mai jos (fig.3.2), este creat un proiect numit 'test.pjt' și memorat în directorul c:\PIC\PROJEKTS\.
Fig.3.2. Fereastra de creare a unui nou proiect
După denumirea unui proiect, clic pe OK. O nouă fereastră apare în figura umătoare:
Fig.3.3.Fereastra de editare a unui proiect
Făcând un clic pe "test [.hex]" se activează opțiunea 'Node properties' în colțul din dreapta jos a ferestrei. Făcând clic pe ea se obține figura 3.4:
Fig.3.4.Fereastra „Node Properties”
Din această imagine observăm că sunt diferiți parametri. Fiecare fel corespunde la un parametru în "Command line". Pentru că memorarea acestor parametri este foarte necomfortabilă, chiar interzisă pentru începători, s-a introdus ajustarea grafică. Din imagine observăm ce opțiuni trebuie deschise. Făcând clic pe OK ne întoarcem la fereastra anterioară unde "Add node" este o opțiune activă. Făcând clic pe ea obținem următoarea fereastră unde ne denumim programul asamblor. Să-l denumim"Test.asm" pentru că acesta este primul nostru program în MPLAB.
Fig.3.5.Fereastra de denumire a unui program asamblor
Făcând clic pe OK ne întoarcem la fereastra de început unde observăm adăugat un fișier asamblor (figura 3.5). Făcând clic pe OK ne întoarcem la mediul de dezvoltare MPLAB.
Conceperea unui nou fișier asamblor(scrierea un program nou)
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:
Fig.3.7.Fereastra de denumire și salvare a unui proiect
Când obținem această fereastră, trebuie să scrierm'test.asm' mai jos de 'File name:', și facem clic pe OK. După aceea, vom observa numele fișierului 'test.asm' în partea de sus a ferestrei noastre.
Programul trebuie să fie scris într-o fereastră care este deschisă, sau copiată de pe un disc, folosind opțiunile copy și paste. Când programul este copiat în "test.asm" window, putem folosi comanda PROJECT -> BUILD ALL (dacă nu sunt erori), și o nouă fereastră va apare ca în figura 3.8:
Fig.3.8.Fereastra de construcție a programului
Putem vedea din imagine că obținem fișierul "test.hex" ca rezultat al procesului de translare, pentru care este folosit programul MPASMWIN, și că este doar un mesaj. În toate aceste informații, ultima propoziție în fereastră este cea mai importantă pentru că arată dacă translarea a fost sau nu făcută cu succes. 'Build completed successfully' este un mesaj afirmând că translarea a fost de succces și că nu sunt alt erori.
În caz că apare o eroare, trebuie să facem dublu clic pe mesajul eroare în fereastra 'Build Results'. Aceasta vă va transfera automat în programul asamblor și în linia unde a fost eroarea.
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.
Fig.3.10.Fereastra cu regiștrii SFR
Comanda următoare într-un simulator este DEBUG>RUN>STEP care începe pașii noștri prin program. Aceeași comandă ar fi putut fi desemnată de la o tastatură cu tasta <F7> (în general, toate comenzile importante au taste desemnate de le claviatură). Folosind tasta F7, programul este executat pas cu pas. Când obținem un macro, fișierul conținând un macro este deschis (Bank.inc), și continuăm cu macro. Într-o fereastră cu regiștri SFR putem observa cum registrul W primește valoarea 0xFF și pe care o trimite la portul B. Făcând clic pe tasta F7 din nou, nu obținem nimic pentru că programul a ajuns într-o "infinite loop"-buclă infinită. Bucla infinită este un termen pe care îl întâlnim adesea. Reprezintă bucla din care un microcontroler nu poate ieși până nu se întâmplă întreruperea (dacă este folosită într-un program), sau pănă ce micorcontrolerul va fi resetat.
ORCAD – Realizare scheme electrice și cablaje
Crearea unui proiect nou
File>New>Project
Comenzi care au ca consecință deschiderea ferestrei de creare proiect nou(fig.3.11):
Fig.3.11.Fereastra de creare a unui proiect nou
Name -> numele noului proiect
Se alege tipul proiectului în cazul de față Analog or Mixed-Signal Circuit Wizard
În partea dreaptă se poate vedea o scurtă descriere a programului ce urmează să fie creat.
Location -> permite alegerea directorului unde va fi creat proiectul
Crearea schemelor cablajului
După crearea proiectului „spațiului de lucru” se poate începe desenarea propriu-zisă a schemelor logice care vor fi folosite în continuare pentru realizarea cablajului.
În ORCAD pot fi definite mai multe scheme care sunt introduse în același proiect pentru ușurarea înțelegerii și a urmăririi traseelor.
De observat că odată terminată o schemă și începerea trasării cablajului „deschiderea programului Layout” nu se pot aduce modificări ale conexiunilor decât prin revenirea în Capture.
Pentru înțelegerea ușoară a programului redenumim pagina inițială, creată automat, dându-i noul nume Sursă, deoarece va deține toate informațiile necesare creării stabilizatorului de tensiune.
Fig.3.12.Fereastra de editare a unui proiect
După cum se vede pentru a redenumi o pagină a proiectului este necesar să se facă clik pe semnul + din dreptul următoarelor căsuțe: Design resource, /sursa dsn, schematic1 și click dreapta pe pagina care trebuie redenumită.
Pentru a adăuga componente noi (piese) se urmăresc următorii pași:
se selectează pagina proiectului în care se introduce componenta
se alege din meniu Place, Part… sau se face click a se vedea figura 3.13.:
Fig.3.13.Fereastra de introducere a componentelor
Pentru alegerea pieselor se folosește fereastra din fig.3.14 care se deschide la comanda part…
Fig.3.14.Fereastra de alegere a componentelor
Part: specifică numele piesei care se dorește;
Libraris: arată care sunt bibliotecile selectate „în care se face căutarea”;
Add Library…: adaugă noi librării la proiect;
Remove Library: elimină o bibliotecă din căutare;
Part Search…: caută o componentă în toate librăriile disponibile în directorul specificat;
Datorită programului Capture CIS odată făcută și verificată o schemă logică ca cea de mai sus, poate fi folosită și în alte programe cu ajutorul comenzilor Copy, Paste. Acest lucru reduce foarte mult timpul de lucru deoarece o schemă verificată poate fi foarte ușor refolosită fără a fi nevoie să se construiască din nou schema logică a cablajului.
După realizarea schemelor logice ale diverselor părți componente ale proiectului se trece la realizarea cablajului schemei cablajului imprimat, pentru aceasta se vor urma următorii pași:
Creerea Netlist-listei fișier care va fi folosit de programul Layout pentru realizarea schemei cablajului imprimat.
Pentru crearea net-listei se va selecta obțiunea Create Netlist din meniul Tools care va duce la deschiderea ferestrei Create Netlist(fig.3.15.) unde se poate alege tipul listei și alte obțiuni în funcție de tipul listei selectat. Unele tipuri de liste care pot fi create sunt:
Fig.3.15.Fereastra de creare a net-listului
Pspice – cu ajutorul căreia se pot executa verificări funcționale în Pspice;
Spice – pentru realizarea verificărilor cu Spice;
Layout – pentru realizarea cabaljului imprimat;
În cadrul opțiunii Layout se poate alege numele și locul unde se va salva fișierul, se poate opta între inchi și milimetrii, iar în cazul în care schema cablajului este deja realizată dar s-au adus modificări de ultimă oră se poate bifa optiunea Run Eco to Layout care adaugă modificările făcute fără ca să modifice tot cablajul, ci modificând doar acolo unde este cazul.
Odată realizat net-listul se poate trece la realizarea propiu-zisă a schemei cablajului imprimat prin executarea următorilor pași: – rularea programului Layout
– crearea unui proiect nou
La crearea unui proiect nou se au în vedere următorii pași:
alegerea unei foi din librărie
încărcarea fișierului sursă
alegerea unui nume pentru noul cablaj
După executarea acestor pași programul rulează un program specializat Automatic ECO Utility care caută în bazele de date instalate pe sistem (baze de date cu caracteristici ale pieselor electronice) pentru fiecare componentă folosită în CaptureCIS o corespondență fizică.
Fig.3.16.Fereastra de rulare a progarmului Automatic Eco
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:
Fig.3.18.Fereastra pentru crearea unei noi piese
Obs: O dată facută o legatură între o piesa fizică exemplu tranzistorul BC547 și un model de piesă care să fie așezat pe placă această legatură se va ține pentru toate tranzistoarele BC547 folosite în proiect nefiind necesar crearea legăturii pentru fiecare piesă în parte (pentru piese identice).
Pentru proiectul de față după rularea pașilor precedenți proiectul arată în felul următor ca în fig.3.19:
Fig.3.19.Fereastra cu cablajul realizat
În figura de mai sus se vede că conexiunile sunt făcute pe layerul global (culoare galbenă) ceea ce înseamnă că pot exista (pe acest layer sau între acest layer și celelalte layere “albastru partea de sus a cablajului”, “rosu partea de jos a cablajului”) intersecții fără ca programul să anunțe utilizatorul.
Primul pas în momentul de față este poziționarea pieselor pe cablaj după care se trece la trasarea cablajului. Programul are grijă ca cablajul să nu intersecteze două fire de acceași culoare care ar duce la o funcționare dezastruoasa a cablajului sau chiar la nefuncționarea cablajului.
Ultimul pas software pentru realizarea cablajului imprimat este printarea schemelor (fig.3.20), care se execută cu comanda Print/Plot, care deschide caseta de dialog din figura următoare:
Fig.3.20.Fereastra pentru printarea cablajului
Unde se pot alege urmatoarele opțiuni în funcție de tehnologia de realizare a cablajului folosită:
Force Black & White: desenare negru;
Keep Drill Holes Open: nu astupă găurile în special pentru cablajele profesionale realizate cu fotorezist.
Center on page: centrează pe pagină
Mirror: pentru a nu exista greșeli în amplasarea pieselor pe cablajul imprimat se folosește miroruirea, deoarece partea de pe spate a cablajului trebuie văzută în oglindă.
După scoaterea la imprimantă a celor două layere se poate trece la realizarea fizică a cablajului.
CAPITOLUL 6
Descrierea aplicației
6.1 Schema de comandă și control a microcontrolerului
Desrierea funcționării schemei de comandă și control a microcontrolerului
Î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.
6.2 Schema de comandă a surselor de alimentare
Sursa de alimentare folosită la acest proiect este compusă din:
Conectorul J1 care are rolul de a face legatura între sursa de alimentare (priză) și montaj
Siguranta F6 are rolul de protecție la supracurenți
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
Puntea redresoare 1 are rolul de a transforma curentul alternativ de pe pinii 1,3 în curent continuu la pinii 2 (-) și 4 (+)
Condensatorul C5 are rol de filtraj și se leagă între pinii 2 și 4 ai punții redresoare
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
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.
6.3 Multiplexarea butoanelor
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
6.4 Descrierea microcontrolerului ales
PIC16F877 aparține unei clase de microcontrolere de 8 biți cu arhitectură RISC. Structura lui generală este arătată în schița următoare reprezentând blocurile de bază.
Memoria program (FLASH)-pentru înmagazinarea unui program scris. Pentru că memoria ce este făcută în tehnologia FLASH poate fi programată și ștearsă mai mult decât odată, aceasta face microcontrolerul potrivit pentru dezvoltarea de componentă.
EEPROM-memorie de date ce trebuie să fie salvate când nu mai este alimentare. Este în mod uzual folosită pentru înmagazinarea de date importante ce nu trebuie pierdute dacă sursa de alimentare se întrerupe dintr-o dată. De exemplu, o astfel de dată este o temperatură prestabilită în regulatoarele de temperatură. Dacă în timpul întreruperii alimentării această dată se pierde, va trebui să facem ajustarea încă o dată la revenirea alimentării. Asfel componenta noastră pierde în privința auto-menținerii.
RAM-memorie de date folosită de un program în timpul executării sale. În RAM sunt înmagazinate toate rezultatele intermediare sau datele temporare ce nu sunt cruciale la întreruperea sursei de alimentare.
PORTUL A, PORTUL B, PORTUL C, PORTUL D, PORTUL E sunt conexiuni fizice între microcontroler și lumea de afară. Portul A are 6 pini, portul B are 8 pini, portul C are 8 pini, portul D are 8 pini iar portul E are 3 pini.
TIMER-ul LIBER este un registru de 8 biți în interiorul microcontrolerului ce lucrează independent de program. La fiecare al patrulea impuls de ceas al oscilatorului își încrementează valoarea lui până ce atinge maximul (255), și apoi începe să numere tot din nou de la zero. După cum știm timpul exact dintre fiecare două incrementări ale conținutului timer-ului, poate fi folosit pentru măsurarea timpului ce este foarte util la unele componente.
UNITATEA DE PROCESARE CENTRALĂ are rolul unui elemnet de conectivitate între celelalte blocuri ale microcontrolerului. Coordonează lucrul altor blocuri și execută programul utilizatorului.
Fig.4.1.Conectivitatea între blocurile microcontrolerului
Fig.4.2.Arhitecturile Harvard și Von-Neumann
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.
Ciclul de clock / instrucțiune
Clock-ul sau ceasul este starter-ul principal al microcontrolerului, și este obținut dintr-o componentă de memorie externă numită "oscilator". Dacă ar fi să comparăm un microcontroler cu un ceas de timp, "clock-ul" nostru ar fi un ticăit pe care l-am auzi de la ceasul de timp. În acest caz, oscilatorul ar putea fi comparat cu arcul ce este răsucit astfel ca ceasul de timp să meargă. De asemenea, forța folosită pentru a întoarce ceasul poate fi comparată cu o sursă electrică.
Clock-ul de la oscilator intră într-un microcontroler prin pinul OSC1 unde circuitul intern al unui microcontroler divide clock-ul în 4 clock-uri egale Q1,Q2,Q3 și Q4 ce nu se suprapun. Aceste 4 clock-uri constituie un ciclu de o singură instrucțiune (numit de asemenea ciclu mașină) în timpul căreia o instrucțiune este executată.
Executarea instrucțiunii începe prin apelarea unei instrucțiuni care este următoarea în linie. Instrucțiunea este apelată din memoria program la fiecare Q1 și este scrisă în registrul de instrucțiuni la Q4. Decodarea și executarea instrucțiunii sunt făcute între următoarele cicluri Q1 și Q4. În următoarea diagramă putem vedea relația dintre ciclul instrucțiunii și clock-ul oscilatorului (OSC1) ca și aceea a clock-urilor interne Q1-Q4. Contorul de program(PC) reține informația despre adresa următoarei instrucțiuni.
Fig.4.3.Ciclul de instrucțiune al microcontrolerului
Pipelining
Ciclul de instrucțiuni constă din ciclurile Q1, Q2, Q3 și Q4. Ciclurile de instrucțiuni de apelare și executare sunt conectate într-un așa fel încât pentru a face o apelare, este necesar un ciclu cu o instrucțiune, și este nevoie de încă una pentru decodare și executare. Totuși, datorită pipeline-ului sau liniei directe, fiecare instrucțiune este efectiv executată într-un singur ciclu. Dacă instrucțiunea cauzează o schimbare în contorul programului, și PC-ul nu direcționează spre următoarea ci spre alte adrese (poate fi cazul cu subprogramele jumps sau de apelare), 2 cicluri sunt necesare pentru executarea unei instrucțiuni. Aceasta este pentru că instrucțiunea trebuie procesată din nou, dar de data aceasta din partea adresei corecte. Ciclul începe cu clock-ul Q1, prin scrierea într-un registru (IR). Decodarea și executarea începe cu clock-urile Q2, Q3 și Q4.
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.
6.5 Descrierea realizării practice – software
Macroul de schimbare al bancurilor de memorie ale microcontrolerului, PIC16F877A (BANK0, BANK1, BANK2, BANK3) și macroul pentru salvarea datelor în monentul detectării unei întreruperi în cazul de față în cazul detectării întreruperi la trecerea timpului pe timerul 2, care este folosit pentru afișarea pe display ca timp de licărire a celor doi digiți.
În continuare se prezintă codurile sursă ale acestor macrouri:
Subrutina selecție BANK0 – se desetează biții STATUS,5 și STATUS,6
BANK0 MACRO
BCF STATUS,5
BCF STATUS,6
ENDM
Subrutina selecție BANK1 – se desetează bitul STATUS,6 și se setează bitul STATUS,5
BANK1 MACRO
BSF STATUS,5
BCF STATUS,6
ENDM
Subrutina selecție BANK2 – se desetează bitul STATUS,5 și se setează bitul STATUS,6
BANK2 MACRO
BCF STATUS,5
BSF STATUS,6
ENDM
Subrutina selecție BANK3 – se setează biții STATUS,5 și STATUS,6
BANK3 MACRO
BSF STATUS,5
BSF STATUS,6
ENDM
În momentul în care se detectează o întrerupere (microcontrolerul a detectat un stimul intern sau extern important: întrerupere pe TMR2, apăsare de buton, etc) microcontrolerul cu ajutorul rutinei PUSH salvează toate datele importante (W, OPTION_REG, STATUS) după care se execută întreruperea (se actualizează display-urile) și după ce se termină instrucțiunile care trebuiesc executate la întrerupere microcontrolerul cu ajutorul rutinei POP revine la starea inițială.
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
Întreruperea în timpul depășirii contorului TMR2
Depășirea contorului TMR2 (de la FFh la 00h) va seta bitul T2IF (INTCON<2>). Aceasta este o întrerupere foarte importantă pentru că multe probleme reale se por rezolva folosind această întrerupere. Unul din exemple este măsurarea timpului. Dacă știm cât timp are nevoie contorul pentru a completa un ciclu de la 00h to FFh, atunci numărul de întreruperi înmulțit cu acea durată de timp va da timpul total scurs. În rutina de întrerupere unele variabile vor fi incrementate în memoria RAM, valoarea acelei variabile înmulțite cu timpul de care are nevoie contorul pentru a contoriza într-un ciclu întreg, va da timpul total scurs. Întreruperea poate fi pornită/oprită prin setarea/resetarea bitului T2IE (INTCON<5>).
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 256×65.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:
TIME = timeconst_1 x 1.02ms.
Exemplu: WAIT .100
Exemplul arată cum să obținem o întârziere de 100×1.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.
Exemplu: WAITX .100,7
Exemplul arată cum să obținem o întârziere de 100×65.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
BTFSS ADIG,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
BTFSS ADIG,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
BTFSS PORTB,0
CALL BUTTON_P
MOVLW B'11111101'
MOVWF PORTD
WAIT .1
BTFSS PORTB,0
CALL BUTTON_1
MOVLW B'11111011'
MOVWF PORTD
WAIT .1
BTFSS PORTB,0
CALL BUTTON_2
MOVLW B'11110111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,0
CALL BUTTON_3
MOVLW B'11101111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,0
CALL BUTTON_4
MOVLW B'11011111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,0
CALL BUTTON_5
MOVLW B'10111111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,0
CALL BUTTON_6
MOVLW B'01111111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,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
BTFSS PORTB,1
CALL BUTTON_8
MOVLW B'11111101'
MOVWF PORTD
WAIT .1
BTFSS PORTB,1
CALL BUTTON_9
MOVLW B'11111011'
MOVWF PORTD
WAIT .1
BTFSS PORTB,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
Programul principal face urmatorele operatiuni:
Initializeaza uC
Initializeaza displayul
Verifica tastatura
Determina ce buton este apasat si ia decizii in concordanta
Determina directia de mers (sus, jos)
Determina viteza de deplasare (mica, mare)
Afiseaza pozitia pe dispaly
In continuare se prezinta codul sursa al programului principal:
LIST P=16F877A ;ALEGEM MICROCONTROLERUL PIC 16F877A
ERRORLEVEL -302 ;SE SUPRIMA MESAJELE DESPRE MEMORIE
__CONFIG 2F41H ;SE SELECTEAZA OSCILATOR XT (VEZI ANEXA XX)
#include "p16f877A.inc" ;fisierul standard de initializare al uC
CBLOCK 0X20 ;inceputul blocului de date (memorie RAM volatila)
WCYCLE ;APARTIN MACROULUI WAITX
PRESCwait ;APARTIN MACROULUI WAITX
LO
LO_TEMP
Bcheck
TEMP_2
TEMP1
TEMP2
POZ_ACT ;POZITIA ACTUALA A LIFTULUI
POZ_DOR_T ;POZITIA ACTUALA TEMPORARA
POZ_DOR ;POZITIA DORITA PENTRU LIFT
STARE
ENDC ;sfarsitul declararii variabilelor
#DEFINE REL1 PORTE,1 ;BIT RELEU 1
#DEFINE REL2 PORTE,2 ;BIT RELEU 2
#DEFINE VIT1 PORTA,0 ;BIT VITEZA 1
#DEFINE VIT2 PORTA,1 ;BIT VITEZA 2
ORG 0X00 ;LOCUL DE PORNIRE LA RESET
GOTO RESET ;RESETAREA TUTUROR VARIABILELOR
#INCLUDE "BANC.INC" ;NU SE PUN INCLUDURILE INAINTE DE ORG ???
#INCLUDE "WAIT.inc" ;fisierele de includere pentru macrouri
#INCLUDE "ETAJE.INC"
#INCLUDE "BUTOANE.INC"
#INCLUDE "TEST.INC"
#INCLUDE "BUTOANE_INT.INC"
#INCLUDE "BUTOANE_ETAJE.INC"
#INCLUDE "SENZORI_ETAJE.INC"
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
6.6 Descrierea realizării practice – hardware
Circuite imprimate
Utilizarea cablajelor imprimate constituie la ora actuală o tehnică universală de (inter) conectare a componentelor electronice atât în echipamentele electronice profesionale, cât și în cele de larg consum. Producția cablajelor imprimate a crescut an de an deoarece ele au avantajele următoare:
permit reducerea volumului și masei echipamentelor prin creșterea densității de montaj a componentelor electronice,
contribuie la creșterea siguranței în funcționare a echipamentelor prin micșorarea numărului firelor de legătura între componentele electronice,
contribuie la simplificarea operațiilor de asamblare, la reducerea duratei lor de execuție și permit automatizarea lor în cazul unei producții de (mare) serie,
concură la reducerea cazurilor de montare eronată a componentelor electronice în scheme și asigură o bună reproductibilitate a montajelor,
asigură montaje cu o bună comportare la acțiuni mecanice (vibrații, șocuri) și climatice (căldură, umiditate),
contribuie la miniaturizarea montajelor eleetronice și deci a echipamentelor în ansamblu,
fac posibilă unificarea și standardizarea construcției blocurilor electronice funcționale care intră în componența echipamentelor electronice și asigură interconectarea ușoară a acestor.
Realizarea cablajelor
Primul pas în crearea cablajului îl reprezintă decuparea unei bucăți de textolit de dimensiuni convenabile. Se îndepărtează eventualele bavuri de pe margini și se curăță partea placată cu cupru cu detergent de eventualele grăsimi sau oxizi depuși.
Pentru imprimarea cablajului pe placa se folosește folia de transfer PnP
Folia de transfer PnP este un mijloc practic și ușor, care face posibilă realizarea de cablaje imprimate. Cu ajutorul acestei tehnologii se pot realiza rapid și curat cablaje imprimate
Principiul de funcționare al foliei de transfer PNP
Se bazează pe principiul de funcționare a imprimantei laser. În imprimanta laser există un tambur fotosensibil din seleniu pe care raza laser "desenează" urma de imprimare. Acest tambur se impregnează apoi cu toner-ul, care aderă numai la zonele desenate (electrizate) anterior de raza laser. Tamburul, rotindu-se, transpune tonerul pe hârtie, toner care este apoi presat la cald pe hârtie, topit, realizându-se astfel fixarea urmei de imprimare, fiind deci gata o hârtie imprimată.
În cazul foliei PnP, datorită structurii ei chimice superficiale, tonerul de pe tamburul de seleniu se transpune pe folie, se fixează acolo dar nu definitiv. Nu se "înrădăcinează" așa ca și pe o foaie normală de hârtie, care este poroasă. În momentul când punem folia deja imprimată pe cablajul curățat (evident, fața cu toner-ul să facă contact cu cuprul cablajului), putem "transpune" tonerul de pe folie pe cablaj cu ajutorul unui călcător de haine încins. Acest toner transpus pe cablaj reprezintă de fapt zona ce va rezista la corodare. După îndepărtarea atentă a foliei placuța poate fi imediat pusă în baia de corodare formată din clorura ferică sau acid clorhidric cu apă oxigenată.
Din principiul de funcționare rezultă că traseele pot fi transpuse pe folia PnP folosind numai imprimanta laser sau xerocopiatorul.
Modul de folosire al foliei de transfer PNP
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
Calculul economic (al machetei)
1 3 C3,C5,C6 CAPACITOR POL/SM
2 2 C7,C8 CAPACITOR NON-POL
3 4 D13,D15,D16,D17 1N4148
4 1 D14 BRIDGE
5 1 F6 FUSE
6 2 J1,J11 CON2
7 2 J2,J3 CON4
8 4 J12,J13,J14,J15 CON8
9 2 J17,J18 CON3
10 2 K1,K2 RELAY SPDT
11 4 Q1,Q2,Q3,Q4 BC107
12 31 R1,R2,R3,R4,R5,R6,R7,R8, RESISTOR
R9,R10,R11,R12,R13,R14,
R15,R16,R17,R18,R19,R20,
R21,R22,R23,R24,R25,R26,
R27,R28,R29,R30,R31
13 64 SW1,SW2,SW3,SW4,SW5,SW6 SW KEY-YM061
14 1 T1 TRANSFORMER
15 1 U2 PIC16F877A
16 1 U3 LM7812/TO
17 1 U4 LM7805/TO
18 1 Y1 ZTA
19 1 Grup motoreductor (motor pas cu pas + reductor) Pentru urcarea și coborârea liftului
20 1 Motor unitate floppy Pentru închiderea și deschiderea ușii
21 6 Teavă PVC Ø40 mm × 150 mm Stâlp susținere machetă
22 3 Teavă PVC Ø25 mm × 150 mm Stâlp susținere machetă
23 1,5m2 PVC 5 mm alb Pentru construcția palierelor
24 0,25m2 PVC 3 mm alb Pentru construcția cabinei liftului
25 2 Sină unitate CD-ROM Pentru glisarea ușii liftului în plan orizontal
26 1 Cremalieră unitate CD-ROM Pentru mecanismul roată dințată-cremalieră
27 1 Roată dințată (imprimantă)
28 4 Tijă ghidare Ø4 mm × 500 mm
29 2 Vopsea auto metalizată (400ml)
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Ă
Imagini realizarea practică a machetei
Fig.1.Blocul de comadă și control al aplicației
Fig.2.Butoanele de pe paliere și din interiorul ascensorului
Fig.3.Macheta practică în stare de funcționare
Aplicația software a microcontrolerului
LIST P=16F877A ;ALEGEM MICROCONTROLERUL PIC 16F877A
ERRORLEVEL -302 ;SE SUPRIMA MESAJELE DESPRE MEMORIE
__CONFIG 2F41H ;SE SELECTEAZA OSCILATOR XT (VEZI ANEXA XX)
#include "p16f877A.inc" ;fisierul standard de initializare al uC
CBLOCK 0X20 ;inceputul blocului de date (memorie RAM volatila)
WCYCLE ;APARTIN MACROULUI WAITX
PRESCwait ;APARTIN MACROULUI WAITX
LO
LO_TEMP
Bcheck
TEMP_2
TEMP1
TEMP2
POZ_ACT ;POZITIA ACTUALA A LIFTULUI
POZ_DOR_T ;POZITIA ACTUALA TEMPORARA
POZ_DOR ;POZITIA DORITA PENTRU LIFT
STARE
ENDC ;sfarsitul declararii variabilelor
#DEFINE REL1 PORTE,1 ;BIT RELEU 1
#DEFINE REL2 PORTE,2 ;BIT RELEU 2
#DEFINE VIT1 PORTA,0 ;BIT VITEZA 1
#DEFINE VIT2 PORTA,1 ;BIT VITEZA 2
ORG 0X00 ;LOCUL DE PORNIRE LA RESET
GOTO RESET ;RESETAREA TUTUROR VARIABILELOR
#INCLUDE "BANC.INC" ;NU SE PUN INCLUDURILE INAINTE DE ORG ???
#INCLUDE "WAIT.inc" ;fisierele de includere pentru macrouri
#INCLUDE "ETAJE.INC"
#INCLUDE "BUTOANE.INC"
#INCLUDE "TEST.INC"
#INCLUDE "BUTOANE_INT.INC"
#INCLUDE "BUTOANE_ETAJE.INC"
#INCLUDE "SENZORI_ETAJE.INC"
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
BANK0 MACRO ;MACRO PENTRU BANCUL 0
BCF STATUS,5 ;STERGEM STATUS,5
BCF STATUS,6 ;STERGEM STATUS,6
ENDM
BANK1 MACRO ;MACRO PENTRU BANCUL 1
BSF STATUS,5 ;SETAM STATUS,5
BCF STATUS,6 ;STERGEM STATUS,6
ENDM
BANK2 MACRO ;MACRO PENTRU BANCUL 2
BCF STATUS,5 ;STERGEM STATUS,5
BSF STATUS,6 ;SETAM STATUS,6
ENDM
BANK3 MACRO ;MACROU PENTRU BANCUL 3
BSF STATUS,5 ;SETAM STATUS,5
BSF STATUS,6 ;SETAM STATUS,5
ENDM
PUSH MACRO ;MACROU PUSH PENTRU SALVAREA REGISTRILOR IMPORTANTI LA EXECUTIA INTRERUPERILOR
MOVWF W_TEMP ;MUTAM CONTINUTUL REGISTRULUI 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
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
BTFSS PORTB,3
CALL PARTER
MOVLW B'11110111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,3
CALL ETAJ1
MOVLW B'11101111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,3
CALL ETAJ2
MOVLW B'11011111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,3
CALL ETAJ9
MOVLW B'10111111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,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
BTFSS PORTB,0
CALL BUTTON_P
MOVLW B'11111101'
MOVWF PORTD
WAIT .1
BTFSS PORTB,0
CALL BUTTON_1
MOVLW B'11111011'
MOVWF PORTD
WAIT .1
BTFSS PORTB,0
CALL BUTTON_2
MOVLW B'11110111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,0
CALL BUTTON_3
MOVLW B'11101111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,0
CALL BUTTON_4
MOVLW B'11011111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,0
CALL BUTTON_5
MOVLW B'10111111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,0
CALL BUTTON_6
MOVLW B'01111111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,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
BTFSS PORTB,1
CALL BUTTON_8
MOVLW B'11111101'
MOVWF PORTD
WAIT .1
BTFSS PORTB,1
CALL BUTTON_9
MOVLW B'11111011'
MOVWF PORTD
WAIT .1
BTFSS PORTB,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
BTFSS PORTB,1
CALL BUTTON_PP
MOVLW B'11101111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,1
CALL USA_PARTER
MOVLW B'11011111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,1
CALL BUTTON_P1
MOVLW B'10111111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,1
CALL USA_ETAJ1
MOVLW B'01111111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,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
BTFSS PORTB,2
CALL USA_ETAJ2
MOVLW B'11111101'
MOVWF PORTD
WAIT .1
BTFSS PORTB,2
CALL BUTTON_P9
MOVLW B'11111011'
MOVWF PORTD
WAIT .1
BTFSS PORTB,2
CALL USA_ETAJ9
MOVLW B'11110111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,2
CALL BUTTON_P10
MOVLW B'11101111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,2
CALL USA_ETAJ10
MOVLW B'11011111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,2
CALL PARTER_
MOVLW B'10111111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,2
CALL PARTER_ETAJ1
MOVLW B'01111111'
MOVWF PORTD
WAIT .1
BTFSS PORTB,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
BTFSS PORTB,3
CALL ETAJ8_ETAJ9
MOVLW B'11111101'
MOVWF PORTD
WAIT .1
BTFSS PORTB,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
BTFSS STARE,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
BTFSS STARE,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
BTFSS STARE,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
BTFSS STARE,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
BTFSS STARE,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
BTFSS STARE,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
BTFSS STARE,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
BTFSS STARE,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
BTFSS STARE,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
BIBLIOGRAFIE
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Comanda Inteligenta a Ascensoarelor Utilizand Microcontroler (ID: 161452)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
