Controlul Dronelor cu Arduplilotmega

Controlul Dronelor cu ArduplilotMega

Cuprins

Capitolul I introducere

1.1 Ce este o drona

1.2 Istoric

1.3 Propilsiasi manevrarea Multicopterelor

1.4 Utilizare

Capitolul II Componente

2.1 Motorul de current continuu fara perii

2.2 Controlul turatiei electronic (ESC

2.3 Functionare

2.4 Clasificari

2.5 Aplicatii ale regulatoarelor

Capitolul III Analiza variantelor de controller

3.1 Controlerul Naza M

3.2Controlerul ArduPilotMega – APM

3.3Controlerul Multiwii Crius SE 2.5

3.4 Componente obtionale

Capitolul IV Brevier de calcul

4.1Dinamica modelului

4.2 Cinematica

4.3 Matematica motoarelor

4.4 Forțe

4.5 Ecuațiile de mișcare

Capitolul V Constructia unui Quadcopter

5.1 Cadrul

5.2 Alegerea motorului

5.3 ESC utilizat

5.4 IMU- Unitatea de Masura Initiala

5.5 Magnetometrul

5.6 GPS utilizat

Capitolul VI Inovatii in domeniu

5.1 Prima Drona pe hydrogen a lumii

Bibliografie

I Introducere

1.1 Ce este o drona

Aeronava fără pilot (unmanned aerial vehicle – UAV), denumită și dronă, este un aparat de zbor căruia îi lipsește pilotul uman, fiind ghidat fie de către un pilot automat digital aflat la bordul său, fie prin telecomandă de la un centru de control de la sol sau care este situat în altă aeronavă, pilotată. Dronele sunt folosite în domeniul militar, rar în domeniul civil. Ele au la bord o sarcină utilă. Dronele militare sunt folosite pentru recunoaștere, supraveghere, spionaj sau în scop combativ. În funcție de scop ele au ca sarcină utilă aparatură de recunoaștere sau/și arme.

1.2 Istoric

Timpuriu in istoria zborului,quartocopterul(denumit si quadrotor) a fost vazut ca si una din solutiile posibile pentru rezolvarea problemelor de zbor vertical; probleme de control induse de cuplu (ca și problemele de eficiență provenite de la rotorul coadă, care nu genereaza portanta utila) pot fi eliminate prin contra-rotatie si lamele relative scurte ,care sunt mult mai simplu de construit. Un număr de modele au apărut în anii 1920 și 1930.Aceste vehicule au fost printer primele care au avut success la tecolare vertical si aterizare. Cu toate acestea prototipurile timpurii aveau performante slabe,prototipurile urmatoare necesitau prea multa sarcina de lucru pilot datorita stabilitatii anevoioase si controlului limitat.

Mai recent au devenit populare in cercetarea vehiculelor aeriene fara pilot. Aceste vehicule utilizeaza un sistem de control electronic și senzori electronici pentru stabilizarea aeronavei. Cu dimensiunile lor reduse și manevrabilitate agil,aceste quadrocoptere pot zbura atat in interior cat si in exterior.

Un elicopter cu patru rotoare proiectat de Louis Breguet. Aceasta a fost primul avion cu aripa rotativa,se ridica singur de la sol la cativa metrii, iar aparatul era asigurat prin corzi. În 1908 a fost raportat ca fiind zburat "de mai multe ori, cu detaliile sumare.

Etienne Oehmichen a experimentat cu modele multirotor in anii 1920.Printre cele sase modele a incercat,elicopterul Nr. 2 al al lui care avea patru rotoare si opt elicii, toate conduse de un singur motor. Oehmichen Nr.2 folosea un cadru de otel,cu rotoare cu doua pale la capetii bratelor. Unghiul dintre aceste lame ar putea fi variat prin colmatare.Cinci dintre elicii se roteau in plan orizontal,stabilizand aparatul lateral.Inca o elice a fost montata pe nasul aeromodelului pentru directive.Perechia de elicii ramase arau folosite pentru propulsarea inainte. Aeronava a prezentat un grad considerabil de stabilitate și controlul pentru timpul său și a făcut mai mult de o mie de zboruri de încercare în mijlocul anilor 1920. Prin 1923 a fost în măsură să rămână în aer pentru câteva minute la un moment dat, iar pe 14 aprilie 1924 a stabilit recordul la distanță primul vreodata pentru elicoptere 360m. A demonstrat capacitatea de a finaliza un curs circular și mai târziu,a finalizat primul kilometru de zbor inchis.

Dr. George de Bothezat si Ivan Jerome au dezvoltat o aeronava cu sase rotoare intr-o structura in forma X. Două propulsoare mici cu pas variabil au fost folosite pentru împingere și controlul girație. Vehiculul (Fig.1) folosiea pitch control colectiv.Construit de catre US Air Service,a facut prul zbor in Octombrie 1922.Aproximativ 100 de zboruri facute pana la sfarsitul anului urmator.Cea mai mare altitudine la care a ajuns a fost 5m.Desi demonstrase fiabilitate,ducea lipsa de putere,raspundea greu comenzilor,mechanic complex si sensibil la problem de fiabilitate.Volumul de munca al pilotului era considerabil in timpul zborului si a miscarilor laterale.

Fig.1

In1956 un prototip a fost creeat cu interesul de a servi nevoia civiliilor si a armatei.Modelul dispunea de patru rotoare printr-un sistem de curele v.Nu a fost necesar rotorul cozii si controlul se efectua prin modificarea turatiei rotoarelor. Zburat cu succes de multe ori in mijlocul anilor 1950,acest elicopter a oferit designul quadrotor si a fost primul elicopter cu patru rotoare care a demonstrate zborul cu success. Din cauza lipsei de comenzi pentru versiunile comerciale sau militare proiectul a fost incheiat.Producatorul Convertawings a produs modelul E care avea o autonomie de peste 300 de mile si o viteza 278 km/h.

1.3 Propulsia si manevrarea Multicopterelor

In domeniul aeromodelismului si al dronelor in sistemul de constructie, eliciile au fost montate cu transmisii direct deasupra motoarelor fara perii de current continuu sau alte motoare de current continuu. Acestea sunt concepute ca rotor extern sau intern și fixat la capătul exterior al console. Puterea electrică pentru aceste motoare este de obicei furnizat de baterii litiu-polimer.Prin acest tip de constructie mica este posibila dezvoltarea unei sarcini surprinzător de mare, în ciuda dimensiunii mici a aeronavei.

Dronele multicopter vin in cea mai mare parte configurate in formatiune de configurare “+” sau “X” de asemenea se mai intalneste des formatiunea “H” (Fig.2).

Configurarea + este utilizata pe scară largă și permite un control ușor, care pentru schimbări în axa longitudinală și transversală, foloseste doar cate o pereche de motoare. La configurarea X sau H motoarele sunt rotite cu 45° fata de directia de deplasare al vehiculului. Pentru miscari de rotatie Pitch sunt actionate toate cele patru motoare concomitant.

Fig.2

Multicopterele spre deosebire de elicoptere pentru directionare nu necesita component mecanice foarte multe de exemplu (platou oscilant, pas variabil sau carma). Eliciile sunt montate direct pe motoare sau printr-un mechanism legate de acestea.Modificarea flotabilitatii se face prin marirea sau micsorarea turatiei motoarelor. Daca se mareste turatia tuturor motoarelor concomitant, aeromodelul se va ridica, uar daca se micsoreaza turatia acesta va cobora. In mod ideal aparatul ar trebuii sa aiba motoarele setate pe turatie mijlocie si cu aceasta si eliciile la fel. Deci in acest fel resursele sunt suficiente pentru situatii dificile de zbor.

La Quadrocoptere eliciile se invart doua cate doua respective in sensul acelor de ceasornici si invers.Prin aceasta tensiunile interne cauzate de eliciile din stanga aeromodelului adunate cu cele din dreapta trebuie sa ne dea rezultatul zero, adica sa se neutralizeze.

Rotirea in jurul axei vertical se realizeaza prin modificarea turatiei motoarelor cu rotatie in acelasi sens.Se anuleaza cuplul astfel incat aeromodelul se roteste in jurul axei sale.

Rotatie in jurul axei longitudinale (roll) si al axei transversal (pitch) se rezulta datorita actionarii motoarelor de pe partea dorita de catre calculatorul de bord.Aici , viteza de rotatie a motoarelor stanga sau dreapta este invers proportional pentru ca suma cuplurilor generate de acestea sa ramana aceeasi.in caz contrar Quadrocopterul se va roti (yaw).

Operatorul (pilotul) nu trebuie sa isi faca griji cu privire la variantele de control si de configurare ale aeromodelului. Comandarea emitorului este similara la toate stilurile de cadru. Semnalele transmise de de emitor sunt de catre receptorul incorporate in Quadrocopter preluate si configurate pentru electronic de comanda, care regleaza in continuare viteza motoarelor individual.

In total sistemul Multcopterului nu apare drift (deriva) ca la rotorul coada al elicopterului.La comandare abea apar efecte secundare ale fortelor centrifuge

Pentru a face orientarea Quad-ului in zbor pentru pilot usor de recunoscut (care este fata sau spatele) de obicei se coloreaza palele din fata sai spatele aeromodelului diferit.Aceste culori diferite faciliteaza pilotul in recunoasterea pozitiei aeromodelului si directia de zbor a acestuia. Daca zboara spre pilot, acesta trebuie sa regandeasca control.Spre exemplu daca este dorita deplasarea spre stanga, pilotul trebuie sa comande din emitator zborul spre dreapta.

Prin amestecarea comenzilor de control poate fi atinsa orice pozitie in spatiu. In functie de designul constructiei quadcopterele pot face de asemenea bucle (loopings) rostogoliri si curbe stranse in zbor.In ultimi ani in domeniul de agreement prin miniaturizarea controlului si al electronici de stabilizare au fost realizatesi aduse pe piata quadrocoptere miniaturizate si capabile de acrobatii .In legatura cu performantele de zbor Quadrocopterele nu se pot compara cu puterea elicopterelor pe motoare termice.Cu toate acestea ele nu sunt de obicei proiectate pentru mare viteza (exceptie fiind avioanele de zbor de cruaziera in aceasta maniera de constructive) ci pentru stabilitate si o controlabilitate usoara. Prin concentrarea masei ( accumulator , instrumente de control/comanda, sisteme de captare a imaginii) in central aeromodelului si prin schimbarea rapida a vectorului de impingere sunt de asemenea posibile acceleratii foarte mari

Stabilizarea prin diferite alinieri al fasciculului de aer

Stabilizarea in jurul axei vertical se poate realize prin montarea celor patru elicii in raport cu central de greutate.Acest system are avantajul ca toate eliciile se pot roti in aceeasi directive.Controlul miscarii de rotatie si inclinarea lucreaza in principiu similar cu rotoarele de directie diferita de rotatie.

Stabilizare electronica prin giroscop

Baza pentru dezvoltarea in continuare a modelului si Quadcopterului-UAV sunt avansarea in electronica si senzoristica, care era pe piataintr-un numar de aproximativ 2000 si implementat pe modele din seria 2004:microcontrolere mai puternice care prelucreaza datele din giroscoape mai repede, mai precis si pot astfel furniza un raspuns al momentelor de inclinare mai rapid si exact care sunt mai inalte si mai bruste de cat cele ale elicopterelor,deoarece central de ridicare este de obicei in planul rotorului (compensare automata).

Giroscoapele pot fi pe baza piezo sau MEMS (/Micro Electro Mechanical Systems / sisteme microelectromecanice) pentru masurarea vitezei unghiulare care sunt utilizate de processor care la randul lui contreaza viteza de rotatie a electromotoarelor.Senzorii piezoelectrici in diferite conditii meteorologice si diferente de temperature in aer(soare si umbra) pot reactiona diferit, care poate duce la un zbor accidentat.

Alte modele folosesc un giroscop mecanic, ale cărui variații sunt adăugate la poziția inițială corectat de senzori Hall (sistem de navigație inerțial).

Disponibilitatea motoarelor fara perii si a acumulatoriilor Litiu-polimer imbunatatesc semnificativ puterea in raport cu greutatea si permite zbor de pana la 30 de minute.

Deoarece in afara de motoare nu mai sunt component mecanice ca de exemplu servomotoare, cum ar fi motoare servo si cadre cu capete de rotor, acest stil de constructie este mai simplu de implementat decat cel al unui elicopter.

Bazat pe microcontrolerele existente fac posibil senzorii ca si busola barometrul sau GPS-ul zborul automat sau zborul in puncte exacte sau pozitionarea exacta deasupra solului.

Prin utilizarea de module GPS, acum este posibil pentru mai multe modele semiprofesionale prin marcarea de puncte intermediare specific in Google Maps trasarea de traectorii sau preinstalarea unui traseu in aeromodel.Puntele setate sunt trimise la placa de navigare si salvate.Acesta incepe plecarea automata in punctele intermediare individuale si poate fi echipat cu o camera care poate face fotografii in punctele de trecere.Pentru mai multa siguranta ,un program de intoarcere acasa pe baza de GPS permite Quadului zborul si aterizarea autonoma la pierderea receptiei sau la scaderea tensiunii sau puterii acumulatorului.

Numarul si ordinea rotoarelor

In afara de configurația convențională descris mai sus, cu patru există structuri cu șase, opt sau douăsprezece motoare partial in ordine asimetrica,unde in cazul defectari unui motor automat este detectata problema iar intreg sistemul compenseaza problema.Modelele cu sase motoare devin automat numite hexacoptere iar cele cu opt octocoptere.

In cazul tricopterelor,care prin numarul de trei motoare salveaza component si greutate,axa de pivotare este greu controlabila, astfel este necesar un servomotor care sa ghideze motorul coada.

În general, vorbim de multicoptere.

1.4 Utilizare

In present quadrocopterele nu se mai folosesc pentru transportul de pasageri. Construcția apare cel mai adesea în vehicule aeriene fără pilot, precum și elicoptere de model. Utilizarea pe scara larga este Quadrocopter în fotografie aeriană și videografie.Langa aparatele comerciale cu comanda de la distanta apar adesea proiecte private cu idei inovatoare. O altă aplicație în afară de fotografia aeriană este acrobație distracție șizborul liber.Aparatele de zbor se bazeaza pe aceeleasi component de baza diferenta este ca au puteri si configuratii diferite.Unele dintre guadrocoptere in bransa hobby (ca Parrot AR.Drone)pot fi controlate cu senzorul de miscare din smartphone sau tablet, astfel incat comandarea se poate invata repede si intuitive.

De asemenea,diverse universitati se preocupa cu conceptual de a avea obiecte solite si la costuri reduse disponibile,cum ar fi pentru cercetarea in domeniul comportamentului roi.

Drone quadrocopter de asemenea ,sunt folosite in armata.In plus fata de dronele mari ,ca de exemplu General Atomics MQ-9,sunt folosite multicopterele si cu scop militar.Acestea sunt apoi utilizate de cele mai multe ori pentru observatia zonelor greu accesibile de conflict, bine inteles ele pot fi si extra militar de mare folos.Victimele dezastrelor,datorita capacitatii quadrocoptelor de ridicare a mai multor kilograme, li se pot furniza pachete cu continut vital inainte ca echipa de interventie sa ajunga la fata locului.O alta aplicatie in care se folosesc quadrocoptere este, examinatea fatadelor de crapaturi, astfel incat sa se recunoasca pericolele potentiale mai devreme.

Sub controversatul proiect European INDECT, utilizarea dronelor echipate cu camera pentru cresterea sigurantei cetatenilor in cazul suspectilor de criminalitate.Dronele trebuie sa identifice in mod autonom persoanele care apar in public in calitate de suspect sis a le supravegheze, ele pot comunica radio cu alte drone.

In anul 2013, mai multe companii de transport au anuntat ca testeaza livrarile de colete cu drone.Posta germana impreuna cu DHL au facut un zbor demontrativ in acelasi an.In acest test au fost livrate medicamente cu un quadrocopter angajatilor de la posta germana. Intre timp, insula Juist este in fiecare vinery aprovizionata cu medicamente si alte marfuri de urgent cu DHL Paket Quadrocopter. Acesta este primul proiect pilot commercial de acest gen in Europa.

II Componente

2.1 Motorul de current continuu fara perii

Motorul de curent continuu fără perii (fără colector), în engleză Brushless DC electric motor(Fig.3), prescurtat BLDC motor, este un motor electric de curent continuu, la care comutația căilor de curent necesară învărtirii rotorului se realizează electronic. Poate fi numit și motor de c.c. fără colector, fiindcă colectorul și periile colectoare formează împreună (la motorul cu perii), un dispozitiv complet de comutare electromecanică.

Motor electric fara perii 9 poli( Fig.3)

De obicei, in motoarele electrice cu un magnet permanent sunt realizate,statorul fix care include bobine si sunt alimentate la moment diferite de catre un circuit electronic cu energia electrica necesara. Marea majoritate a motoarelor electrice cu trei faze sunt motoare mari, dar exista si motoare mici cu excitatie redusa (ventilatoare), sisteme bifazice si sisteme monofazate in care cuplul magnetii permanenti pot inlocuii a doua faza. Pentru a minimize fluctuatiile de cuplu unghi dependent, vin ocazional si faze mai mari in utilizare. Proprietatile de rulare sunt imbunatatite atunci cand este condus de o tensiune de current alternative dreptunghiulara cu privire la sistemele trifazate.

Motorul fără colector și perii(Fig.4), este un motor electric sincron alimentat în curent continuu, care funcționează cu ajutorul unui sistem electronic de comutație. Comutarea necesară rotirii rotorului este comandată și controlată prin intermediul unui circuit electronic microprocesor.

Principalul avantaj este o comutare "fără scântei de perii", care reprezintă la motorul cu perii un factor de distorsiune a sistemului de alimentare de curent continuu, prin reinjectarea de impulsuri parazite în sens invers. Impulsurile de tensiune parazite deranjează pe alți consumatori conectați la aceeași rețea.

Durata de viață este sensibil mai mare în raport cu motorul cu colector, unde uzura periilor grafitoase o limitează și generează periodic probleme de service (întreținere).

Lipsa dispozitivului electromecanic, colector și perii, înlătură limitarea vitezei maxime dictată de încălzira periilor colectoare existentă la motorul de c.c. clasic.

Fig.4

Pentru perceperea poziției reale a rotorului aflat în mișcare și a numărului de rotații pe unitatea de timp (turație) se folosesc diferite metode:

Senzori Hall

Senzori optici dispuși pe stator

Comutare nesenzorizată

Pentru comutarea nesenzorizată a sensului curentului, se percepe poziția reală momentană a rotorului folosind contratensiunile induse în bobinele statorului, care sunt preluate de circuitul de comandă și control electronic (microprocesat), și prelucrate ca atare (valorificate). Totuși pentru a putea fi folosite (amplitudinal) respectivele tensiuni, este necesar mai întâi, ca rotorul să ajungă la o anumită turație și de aceea, pornirea acestui tip de motoare (MCCFP = motoare de c.c. fără perii) cu comutare nesenzorizată se face fără control al poziției (plastic exprimat: "orbește"), la fel ca la motoarele sincrone clasice.

2.2 Control al vitezei electronic

Un control al vitezei electronic sau ESC este un circuit electronic cu scopul de a varia viteza unui motor electric, a direcția și, eventual, de asemenea, să acționeze ca o frână dinamică. ESC-urile sunt adesea folosite la modelele telecomandate actionate electric, cu soiul cel mai des utilizat de motoare fara perii, furnizeaza o tensiune electrica trifazata de putere mica ca sursa de energie pentru motor.

Un ESC (Fig.5)poate fi o unitate de sine stătătoare, care se conectează la canal de control, acceleratie al receptorului sau încorporat în receptor în sine, așa cum este cazul în majoritatea vehiculelor de jucărie grad RC. Unii producatori RC instaleaza electronice pe vehiculele de clasa hobby instaleaza atat regulatorul cat si receptorul pe aceeasi placa de circuit.

Fig.5

2.3 Functionare

Indiferent de tipul folosit, un ESC interpretează informații de control nu la felca in cazul unui servo de mișcare mecanică , ci mai degrabă într-un mod care variază rata de comutare a unei rețele de tranzistori cu efect de camp.Comutarea rapida a tranzistorilor este ceea ce face ca motorul sa aiba o miscare modulate, mai ales vizibila la viteze mici.Aceasta permite de asemenea, variatii mult mai mici si precise a vitezei motorului intr-un mod mai efficient decat tipul mechanic cu o bobina rezistiv .

Cele mai multe ESC-uri modern incorporeaza un circuit de baterie eliminator(BEC) de a reglementa tensiunea in receptor, eliminand nevoia de baterii suplimentare pentru acesta. BEC-urile sunt de obicei fie regulatoare lineare sau (switched mode) cu intreruperide tensiune (comutatie).

Un circuit accumulator eliminator (BEC) este un circuit electronic proiectat pentru a furniza energie electrica la alte circuite fara necesitatea unei baterii.Istoric expresia a fost uneori folosita pentru a descrie dispositive folosite la alimentarea echipamentelor actionate cu baterie de energie electrica.Aceasta este in continuare cazul in multe produse oferite in magazinele de electronice.

În electronică, un regulator liniar(Fig.6) este un sistem folosit pentru a menține o tensiune constantă. Rezistența de reglementare variază în conformitate cu sarcina rezultand intr-o tensiune de ieșire constantă. Dispozitivul de reglare se face pentru a acționa ca un rezistor variabil, ajustarea continuă a unei rețele de tensiune divider pentru a menține o tensiune de ieșire constantă,iar diferenta dintre tensiunile reglementate rezulta ca si pierdere a energiei,adica caldura. Prin contrast, un regulator de comutare utilizează un dispozitiv activ care trece pe și în afara pentru a menține o valoare medie de ieșire. Deoarece tensiunea reglementată de un regulator liniar trebuie să fie întotdeauna mai mică decât tensiunea de intrare, eficiența este limitată și tensiunea de intrare trebuie să fie suficient de mare pentru a permite întotdeauna dispozitivul activ să scadă ceva tensiune.Regulatoarele liniare pot plasa dispozitivul de reglare in sursa si sarcina regulate(regulator in serie) sau poate plasa dispozitivul de reglare in parallel cu sarcina (regulatorul Shunt).

Regulatoarele liniare simple pot contine o simpla diode Zener si rezistoare in serie, regulatoarele mai complicate iclud etaje separate de reglare a tensiunii, amplificatoare de eroare si elemente passive.Deoarece un regulator de tensiune liniar este un element comun in multe dispositive, regulatoarele lineare pot de asemenea contine ansambluri de component semiconductoare sau tuburi vidate discrete.

Fig.6

O sursa de tensiune prin comutatie(alimentare prin comutatie, comutator de alimentare,SMPS sau switcher) este o sursa de alimentare electrica care include un regulator de comutare pentru a converti energia electrica in mod efficient. Ca și alte surse de alimentare, un SMPS transferă energie de la o sursă, cum ar fi rețeaua electrică, la o sarcină, cum ar fi un calculator personal, în timp ce conversia tensiune și caracteristicilor de curent.Spre deosebire de o sursa de alimentare liniara, tranzistorul de comutare ,comuta incontinuu intre starile low si ful, care minimizeaza pierderile de energie .O sursa de energie nu disipa putere. Reglarea tensiunii se realizează prin varierea raportului de la a-off timp.In schimb, o sursa de alimentare liniara reguleaza tensiunea de iesire prin disiparea continua a puterii care trece prin tranzistori. Acest eficiență mai mare de conversie a energiei este un avantaj important al unei surse de alimentare în comutație in comparative cu cea liniara.Regulatoarele prin comutatie pot fi de asemenea mai mici si mai usoare de cat cele liniare datorita dimensiunii mai mici a transformatorului.Regulatoarele prin comutatie sunt utilizate ca inlocuire a celor liniare atunci cand este necesara o eficienta mai ridicata.Ele sunt totusi mult mai complicate, curenti comutati pot provoca zgomote electrice daca nu sunt atent filtrate,iar modelele simple pot avea un factor de putere slaba.

Regulatoarele de current continuu in sens larg sunt controlate PWM (Fig.7) pentru motoarele electrice. Regulatoarele accepta, in general un semnal de 50 Hz nominal pe intrare PWM de servo a carei latime a impulsului variaza de la 1 ms la 2 ms. Atunci cand sunt alimentate cu o latime de 1 ms plus la 50 Hz, ESC-ul raspunde prin oprirea motorului de current continuu. La 1,5 ms puls latime semnal de intrare conduce motorul aproximativ jumatate de viteza. Cand se aplica un impuls de 2,0 ms semnal de intrare,motorul functioneaza la turatie maxima.

Modulare-Pulse lățime (PWM), sau modularea puls-durată (PDM), este o tehnică utilizată pentru a codifica un mesaj într-un semnal impulsuri.Desi aceasta tehnica de modulare poate fi utilizata pentru a codifica informatii, utilizarea s-a principala este de a permite controlul puterii furnizate dispozitivelor electrice, in special pentru sarcini de inertie, cum ar fi motoarele.

Fig.7

Valoarea medie a tensiunii (și curent) alimentat la sarcină este controlat prin rotirea comutatorului dintre cerere și sarcina pe și în afara într-un ritm rapid. Cu cat comutatorul este mai mult active (on) decat inactive (off) cu atat puterea totala furnizata a sarcinii este mai mare. Frecvența PWM de comutare trebuie să fie mult mai mare decât ceea ce ar putea afecta sarcina (dispozitivul care foloseste puterea), forma de unda rezultata perceputa de sarcina trebuie sa fie cat mai neteda posibil.

int ESCpin = 11;    // consxiune de semnal la pinul 11 arduino
int val = 0;        //variabila de stocare a valorii PWM

void setup() 

 

void loop() 

 for(val = 0; val <= 255; val += 5)
 {
   analogWrite(ESCpin, val);
   delay(100);
 }
}

