Bouwverslag: zelfbouw flight controler op basis van Arduino Uno

Dankzij de vakantiedagen is er eindelijk weer wat tijd om nog enkele nieuwe zaken uit te zoeken. Eén daarvan was het integreren van een Futaba S.bus koppeling die ik in de toekomst uit kan breiden naar spectrum, enz. Hier ben ik een poos geleden al mee gestart maar nog onvoldoende aandacht gegeven om dit echt goed te integreren in het totale plaatje.

Hieronder staat een afbeelding van de testopstelling:
full


Inmiddels heb ik een S.Bus naar ppm convertor gemaakt met individuele digitale schakeluitgangen. Het ppm signaal en de digitale signalen zijn vervolgens weer in te lezen in de flight controller. Ook ben ik nu in staat om bij het verlies van het zendersignaal een melding te genereren voor bijvoorbeeld een return to home.

Kort samengevat is S.Bus een 100.000bps signaal dat geïnverteerd is (in rust hoog). Iedere 16ms worden er 25 bytes verzonden. Iedere byte bestaat uit: 1 startbit, 8 databits, 1pariteitsbit en 2 stopbits. Ofwel 8E2. Het verzenden van het signaal duurt hierdoor precies 3ms.

startbyte – databyte 1 – databyte 2 ….. databyte 22 – flagbyte – stopbyte

Iedere kanaal gebruikt 11 bits wat resulteert in een waarde van 0 t/m 2047. Kanaal 1 gebruikt 8 bits van databyte 1 en 3 bits van databyte 2. Kanaal 2 gebruikt 5 bits van databyte 2 en 6 van databyte 3, enz. Ieder kanaal zet ik vervolgens om in een puls van 20 t/m 2000us zoals op de afbeelding van de scope te zien is.

Scope opname van geïnverteerd S.Bus signaal en ppm signaal:
full


Daarnaast gebruik ik digitale uitgangen als schakelcontacten voor bijvoorbeeld auto level, gps hold, camera, verlichting, enz.
De grootste uitdaging was het 100% nauwkeurig krijgen van de pulsuitgang. Mijn streven was het ppm signaal zo nauwkeurig mogelijk te maken. Inmiddels ben ik er achter dat dit eenvoudiger lijkt dan dat het werkelijk is.

Veel taken maken bij een processor gebruik van interrupts. Bijvoorbeeld voor het registreren van tijd. Iedere 1.024us voert de processor een korte bewerking uit om de tijdregistratie en correctie uit te voeren.

Ook voor het inlezen van het S.Bus signaal gebruikt de processor interrupts. Iedere verandering op de datalijn genereert een interrupt. Iedere 10us maakt de processor een kleine uitstap om de seriële data te verwerken.

Door gebruik te maken van de tijdfuncties van de Arduino software kwam ik niet verder dan een nauwkeurigheid van ongeveer 12us. Na veel testen ben ik er achter gekomen dat de interrupts het tijdsignaal behoorlijk verstoren. Maar het lastige is dat de interrupts nodig zijn om het S.Bus signaal in te lezen en het ppm signaal te genereren.

Conclusie:
Timer0 heb ik uit gezet waardoor er geen tijdregistratie – en dus interrupts- worden gegenereerd. Na het inlezen van de seriële data zet ik ook de seriële poort uit. Hierdoor vervallen de interrupts van de seriële poort.

Nu alle interrupts inactief zijn is het mogelijk om de pulsen met een nauwkeurigheid van 2us te genereren door middel van korte programma loops. Na het afronden van het ppm signaal kan de seriële poort weer aan en wacht het programma op de volgende reeks data.
 
Laatst bewerkt door een moderator:
Het is inderdaad een eenvoudig protocol dat S.Bus. Vandaag nog de laatste verbeteringen gedaan voor het ppm signaal en de nauwkeurigheid is nu 100%.

Weer een stap verder ;-)
 
Ik heb me nog niet verdiept in het S-bus protocol. Heb het ook nog niet nodig voor mijn projectjes. Ik vind dit altijd leuk/leerzaam om te lezen. Op naar de volgende stap.
 
Vandaag wat ideeën op papier gezet in de vorm van een print layout. De definitieve versie zal anders worden omdat ik voor het testen toch liever wat minder smd toe wil passen. In ieder geval zet ik de layout toch even ter vermaak in het draadje erbij ;-)

full
 
Laatst bewerkt door een moderator:
Zo, de puzzel is af ;-) Alle componenten heb ik een onderdak kunnen geven op een print van 54 x 68mm. Het is een single layer print met maar 2 jumpers en zonder autorouter :yes: Dit is kleiner dan een Arduino Uno.

Ik heb gekozen voor zoveel mogelijk "through hole" componenten. Het voordeel hiervan is dat ik achteraf eenvoudiger aanpassingen kan doen indien noodzakelijk. Als alles werkt kan ik de boel verder verkleinen naar 100% smd. Enkele componenten zijn nu al wel smd omdat het anders een te grote print zou worden.


