Bouwverslag: zelfbouw flight controler op basis van Arduino Uno

Discussie in 'Multicopters bouwverslagen' gestart door JoopB, 31 jan 2014.

  1. JoopB

    JoopB

    Lid geworden:
    10 jan 2013
    Berichten:
    2.181
    Locatie:
    Zwolle
    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:
    [​IMG]

    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:
    [​IMG]

    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: 17 nov 2015
  2. DKHDKH

    DKHDKH

    Lid geworden:
    15 mei 2014
    Berichten:
    46
    Leuk te lezen hoe zo'n S-bus nou eigenlijk werkt. Bedankt weer voor de update.
     
  3. JoopB

    JoopB

    Lid geworden:
    10 jan 2013
    Berichten:
    2.181
    Locatie:
    Zwolle
    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 ;-)
     
  4. DKHDKH

    DKHDKH

    Lid geworden:
    15 mei 2014
    Berichten:
    46
    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.
     
  5. JoopB

    JoopB

    Lid geworden:
    10 jan 2013
    Berichten:
    2.181
    Locatie:
    Zwolle
    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 ;-)

    [​IMG]
     
    Laatst bewerkt door een moderator: 17 nov 2015
  6. JoopB

    JoopB

    Lid geworden:
    10 jan 2013
    Berichten:
    2.181
    Locatie:
    Zwolle
    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.


    [​IMG]


    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: 17 nov 2015
  7. stef110

    stef110

    Lid geworden:
    17 jun 2009
    Berichten:
    264
    Locatie:
    aalsmeer
    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

    [​IMG]

    stef
     
  8. JoopB

    JoopB

    Lid geworden:
    10 jan 2013
    Berichten:
    2.181
    Locatie:
    Zwolle
    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.
     
  9. Nak

    Nak

    Lid geworden:
    16 jun 2013
    Berichten:
    227
    Locatie:
    Schagen
    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 ?
     
  10. stef110

    stef110

    Lid geworden:
    17 jun 2009
    Berichten:
    264
    Locatie:
    aalsmeer
    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
     
  11. JoopB

    JoopB

    Lid geworden:
    10 jan 2013
    Berichten:
    2.181
    Locatie:
    Zwolle
    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 ;-)
     
  12. JoopB

    JoopB

    Lid geworden:
    10 jan 2013
    Berichten:
    2.181
    Locatie:
    Zwolle
    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:

    [​IMG]

    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: 17 nov 2015
  13. Gr3g

    Gr3g

    Lid geworden:
    15 jan 2015
    Berichten:
    1
    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
     
  14. JoopB

    JoopB

    Lid geworden:
    10 jan 2013
    Berichten:
    2.181
    Locatie:
    Zwolle
  15. JoopB

    JoopB

    Lid geworden:
    10 jan 2013
    Berichten:
    2.181
    Locatie:
    Zwolle
    Inmiddels zitten bijna alle componenten op de print. Ik wacht alleen nog op condensatoren en headers.

    [​IMG]
     
    Laatst bewerkt door een moderator: 17 nov 2015
  16. Andreotti

    Andreotti

    Lid geworden:
    20 jun 2012
    Berichten:
    370
    Locatie:
    Alphen aan den Rijn
    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é
     
  17. JoopB

    JoopB

    Lid geworden:
    10 jan 2013
    Berichten:
    2.181
    Locatie:
    Zwolle
    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:
     
  18. JoopB

    JoopB

    Lid geworden:
    10 jan 2013
    Berichten:
    2.181
    Locatie:
    Zwolle
    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!

    [​IMG]

    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.

    [​IMG]
    [/FONT]
     
    Laatst bewerkt door een moderator: 17 nov 2015
  19. DKHDKH

    DKHDKH

    Lid geworden:
    15 mei 2014
    Berichten:
    46
    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.
     
  20. wojt333

    wojt333

    Lid geworden:
    31 jan 2015
    Berichten:
    1
    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
     

Deel Deze Pagina