Sisteme ESC pentru motoare cu perii sunt foarte diferite de proiectare; ca urmare ESC-urile pentru motoarele periate nu sunt compatibile cu motoare fără perii. Sistemele fara peri conduc practice motoare fara perii trifazate prin trimiterea unei secvente de semnal pentru rotatie. Motoare fără perii, altfel numite outrunners sau non alergatori, au devenit foarte populare,odata cu pasionatii de modele RC din cauza eficentei lor, putere, longevitate si greutatea redusa in comparative cu motoarele traditionale periate.Cu toate acestea controlul motoarelor fara perii de current alternative este mult mai complicat decat controlul de motoare periate.

Faza corecta variază în funcție de rotație a motorului, care urmează să fie luate în considerare de către ESC(Regulator): De obicei Forta Electromotoare inapoi (EMF) de la motor este folosita pentru a detecta aceasta rotatie, dar exista variatii care folosesc detectoare magnetice( effect Hall) sau optice.Regulatoarele de viteza programabile prin calculator au,in general optiuni specificate pentru utilizator care permit stabilirea unor limite joase de tensiune,timpi, acceleratie, franare si directie de rotatie. Inversarea directiei motorului poate fi realizata prin comutarea celor doua faze din cele trei ale ESC-ului la motor.

Fig.8 Schema de conectare a regulatoarelor in aplicatii