full



Er zitten drie processoren op:
A) Ontvanger input conversie (S.Bus, ppm, pwm, spectrum, enz);
B) Main flight controller;
C) Signaal generator voor pwm signalen naar de esc’s.

Stekkerverbindingen zijn aanwezig voor:
A) GPS en kompasunit;
B) Versnellingssensor en gyro unit;
C) Telemetriezender;
D) ISP interface voor het programmeren.

Het is de bedoeling dat de flight controller op 20MHz gaat draaien en ik de programma's upload via ISP. Dit geeft mij meer snelheid en meer programmeerruimte. Tot slot is er nog een smd druksensor aanwezig. Dit is een nieuwe sensor en schijn een betere resolutie te hebben dan de sensor die ik nu gebruik.

De gps en kompasunit komt boven op deze printplaat. De versnellingssensor en gyro komen op een andere plek te zitten die minder gevoelig is voor trillingen en meer in de buurt van het zwaartepunt.

De telemetriezender heeft ook een eigen aansluiting zodat deze overal geplaatst kan worden voor een optimaal bereik.

Begin volgend jaar wil ik de print laten maken.
 
Laatst bewerkt door een moderator:
hallo Joop,

veel bewondering voor je programmeer kunsten.
Printje zo te zien getekend in eagle? let wel even op dat de smd onderdelen nog top layer pad's hebben en je er bottem layer lines op aangesloten heb.
Verder zou ik hem nog wel een keertje na lopen hier en daar kan nog wel iets strakker uitgelijnd worden.

Ooit ook zelf een quadcopter boardje getekend nooit verder gekomen als motors weten te laten draaien... zat een atxmega op die draaien tot max 32mhz

thumb.php


stef
 
Stef, bedankt voor je reactie. Je hebt gelijk dat de smd onderdelen op de bovenkant zitten en de gewone paden op de onderkant. Ik moet alleen doorgeven dat beide lagen één zijn. Dan moet het goed komen.

De uitlijning laat ik voorlopig voor wat het is. Het is een proef en hoeft nog niet optimaal te zijn. Wel leuk om te zien dat er mensen zijn die daar op letten. Tja, wat wil je met een hobby als elektronica ;-) Wel zit ik er aan te denken om nog wat ground planes toe te voegen.

Jouw print ziet er strak uit. En je bent er waarschijnlijk achter gekomen dat de hardware eenvoudiger is dan de software ;-) Kost een hoop tijd om alles in orde te krijgen.
 
Netjes Joop,
Kijk je wel uit dat de SMD onderdelen gespiegeld moeten worden als je
deze op de toplayer plakt ?
GA je hier nog een bord bovenop stapelen, of alleen bekabelen ?
 
Wat Nak zegt daar had ik nog geen eens over na gedacht. Het gaan echter alleen om U5 en U6 zo te zien de rest maar niet uit.
Ik ets me printjes zelf, en probeer altijd zo veel mogelijk ruimte tussen banen en pads te houden, om zo veel mogelijk kans van slagen te creëren. Daarom zou ik sommige dingen net iets anders route.

Ons quadcopter project hebben we meteen te groots aangepakt. Zou het project graag nog een keer op willen pakken alleen dan wat rustiger aan. Beginnen op basis van rc zender. Want daar kan je gewoon makkelijker mee vliegen dan meteen via een joystick op de computer.

stef
 
Nak, daar heb je gelijk in en als het goed is zit dat allemaal goed. Ik heb de componenten op de datasheet er gewoon op de kop naast getekend. Naast de U5 en U6 die Stef al aangaf gaat het ook om Q1, Q2 en de druksensor.

Omdat de meeste componenten die verbonden zijn met deze print op andere plaatsen zitten gebruik ik stekker verbindingen. Het is niet de bedoeling om, net als bij een Arduino, de boel te stapelen.

Stef, zoals je aan het begin van dit verslag kan lezen ben ik ook gewoon van nul begonnen. Eerst de ontvanger en dan eerst een paar vluchten met alleen de gyro. Vanuit daar heb ik het verder opgebouwd.

Meer afstand is altijd beter, dat ben ik met je eens. De persoon die ze gaat maken geeft aan dat 10mil afstand voldoet. En dan ga ik er van uit dat het goed komt ;-)
 
Door de laatste ontwikkelingen voel ik mij helaas weer genoodzaakt om een uitstap te doen en weer een stukje gereedschap te bouwen. Ik heb de meeste onderdelen al binnen:

full


