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/

Similar Posts