2.4 Clasificare

Regulatoarele (ESC) sunt in mod nominal clasificate dupa curentul maxim suportat, de exemplu 25 amperi sau 25 A. In general sunt mai inalte in rang,cu cat tind sa fie mai mari si mai grele,ceea ce este un factor in calculul balansat al aeromodelelor.Multe regulatoare modern suporta NiMh,Litiu-Ion polimer si baterii de Litiu fier fosfat cu o gama de intrare si taiere a tensiunii. Tipul de baterie și numărul de celule conectate este un element important atunci cand se allege un circuit de baterie eliminator (BEC), construit fie in controller sau ca unitate de sine statatoare. Un număr mai mare de celule conectate va avea ca rezultat o putere redusă și prin urmare ,un numar mai mic d servo sustinute de o BEC integrat, in cazul in care utilizeaza un regulator de tensiune liniar. Un bine conceput BEC folosind un regulator de comutare nu trebuie să aibă o limitare similară.

2.5 Aplicatii ale regulatoarelor

Creșterea prețurilor la petrol și resurse insuficiente pentru combustibili de carbon au condus cercetarede de metode alternative de propulsie electrice. Motoare electrice fără perii sunt proiectate pentru a fi sursa de alimentare majoră în câteva decenii sau mai devreme.Dimensiuni mai mari si curenti mai ridicati ofera un cuplu mai bunsi mai putina mentenanta pentru automobilele electrice de maine.Producatorii dezvolta modalitati de imbunatatire a bateriilor si a vitezei de incarcare a acestora.

Un motor folosit într-o aplicație de biciclete electrice necesită un cuplu inițial ridicat și, prin urmare, folosește senzor Hall comutație pentru măsurarea vitezei. Controlere pentru biciclete electrice folosesc, în general, senzori frânare, senzori de rotație cu pedale și oferă-potențiometru ajustabil pentru viteza motorului.

Aeronave electrice experimentale, cum ar fi eLazair utiliza comenzile de viteză electronice. Cele mai multe dintre cerințele și compromisurile sunt similare cu cele pentru orice alt vehicul electric.

Regulatoare de viteză electronice (ESC) sunt o componentă esențială a Quadcopters moderne (și toate multirotors) care oferă putere mare, de înaltă frecvență, de înaltă rezoluție de alimentare AC 3 faze pentru motoarele într-un pachet extrem de compact miniatură. Acestor ambarcațiuni depind în întregime de viteza variabila a motoarelor de conducere elicelor.Aceasta variatie larga si control a RPM (rotatii pe minut) a motorului este necesara pentru quadcopter si toate multicopterele. Înălțimea este determinată de cantitatea de energie a tuturor celor patru motoare.

III Analiza variantelor de controller

3.1 Controlerul Naza M

Controlerul Naza este o platform de comtrol multi-axe,special conceputa pentru pasionatii de modele multirotor. Diferit de WooKong-M pentru incarcaturi grele și fotografie aero, Naza moștenește nu numai stabilitatea in zbor remarcabilă a produselor DJI, dar la fel Ofera manevrabilitate excelenta, care oferă pasionaților o experiență de zbor minunata.

Este un modul mic compact si sprijina upgrade-uri firmware cu porturile de date extensibile. GPS Naza-M îmbunătățește funcționalitatea de Naza-M. Cu noul firmware, noul algoritm de stabilizare atitudine și controlul optimizat, Naza-M V2(Fig.9) oferă o performanță mai bună zbor, chiar și fără modulul GPS. Acesta are un algoritm nou,lin in decolare. Naza UMP V2 a sporit funcționalitate BEC și oferă extensibil porturi CAN BUS, care pot sprijini iOSD, Zenmuse H3-2D gimbal (pitch control). Suport este de asemenea inclus pentru modul Bluetooth LED pentru a permite ajustarea parametrilor prin intermediul unui APP mobil (viitor upgrade de firmware necesar pentru această funcționalitate).

Fig.9

Caracteristici:

