Aplicatie Wireless Poarta Garaj
LUCRARE DE LICENȚĂ
APLICAȚIE WIRELESS
POARTĂ GARAJ
Cuprins
Capitolul 1.Introducere
Capitolul 2. Prezentarea componentelor utilizate
2.1 Generalități
2.2 Microcontrolerul PIC18F2455 și PIC18F4455
2.3 Circuitul integrat ULN2003
2.4 Modulul Transmițător HM-T868
2.5 Modulul de recepție HM-R868
2.5 Motor pas cu pas M35SP-7N
2.5 Convertorul DC-DC MCP1640
Capitolul 3.Secheme electrice
3.1Generalități
3.2 Modulul pentru comanda motorului pas cu pas
3.3 Modulul de telecomandă
Capitolul4. Medii de dezvoltare
4.1 Mediul de dezvoltare MikroC
4.2 Pic kit 2
Capitolul 5.Software(cod +schema logică) Codec Manchester(transmisie recepție RF).
5.1 Codare si decodare Manchester
5.2 Schema logică
5.3 Software
Capitolul 1.Introducere
Sistemul de comandă la distanță presupune realizarea unei comunicații RF între două module electronice, primul modul este modulul de emisie (telecomanda), care poate emite pe frecvența de 868MHz două semnale rezultate din apăsarea a două butoane.
La apăsarea primului buton se realizează transmiterea uni cod de către microcontroler pe unul din pinii digitali către emițătorul RF care transmite codul ce va fii de recepționat cel de-al doilea modul wireless. Reciver-ul preia codul, îl transmite mai departe microcontrolerului de pe același modul și acesta în funcție de codul primit realizează comanda motorului pas cu pas în sensul corespunzător codului.Viteza de rotație este constantă pentru cele două sensuri de rotație, motiv pentru care în schema electronică se va folosi un singur potențiometru.
Doi senzori de proximitate vor întrerupe comanda motorului, în momentul în care s-a ajuns la punctul limită stabilit atât pentru un sens cât și pentru celălalt.Aceste acțiuni de întrerupere sunt realizabile din codul scris în limbajul de programare C mediul de programare fiind MikroC PRO .
Schema electronică si layoutul pentru cele două module au fost realizate în mediul de dezvoltare EAGLE.
Capitolul 2. Prezentarea componentelor utilizate
2.1 Generalități
Proiectarea celor două module presupune utilizarea unei liste de componente, bine alese pentru a obține rezultatul experimental dorit.
Primul modul denumit și modulul de emisie sau telecomandă, conține un bloc de alimentare care în interiorul său are un ridicător de tensiune MCP1624(voltage booster). Acest integrat este alimentat de către două bateri R3 care sunt înseriate astfel tensiunea de alimentare a circuitului ridicător va avea o valoare aproximativă de 3V,această tensiune fiind destul de potrivită pentru ca MCP1624 sa aducă la ieșirea circuitului o tensiune de 3,3V necesară la alimentarea microcontrolerului. Blocul de emisie are în componența sa emitățorul HM-T868 cu un rol de a transmite un cod la o frecvență de 868MHz către celălat modul electronic.
Microcontrolerul Pic18F2455 are rol de a general două cod-uri la apăsarea celor două butoane de comandă a acționării motorului pas cu pas.
Fig.1. Schema bloc a sistemului de comandă wireless
Cel de-al doilea modul electronic asigură recepția și comanda motorului pas cu pas.
Blocul de alimentare pentru modulul de comandă și control este asigurat de către regulatorul de tensiune LD1117V33. Acesta este alimentat la o tensiune de 12V ieșirea lui fiind de 3,3V.
Blocul de recepție conține receptorul HM-R868 care receptează semnalul transmis de la primul modul și îl transmite mai departe către microcontroler.
Microcontrolerul în funcție de codul primit va face acțiunea de comandă a motorului pas cu pas în sensul de rotație indicat în cod.
Blocul de comandă al motorului conține un driver specializat ULN2003 cu rol de a comanda bobinele motorului pas cu pas.
În tabelul 1 am enumerate lista de componente necesară la realizarea celor două module electronice.
Tabel1. Lista de componente utilizate
2.2 Microcontrolerul PIC18F2455 și PIC18F4455
Este un circuit integrat care incorporează in arhitectura sa internă componentele necesare formării unui micro-sistem de calcul dedicat:
– unitate centrală de prelucrare;
– memoria de program în care sunt scrise aplicațiile care sunt dezvoltate;
– memoria de date menită să păstreze variabilele aplicației, regiștrii, memoria stivă precum și setul de regiștrii cu funcții speciale;
-memoria nevolatilă (EEPROM);
-sistem de întreruperi care tratează întreruperile generate din interior cat și din exterior;
-contoare și circuite de temporizare;
-sisteme de intrare și ieșire, interferențe de comunicare cu mediul extern: SPI, I2C, UART.
Microcontrolerele de tip PIC au o arhitectutră RISC de tip Havard cu două magistrale , una destinată instrucțiunilor și cealaltă magistrală este destinată datelor. Setul de instrucțiuni este unul cât mai simplu.
O varianta optimă de microcontroller trebuie să satisfacă cerințele proiectului și din acest motiv îl vom alege pe cel care se incadrează în următoarele caracteristici:
-numărul de semnale de la intrare și ieșire necesar pentru aplicația dorită;
-dimensiunea memoriei necesară pentru a scrie codul aplicației;
-tipul și numărul perifericelor necesare pentru o realize comunicația cu mediul extern;
-viteza de procesare a instrucțiunilor;
-dimensiunea fizică a cipului cât și tipul de capsulă necesară pentru tipul aplicației dorite.
Principalele caracteristici ale microcontrolerului PIC18F2455 și PIC18F4455 utilizat în această aplicație:
-arhitectura de tip RISC performanța, cu doar 75 de instrucțiuni, care au un format fix de 14 biți, cu adresare directă , indirectă și relativă;
-Frecvență de lucru pană la 48MHz;
-memorie de program, Flash cu o capacitate maxima de 32K*8biti;
-memorie de date nevolatilă (EEPROM) de maxim 256*8 biti;
-memorie stivă de 8 poziții;
-14 surse de întrerupere;
-programabil pe o linie serială (pe 2 pini);
-contoare: 1 x (8 biți), 2 x (16 biți) ;
-PWM cu rezoluție pe 10 biți;
-convertor analog-numeric multicanal pe 10 biți;
-interfețe seriale:
-interfață sincronă – Synchronous Serial Port (SSP) cu SPI (Master mode) și I2C(Master/Slave);
-interfață asincronă – Universal Synchronous Asynchronous Receiver Transmitter (USART/SCI) cu detecție de adresă pe 9-biți;
-interfețe paralele – Parallel Slave Port (PSP) pe 8-biți.
Memoria program (FLASH)-pentru memorarea unui program scris.
Pentru că memoria ce este făcută in tehnologia FLASH poate fi programată și
ștearsă mai mult decât odată, această face microcontrolerul potrivit pentru
dezvoltarea de componentă.
EEPROM-memorie pentru date ce trebuiesc să fie salvate când nu mai este alimentare.
Este în mod uzual folosită pentru memorarea de date importante ce nu trebuie pierdute dacă sursa de alimentare se intrerupe dintr-o dată. De exemplu, o astfel de dată este o temperatură prestabilită în regulatoarele de temperatură. Dacă in timpul întreruperi alimentării această dată se pierde, va trebui să facem ajustarea încă o dată la revenirea alimentării. Astfel componenta noastră pierde în privința auto-menținerii.
RAM-memorie de date folosită de un program in timpul executării sale.
In RAM sunt memorate toate rezultatele intermediare sau datele temporare ce nu sunt cruciale la întreruperea sursei de alimentare.
Timer-ul liber este un registru de 8 biți in interiorul microcontrolerului
ce lucrează independent de program. La fiecare al patrulea impuls de ceas al
oscilatorului își incrementează 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 centrală de procesare are rolul unui element de conectivitate între celelalte blocuri ale microcontrolerului. Coordonează lucrul altor blocuri și execută programul circuitu Watch dog.
Încă un lucru ce necesită atenția noastră este funcționarea fără defecte a microcontrolerului in timpul funcționării. Să presupunem că urmare a unei anumite interferențe (ce adesea se întamplă in industrie) microcontrolerul nostru se oprește din executarea programului, sau și mai rău, începe să funcționeze incorect.
Bineințeles, când aceasta se întâmplă cu un calculator, îl resetăm pur și simplu și va continua să lucreze. Totuși, nu există buton de resetare pe care să-l apăsăm in 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 (free-run) unde programul nostru trebuie să scrie un zero ori de câte ori se execută corect. În caz că programul se "ințepenește", nu se va mai scrie zero, iar contorul se va reseta singur la atingerea 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.
PIC18F2455
TABLE 1-2: PIC18F2455/2550 PINOUT I/O DESCRIPTIONS
PIC18F4455
S-a spus deja că PIC18F2455 și PIC18F4455 are o arhitectură RISC. Acest termen este adeseori găsit în literatura despre calculatoare, și are nevoie să fie explicat aici mai in detaliu. Arhitectura Harvard este un concept mai nou decât von-Neumann. 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 este posibil un mare debit de date prin unitatea de procesare centrală, și bineințeles, o viteză mai mare de lucru. Separarea programului de memoria de date face posibil ca mai departe instrucțiunile să nu trebuiască să fie cuvinte de 8 biți. PIC18F2455 folosește 14 biți pentru instrucțiuni ceea ce permite ca toate instrucțiunile să fie instrucțiuni dintr-un singur cuvânt. Este de asemenea tipic pentru arhitectura Harvard să aibă mai puține instrucțiuni decat von-Newmann și să aibă instrucțiuni executate uzual într-un ciclu. Microcontrolerele cu arhitectură Harvard sunt de asemenea numite "microcontrolere RISC". RISC înseamnă Reduced Instruction Set Computer. Microcontrolerele cu arhitectură von-Newmann sunt numite "microcontrolere CISC". Titlul CISC înseamnă Complex Instruction Set Computer.
Pentru că PIC18F2455 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, PIC18F2455 ajunge la rezultate de 2:1 in compresia cod și 4:1 în viteză în comparație cu alte microcontrolere de 8 biți din clasa sa. Diferența vitezei de execuție a instrucțiunilor este dată și de faptul că microcontrolerele construite în arhitectură RISC au implementate intrucțiunile hardware.
2.3 Circuitul integrat ULN2003
Uln2003 este un driver care are în componența sa 7 tranzistoare darlington npn de tensiune și curent mare , diodele de clamp au un rol bine determinat in protecția la suprasarcină.
Atât în curent alternativ cât și în curent continuu, pentru obținerea
unei amplificări cât mai mari se conectează în cascadă două sau mai multe
etaje de amplificare. În curent alternativ cuplajul dintre etaje este de cele
mai multe ori capacitiv sau inductiv iar în curent continuu cuplajul este
direct.
În curent continuu, pentru obținerea unui factor de amplificare mai
mare se folosesc cu succes tranzistorii compuși. Pe lângă factorul de
amplificare ridicat, tranzistorii compuși au și o rezistență de intrare mai
mare decât un singur tranzistor. Cele mai utilizate combinații de tranzistori
pentru obținerea unui factor de amplificare mare în curent continuu sunt
combinația Darlington.
1.Capsula circuitului ULN2003
2.Schema electrică a fiecărei perechi de tranzistori
Carateristici
Tabel1. Caracteristicile electrice ale circuitului integrat
Fig3.tiv cuplajul dintre etaje este de cele
mai multe ori capacitiv sau inductiv iar în curent continuu cuplajul este
direct.
În curent continuu, pentru obținerea unui factor de amplificare mai
mare se folosesc cu succes tranzistorii compuși. Pe lângă factorul de
amplificare ridicat, tranzistorii compuși au și o rezistență de intrare mai
mare decât un singur tranzistor. Cele mai utilizate combinații de tranzistori
pentru obținerea unui factor de amplificare mare în curent continuu sunt
combinația Darlington.
1.Capsula circuitului ULN2003
2.Schema electrică a fiecărei perechi de tranzistori
Carateristici
Tabel1. Caracteristicile electrice ale circuitului integrat
Fig3. Parametrii caracteristici
2.Amplificarea curentului
Schema echivalentă a tranzistorului darlington
Factorul de amplificare al tranzistorului compus este:
(1)
Unde:
(2)
(3)
(4)
(5)
Prin înlocuirea relațiilor (2) și (5) in relația (1) se obține relația factorului de amplificare in current a tranzistorului Darlington:
(6)
2.4 Modulul Transmițător HM-T868
Este un modul de transmisie wireless care transmite informația pe care o primește de la microcontrolerul folosit, la frecvență de 868MHz.
Caracteristici:
-este un modul integrat, cu o arie restrânsă;
-are un consum redus de putere;
-folosește modulația FSK;
Fig1.Caracteristicile modulului
Fig2.Caracteristicile RF ale modulului
Modulația FSK(frequency shift keying)
Modulația este un procedeu prin care se modifică parametrii semnalului purtător pentru a transmite informația dorită folosind o altă bandă de frecvență decat cea implicită.
Modulația FSK este o modulație digitală in frecvență.
Modulația in frecvență constă in variația frecvenței instantanee a semnalului purtător ca urmare a variației semnalului modulator.
Avantajele acestui tip de modulație sunt:
-semnalul modulat este imun la interferențe cu zgomote de tip adaptiv și prin urmare transmisia sau recepția este mai clară;
-randamentul circuitelor electrice de generare sau de detectare a modulației este superior fata de cel al modulației în amplitudine, datorită faptului ca amplitudinea este menținută constantă.
2.5 Modulul de recepție HM-R868
Fig1.Receptorul HM-R868
Receptorul HM-R868 asigură recepția semnalului emis de către emitățorul HM-T868, acesta transmite mai departe codul primit, către microcontroler și acesta comanda sensul de rotație al motorului cu ajutorul unui driver specializat.
Fig.2. Caracteristicile modulului HM-R868
Fig.3. Caracteristicile RF ale modulului HM-R868
2.5 Motor pas cu pas M35SP-7N
Scopul principal al acționării masiniilor este antrenarea lanțurilor cinematice în așa fel încât la ieșirea fiecaruia da se obțină viteza impusă de cinematica generării suprafeței respecticve prin procesul adoptat. Procesul de producție impune motorului de acționare anumite condiții de lucru precum:
-pornirea;
-oprirea;
-inversarea sensului;
-rotatia,etc.
Pentru realizarea lor trebuie sa se execute asupra motorului de actionare comenzi corespunzatoare, acestea se fac prin intermediul unor legaturi convenabile intre motor si aparatele electrice folosite in acest scop.
1.Avantajele si dezavantajele folosirii motoarelor pas cu pas :
Avantaje :
– asigură univocitatea conversiei număr de impulsuri in deplasare și ca urmare pot fi
utilizate în circuit deschis (bucla deschisa, fara masurarea si reglarea automata a
pozitiei unghiulare);
-gamă largă a frecvențelor de comandă;
-precizie de poziționare și rezoluție mare;
-permit porniri, opriri, reversări fără pierderi de pași;
-memorează poziția;
-sunt compatibile cu comanda numerică.
Dezavantaje :
-unghi de pas, deci increment de rotație, de valoare fixă pentru un motor dat;
-viteză de rotație relativ scăzută;
-putere dezvoltată la arbore de valoare redusă;
-randament energetic scăzut;
2. Constructia si functionarea motoarelor pas cu pas :
Din punct de vedere al construcției circuitului magnetic sunt :
-motoare pas cu pas cu reluctanță variabilă (de tip reactiv);
-motoare pas cu pas cu magnet permanent (de tip activ);
-motoare pas cu pas hibride.
3.Marimi caracteristice ale motoarelor pas cu pas :
-Unghiul de pas (Up) este unghiul cu care se deplasează rotorul la aplicarea unui impuls de comandă.
-Frecvența maximă de start-stop în gol este frecvența maximă a impulsurilor de comandă, la care motorul poate porni, opri sau reversa fără pierderi de pași.
-Frecvența limită de pornire reprezintă frecvența maximă a impulsurilor de comandă, cu care
-Motorul pas cu pas poate porni, fără pierderi de pași, pentru un cuplu rezistent și un moment de inerție date.
-Cuplul limită de pornire reprezintă cuplul rezistent maxim la arbore, cu care MPP poate porni, la o frecvență si un moment de inerție date, fără pierderi de pași.
Caracteristica limită de pornire definește domeniul cuplu-frecvență de comandă limită, în care motorul pas cu pas poate poni fără pierderi de pași.
-Frecvența maximă de mers în gol este frecvența maximă a impulsurilor de comandă pe care o poate urmări motorul, fără pierderea sincronismului.
-Frecvența limită de mers reprezintă frecvența maximă cu care poate funcționa un MPP,
pentru un cuplu rezistent si un moment de inerție date.
-Cuplul limită de mers reprezintă cuplul rezistent maxim, cu care poate fi încărcat un MPP pentru un moment de inerție dat și o frecvență de comandă cunoscută.
-Caracteristica de mers definește domeniul cuplu limită de mers-frecvență limită de mers în care MPP poate funcționa în sincronism, fără pierderi de pasi.
-Viteza unghiulară (w) poate fi calculată ca produs dintre unghiul de pas si frecvența de
Comandă.
-Puterea la arbore este puterea utilă la arborele motorului, corespunzătoare punctului de
funcționare de pe caracteristica de mers, punct caracterizat de cuplul limită de mers și de
frecvența maximă de mers.
-Cuplul de menținere este egal cu cuplul rezistent maxim, care poate fi aplicat la arborele
motorului cu fazele nealimentate, fără ca să provoace rotirea continuă a rotorului.
Fig1.Motor pas cu pas unipolar
M35SP-7N este un motor de current continuu, un motor pas cu pas, care realizează conversia informațiilor numerice in lucru mechanic pe baza unui consum de energie.
La comandarea rotorului cu ajutorul unui impuls, acesta execută un pas unghiular apoi se oprește până la sosirea unui nou impuls. Are capacitatea de a reversa sensul de rotație al rotorului.
Motoarele pas cu pas unipolare folosesc o priză mediană legată la alimentare. Inversarea curentului se obține prin legarea la masă succesivă a terminalelor externe ale înfășurării.
Fig.2. Inversarea curentului în motoarele unipolare
Fig.3. Secvențe digitale pentru comanda motorului
Un pas înseamnă parcurgerea tuturor fazelor.
2.5 Convertorul DC-DC MCP1640
Circuitul integrat MCP1640 este un convertor de tensiune continuă de tip step-up. Rolul lui este de a alimenta modulul telecomandă respectiv microcontrolerul 18F2455 cu tensiunea de 3,3V. Acest circuit este alimentat de 2 baterii R3 asigurând un consum de 100 mA suficient cât să poată alimenta microcontrolerul si modulul RF de transmisie. Ca și caracteristici ale circuitului amintim :
– Până la 800 mA consum de vârf :
– I ieșire > 100 mA la 1.2V VIN, 3.3V VOUT
– I ieșire > 350 mA la 2.4V VIN, 3.3V VOUT
– I ieșire > 350 mA la 3.3V VIN, 5.0V VOUT
-Tensiune intrare de start minimă: 0.65V, 3.3V VOUT la 1 mA
-Tensiune intrare operare minimă: 0.35V, la 3.3VOUT @ 1 mA
-Plaja de ajustare a tensiunii de ieșire : 2.0V to 5.5V
-Tensiunea de intrare maxim admisă ≤ VOUT < 5.5V
– Frecvența PWM: 500 kHz
– Curent de consum in gol 19 μA
– Compensare internă
– Circuit de limitare în caz de consum mai mare sau scurt circuit
– Selectabil, controlabil din exterior:
– Curent de oprire (în toate stările) < 1 μA
– zgomot redus
– Protecție temperatură
În figura de mai jos prezentăm schema tipică pentru a ajunge la o tensiune de 3,3V.
Ecuația de calcul a tensiunii de ieșire este
Rsus = Rjos ( – 1)
Capitolul 3.Secheme electrice
3.1Generalități
Realizarea celor două module electronice la nivel de schemă electrica cât și la nivel de layout a fost posibilă cu ajutorul mediului de dezvoltare Eagle.
Eagle este un program care s-a remarcat la vremea lui prin anumite facilității care îmbinau caractersiticile programelor comerciale, puternice, cu a celor programe cu licență gratis. E unul dintre cele trei programe de realizarea cablajelor imprimate cu care lucrez și pe care îl apreciez deși are:
– un meniu de comenzi cu mai multe dezavantaje decat avantaje (exemplu: utilizarea comenzii "Smash" sau mutarea unui grup de componente etc). O parte din comenzi nu prea sunt concurente cu comenzile deja generice care se folosesc in programe CAD / CAE cu renume, dar după ceva exerciții, acest mic inconvenient se poate elimina;
– într-adevăr, imposibilitatea redimensionării pad-urilor unor anumite componente, o operație destul de anevoioasă care se poate suprima prin utilizarea unor găuri de trecere. Dacă în proiectare facem o modificare a footprint-ului sau a conexiunilor componenta – footprint, aceste modificări pot influența, in anumite circumstanțe, și conexiunile altor componente din librărie.
Un alt exemplu, este faptul ca, să spunem că alegem să trasăm un traseu de lătime 1mm, iar după ce facem asta ne răzgândim ca ar fi fost mai bine dacă era de 1.27mm. Procesul de schimbare a lățimii întregului traseu devine o aventură, chiar și ștergerea lui, lucru care, spre exemplu in programul PADS se putea face foarte simplu.
3.2 Modulul pentru comanda motorului pas cu pas
Schema electrică a modulului de comandă a motorului pas cu pas a fost realizată cu ajutorul mediului de dezvoltare Eagle 6.1.
Microcontrolerul Pic18F4455 este programat cu ajutorul kitului PicKit2 prin intermediul conectorului X1, acesta are o secvență de cod care permite comanda motorului pas cu pas in sensul dorit.
Driverul de comandă al motorului ULN2003 este conectat direct la bobinele motorului prin intermediul conectorului X2
Conectorul X3 este utilizat pentru conectarea modulului de recepție HM-T868, acesta comunică pe portul al microcontrolerului codul primit de la emițător.
Potențiometrul R4 are un rol de a comanda viteza sensului de rotație, deoarece se dorește comanda in cele doua sensuri cu o viteza constanta si egala, am folosit un singur potențiometru.
Ca orice sistem sincron, microcontrolerul dispune fie de un oscilator extern cu cuarț, fie de un cristal cu cuarț asociat unui oscilator intern, fie de varianta mai ieftină dar mai puțin precisă – utilizarea unui rezonator ceramic.
Acest model include un oscilator RC intern (economisind deci 1-2 pini din capsulă, aspect deosebit de important ), dar la care frecvență de operare variază pronunțat cu tensiunea de alimentare, temperatură, abaterile tehnologice, valoarea nominală a R și C. Asemenea aplicații sunt recomandate doar acolo unde o variație serioasă a frecvenței de operare nu deranjează performanțele.
Frecvențele de tact tipice variază în prezent între 4 și 48 MHz. Aceste frecvente depind de tactul oscilatorului fie el extern sau intern multiplicarea acestei frecvențe fiind strict dependentă de valoarea frecvenței oscilatorului. Spre deosebire de PC-uri, această frecvență de operare nu oferă măsura absolută a capacității de procesare a controlerului, exprimată în MIPS (millions of instructions per second), deoarece numărul de perioade necesar executării unei instrucțiuni variază de la o familie de controlere la alta, iar unele instrucțiuni necesită mai multe cicluri decât altele. O exprimare realistă este MIPS/MHz, care indică câte instrucțiuni se execută la fiecare MHz al tactului. S1 este folosit pentru resetarea microcontrolerului. Semnalul de tact extern provine de la oscilatorul Y1 și are rolul de a activa modulul timer din microcontroler prin cei doi pini de intrare OSC1 și OSC2 contorul intern este incrementat conform semnalului extern.
Stabilirea sensului de rotație a motorului pas cu pas este realizat software astfel la recepția semnalului RF se va determina sensul de rotație. Tensiunea de alimentare 3,3 V asigură o bună funcționare a modulului RF Rx de recepție ea având o plajă a tensiunii de alimentare între 2,8 V și 5V. Pornirea modulului RF se realizează cu ajutorul microcontrolerului pinul de pornire fiind RB0 acesta va asigură un semnal 1 logic pentru pinul enable a modulului RF Rx in momentul când acesta va trebui să pornească.
Funcționarea microcontrolerului in parametrii buni se poate realiza prin alimentarea la 3,3V fără a fii afectată funcționarea lui conform datasheet-ului.
Fig.1. Scema electrică a modulului de comandă
În figura 2 se pot vedea rutăriile traseelor între componentele aranjate cât mai sugestiv pentru a ușura modul de conectare al traseelor si pentru a folosi un număr cât mai redus de vias-uri, rutarea s-a făcut pe layerul de bottom, deoarece am folosit componente THD, și acest lucru simplifică mult procesul de realizare al PCB-ului.
Fig.2. Layout-ul schemei electrice
3.3 Modulul de telecomandă
Modulul de telecomandă contine două push button-uri care au un rol de a transmite in urma apasării fiecăruia dintre ele pe rând, un cod de catre microcontroler pe portul RC6 către modulul de radio frecvență HM-T868 care se conectează pe pcb prin intermediul conectorului denumit emițător.
Acest modul radio transmite pe o frecventa de 868MHz codul primit de la microcontroler, în urma apasării butonului corespunzător.
Modulul de comandă este echipat cu un modul de radio frecvență care realizează receptia codului transmis de catre transmițător, si transmiterea lui mai departe catre microcontrolerul care realizează comanda sensului de rotatie cu ajutorul uni driver specializat.
Conectorul X1 are rol de a servi in programarea microcontrolerului cu algoritmul de calcul necesar realizarii comunicatiei seriale manchester.
Fig.1. Schema electrică a modulului de transmisie
În figura doi este prezentată realizarea părții de rutare a conexiunilor electrice.
Rutarea traseelor s-a făcut pe top layer, deoarece circuitul integrat ridicător de tensiune și bobina de feedback sunt componente SMD , iar restul componentelor sunt THD. Componentele THD vor fi montate pe partea de bottom iar cele SMD pe partea de top .
Fig.2. Layout-ul modulului de transmisie
Ambele Pcb-uri au fost realizate prin metoda fotografică de transfer,ea este una destul de practică și ușor de realizat.
Capitolul4. Medii de dezvoltare
4.1 Mediul de dezvoltare MikroC
Mediul de dezvotare MikroC este un mediu ce se împarte in 2 aplicații utile. Prima aplicație numita MikroC Pro for Pic v5.6.1 servește drept compilator de cod C, ce-a de a-II-a aplicație microprog for C v2.20 servind la programarea microcontrolerelor de tip Pic realizate de către Microchip.
Prima aplicație MikroC Pro for Pic este o aplicație cu o interfață ușor de abordat
(user friendly) datorită faptului ca oferă prin uneltele și librăriile sale posibilitatea de
a aborda proiecte simple dar si proiecte complexe bazate pe tehnologia embeded oferită de Microchip prin microcontrolerele de tip Pic, această aplicație fiind una din cele mai des folosite în lume pentru programarea acestor tipuri de microcontrolere.
În meniul principal avem acces la toate opțiunile acestui soft forma sub următoare : File, Edit, View ,Project, Build, Run , Tools, Help.
Pentru a începe să scriem cod tot ce trebuie să facem este să selectăm din meniul principal opțiunea File/New unit. Această opțiune ne va permite sa scriem cod dar nu și
să îl compilăm deoarece fiecare fișier cu terminația .c trebuie sa fie legat de un fișier tip proiect. Pentru a începe un nou proiect tot din meniul principal putem selecta opțiunea File/new project. După crearea noului proiect trebuie specificat din fereastra project settings ce tip de microcontroller este folosit in proiect cât și frecvența de tact pe care acesta o va avea in momentul derulării programului,astfel programul va putea compila fără erori . Această fereastră poate fii accesată din meniul principal de la view/ project manager. În figura următoare este reprezentată fereastra project settings.
Fig.1 Project Settings
Manierea in care editorul tratează codul este cât se poate de utila acest editor având
și o funcție de corecție în sintaxa, aceasta opțiune poate fii regăsită in meniul principal
la Tools/ Options.
Ca și utilitate putem remarca varietatea bogata de librării ce pot indeplinii atât funcții hardware cât si funcții software. Aceste librării pot fi accesate din meniul principal selectând opțiunea view/library manager. Bifând librăriile aferente , editorul va ține seama de librăriile selectate astfel acele librării vor fi incluse in cod atunci când o rutină din cod face referire la acest lucru. Figura următoare reprezintă fereastra „Library manager”
Fig.2 Library Manager
Pentru a putea compila codul trebuie să folosim unealta build .
În cazul în care dorim să și programăm microcontrolerul există unealta build and program aceasta din urmă deschizând aplicația MikroProg.
Pentru verificarea codului putem folosii fereastra messages , în care la compilarea codului putem observa dacă codul a fost scris corect și dacă nu atunci aici putem afla la ce linie de cod există o eroare menționând faptul ca exista lipsă sintaxă sau punctuație în cod. În figura următoare putem observa acest lucru.
Fig.4 Messages
Pentru a putea urmării pas cu pas derularea codului scris, MikroC vine cu o utilitate în abordarea acestui lucru , soluția poate derula codul pas cu pas atât pe hardware-ul aferent (adică pe mcu) cât si prin simulare software, acest lucru este posibil dacă prin selecția opțiunilor aferente din device settings și prin selectarea din meniul principal a opțiuni view/debug/ watch window . În figura următoare este reprezentată fereastra watch window.
Fig.5 watch window
Pentru programare folosim aplicația MikroProg , accesul la acest program poate fi făcut chiar la compilare folosind unealta build and run fie selectând icoana acestuia din meniul start sau de pe desktop , în cazul din urmă pentru a programa microcontrolerul trebuie sa selectăm din meniul programului fișierul hex generat la compilare.
Această aplicație permite atât monitorizarea parametrilor microcontrolerului (mărime memorie flash, mărime memorie eeprom , mărime memorie ram, pini i/o, număr de adc-uri folsite, număr pini, frecventă oscilator intern, frecventă oscilator extern, tensiuni folosite , forma capsulei) cât și ștergerea, scrierea, citirea, verificarea , resetarea, și formatarea acestuia.
În urmatoarea figură este reprezentată aplicația MikroProg
Fig.6 Aplicația MikroProg
4.2 Pic kit 2
PICkit 2 este o platformă de dezvoltare cu ajutorul căreia se pot programa și depana diferite circuite ce folosesc microcontrolere de tip PIC produse de către firma Mikrochip.
PICkit 2 a fost introdus în mai 2005 si a înlocuit fosta platformă de dezvoltate PICkit 1.
Diferențele între cele 2 platforme sunt evidențiate prin faptul că platforma PICkit2 are o unitate programator/depanator separată ce se conectează la placa , iar PICkit 1 are programatorul integrat pe placuta. Diferența totuși o face posibilitatea ca programatorul folosit să poată fii folosit si pentru alte aplicații customizate, diferite de platforma de integrare , acest lucru este posibil cu o interfață ICSP(in circuit serial programer). PICkit2 folosește un chip PIC18F2550 cu o interfață USB ce poate avea lățime de bandă maximă la transferul de date. Firmware-ul PICkit 2 permite utilizatorului sa depaneze majoritatea gamelor de microcontrolere pe 8 și/sau 16 biți produse de firma Mikrochip.
PICkit2 este o platformă open source atât în cea ce privește partea hardware cât și in cea ce privește partea software , toate fișierele ce privesc platforma de dezvoltare precum schema electrică , cod sursă firmware (limbaj C) cât și cod sursă aplicații (limbaj C#) , terțele părți și utilizatorii finali având posibilitatea modificării ulterioare ex. Platforma GNU/Linux a PICkit 2.
Programatorul platformei PICkit 2 este arătat in figura 1.
Legenda :
1. Led-uri status 2. Buton 3.Conexiune lan 4.Port USB 5.semn pin 6.Conector programare
Fig.1
Conexiuni
Portul USB este un mini-B USB conector. Acesta se conectează la PC prin intermediul cablului din dotare.
Status Led-uri
Led-urile indică statusul platformei PICkit 2.
1. Power (verde) PICkit 2 se alimentează prin intermediul conectorului usb.
2. Target (galben) PICkit 2 alimentează un alt dispozitiv.
3. Busy (roșu) PICkit 2 este ocupat
1.3 Buton
Butonul va inițializa funcția scrie dispozitiv . Atunci când programatorul scrie, acest lucru este verificat pe meniul aplicației programatorului PICkit 2 (vezi in fig.1 eticheta 2.)
Butonul mai este folosit sa pună sistemul de operare firmware a PICkit 2 în modul bootloader.
1.3.4 Conector de programare
Conectorul programatorului este un cap cu 6 pini ce se conectează la dispozitivul ce va fii programat.
În următoarea figură prezentăm modulul de dezvoltare a Pickit 2
Fig.2 Modul de dezvoltare Pickit 2
Capitolul 5.Software(cod +schema logică) Codec Manchester(transmisie recepție RF).
5.1 Codare si decodare Manchester
Codarea si decodarea de tip Manchester este una simplă si ușor de implementat cu ajutorul librăriilor MikroC.
În Help-ul oferit de către acest software putem găsii un exemplu in care experimental se folosesc 2 module echipate cu cate un PIC16F887. Unul din module este folosit pentru transmiterea unui șir de caractere , iar cel de-al 2-lea este folosit pentru recepționarea acestuia și afișarea șirului de caractere recepționat pe ecran.
În cele din urmă voi descrie modul de codare și modul de decodare în protocolul de transmisie Manchester.
Codul Manchester este un cod în care datele si semnalul de tact se transmit pe aceeași cale , cele două semnale mixate formând un semnal de date ce este auto-sincron. Fiecare bit codat conține o tranziție în mijlocul perioadei unui bit , direcția tranziției determină faptul dacă bitul este 0 sau dacă bitul este 1.Prima jumătate a semnalului este complementul valorii reale a bitului , a doua jumătate reprezentând valoarea reală a bitului . în următoarea figură este reprezentat acest lucru.
Fig.1. Codare Manchester
Pentru transmiterea datelor protocolul Manchester va urma următoarele etape : 1 Transmiterea unui byte de start . 2 transmiterea șirului de caractere 3. Transmiterea unui byte de sfârșit .
Prima etapă reprezentată prin transmiterea byte-ului de start servește ca scop in determinarea începutului informației utile ce este transmisă . La recepționarea semnalului se va ține cont de byte-ul de start iar ca și condiție el trebuie sa coincidă cu byte-ul de start transmis, altfel se poate recunoaște ca există o eroare , iar în acest caz transmisiunea va fi reluată.
Ce-a de-a doua etapa nu reprezintă altceva decat informația utila ce trebuie recepționată .
A treia etapa reprezintă byte-ul de sfârșit astfel la recepție se poate recunoaște secvența de stop a transmisiunii si respectiv se poate extrage șirul de caractere ce se află într-e secvența de start și cea de stop. Secvența este reprezentată de un byte ,iar la recepționare el trebuie sa coincidă cu byte-ul de stop ce a fost transmis, altfel înseamnă ca informația a fost recepționată eronat și se reia ciclul de recepționare. În figura următoare se va reprezenta acest lucru.
La recepție biți ce au fost codați in cod Manchester la transmisie, vor fi preluați din informația codata de către algoritmul de decodare astfel : prima jumătate a semnalului este complementul valorii reale a bitului , a doua jumătate reprezentând valoarea reala a bitului. In figura 2 este reprezentat acest lucru.
Fig 3. Decodare Manchester
5.2 Schema logică
Fig 1. Schema logica telecomandă
Fig 1. Schema comandă motor
5.3 Software
Modul telecomandă
sbit MANRXPIN at RC6_bit; // stabilire pini receptie
sbit MANRXPIN_Direction at TRISC6_bit; // stabilire pini receptie
sbit MANTXPIN at RC6_bit; // stabilire pini transmisie
sbit MANTXPIN_Direction at TRISC6_bit; // stabilire pini transmisie
char error, ErrorCount, temp, poarta; // variabile modul receptieconnections
char index, character; // variabile transmisie caracter
char s1[] = "o"; // variabila tip sir de caractere transmisa
void main() {
bit b1 , b2 ;
ADCON1 = 7 ; //ADC oprit
ADCON0 = 7 ; //ADC oprit
TRISA = 0x02;
PORTA = 0x02;
Man_Send_Init();
while (1) { // ciclu infinit
b1 = PORTA.F0; // citire valoare buton 1 /dreapta
b2 = PORTA.F1; // citire valoare buton 2 /stanga
if (b1==1){
char s1[] ="d";
}
else {
char s1[] = "o";
}
if (b2==1) {
char s1[] = "s";
}
else {
char s1[] = "o";
}
Man_Send(0x0B); // trinitem byte de start
Delay_ms(100); // asteptam putin
character = s1[0]; // luam primul caracter din sir
index = 0; // initializam variabila index
while (character) { // sirul se termina cu 0
Man_Send(character); // trimitem caracter
Delay_ms(90); // asteptam putin
index++; // Incrementam index
character = s1[index]; // luam urmatorul caracter din sir
}
Man_Send(0x0E); // trimitem byte de sfarsit
Delay_ms(1000); // asteptam putin
}
}
Modul comandă motor
#include <built_in.h>
unsigned int pot,speed;
void VDelay_us(unsigned time_us){ //functie temporizare in microsecunde
unsigned n_cyc;
n_cyc = Clock_MHz()>>2;
n_cyc *= time_us>>4;
while (n_cyc–) {
asm nop;
asm nop;
}
}
sbit MANRXPIN at RB1_bit; // stabilire pini receptie
sbit MANRXPIN_Direction at TRISB1_bit; // stabilire pini receptie
sbit MANTXPIN at RB1_bit; // stabilire pini transmisie
sbit MANTXPIN_Direction at TRISB1_bit; // stabilire pini transmisie
char error, ErrorCount, temp, poarta; // variabile modul receptie
void Vdelay_us(unsigned time_in_us);
void main()
{
bit b1, b2 ; // biti verificare directie
int i, j; // variabila incrementare
b1=0; // bit 1
b2=0; // bit 2
i=300; // variabila incrementare adusa la 300
j=0; // variabila incrementare adusa la 0
TRISB = 0x02; // port B stabilire ca si intrare digitala
PORTB = 0x02; // port B stabilire ca si intrare digitala
TRISC= 0; // port C stabilire ca si iesire digitala
PORTC = 0; // port C stabilire ca si iesire digitala
TRISD = 0; // port D stabilire ca si iesire digitala
PORTD = 0; // port D stabilire ca si iesire digitala
ADCON1 = 0x80; // adc pornit pe portul A
TRISA = 0x02; // port A stabilire ca si intrare
while(1) { // loop infinit
while (1) { // asteapta byte-ul de start
Man_Receive_Init(); // Initializeaza receptorul
temp = Man_Receive(&error); // incercare receptionare byte
if (temp == 0x0B) // byte de "start"
break; // avem secventa de start
if (error) // iesim din loop
break;
}
do
{
temp = Man_Receive(&error); // incercam sa receptionam byte
if (error) { // If "cazul unei erori"
ErrorCount++; // numarator de erori
if (ErrorCount > 20) { // cazul unor erori multiple
temp = Man_Synchro(); // sincronizare din nou
//Man_Receive_Init(); // Alternativa, incearca sa initializeze receptorul
ErrorCount = 0; // Resetare numarator erori
}
}
else { // Nu exista erori
if (temp != 0x0E) // daca "byte-ul de sfarsit a ajuns"
poarta = temp; //citire valoare caracter
}
Delay_ms(25); // temporizare in milisecunde
}
while (temp != 0x0E) ;
pot = ADC_read(0); // citeste o valoarea potentiometrului cuprinsa intre 0 si 1024
speed = pot*3; // se stabileste factorul de umplere a fazelor legate la motor
if ((poarta ="d") && (i = 300)) {
b1 = 1;
}
else if (i=0) {
b1 = 0;
}
if ((poarta ="s") && (j = 300)) {
b2 = 1;
}
else if (j=0) {
b2 = 0;
}
if ( ( b1 == 0 ) && ( poarta = "d" ) ) { // motorul se roteste inspre dreapta
for (i=0;i<300;i++) {
PORTC.RC2=1 ; PORTD.RD5=1; PORTD.RD6=0; PORTD.RD7=0;
Vdelay_us(speed);
PORTC.RC2=0 ; PORTD.RD5=1; PORTD.RD6=1; PORTD.RD7=0;
Vdelay_us(speed);
PORTC.RC2=0 ; PORTD.RD5=0; PORTD.RD6=1; PORTD.RD7=1;
Vdelay_us(speed); // temporizare in micro secunde
PORTC.RC2=1 ; PORTD.RD5=0; PORTD.RD6=0; PORTD.RD7=1;
}
}
else {
PORTC.RC2=0 ; PORTD.RD5=0; PORTD.RD6=0; PORTD.RD7=0; // se opreste motorul
}
if ( ( b2 == 0 ) && ( temp = "s" )) { // motorul se roteste inspre stanga
for (j=0;i<300;i++) {
Vdelay_us(speed);
PORTC.RC2=1 ; PORTD.RD5=0; PORTD.RD6=0; PORTD.RD7=1;
Vdelay_us(speed);
PORTC.RC2=0 ; PORTD.RD5=0; PORTD.RD6=1; PORTD.RD7=1;
Vdelay_us(speed);
PORTC.RC2=0 ; PORTD.RD5=1; PORTD.RD6=1; PORTD.RD7=0;
Vdelay_us(speed);
PORTC.RC2=1 ; PORTD.RD5=1; PORTD.RD6=0; PORTD.RD7=0;
}
}
else {
PORTC.RC2=0 ; PORTD.RD5=0; PORTD.RD6=0; PORTD.RD7=0; // se opreste motorul
}
}
}
Bibliografie
Datasheet Pic18f4455/18f2455:
http://www.microchip.com/wwwproducts/Devices.aspx?product=PIC18F4455
Datasheet ULN2003A:
http://www.ti.com/lit/ds/symlink/uln2003a.pdf
Datasheet ULN2003A:
http://www.ti.com/lit/ds/symlink/uln2003a.pdf
Datasheet MCP1640:
http://www.microchip.com/wwwproducts/Devices.aspx?product=MCP1640
Datasheet LD1117V33:
http://www.st.com/web/en/resource/technical/document/datasheet/CD00000544.pdf
Datasheet M35SP-7T:
http://vinvin.tf/projects/M35SP-7T.pdf
Datasheet HM-T868:
http://www.hoperf.com/upload/rf_app/HM-T.pdf
Datasheet HM-r868:
http://www.hoperf.com/upload/rf_app/HM-R.pdf
Manual PICkit:
http://ww1.microchip.com/downloads/en/DeviceDoc/51553E.pdf
Manual mikroc :
http://www.mikroe.com/pdf/mikroc/mikroc_manual.pdf
Microstepping ,Full step & Half step:
http://www.nmbtc.com/step-motors/engineering/full-half-and-microstepping.html
Eagle tutorial:
http://www.cadsoft.de/wp-content/uploads/2011/05/V6_tutorial_en.pdf
Manchester data encoding for radio communications:
http://www.maximintegrated.com/en/app-notes/index.mvp/id/3435
Microcontroller Architecture —PIC18F Family:
http://www.sonoma.edu/users/f/farahman/sonoma/courses/es310/lectures/chapter2_.pdf
Digital modulation: Frequency shift keying(FSK,MSK): http://www.cdt21.com/resources/Modulation/modulation_FSK.asp
Stepper motor code:
http://www.mikroe.com/forum/viewtopic.php?t=20429
Adjustable Voltage Step-up (0.7-5.5V to 2.7-5.5V):
http://www.instructables.com/id/Adjustable-Voltage-Step-up-07-55V-to-27-55V/step1/Specifications/
Discharge tests of AA Batteries, Alkaline and NiMHcations:
http://www.powerstream.com/AA-tests.htm
Cheap and Easy Toner Transfer for PCB Making
http://www.instructables.com/id/Cheap-and-Easy-Toner-Transfer-for-PCB-Making/
Bibliografie
Datasheet Pic18f4455/18f2455:
http://www.microchip.com/wwwproducts/Devices.aspx?product=PIC18F4455
Datasheet ULN2003A:
http://www.ti.com/lit/ds/symlink/uln2003a.pdf
Datasheet ULN2003A:
http://www.ti.com/lit/ds/symlink/uln2003a.pdf
Datasheet MCP1640:
http://www.microchip.com/wwwproducts/Devices.aspx?product=MCP1640
Datasheet LD1117V33:
http://www.st.com/web/en/resource/technical/document/datasheet/CD00000544.pdf
Datasheet M35SP-7T:
http://vinvin.tf/projects/M35SP-7T.pdf
Datasheet HM-T868:
http://www.hoperf.com/upload/rf_app/HM-T.pdf
Datasheet HM-r868:
http://www.hoperf.com/upload/rf_app/HM-R.pdf
Manual PICkit:
http://ww1.microchip.com/downloads/en/DeviceDoc/51553E.pdf
Manual mikroc :
http://www.mikroe.com/pdf/mikroc/mikroc_manual.pdf
Microstepping ,Full step & Half step:
http://www.nmbtc.com/step-motors/engineering/full-half-and-microstepping.html
Eagle tutorial:
http://www.cadsoft.de/wp-content/uploads/2011/05/V6_tutorial_en.pdf
Manchester data encoding for radio communications:
http://www.maximintegrated.com/en/app-notes/index.mvp/id/3435
Microcontroller Architecture —PIC18F Family:
http://www.sonoma.edu/users/f/farahman/sonoma/courses/es310/lectures/chapter2_.pdf
Digital modulation: Frequency shift keying(FSK,MSK): http://www.cdt21.com/resources/Modulation/modulation_FSK.asp
Stepper motor code:
http://www.mikroe.com/forum/viewtopic.php?t=20429
Adjustable Voltage Step-up (0.7-5.5V to 2.7-5.5V):
http://www.instructables.com/id/Adjustable-Voltage-Step-up-07-55V-to-27-55V/step1/Specifications/
Discharge tests of AA Batteries, Alkaline and NiMHcations:
http://www.powerstream.com/AA-tests.htm
Cheap and Easy Toner Transfer for PCB Making
http://www.instructables.com/id/Cheap-and-Easy-Toner-Transfer-for-PCB-Making/
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: Aplicatie Wireless Poarta Garaj (ID: 149507)
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.