Het zal nog wel even duren voordat ik hier echt mee aan de gang kan. De vakantie is helaas weer voorbij :-( Waarschijnlijk dat ik hiervoor een ander draadje op ga starten. Mocht dat zo zijn dan laat ik dit hier weten.
 
Laatst bewerkt door een moderator:
Hallo Joop,

echt bedankt dat je een feed van je project hebt gemaakt. Die heb ik 2 weken geleden zitten lezen en heeft mij genoeg enthousiasme gegeven om er zelf ook een te maken.

Nu vliegt de quad met een uno, bestuurt door een zelfgemaakte afstand bediening.
Vandaag komen laatste sensoren af zodat de quadcopter een precies self-control heeft.

Nu is de volgende uitdaging om er een kleine te maken; 15cm. Frame ga ik maken met 3d printer.

Nu vraag ik mij af waar de esc's zijn van de actuele nano quadcopters?
Ik kan niets vinden op internet. De esc's kunnen niet meer op de armen zitten en moeten dus op het board staan... maar ik vind geen product van deze...
een idee?

Groeten
 
Inmiddels zitten bijna alle componenten op de print. Ik wacht alleen nog op condensatoren en headers.

full
 
Laatst bewerkt door een moderator:
Wow Joop, dat ziet er goed uit! Echt heel netjes. Heb je al wat kunnen testen?

Ik zit nog steeds te klooien met Aeroquad software. Inmiddels heb ik de Arduino uno wel vervangen voor een Mega, dus ik kan nog ff door programmeren zonder dat het geheugen vol loopt. Onlangs "horizon mode" toegevoegd (gestabiliseerd met accel tot de sticks over de helft gaan, dan zijn loopings mogelijk). Dat werkt prima.

Succes man, ik blijf je vorderingen volgen!

Groetjes,
André
 
Goed om te lezen dat jij ook nog steeds bezig bent om de zaken naar jou eigen hand te zetten André.

Ik heb nog weinig kunnen testen omdat ik nog wat onderdelen mis. Ook heb ik een beetje weinig tijd :-( Maar in ieder geval heb ik vandaag de spanning erop gezet en de 5V en 3,3V werkten prima zonder witte rook :-)

Nu nog wachten op de condensatoren en kan ik de processoren testen. Het zijn allemaal kleine en tijdrovende stappen. Maar we komen iedere keer weer een beetje verder :thumbsup:
 
Inmiddels loopt dit draadje alweer één jaar en is dit draadje ruim 20.000 keer bekeken! Dat is een mooi moment om eens terug te kijken. Ik heb de leukste mijlpalen hieronder in een tijdlijn gezet.

31-01-2014 Start van het project op Modelbouwforum.
02-02-2014 Eerste succesvolle vlucht op basis van alleen gyro’s.
09-02-2014 Eerste testvlucht in auto level op basis van een versnellingssensor.
22-02-2014 Eerste testvlucht met de hoogteregeling op basis van druk.
02-03-2014 Control paneel voor het instellen van de flight controller (bedraad).
13-03-2014 Apparte I2C -> pwm generator voor het aansturen van esc’s.
26-03-2014 Nieuwe algoritme voor de hoogteregeling.
20-04-2014 Eerste autonome vlucht.
26-04-2014 Draadloze telemetrie / instel controlepaneel op 434MHz.
07-05-2014 Heading lock functie toegevoegd.
26-05-2014 Nieuwe algoritme voor de gps hold.
09-06-2014 GPS overstap van LS20031 naar u-blox LEA-6S.
16-06-2014 Eerste vlucht met waypoints.
29-06-2014 Nieuwe algoritme voor de gps hold en return to home.
05-07-2014 Eerste S.Bus naar pwm testen.
24-08-2014 Eigen 6dof sensor met kwaliteitssensoren.
07-09-2014 Eerste testen met een Arduino Uno op 20MHz.
22-11-2014 CNC frees voor het maken van frame onderdelen.
25-12-2014 Volledige S.Bus integratie.
30-12-2014 Eerste printplaat is een feit!

full


Op dit moment ben ik bezig met het testen van de print. En het lijkt er op dat alles werkt. Omdat de klokfrequentie van de hoofdprocessor van 16MHz naar 20MHz is gegaan zijn er aanpassingen nodig in de programmatuur.

Ook het toepassen van nieuwe sensoren zoals de druk- en versnellingssensor vragen om aanpassingen van de software. Ik ben dan ook van plan om het gehele programma nog een keer flink op de schop te nemen.

[FONT=&quot]Voor het uploaden van nieuwe programma’s heb ik een ISP-programmer gemaakt. Hierdoor vervalt de standaard Arduino bootloader en komt er nog meer programmaruimte vrij.

full

[/FONT]
 
Laatst bewerkt door een moderator:
Van die 20.000 ben ik er zeker een. Vind het geweldig zoals jij het beschrijft en ons laat zien hoe jij het aanpakt. Ga zo door zou ik zeggen.
 
Wat een ontzettend mooi project.
Ik ga zelf beginnen aan een bijna identiek project als dat van jou.
Ik heb al veel research gedaan en sta op het punt mijn onderdelen voor mijn quad te gaan bestellen.

Heb je misschien nog wat tips?
En waar bestel je je onderdelen voor je quad? Alles uit Amerika laten komen zal de kosten van mijn project enorm laten stijgen.

Wojt333
 
Back
Top