Design compact – Naza simplifică instalarea și economisește spațiu și greutate. Cu inovatoare de proiectare All-in-One, Naza conține interior amortizarea, controlere, 3 axe giroscop, giroscop pe 3 axe și barometru și un mic controler principal.

Independenta UMP cu posibilitate de extensie a funcției

Modul LED independent

Stabilitate avansata in altitudine

Modul de control al zborului multiplu / comutare inteligentă – Naza-M ofera trei tipuri de moduri de control: GPS Atti. Mod (cu modulul GPS), Atti. Mode, modul Manual.Operatorul poate comuta intre cele trei tipuri si ajusta modul de zbor chiar si in conditiile unui semnal GPS slab.

Modul GPS disponibil / precizie in mentinerea pozitiei – Naza-M GPS va spori considerabil performanta pentru intrarea AP cu poziția Hold,Intoarcere spre casa si control orientat inteligent.

Failsafe – Controlerul Naza are in constructie o functie la nivel automat de Fail-Safe. Asta înseamnă că, atunci când comunicarea între enitor si receptor este deconectata, toate iesirile de comanda de la controler vor merge la punctul central.

Tipuri de multirotor suportate: Quad-rotor I4, X4;

Hexa-rotor I 6, X6, IY6, Y6.

Octom-rotor i8, V8, X8

Iesire ESC suportat : 400 Hz suportat

Transmitator indicat: minim 4 canale 2,4GHz

Tensiune de lucru: 4.8V ~ 5.5 V

PMUintrare: 7.4V ~ 26.0 V (recomandat 2S ~ 6S LiPo)

Ieșire (V-SEN fir roșu port): 3A 5V

Ieșire (port V-SEN fir roșu) curent de sarcina:

7.5A

Consum de energie: MAX: 1.5W (0.3A 5V)

Normal: 0,6 W (0.12A 5V)

Temperatura de lucru: -10 °C~50 °C (14F~122F)

Masa: MC: 27g

GPS / Compass: 27g

UMP: 28g

LED: 13g

Performanta de zbor: Poate fi afectata de performanta mecanica si sarcinile utile

Acuratete in mod GPS: Vertical: ± 0.8m

Orizontală: ± 2.5m

Viteza maxima de urace/coborare:6m/s,respective 4,5m/s

3.2 ArduPilotMega – APM

ArduPilot (de asemenea ArduPilotMega – APM Fig.10) este un open source fără pilot platforme vehicule aeriene (UAV), în măsură să controleze multicoptere autonome,aeronave cu aripa fixa,elicoptere traditionale si masini. Ardupilot este o platformă premiata care a câștigat 2012 și 2014 competițiile UAV Outback Challenge. A fost creat în 2007 de către comunitatea DIY Drones. Ea se bazează pe electronice open-source platforma Arduino si prototipuri. Prima versiune Ardupilot sa bazat pe un thermopile, care se bazează pe determinarea poziției orizontului în raport cu aeronava prin măsurarea diferenței de temperatură dintre cer și pământ. Mai târziu, sistemul a fost îmbunătățit pentru a înlocui termopile cu o unitate de măsură inerțial (IMU), folosind o combinație de accelerometre, giroscoape și magnetometre.

Astăzi, proiectul ArduPilot a evoluat la o serie de produse hardware si software, inclusiv APM și linia Pixhawk / PX4 de autopilot și ArduCopter, proiecte software ArduPlane și ArduRover.

Abordarea software gratuit de la Ardupilot este similară cu cea a / proiectului Paparazzi PX4 Pixhawk din cauza costului scazut și disponibilitatea vasta permite utilizatorului sa confectioneze avioane mici pilotate la distant, cum ar fi vehicule aeriene micro si UAV in miniature.

Fig.10

În 2012, Canberra UAV echipa a avut succes si au luat primul loc în prestigiosul UAV Outback Challenge. Această provocare a început în 2007 pentru a prezenta și promova semnificația UAV în Australia în misiuni de căutare și salvare și a promovat creșterea în industria aerospațială, guvern, și aplicații civile.Echipa CanberraUAV COMPUSA din dezvoltatori Arduplane au realizat un avion care a rulat cu un APM 2 Autopilot.Misiunea care a fost dezvoltata pentru UAV Outback Challenge a fost de a localiza și livra provizii medicale la un "pierdut" excursionist. Echipa CanberraUAV și toate echipele ulterioare nu a reușit să îndeplinească obligația de a arunca o sticlă de apă pe o țintă vizat.Cu toate acestea echipa a fost plasata prima in sistemul de puncte.

Posibilitatea de personalizare face ardupilot foarte popular in domeniu. Acest lucru permite o multitudine de utilizări, cum ar fi multicopter și drone avion fixe. . Aceasta personalizare permite, de asemenea, o varietate de piese suplimentare care să fie utilizate prin folosirea diferitilor conectori si emitatoare pentru a permite setarea dupa preferintele fiecaruia. Ardupilot a fost integrat cu succes în mai multe avioane, cum ar fi Multiplex Easy Star, Easy Glider Pro, și Bixler 2.0.Personalizare și ușurința de instalare a permis platforma Ardupilot să fie integrat pentru o varietate de misiuni. Utilizarea Planificatorul Misiunii a permis placa Ardupilot pentru a fi utilizate pentru misiuni de cartografiere, de căutare și salvare, precum și zonele de topografie.

Fig.11

Caracteristici:

Formatul open source al lui ArduPilot a permis utilizarea simplă a mai multe platforme open source Fig.11 create de Jordi Munoz și Chris Anderson.

Puncte 3D programabile

Intoarcere in punctual de lansare

Resetare in zbor

Actiuni de zbor programabile anticipat

Obtiuni de stabilizare fara necesitatea unui co-pilot

Optimizarea aeromodelelor de 3 sau 4 canale

Simulator de zbor

3.3 Controlerul Multiwii Crius SE 2.5

Multiwiicopter se bazeaza pe istoria Wii Motion Plus si o placa pro mini de la Arduino.De la un proiect foarte simplu,minimalist si ieftin acum s-a maturizat si ofera toate facilitatile asteptate de la un astfel de controller,inclusive navigare GPS.Echipat cu magnetometru si barometru controlul zborului nu lasa de dorit. Controlul de zbor este pre-configurat în X-aranjament livrate.Dar poti in acelasi timp modifica frimwareul in functie de dorinte. Mai ales pentru profesioniști, este important să se utilizeze un control de aer complet echipate cu MAG și BARO. O nesfârșită varietate de setări face zborul cu Multiwii o experiență foarte specială. În funcție de configurația aleasă oferă un comportament de zbor incepator-adecvat sau de zbor acrobatic. Utilizarea software-ului MultiWii Config faci toate setarile pentru a putea chiar înainte de primul zbor și pentru a verifica monitorul cu o animație în timp real.

Controlerul de zbor Multiwii poate fi utilizat în mai multe moduri diferite, în funcție de senzorii care sunt prezenti . Tabelul de mai jos prezintă modurile și senzorii care sunt utilizati:

Placa Multiwii(Fig.12) este controlerul central al Multicopterului.Ea este conectata intre receptor si regulatoare care in total pot controla 8 motoare. Un Sistem giroscop cu 6 axe bazat pe MPU6050 (system giroscop cu Accelerometru) functioneaza prin intermediul unui microprocessor puternic care controleaza regulatoarele moatoarelor, stabilitatea în jurul tuturor axelor, astfel încât Multicopter este întotdeauna orizontal în aer.Un magnetometru pe 3 axe Bazat pe HMC5883L este preinstalat.Un barometru cu o acuratete destul de ridicata BMP085 este deasemenea disponibil.Ca si relecomanda poate fi folosit orice sistem de emisie receptive cu minim 4 canale.Totusi recomandat este un sistem de 6 canale care include caracteristici suplimentare precum pornirea si oprirea diferitilor senzori in timpul zborului.

Fig.12

Aceasta placa este capabila de a controla diverse aeronave Inclusiv quad, hex, design-uri și modele Octocopter. Stabilitatea excelentă Permite zbor complet autonom cu FPV sau orice fel de acrobație. Pini antet pentru a permite o interfata convenabila la un receptor,ESC si servomecanisme. În plus, există interfețe atât seriale și I2C pentru a permite programe de completare: cum ar fi FTDI (Fig.13) interfață USB, Bluetooth, GPS și afișează OLED / LCD.

Caracteristici:

Dimensiunea mica, gauri de montare 35x35mm

6 canale de intrare PWM pentru receptoare standard PPM SUM

Iesiri pentru aeronave cu pana la 8 axe

Suporta gimbal cu 2 axe si declansare automata

Port FTDI / UART pentru upload firmware, depanare, modulul Bluetooth sau display LCD

Port I2C pentru a extinde senzorii, I2C LCD / display OLED sau I2C-GPS NAV bord pentru GPS și Sonar

Regulator de tensiune si eliminare a zgomotului de 3.3 V

Microcontroler ATMega 328P

Unitate de procesare a miscarii ciroscop/accelerometru MPU6050C cu 6 axe

Magnetometru digital HMC5883L cu 3 axe

Senzor de presiune digital BMP085

Convertor la nivel logic PCA9306DP1

Masa 9,3g

Dimensiune totala 40mm x40mm

Configurarea si calibrarea placii de control:

Metoda 1

Conectearea individuala a fiecarui regulator si al receptorului cu motorul

Se porneste telecomanda, setati la maxim stickul pentru acceleratie

Conectati sursa de tensiune(acumulatorul ) la regulatoare

Dupa ce a fost conectata sursa de tensiune motoarul va scoate un semnal sunet preprogramat

Acum se poate retrage stickul de acceleratie la minim, in urma acestei actiuni se va mai auzi un semnal sonor.Aceasta inseamna ca regulatorul a fost initializat

Fig.13

Metoda 2

Porniti Software-ul Arduino si incarcati Multiwii Skretch pentru calibrare

Toate regulatoarele si motoarele sunt conectate si gata de zbor, mai putin acumulatorul

Conectati un adaptor,interfata FTDI prin cablul USP la un PC.Adaptorul si placa de control sunt in acest moment alimentate cu energie electrica de la USB

Programati microcontrolerul Atmel cu Frimware-ul

Despartiti legatura dintre FTDI si placa de control Multiwii

Conectati sursa de energie la regulatoare.Alimentarea trebuie asigurata simultan printr-o paca de alimentare sau cabluri de alimentare

Dup ace alimentarea cu energie este asigurata,cele 4 motoare conectate emit un emnal sonor.Nu este necesara miscarea acceleratiei. Frimware-ul instalat anterior face programarea independent.

Deconectati din nou sursa de alimentare

Conectare la PC prin interfata FTDI. Acestea sunt din nou alimentate prin conexiunea USB. Nu se va conecta acumulatorul, pentru ca interfata FTDI,controlerul sau PC pot fi deteriorate.

Programati controlerul ATmega cu Firmware-ul pentru lucru in parametrii normali

3.4 Componente optionale

Un modul GPS comunica cu satelitul și prelua informații despre locație exacte. Putem folosi aceste informații pentru a calcula viteza și calea. Este deosebit de util pentru aeromodelele autonome care trebuie să știe poziția exactă și în ce direcție să zboare.

Un senzor ultrasonic măsoară distanța până sol, adică altitudine. Acest lucru este util dacă doriți să păstrați quadcopter dvs. o anumită distanță de la sol, fără a fi nevoie să reglam înălțimea mereu.Cei mai multi dintre acesti senzori au o gama intre 20 cm si 7m.

IV Brevier de calcul

4.1Dinamica modelului

Vom incepe definirea celor doua cadre (Fig.14).Cadrul initial este definit de pamant ,cu atractia gravitationala indreptata in directia z negative. Cadrul este definit de orientarea quadcopterului,cu axele rotoarelor aratand in directia z positive si bratele indreptate in directiile x si y.

corp cadru corp initial

Fig.14

4.2 Cinematica

Definim pozitia si viteza in cadrul initial ca:si =,,.In mod similar definim roll,pitch si unghiul yaw in cadrul corpului ca:

cu viteze unghiulare coraspunzatoare egal cu ,. Cu toate acestea, reținem că vectorul viteză unghiulară≠. Viteza unghiulară este un vector îndreptat de-a lungul axei de rotație, în timp ce este doar derivata in timp a yaw , pitch si roll. În scopul de a converti aceste viteze unghiulare în vectorul viteză unghiulară, putem

utiliza următoarea relație:

𝛚=

unde ω este vectorul viteză unghiulară în cadrul corpului.

Se poate face referire la corpul si la cadrul initial prin matricea de rotatie R care merge de la cadrul corp la cadrul initial. Aceasta matrice este derivata folosind convențiile de unghi ZYZ Euler si succesiv desfac yaw,pitch si roll.

Pentru un vector dat in cadrul corpului,vectorul corespunzator este dat de R in cadrul initial

4.3 Matematica motoarelor

În scopul de a modela în mod corespunzător dinamica sistemului, avem nevoie de o înțelegere a proprietăților fizice care o guvernează. Toate motoarele pe quadcopter sunt identice, astfel încât să putem analiza unul singur, fără pierderi de generalitate.Retinem ca elicele sunt montate in sens opus astfel daca una se invarte in sensul acelor de ceasornic cea adiacenta se invarte invers.Sub aceasta forma corpul este echilibrat daca elicele se invart cu aceeasi turatie.

Motoare fără perii sunt folosite pentru toate aplicațiile quadcopter. Pentru motoare electrice noastre, cuplul produs este dat de:

Unde este cuplul motor,I este curentul de intrare,este curentul la mersul in gol al motorului,iar este cuplul proportional constant. Tensiunea in motor este suma dintre EMF invers si pierderile resistive.

V=IRm+

Unde V este caderea de tensiune in motor, Rm este rezistenta motorului, este viteza unghiulara a motorului si este o constanta proportional. Putem folosi această descriere a motorului nostru pentru a calcula puterea pe care o consumă.

Vom presupune o rezistență de motor neglijabilă. Apoi, puterea devine proporțională vitezei unghiulare:

In simplificarea în continuare modelul nostru, vom presupune că Acest lucru nu este cu totul irațional, deoarece este curentul atunci când nu există nici o sarcină, și este, prin urmare, destul de mic. Astfel, vom obține ecuația finală, simplificata pentru putere:

P

4.4 Forțe

Puterea este utilizata pentru a păstra quadcopterul sus.Prin conservarea energiei,stim ca energia consumata a motorului intr-o perioada de timp data este egală cu forța generată pe elice in timpul miscarii aerului de acestea.

P=T

Ne asumam o viteza redusa,deci este viteza aerului in timpul plutiri. De asemenea ne presupunemca viteza fluxului liber este zero (aerul din mediul înconjurător este în staționareîn raport cu quadcopter).

=

Unde ρ este densitatea aerului înconjurător și A este aria rotorului,folosind ecuatia simplificata a puterii,putem scrie

Retinem ca in caz general ,in acest caz,cuplul este proportional cu T cu o ratie constanta determinate de configuratia palelor si parametrii.Rezolvand forta de impingere T obtinem o forta de tractiune proportional cu patratul vitezei unghiulare a motorului:

Unde K este o constanta. Insumand toate motoarele vom afla ca forta totala de pe quadcopter este data de:

In plus fata de forta de ridicare,vom modela frecarea ca o forta proportional la viteza liniara in fiecare directie. Aceasta este o vedere foarte simplificată de frecare a fluidului, dar va fi suficienta pentru modelarea și simulare.Fortele noastre de tragere globale vor fi modelate de un termen suplimentar

Daca se doreste o precizie suplimentara,constanta poate fi separate in trei constant de frecare diferite, una pentru fiecare directive de miscare.

4.5 Ecuațiile de mișcare

In cadrul inertial,acceleratia se datoreaza impingerii,acceleratiei gravitationale si frecarii liniar. Putem obține vectorul de împingere în cadrul inerțial cu ajutorul matricei de rotatie R la harta vectorului de tractiune din cadrul corpului si cadrul initial.Astfel miscarea liniara poate fi rezulmata:

unde este pozitia quadului,g este accelerația gravitațională,este forta de frecare si este vecttorul de impingere al corpului cadru.

Deși este convenabil de a avea ecuațiile liniare de mișcare în cadrul inerțial,

ecuațiile de mișcare de rotație sunt utile pentru noi în cadrul corpului, astfel încât să putem exprima rotatiile centrului quadcopterului in loc de centrul inertial.Vom deriva ecuatiile de rotatie ale lui Euler pentru dinamica rigida a corpului.Exprimate in vector de:

I+

unde este vectorul vitezei unghiulare,I matricea este matricea inertiei si vector de torsiune extern. Putem scrie asta ca:

Ne putem modela quaul ca doua tije subtiri uniforme cu un punct de masa(motor) la sfarsitul fiecareia.In acest sens este clar ca simetriile duc la o matrice diagonal a formei.

Prin urmare, vom obține rezultatul final pentru cadru corpul ecuațiile de mișcare de rotație

V Constructia unui Quadcopter

Pentru a construe un cuadcopter trebuie sa combinam parti hardware si software,acest lucru implica abilitati ingineresti,inspiratie si multa rabdare.In acelasi timp trebuie avuta in vedere viitoarea utilizare a acestuia,de aici vom realiza gabaritul necesar.In sistem exista senzori conectați la un microcontroler pentru a face decizia cu privire la modul de a controla motoarele. În funcție de modul autonom dorit, una sau mai multi dintre acesti senzori sunt utilizati în combinație.

In această secțiune, voi vorbi despre componente esențiale ale unui quadcopter:

Frame – structura care tine toate componentele împreună.El trebuie proiectat pentru a fi puternic,dar de asemenea usor.

Rotoare – motoare fără perii de curent continuu, care poate oferi forța necesară pentru a propulsa ambarcațiunii. Fiecare rotor trebuie să fie controlat separat la un controler de viteză.

Elicii

Baterie – Sursă de alimentare

IMU – Senzori

Microcontroller – Creierul

Transmitator si receptor RC

5.1Cadrul (Fig.14) este structura care deține toate componentele împreună.Frame ar trebui să fie rigide, și să fie capabil de a minimiza vibratiile provenite de la motoare.

Fig.14

Un cadru Quadcopter constă din mai multe piese piese care nu trebuie neapărat să fie din același material:

Placa centru unde componentele electronice sunt montate

Patru brațe montate pe placa de centru

Patru batiuri asezate la capetii bratelor pentru montarea motoarelor

Majoritatea materialelor disponibile pentru rama sunt:

fibra de carbon

aluminiu

Lemn, cum ar fi placaj sau MDF (plăci fibrolemnoase de densitate medie)

Fibra de carbon este cel mai rigid material dintre cele trei,dar de asemenea sic el mai scump.

Sinele tubular patrate de aluminiu sunt cele mai populare pentru bratele quadcopterelor datorita masei lor relative scazute,rigiditate si accesibilitate. Cu toate acestea aluminiu ar putea suferi de vibrațiile de la motor , deoarece efectul de amortizare nu este la fel de bun ca fibra de carbon. În caz de probleme severe de vibrații, aceastea ar putea strica citirile senzorilor.

Bratele din lemn cum ar fi placi de MDF sunt mai bune la absorbtia vibratiilor decat aluminiul.Din pacate lemnul nu este un material foarte rigid și se pot rupe ușor în accidente .

Desi nu este la fel de important ca si pentru brate, material din care se fabrica placa central este cela este placajul,din cauza masei scazute,usor de fabricat si bune caracteristici in absorbtia vibratiilor.

În ceea ce privește lungimea brațului, "distanța motor la motor"adica dimensiunea de la placa central pana la motor ,de obicei depinde de dimensiunile elicelor, pentru ca acestea sa aiba distant suficienta intre ele necesara unei functionary corespunzatoare.

5.2 Alegerea motorului

El este putin similar cu motoare de curent continuu normale în modul în care bobine și magneți sunt utilizate pentru a conduce arborele. Deși motoarele fără perii (Fig.16) nu au o perie pe ax care are grijă de comutare direcției putere în bobine, iar acest lucru este motivul pentru care sunt numite fără perii. In schimb motoarele fără perii au trei bobine de pe interior (centru) ale motorului, care sunt fixate la montarea. Pe partea exterioară conține un număr de magneți montati pe un cilindru care este atasat la arboreal rotativ. Deci bobine sunt fixate, ceea ce înseamnă firele pot merge direct la ele și acestea nu au nevoie de perii. Motoare fără perii vin în multe soiuri diferite, în cazul în care dimensiunea și consumul de curent diferă.

Fig.16

La selectarea motorul fără perii trebuie avut grija la greutatea, dimensiunea, ce fel de elice vor fi utilizate, așa că totul se potrivește cu consumul de curent. Când se cauta pentru motoare fără perii ar trebui observate specificațiile, mai ales "Kv-ratingul".Kv arată câte rpm (rotații pe minut), motorul va face în cazul în care condiția de x număr de volți. RPM pot fi calculate în acest mod:

RPM = Kv U

In cazul de fata: RPM= 800 3S unde 3

S= 3 3,7v Rezulta RPM= 800 3 3,7

RPM= 8880

Pe fiecare dintre motoare fără perii sunt montate cate o elice. Elicele vin în diferite diametre si unghiuri (rabatabile).Unele dintre dimensiunile standard ale lor sunt :

EPP1045 10 diametru și 4.5 acesta este pasul este cel mai popular, bun pentru aeromodele mijlocii

APC 1047 10 diametru și 4,7

EPP0845 8 diametru și 4,5 utilizat în mod regulat la aeromodele mai mici

EPP1245 12 diametru și 4,5 folosit la aeromodele mari care necesită multă tracțiune

EPP0938 9 diametru și 3,8

In selectia elicelor trebuie avut in vedere urmatoarele urmatoarele :

Diametrul mai mare și pasul mare pot genera mai multa forta. Este nevoie, de asemenea, mai multă putere de a conduce, dar va fi în măsură să ridice mai mult in greutate.

Atunci când se utilizează RPM ridicat (rotații pe minut) motoare ar trebui să meargă cu elicele mici sau mijlocii. Atunci când se utilizează motoare RPM mici ar trebui să meargă pentru elicele mai mari,cele mici nu pot genera suficienta tractiune in cazul in care este utilizat un motor de turatie mica.

Pas vs Diametru: diametrul înseamnă în esență suprafață în timp ce pas înseamnă zona eficienta

O RPM mai mare a elicei vă va oferi mai mult de viteză și manevrabilitate,dar este de asemenea limitat in greutate care va fi capabil de a fi ridicata de puterea disponibila. De asemenea, puterea absorbita de motor creste odata cu cresterea pasului, astfel un diametru mai mare sau un pas mai mare va atrage mai multa putere, în același RPM, dar va produce, de asemenea, mult mai împingere, și va fi capabil să ridice mai mult in greutate.

5.2 ESC utilizat

Greutate: 25g

Dimensiuni: 45 x 24 x 11mm

Putere intrare: 5.6V – 16.8V (2-3 celule Li-Poly, sau 5-12 celule Ni-MH Ni-MH / Ni-Cd baterie)

BEC: 2A

Curent constant: 30A (Max 40A mai puțin de 10 secunde)

Functia de siguranta puterii ( indifferent in ce pozitie se afla acceleratia,motorul nu va porni imediat. Funcția calibrare acceleratie: adaptata la diferență diferite călători, cu un simt bun, delicat si viteza excelenta vitezei liniare.

5.4 IMU- Unitatea de Masura Initiala

Unitatea de măsurare inerțial (IMU) este un dispozitiv electronic senzor care măsoară viteza, orientarea și forțele gravitaționale ale quadcopterului.Aceste masuratori permit electronic de control sa calculeze modificarile vitezelor motoarelor. IMU este o combinație de accelerometru pe 3 axe si 3 axe giroscop, împreună reprezintă o 6DOF IMU. Uneori există și o suplimentare de magnetometru pe 3 axe pentru o mai bună stabilitate Yaw (în 9DOF total).

Functionare: Accelerometrul (Fig.17) masoara acceleratia si forta,deci acceleratia gravitational va fi detectata. Ca accelerometrul are trei senzori axe, poate observa orientarea dispozitivului.

Fig.17

O viteză unghiulară măsură giroscop, în alte cuvinte, viteza de rotație în jurul celor trei axe.Numai cu accelerometru ar trebui sa fie capabil sa masoare orientarea in referire cu sprafata pamantului.Dar accelerometrul dinde sa fie sensibil si insensibil uneori atunci cand vibratiile motorului sunt mari.

Prin urmare, vom folosi un giroscop pentru a aborda această problemă. Cu atât accelerometrul și citirile giroscopul acum suntem capabile să distingă între mișcare și vibrație.

Din moment ce giroscopul ne poate spune miscarea de rotatie, folosim doar un giroscop pentru ca giroscopul tinde in derivă foarte mult, ceea ce înseamnă că, dacă începeem rotirea senzorului, giroscopul va afișa viteza unghiulară, dar atunci când il oprim,acesta nu merge neaparat înapoi la 0 grade / s.Daca folosim doar un giroscopvom obtine o orientare care continua sa se miste incet,chiar daca oprim rotirea senzorului. Acesta este motivul pentru ambii senzori trebuie să fie utilizati împreună pentru a calcula o orientare bună și utilă.

5.5 Magnetometrul

Accelerometrul nu poate simti rotație rotatiile yau (rotatie in jurul axei Z) cum poate simtii rotatiile de pe axa x si y,pentru aceasta este folosit uneor un magnetometru.

Un magnetometru măsoară direcțiile și intensitatea câmpului magnetic. Acest senzor magnetic poate fi folosit pentru a determina în ce fel este situate fata de sud și nord.Locatiile polilor sunt folosite ulterior ca referinta impreuna cu viteza unghiulara yaw de la giroscop pentru a calcula un unghi stabil yaw.

5.6 GPS utilizat

Fig.18

NEO-6M Ublox/u-blox modul GPS(Fig.18) pentru Mini APM Pro:Acestea sunt pre-configurate, Străfulgerat cu setările corecte, și testate. Pentru a le face conectarea si startul . Acest lucru nu se face în mod normal, în orice alt magazin!

Leduri luminoase

Placa de montaj standardizata cu gauri de 45mm x 45mm

Processor Blox Neo 6M 1.023 MHz

38400 bps (implicit) comutabil la 115200 bps

Ieșire cadre GGA, GSA și RMC

1Hz (implicit) comutabil la 5Hz!

Pastrarea permanenta a configuratiei

Busola pe placa

GPS "PCB HOOD" pentru mai multa protectie EMI / RFI

Receptor Frecvență: L1 [1575.42MHz]

Localizați performanță

2D: 3m (Medie)

2D: 2m (medie), cu WAAS

Deriva <0,02 M / s

Precizie: 1us

Sistem de coordonate: WGS-84

Înălțime atitudine max: 18000

Viteza maxima: 515m / s

Accerlaratie: <4g

Sensibilitatea de urmărire: -161dBm

Sensibilitate Captura: -148dBm

Pornire la rece timp: 38s medii

Pornire la cald: 35s medii

Timp de pornire la cald: 1s medie

Timp Capture: 0.1s mediu

Temperatura: 40-80

Tensiune de alimentare: + 3.5V ~ 5.5V +

#ifndef GPS_H_

#define GPS_H_

extern int32_t wrap_18000(int32_t ang);

void GPS_set_pids(void);

void GPS_SerialInit(void);

void GPS_NewData(void);

void GPS_reset_home_position(void);

void GPS_set_next_wp(int32_t* lat, int32_t* lon);

void GPS_reset_nav(void);

#if defined(I2C_GPS)

void GPS_I2C_command(uint8_t command, uint8_t wp);

#endif

#endif

VI Inovatii in domeniu

5.1 Prima Drona pe hydrogen a lumii

Dronele pot oferi multa distractie,dar una dintre cele mai frecvente problem ale lor este autonomia de zbor scazuta,ele pot fi folosite aproximativ 20 de minute dupa care trebuie reincarcat acumulatorul. Dar o dronă numita Hycopter (Fig.19) a fost făcută exact pentru a schimba aceasta realitate. Propunerea Horizon Energy Systems’s a fost de a crea un aeromodel fără pilot, cu suficient combustibil pentru a rămâne până la patru ore in aer, folosind hidrogen.

Fig.19

Design Hycopter are două structuri care se aseamănă lămpi fluorescente mari, dar sunt de fapt tuburi care dețin până la 120 g de hydrogen.In timpul zborului un combustibil hybrid de usor de litiu polimer celular se transforma in energie. Una din principalele probleme cu combustibilul la aeronave este de greutate, care ar trebui să fie, de asemenea, luata în considerare atunci când se calculează timpul de zbor, dar hidrogenul fiind un gaz este mult mai usor aceasta inseamna o eficienta mai mare. Puterea produsă de cantitatea de hidrogen transportata de Hycopter este echivalenta cu trei kilograme de baterii obișnuite de litiu. Drona cântărește cinci kilograme și poate zbura continuu până la 4 ore. Alte aeronave care utilizează baterii litiu comune pentru a stoca energie electrică, au o autonomie scurt de până la o jumătate de oră înainte de a fi nevoie să fie incarcate. Drona este proiectata pentru a transporta o încărcătură de până la 1 kg, ceea ce reduce autonomia pana la 2,5 ore.

Horizon Energy Systems a construit aceasta drone pentru uz military. Utilizările sale principale sunt destinate spre securitate, siguranță echipamente și de control, precum și cartografierea zonelor îndepărtate.

Bibliografie

http://interestingengineering.com/worlds-first-hydrogen-powered-drone-can-fly-for-four-hours/

http://blog.oscarliang.net/build-a-quadcopter-beginners-tutorial-1/

Static Thrust Calculation

file:///C:/Users/wet/Downloads/uiareport.pdf

David Allerton. Principles of Flight Simulation. Wiley, 2009

Warren F. Phillips. Mechanics of flight. John Wileys & Sons, inc., 2004

Jorge Miguel Brito Domingues. Quadrotor prototype. Master’s thesis, Instituto Superior Técnico, Universidade Técnica de Lisboa, 2009.

http://hoverbear.org/2015/05/27/quadcopters-yaw/

http://physics.stackexchange.com/questions/31811/calculate-quadrotor-propeller-torque-due-to-aerodynamic-drag

Anexa

IMU.ccp

#include "Arduino.h"

#include "config.h"

#include "def.h"

#include "types.h"

#include "MultiWii.h"

#include "IMU.h"

#include "Sensors.h"

void getEstimatedAttitude();

void computeIMU () {

uint8_t axis;

static int16_t gyroADCprevious[3] = {0,0,0};

int16_t gyroADCp[3];

int16_t gyroADCinter[3];

static uint32_t timeInterleave = 0;

#if defined(NUNCHUCK)

annexCode();

while((uint16_t)(micros()-timeInterleave)<INTERLEAVING_DELAY) ; timeInterleave=micros();

ACC_getADC();

getEstimatedAttitude();

while((uint16_t)(micros()-timeInterleave)<INTERLEAVING_DELAY) ; timeInterleave=micros();

f.NUNCHUKDATA = 1;

while(f.NUNCHUKDATA) ACC_getADC();

for (axis = 0; axis < 3; axis++) {

imu.gyroData[axis] = (imu.gyroADC[axis]*3+gyroADCprevious[axis])>>2;

gyroADCprevious[axis] = imu.gyroADC[axis];

}

#else

#if ACC

ACC_getADC();

getEstimatedAttitude();

#endif

#if GYRO

Gyro_getADC();

#endif

for (axis = 0; axis < 3; axis++)

gyroADCp[axis] = imu.gyroADC[axis];

timeInterleave=micros();

annexCode();

uint8_t t=0;

while((uint16_t)(micros()-timeInterleave)<650) t=1; //empirical, interleaving delay between 2 consecutive reads

if (!t) annex650_overrun_count++;

#if GYRO

Gyro_getADC();

#endif

for (axis = 0; axis < 3; axis++) {

gyroADCinter[axis] = imu.gyroADC[axis]+gyroADCp[axis];

imu.gyroData[axis] = (gyroADCinter[axis]+gyroADCprevious[axis])/3;

gyroADCprevious[axis] = gyroADCinter[axis]>>1;

if (!ACC) imu.accADC[axis]=0;

}

#endif

#if defined(GYRO_SMOOTHING)

static int16_t gyroSmooth[3] = {0,0,0};

for (axis = 0; axis < 3; axis++) {

imu.gyroData[axis] = (int16_t) ( ( (int32_t)((int32_t)gyroSmooth[axis] * (conf.Smoothing[axis]-1) )+imu.gyroData[axis]+1 ) / conf.Smoothing[axis]);

gyroSmooth[axis] = imu.gyroData[axis];

}

#elif defined(TRI)

static int16_t gyroYawSmooth = 0;

imu.gyroData[YAW] = (gyroYawSmooth*2+imu.gyroData[YAW])/3;

gyroYawSmooth = imu.gyroData[YAW];

#endif

}

#ifndef ACC_LPF_FACTOR

#define ACC_LPF_FACTOR 4 // that means a LPF of 16

#endif

#ifndef GYR_CMPF_FACTOR

#define GYR_CMPF_FACTOR 600

#endif

#define GYR_CMPFM_FACTOR 250

#define INV_GYR_CMPF_FACTOR (1.0f / (GYR_CMPF_FACTOR + 1.0f))

#define INV_GYR_CMPFM_FACTOR (1.0f / (GYR_CMPFM_FACTOR + 1.0f))

typedef struct fp_vector {

float X,Y,Z;

} t_fp_vector_def;

typedef union {

float A[3];

t_fp_vector_def V;

} t_fp_vector;

typedef struct int32_t_vector {

int32_t X,Y,Z;

} t_int32_t_vector_def;

typedef union {

int32_t A[3];

t_int32_t_vector_def V;

} t_int32_t_vector;

int16_t _atan2(int32_t y, int32_t x){

float z = (float)y / x;

int16_t a;

if ( abs(y) < abs(x) ){

a = 573 * z / (1.0f + 0.28f * z * z);

if (x<0) {

if (y<0) a -= 1800;

else a += 1800;

}

} else {

a = 900 – 573 * z / (z * z + 0.28f);

if (y<0) a -= 1800;

}

return a;

}

float InvSqrt (float x){

union{

int32_t i;

float f;

} conv;

conv.f = x;

conv.i = 0x5f3759df – (conv.i >> 1);

return 0.5f * conv.f * (3.0f – x * conv.f * conv.f);

}

void rotateV(struct fp_vector *v,float* delta) {

fp_vector v_tmp = *v;

v->Z -= delta[ROLL] * v_tmp.X + delta[PITCH] * v_tmp.Y;

v->X += delta[ROLL] * v_tmp.Z – delta[YAW] * v_tmp.Y;

v->Y += delta[PITCH] * v_tmp.Z + delta[YAW] * v_tmp.X;

}

static int32_t accLPF32[3] = {0, 0, 1};

static float invG; // 1/|G|

static t_fp_vector EstG;

static t_int32_t_vector EstG32;

#if MAG

static t_int32_t_vector EstM32;

static t_fp_vector EstM;

#endif

void getEstimatedAttitude(){

uint8_t axis;

int32_t accMag = 0;

float scale, deltaGyroAngle[3];

uint8_t validAcc;

static uint16_t previousT;

uint16_t currentT = micros();

scale = (currentT – previousT) * GYRO_SCALE;

previousT = currentT;

for (axis = 0; axis < 3; axis++) {

deltaGyroAngle[axis] = imu.gyroADC[axis] * scale;

accLPF32[axis] -= accLPF32[axis]>>ACC_LPF_FACTOR;

accLPF32[axis] += imu.accADC[axis];

imu.accSmooth[axis] = accLPF32[axis]>>ACC_LPF_FACTOR;

accMag += (int32_t)imu.accSmooth[axis]*imu.accSmooth[axis] ;

}

rotateV(&EstG.V,deltaGyroAngle);

#if MAG

rotateV(&EstM.V,deltaGyroAngle);

#endif

accMag = accMag*100/((int32_t)ACC_1G*ACC_1G);

validAcc = 72 < (uint16_t)accMag && (uint16_t)accMag < 133;

for (axis = 0; axis < 3; axis++) {

if ( validAcc )

EstG.A[axis] = (EstG.A[axis] * GYR_CMPF_FACTOR + imu.accSmooth[axis]) * INV_GYR_CMPF_FACTOR;

EstG32.A[axis] = EstG.A[axis

#if MAG

EstM.A[axis] = (EstM.A[axis] * GYR_CMPFM_FACTOR + imu.magADC[axis]) * INV_GYR_CMPFM_FACTOR;

EstM32.A[axis] = EstM.A[axis];

#endif

}

if ((int16_t)EstG32.A[2] > ACCZ_25deg)

f.SMALL_ANGLES_25 = 1;

else

f.SMALL_ANGLES_25 = 0;

// Attitude of the estimated vector

int32_t sqGX_sqGZ = sq(EstG32.V.X) + sq(EstG32.V.Z);

invG = InvSqrt(sqGX_sqGZ + sq(EstG32.V.Y));

att.angle[ROLL] = _atan2(EstG32.V.X , EstG32.V.Z);

att.angle[PITCH] = _atan2(EstG32.V.Y , InvSqrt(sqGX_sqGZ)*sqGX_sqGZ);

#if MAG

att.heading = _atan2(

EstM32.V.Z * EstG32.V.X – EstM32.V.X * EstG32.V.Z,

(EstM.V.Y * sqGX_sqGZ – (EstM32.V.X * EstG32.V.X + EstM32.V.Z * EstG32.V.Z) * EstG.V.Y)*invG );

att.heading += conf.mag_declination;

att.heading /= 10;

#endif

#if defined(THROTTLE_ANGLE_CORRECTION)

cosZ = EstG.V.Z / ACC_1G * 100.0f;

throttleAngleCorrection = THROTTLE_ANGLE_CORRECTION * constrain(100 – cosZ, 0, 100) >>3; // 16 bit ok: 200*150 = 30000

#endif

}

#define UPDATE_INTERVAL 25000 // 40hz update rate (20hz LPF on acc)

#define BARO_TAB_SIZE 21

#define ACC_Z_DEADBAND (ACC_1G>>5) // was 40 instead of 32 now

#define applyDeadband(value, deadband)

if(abs(value) < deadband) {

value = 0;

} else if(value > 0){

value -= deadband;

} else if(value < 0){

value += deadband;

}

#if BARO

uint8_t getEstimatedAltitude(){

int32_t BaroAlt;

static float baroGroundTemperatureScale,logBaroGroundPressureSum;

static float vel = 0.0f;

static uint16_t previousT;

uint16_t currentT = micros();

uint16_t dTime;

dTime = currentT – previousT;

if (dTime < UPDATE_INTERVAL) return 0;

previousT = currentT;

if(calibratingB > 0) {

logBaroGroundPressureSum = log(baroPressureSum);

baroGroundTemperatureScale = (baroTemperature + 27315) * 29.271267f;

calibratingB–;

}

BaroAlt = ( logBaroGroundPressureSum – log(baroPressureSum) ) * baroGroundTemperatureScale;

alt.EstAlt = (alt.EstAlt * 6 + BaroAlt * 2) >> 3

#if (defined(VARIOMETER) && (VARIOMETER != 2)) || !defined(SUPPRESS_BARO_ALTHOLD)

int16_t error16 = constrain(AltHold – alt.EstAlt, -300, 300);

applyDeadband(error16, 10); //remove small P parametr to reduce noise near zero position

BaroPID = constrain((conf.pid[PIDALT].P8 * error16 >>7), -150, +150);

errorAltitudeI += conf.pid[PIDALT].I8 * error16 >>6;

errorAltitudeI = constrain(errorAltitudeI,-30000,30000);

BaroPID += errorAltitudeI>>9; //I in range +/-60

int16_t accZ = (imu.accSmooth[ROLL] * EstG32.V.X + imu.accSmooth[PITCH] * EstG32.V.Y + imu.accSmooth[YAW] * EstG32.V.Z) * invG;

static int16_t accZoffset = 0;

if (!f.ARMED) {

accZoffset -= accZoffset>>3;

accZoffset += accZ;

}

accZ -= accZoffset>>3;

applyDeadband(accZ, ACC_Z_DEADBAND);

static int32_t lastBaroAlt;

//int16_t baroVel = (alt.EstAlt – lastBaroAlt) * 1000000.0f / dTime;

int16_t baroVel = (alt.EstAlt – lastBaroAlt) * (1000000 / UPDATE_INTERVAL);

lastBaroAlt = alt.EstAlt;

baroVel = constrain(baroVel, -300, 300); applyDeadband(baroVel, 10);

vel += accZ * ACC_VelScale * dTime;

vel = vel * 0.985f + baroVel * 0.015f;

alt.vario = vel;

applyDeadband(alt.vario, 5);

BaroPID -= constrain(conf.pid[PIDALT].D8 * alt.vario >>4, -150, 150);

#endif

return 1;

}

#endif //BARO

Anexa

IMU.ccp

#include "Arduino.h"

#include "config.h"

#include "def.h"

#include "types.h"

#include "MultiWii.h"

#include "IMU.h"

#include "Sensors.h"

void getEstimatedAttitude();

void computeIMU () {

uint8_t axis;

static int16_t gyroADCprevious[3] = {0,0,0};

int16_t gyroADCp[3];

int16_t gyroADCinter[3];

static uint32_t timeInterleave = 0;

#if defined(NUNCHUCK)

annexCode();

while((uint16_t)(micros()-timeInterleave)<INTERLEAVING_DELAY) ; timeInterleave=micros();

ACC_getADC();

getEstimatedAttitude();

while((uint16_t)(micros()-timeInterleave)<INTERLEAVING_DELAY) ; timeInterleave=micros();

f.NUNCHUKDATA = 1;

while(f.NUNCHUKDATA) ACC_getADC();

for (axis = 0; axis < 3; axis++) {

imu.gyroData[axis] = (imu.gyroADC[axis]*3+gyroADCprevious[axis])>>2;

gyroADCprevious[axis] = imu.gyroADC[axis];

}

#else

#if ACC

ACC_getADC();

getEstimatedAttitude();

#endif

#if GYRO

Gyro_getADC();

#endif

for (axis = 0; axis < 3; axis++)

gyroADCp[axis] = imu.gyroADC[axis];

timeInterleave=micros();

annexCode();

uint8_t t=0;

while((uint16_t)(micros()-timeInterleave)<650) t=1; //empirical, interleaving delay between 2 consecutive reads

if (!t) annex650_overrun_count++;

#if GYRO

Gyro_getADC();

#endif

for (axis = 0; axis < 3; axis++) {

gyroADCinter[axis] = imu.gyroADC[axis]+gyroADCp[axis];

imu.gyroData[axis] = (gyroADCinter[axis]+gyroADCprevious[axis])/3;

gyroADCprevious[axis] = gyroADCinter[axis]>>1;

if (!ACC) imu.accADC[axis]=0;

}

#endif

#if defined(GYRO_SMOOTHING)

static int16_t gyroSmooth[3] = {0,0,0};

for (axis = 0; axis < 3; axis++) {

imu.gyroData[axis] = (int16_t) ( ( (int32_t)((int32_t)gyroSmooth[axis] * (conf.Smoothing[axis]-1) )+imu.gyroData[axis]+1 ) / conf.Smoothing[axis]);

gyroSmooth[axis] = imu.gyroData[axis];

}

#elif defined(TRI)

static int16_t gyroYawSmooth = 0;

imu.gyroData[YAW] = (gyroYawSmooth*2+imu.gyroData[YAW])/3;

gyroYawSmooth = imu.gyroData[YAW];

#endif

}

#ifndef ACC_LPF_FACTOR

#define ACC_LPF_FACTOR 4 // that means a LPF of 16

#endif

#ifndef GYR_CMPF_FACTOR

#define GYR_CMPF_FACTOR 600

#endif

#define GYR_CMPFM_FACTOR 250

#define INV_GYR_CMPF_FACTOR (1.0f / (GYR_CMPF_FACTOR + 1.0f))

#define INV_GYR_CMPFM_FACTOR (1.0f / (GYR_CMPFM_FACTOR + 1.0f))

typedef struct fp_vector {

float X,Y,Z;

} t_fp_vector_def;

typedef union {

float A[3];

t_fp_vector_def V;

} t_fp_vector;

typedef struct int32_t_vector {

int32_t X,Y,Z;

} t_int32_t_vector_def;

typedef union {

int32_t A[3];

t_int32_t_vector_def V;

} t_int32_t_vector;

int16_t _atan2(int32_t y, int32_t x){

float z = (float)y / x;

int16_t a;

if ( abs(y) < abs(x) ){

a = 573 * z / (1.0f + 0.28f * z * z);

if (x<0) {

if (y<0) a -= 1800;

else a += 1800;

}

} else {

a = 900 – 573 * z / (z * z + 0.28f);

if (y<0) a -= 1800;

}

return a;

}

float InvSqrt (float x){

union{

int32_t i;

float f;

} conv;

conv.f = x;

conv.i = 0x5f3759df – (conv.i >> 1);

return 0.5f * conv.f * (3.0f – x * conv.f * conv.f);

}

void rotateV(struct fp_vector *v,float* delta) {

fp_vector v_tmp = *v;

v->Z -= delta[ROLL] * v_tmp.X + delta[PITCH] * v_tmp.Y;

v->X += delta[ROLL] * v_tmp.Z – delta[YAW] * v_tmp.Y;

v->Y += delta[PITCH] * v_tmp.Z + delta[YAW] * v_tmp.X;

}

static int32_t accLPF32[3] = {0, 0, 1};

static float invG; // 1/|G|

static t_fp_vector EstG;

static t_int32_t_vector EstG32;

#if MAG

static t_int32_t_vector EstM32;

static t_fp_vector EstM;

#endif

void getEstimatedAttitude(){

uint8_t axis;

int32_t accMag = 0;

float scale, deltaGyroAngle[3];

uint8_t validAcc;

static uint16_t previousT;

uint16_t currentT = micros();

scale = (currentT – previousT) * GYRO_SCALE;

previousT = currentT;

for (axis = 0; axis < 3; axis++) {

deltaGyroAngle[axis] = imu.gyroADC[axis] * scale;

accLPF32[axis] -= accLPF32[axis]>>ACC_LPF_FACTOR;

accLPF32[axis] += imu.accADC[axis];

imu.accSmooth[axis] = accLPF32[axis]>>ACC_LPF_FACTOR;

accMag += (int32_t)imu.accSmooth[axis]*imu.accSmooth[axis] ;

}

rotateV(&EstG.V,deltaGyroAngle);

#if MAG

rotateV(&EstM.V,deltaGyroAngle);

#endif

accMag = accMag*100/((int32_t)ACC_1G*ACC_1G);

validAcc = 72 < (uint16_t)accMag && (uint16_t)accMag < 133;

for (axis = 0; axis < 3; axis++) {

if ( validAcc )

EstG.A[axis] = (EstG.A[axis] * GYR_CMPF_FACTOR + imu.accSmooth[axis]) * INV_GYR_CMPF_FACTOR;

EstG32.A[axis] = EstG.A[axis

#if MAG

EstM.A[axis] = (EstM.A[axis] * GYR_CMPFM_FACTOR + imu.magADC[axis]) * INV_GYR_CMPFM_FACTOR;

EstM32.A[axis] = EstM.A[axis];

#endif

}

if ((int16_t)EstG32.A[2] > ACCZ_25deg)

f.SMALL_ANGLES_25 = 1;

else

f.SMALL_ANGLES_25 = 0;

// Attitude of the estimated vector

int32_t sqGX_sqGZ = sq(EstG32.V.X) + sq(EstG32.V.Z);

invG = InvSqrt(sqGX_sqGZ + sq(EstG32.V.Y));

att.angle[ROLL] = _atan2(EstG32.V.X , EstG32.V.Z);

att.angle[PITCH] = _atan2(EstG32.V.Y , InvSqrt(sqGX_sqGZ)*sqGX_sqGZ);

#if MAG

att.heading = _atan2(

EstM32.V.Z * EstG32.V.X – EstM32.V.X * EstG32.V.Z,

(EstM.V.Y * sqGX_sqGZ – (EstM32.V.X * EstG32.V.X + EstM32.V.Z * EstG32.V.Z) * EstG.V.Y)*invG );

att.heading += conf.mag_declination;

att.heading /= 10;

#endif

#if defined(THROTTLE_ANGLE_CORRECTION)

cosZ = EstG.V.Z / ACC_1G * 100.0f;

throttleAngleCorrection = THROTTLE_ANGLE_CORRECTION * constrain(100 – cosZ, 0, 100) >>3; // 16 bit ok: 200*150 = 30000

#endif

}

#define UPDATE_INTERVAL 25000 // 40hz update rate (20hz LPF on acc)

#define BARO_TAB_SIZE 21

#define ACC_Z_DEADBAND (ACC_1G>>5) // was 40 instead of 32 now

#define applyDeadband(value, deadband)

if(abs(value) < deadband) {

value = 0;

} else if(value > 0){

value -= deadband;

} else if(value < 0){

value += deadband;

}

#if BARO

uint8_t getEstimatedAltitude(){

int32_t BaroAlt;

static float baroGroundTemperatureScale,logBaroGroundPressureSum;

static float vel = 0.0f;

static uint16_t previousT;

uint16_t currentT = micros();

uint16_t dTime;

dTime = currentT – previousT;

if (dTime < UPDATE_INTERVAL) return 0;

previousT = currentT;

if(calibratingB > 0) {

logBaroGroundPressureSum = log(baroPressureSum);

baroGroundTemperatureScale = (baroTemperature + 27315) * 29.271267f;

calibratingB–;

}

BaroAlt = ( logBaroGroundPressureSum – log(baroPressureSum) ) * baroGroundTemperatureScale;

alt.EstAlt = (alt.EstAlt * 6 + BaroAlt * 2) >> 3

#if (defined(VARIOMETER) && (VARIOMETER != 2)) || !defined(SUPPRESS_BARO_ALTHOLD)

int16_t error16 = constrain(AltHold – alt.EstAlt, -300, 300);

applyDeadband(error16, 10); //remove small P parametr to reduce noise near zero position

BaroPID = constrain((conf.pid[PIDALT].P8 * error16 >>7), -150, +150);

errorAltitudeI += conf.pid[PIDALT].I8 * error16 >>6;

errorAltitudeI = constrain(errorAltitudeI,-30000,30000);

BaroPID += errorAltitudeI>>9; //I in range +/-60

int16_t accZ = (imu.accSmooth[ROLL] * EstG32.V.X + imu.accSmooth[PITCH] * EstG32.V.Y + imu.accSmooth[YAW] * EstG32.V.Z) * invG;

static int16_t accZoffset = 0;

if (!f.ARMED) {

accZoffset -= accZoffset>>3;

accZoffset += accZ;

}

accZ -= accZoffset>>3;

applyDeadband(accZ, ACC_Z_DEADBAND);

static int32_t lastBaroAlt;

//int16_t baroVel = (alt.EstAlt – lastBaroAlt) * 1000000.0f / dTime;

int16_t baroVel = (alt.EstAlt – lastBaroAlt) * (1000000 / UPDATE_INTERVAL);

lastBaroAlt = alt.EstAlt;

baroVel = constrain(baroVel, -300, 300); applyDeadband(baroVel, 10);

vel += accZ * ACC_VelScale * dTime;

vel = vel * 0.985f + baroVel * 0.015f;

alt.vario = vel;

applyDeadband(alt.vario, 5);

BaroPID -= constrain(conf.pid[PIDALT].D8 * alt.vario >>4, -150, 150);

#endif

return 1;

}

#endif //BARO

Similar Posts