NLF / Modellfly / Bygg en Multirotor del 2, MultiWii Flightcontroller.
Jon Gunnar Wold

Bygg en Multirotor del 2, MultiWii Flightcontroller.

Se del 1 i MI nr 1/2012 for forslag til deler og hvordan man lager en enkel ramme til multirotor av typen quadrocopter.
Denne del 2 som publiseres her på nettet vil vise hvordan man lager og stiller inn flightcontrolleren.


 

Sjekk at du har fått rett type Arduino, du trenger 5V 16Mhz utgaven.

Bygging av Arduino

 

 

Bygging av WMP

Vi begynner med å plukke fra hverandre WMP enheten slik at vi får tatt ut kretskortet. Skru opp skruene i kassen. På noen har de benyttet en spesiell skruetype som ikke er så grei å få opp. På slike pleier jeg å sette en stor bor i skruehullet slik at kassen borres fri fra skruene. Så kan man plukke kassen fra hverandre og fjerne skruene etterpå.

 


Som du ser av bildet, enheten har 2 plugger. Den ene er beregnet til Nintendo Nunchuck som inneholder en accelerometer. Noen benytter disse til selvnivellering av Multirotoren, men jeg vil anbefale enten en accel breakoutboard istedenfor, eller en IMU (Inertial Measeurement Unit) som gjerne inneholder både gyro, accelerometer, magnetisk kompass, barometer. Kjøper du en IMU med gyro kan WMP'en erstattes i sin helhet, men for de av oss som vil ha en billig løsning er WMP med gyro helt utmerket. Pluggen som er beregnet til Nunchuck kan klippes av, men pass på å isolere ledningsstumpene. Vi som har levd en stund klipper gjerne aldri en ledning så kort at den ikke kan tilkobles igjen når man oppdager at man har klippet feil.


Den andre pluggen kan også klippes av, men det er viktig å notere seg, ta et bilde av eller la det være nok ledningsstump igjen på pluggen til at du kan identifisere de 4 ledninger vi trenger til vårt formål og følge de til printkortet.



Vi trenger altså en forbindelse til +5volt (Power), en ground (GND), en klokkesignal (SCL), og en datasignal (SDA). De øvrige ledningene har vi ikke bruk for, de kan isoleres. Er du så heldig at shield, eller moderkortet, ditt er laget slik at ledningene kan brukes uten å skjøte, er det bra. Ellers må de forlenges.

Bygging av moderkort

Vi viser et par forskjellige moderkort, oppbyggingen er stort sett det samme, de kobler bare sammen Arduino'en med WMP og esc'ene. Du er selvfølgelig ikke nødt å lage Arduinoen pluggbar, men det er veldig greit dersom du må skifte den ut. En ting som kan være verdt å notere seg er at man erfaringsmessig ikke er tilhenger av å koble forsyningsspenningene fra alle esc'ene i parallell til MultiWii controlleren, men heller benytte en egen UBEC som spenningsforsyning. Hvis du ikke vil klippe plussledningen fra esc'ene kan du heller la være å montere de respektive pinnene på moderkortet slik at plussene fra esc'ene ikke blir koblet til kortet.

Når du har frigjort WMP'en, eventuelt skjøtet ledningene, monteres kortet gjerne på et par biter med gyrofoam eller lignende, men pass på at orienteringen på WMP'en, den må orienteres med front fremover. Som nevnt tidligere er vibrasjoner fiende nummer èn så det er om å gjøre å prøve å unngå for det første de oppstår (ref. propell/motorbalansering i Del 1) og for det andre at de formidles til gyroene.



Du har nå bygget sammen Arduinoen med moderkortet og er nesten klar til programmering av Arduino'en.

 1. Koble FTDI kortet til USB port på PC'en din med en egnet kabel. Er du riktig heldig vil Windows automagisk laste ned driver til den. Hvis ikke kan den hentes her:http://www.ftdichip.com/Drivers/VCP.htm. Pakk opp og installer.

 2. Last ned, pakk opp og installer Arduino softwaren, den kan du finne her:  http://www.arduino.cc

 3. Last ned, pakk opp og installer MultiWii softvaren. Det finnes flere utgaver og underutgaver. Versjon 1.7 er velprøvd og benyttet i Multirotoren i Del 1: http://code.google.com/p/multiwii/downloads/list

Når du har pakket MultiWii filen opp ser du 2 mapper, selve programmet til Arduinoen (sketch) i mappen "MultiWii71-7, og et eget lite program de kaller GUI (Graphic User Interface) i mappen "MultiWiiConfig. GUI'en er et uvurderlig hjelpemiddel når du skal sette opp multirotoren din.

Før vi laster inn programmet, må vi tilpasse det på et par punkter. Klikk på mappen MultWiiV1-7 og velg MutiWiiV1-7 PDE-filen. Du skal nå ha fått opp:



Programendringer for din type multirotor/esc i programmet gjøres ved å sette inn eller fjerne to skråstrek før kommandoer. Tilfører du skråstrekene foran kommandoen vil CPU'en ignorere det, sløyfer du skråstreken vil kommandoen bli utført. Når skråstrekene fjernes blir teksten sort for å vise at den gjelder.

For at MultiWii copteret ditt skal fungere bra må motorene gå hele tiden etter at du har armert den, en slags "tomgang". Under normal flyging går throttlestikken gjerne ikke helt ned til cut-off, men flyr man akro vil den gjerne havne der under loops etc. og da ønsker vi at motorene ikke stopper helt. Dette skyldes at esc'er bruker en del tid å starte fra stillstand til oppstart og denne "dødtiden" unngår man om man lar motorene gå hele tiden. Denne tomgangsverdien kan du måtte justere litt på til motorene starter ved armering, og det gjøres ved å velge en av verdiene nevnt for din esc, eller velge "define MINTHROTTLE" og sette inn en verdi (RPM) til motorene starter når den armeres.

Så setter man inn hvilken type multirotor man har, i vårt tilfelle en quad i Pluss konfigurasjon, der en av armene peker mot front i motsetning til en "X" konfigurasjon der front er mellom to armer.

Yaw retningen kan snus. Dersom multirotoren går fortere og fortere rundt sin egen yaw-akse når du skal fly den, kan yaw korreksjonen reverseres.

I2C: speed har med kommunikasjonen på I2C bussen, jeg lar den være på 100khz normal mode.

Pullups: brukes når du benytter IMU eller eventuelt en accel-kort. Sensorene på IMU/accel tåler ofte ikke mer enn 3.3v, verken som forsyningsspenning eller på bussen (SCK, SDA). Her må du følge IMU fabrikantens anbefaling. WMP benytter 5v og default verdiene i sketchen har fungert på de FC'ene jeg har laget.

  
define Pro Mini - dette er den type Arduino kort vi benytter.

Failsafe - Det skal visst gå an å programmere en failsafe som gjør at multirotoren daler sakte ned fra himmelen ved brudd på radioforbindelsen. Får du det til er det fint om du kan legge ut en video på youtube, har aldri sett noe sånt i aksjon!

Så kommer noen linjer som omhandler en pitch/roll kamera stabilisering kortet kan gi. Ikke i bruk for vår enkle Multirotor.

I2C gyroscope - til vår bruk velger jeg ITG3200 ved å fjerne skråstrekene.

I2C accelerometer - her velger du den du eventuelt har valgt - ikke i bruk i vår multirotor.

I2C - velg barometer type om du har installert det. Ikke i bruk i vår multirotor.

I2C - velg magnetisk kompass type om du har installert det. Ikke i bruk i vår multirotor.

 
 
ADC accelerometer. Ikke i bruk i vår multirotor.

#define INTERLEAVING_DELAY 3000. Denne fungerer greit på vår multirotor.

/* for V BAT monitoring

after the resistor divisor we should get [0V;5V]->[0;1023] on analog V_BATPIN

with R1=33k and R2=51k

vbat = [0;1023]*16/VBATSCALE */

#define VBAT // comment this line to suppress the vbat code

#define VBATSCALE 131 // change this value if readed Battery voltage is different than real voltage

#define VBATLEVEL1_3S 107 // 10,7V

#define VBATLEVEL2_3S 103 // 10,3V

#define VBATLEVEL3_3S 99 // 9.9V

Dette brukes dersom du kobler en summer for batterivarsel til Arduino'en. Vi bruker en egen Lipo alarm rett på batteriet så denne kan bare stå.

____________________________________________________________________

/* when there is an error on I2C bus, we neutralize the values during a short time. expressed in microseconds

it is relevent only for a conf with at least a WMP */

#define NEUTRALIZE_DELAY 100000

Denne har jeg aldri hatt bruk for å endre.

____________________________________________________________________

/* this is the value for the ESCs when thay are not armed

in some cases, this value must be lowered down to 900 for some specific ESCs */

#define MINCOMMAND 1000

Denne må kanskje jsuteres litt for å få esc'en til å initialiseres før den armeres.

_______________________________________________________________

/* this is the maximum value for the ESCs at full power

this value can be increased up to 2000 */

#define MAXTHROTTLE 1850

Har aldri justert på.

______________

/* This is the speed of the serial interface. 115200 kbit/s is the best option for a USB connection.*/

#define SERIAL_COM_SPEED 115200

Denne pleier fungere greit.

____________________________________________________________________

/* In order to save space, it's possibile to desactivate the LCD configuration functions

comment this line only if you don't plan to used a LCD */

#define LCD_CONF

/* to use Cat's whisker TEXTSTAR LCD, uncomment following line.

Pleae note this display needs a full 4 wire connection to (+5V, Gnd, RXD, TXD )

Configure display as follows: 115K baud, and TTL levels for RXD and TXD, terminal mode

NO rx / tx line reconfiguration, use natural pins */

//#define LCD_TEXTSTAR

Det er mulig å knytte en LCD display til Arduino'en slik at det er lett å gjøre endringer i felten uten å ha med laptop.

_____________________________________________________________________

 
?

/* motors will not spin when the throttle command is in low position

this is an alternative method to stop immediately the motors */

//#define MOTOR_STOP

Denne har jeg ikke benyttet meg av.

_________________________________________________________________

/* some radios have not a neutral point centered on 1500. can be changed here */

#define MIDRC 1500

Denne har jeg ikke benyttet meg av.

__________________________________________________________________

/* experimental

camera trigger function : activated via AUX1 UP, servo output=A2 */

//#define CAMTRIG

#define CAM_SERVO_HIGH 2000 // the position of HIGH state servo

#define CAM_SERVO_LOW 1020 // the position of LOW state servo

#define CAM_TIME_HIGH 1000 // the duration of HIGH state servo expressed in ms

#define CAM_TIME_LOW 1000 // the duration of LOW state servo expressed in ms

Ikke i bruk i vår enkle quad.

___________________________________________________________________

/* you can change the tricopter servo travel here */

#define TRI_YAW_CONSTRAINT_MIN 1020

#define TRI_YAW_CONSTRAINT_MAX 2000

#define TRI_YAW_MIDDLE 1500

Denne gjelder servoen som benyttes i en tricopter, ikke for vår quad.

____________________________________________________________________

//****** end of advanced users settings *************

/**************************************/

/****END OF CONFIGURABLE PARAMETERS****/

/**************************************/

Mer er det ikke å endre på.

_____________________________________________________________________

Når du har gjort endringene i programmet nevnt over slik at den passer til Multirotoren din, er du klar til å laste den opp til Arduino'en. Nå kan være en god tid å feste kontrolleren din til farkosten du skal benytte den på. Det finnes ingen fasit for hvordan dette skal gjøres, enkle løsninger har virket, sofistikerte løsninger har virket og motsatt. Min variant er enkel, en bit liggeunderlag fra Clas'en og litt varmelim.

Koble FTDI-kortet ditt til Arduino'en, obs rett vei! Du ser teksten på pinnene (BLK, GRN) på FTDI-kortet og teksten på moderkortet ditt skal stemme overens. Du trenger ikke koble på rx eller spenning fra UBEC enda, arduino'en forsynes via USB kontakten til PC'en. Plugg en ledning fra FTDI-kortet til en USB port på PC'en din. Har du lyd på skal du høre fanfare fra Windows og du får gjerne opp en tekst om driverinstallasjon etc. Du får rødt og grønt blinkende lys på FTDI, blinkende grønt et par sekunder mens et fast rødt lys på Arduino'en tennes.

Først må du velge rett type Arduino, velg "Tools", Board" og "Arduino Pro or Pro Mini (5V, 16Mhz) w/ATmega328".

Så velger du "Upload", nest siste rubrikk oppe til høyre på verktøyslinjen.

 
Det kan ta noen sekunder, så skal du se det blinke på TX og RX LED'en på FTDI og grønt på Arduino. I bunnen av skjermbildet skal det stå "Uploading to I/O Board."

Etter noen sekunder vil det stå "Done uploading". Gikk det bra på første forsøk kan du trygt begynne å tippe Lotto, sjansen er stor for at du har flaks i livet! For oss andre er det bare å prøve noen ganger og så be om hjelp på et egnet forum.

Da skal du ha programmert Arduino'en og det er på tide å ta neste steg: Vi prøver oss på GUI'en slik at du kan se hva som skjer.

Lukk sketch'en, gå tilbake til de to mappene og velg mappen "MultiWiiConf1_7". Med forbindelsen mellom PC og FTDI/Arduino fremdeles etablert, velg mappen med operativsystemet du benytter, i mitt tilfelle application.windows.

Velg programfilen MultiWiiConf1_7.

Du får forhåpentligvis opp noe som ligner på følgende:

 

Utfyllende info om GUI finner du her: http://www.multiwii.com/software.

Ref. ring 1 "PORT COM - COM 5" . Her får du forhåpentligvis et forslag til COM port du kan klikke på, i mitt tilfelle COM5. Klikker jeg på den skifter den farge slik at jeg ser at den virker. Det hender man må starte Config programmet flere ganger før den begynner men det pleier å gå bra til slutt.

Trykk på "Start" i ring 4, så vil du kunne se en strek begynne å løpe fra venstre mot høyre utfor ring 7. "Cycle time" i ring 5 skal nå normalt vise ca. 3000. Trykk på "Read". Sannsynligvis vil du få verdier i PID feltet, ring 2, som er satt i programmet som default. På skjermbildet vist er de verdiene som er satt i programmet for vår quad.

Hvis du beveger kortet nå bør du kunne se flere forskjellige fargede linjer bevege seg (klikk og dra "Scale" om bevegelsene er veldig små. Fargene på linjene tilsvarer "Gyro Roll, "Gyro Pitch" og "Gyro Yaw", og tallene for disse skal også variere med bevegelsene du gir kortet. Gratulerer, det er liv i gyroene dine!

 
 
Da er det på tide å programmere senderen din. Vår enkle quad programmeres som et vanlig fly (ACRO). Det anbefales å øke EPA til 125% for Throttle, Aileron, Rudder og Elevator. Slå på senderen, forbind mottakeren til moderkortet og forsyn moderkortet med 5V via UBEC eller rx batteri. OBS! Fartsregulatorene er enda ikke koblet til, vi skal sjekke responsen på kortet først.

Med forbindelsen til PC'en intakt, start Conf programmet som før, klikk på Com Port'en du har tilknyttet, trykk "Start" og "Read". Du skal nå kunne se hvilke verdier mottakeren din mottar fra senderen, uttrykt i microsekunder.

 

Altså er for eksempel elevatorverdien 1500 microsekunder=1,5millisekunder= elevatorstikken i midten. Ved å bevege stikkene på senderen vil du kunne se hvordan signalene varierer. I boksen som viser "Front, left, right og rear" vil du, etter å ha armert kortet, kunne se hvilke signaler fartsregulatorne får fra mottakeren. I utgangspunktet er de i null, kortet må armeres før signaler blir sendt dit, slik at ikke motorene starter når du plugger i batteriet.

 


 I denne versjonen kan du armere på flere måter, jeg liker å ta aileron ned og til høyre, ned og til venstre for å desarmere. Når kortet er armert skal du kunne se fartsregulatorene få tilsendt signaler tilsvarende ca. det du la inn i programmet som min throttle. Når du nå bevger stikkene skal du kunne se variasjonen i signalene til fartsregulatorene. Utfra det du vet om hvordan multirotorer virker vil du nå kunne sjekke at kortet ditt fungerer alt etter hvordan signalene endrer seg ved stikkebevegelser og når du beveger kortet. Nå er det snart på tide å teste Multirotoren, men først:

PID verdier - mystisk men nødvendig

Artikkelforfatteren innrømmer villig at den hele og fulle forståelsen av PID ligger et stykke inn i fremtiden, eller kanskje aldri vil oppnås. Imidlertid er vedkommende et levende bevis på at man ikke nødvendigvis trenger en slik forståelse for å kunne lage en Multirotor som flyr fint så lenge det finnes andre, klokere personer som er villig til å dele sin kunnskap.

Har du laget en tilsvarende Quad som er beskrevet i disse 2 artikler kan du gjerne, men uten at artikkelforfatteren tar på seg noe som helst ansvar for resultatet, benytte PID verdiene på skjermbildene vist tidligere som utgangspunkt:

P for Roll og Pitch er lik 4.0, for Yaw er den lik 8.0. I for Pitch og Roll = 0.030, for Yaw er den lik 0.000. D for Pitch og Roll = 15, for Yaw er den lik 0. Throttle PID attenuation er lik 0.00.

Dette er et utgangspunkt, quad'en min flyr så bra at jeg ikke har funnet det umaken verdt å finne PID'ens hellige gral, det er mye annet som er gøyere.

I Gui'en justerer du PID verdiene for hver akse slik:

Åpne gui'en på vanlig måte, klikk og hold musen nede innenfor hver boks utfor aksen du vil justere P-verdi på og dra til ønsket verdi vises i boksen. Trykk på "Write" og så "Read" for å sjekke at verdiendringen er registrert. Gjør det samme for I-verdier og D- verdier.


Sakset og løst oversatt fra internett:

Proportional-Integral-Derivative

Når Multirotorens orientering forandres i pitch/roll/yaw akse vil gyroene indikere en vinkelforandring fra dens opprinnelige posisjon. Kontrollerkortet husker den opprinnelige posisjon og benytter en "PID" programsløyfe for å drive motorene til å gjennopprette den opprinnelige posisjonen. Dette gjøres ved en kombinasjon av den målte vinkelforandringen, å sample over tid og å forutse den fremtidige posisjonen.

P-verdien er den som har mest å si, og gir utgangspunktet for brukbare flyegenskaper.

Før du går videre bør du, for å sikre at fartsregulatorene er så likt stilt som mulig, stille throttle range på alle sammen på vanlig måte iht manualen for regulatorne du benytter. Her kan det være greit å benytte et par Y-kabler slik at alle fartsregulatorene mates fra throttle kanalen samtidig. Koble fartsregulatorene til kortet.

Når du har sikret deg at at du kan armere/desarmere kortet, motorene reager korrekt på bevegelser du utsetter fartøyet ditt for og for stikkebevegelser er det på tide å sette på propellene men, og det er viktig:

DU MÅ ALLTID HA RESPEKT FOR HVILKE SKADER PROPELLENE PÅ MULTIROTOREN DIN KAN FORÅRSAKE PÅ DEG SELV OG ANDRE.

Her snakker vi ikke om et kutt i fingeren, men alvorlig skade som å miste synet og sjansen til å utforske smerten ved medisinsk plastisk kirurgi på utsatte kroppsdeler.

Derfor bør du teste multirotoren din grundig FØR du setter på propeller og ved alle vesentlige endringer du gjør i programmet. Selv en liten quad som vår utvikler mye energi og potensialet for alvorlig skade er tilstede i rikelig monn. Det er definitivt ingen ulempe å være to personer til stede de første gangene du prøver. Armèr kortet og hold Multirotoren din godt fast over hodet i god avstand til hode/ansikt og øk throttle rolig til den kjennes lett. Prøv å trykke den ned i pitch akse, roll akse og rundt i yaw aksen. Du bør føle god motstand mot de bevegelsene du prøver å tvinge den til i både pitch og roll. Yaw aksen er erfaringsmessig ikke fullt så enkel å kjenne motstanden på. Dette krever litt erfaring, men når du er vant til å kjenne motstanden kan du ganske lett sette P verdien utfra motstanden du kjenner.

Nå har du et utgangspunkt til eventuelt å gjøre endringer i PID verdiene for de forskjellige aksene, begynn med P verdiene. Endringer bør være små og mange fremfor få og store, i alle fall inntil du har gjort det noen ganger. Når du har endret P til en verdi der den oscillerer når du vugger den i en akse, stiller du P verdien litt tilbake.

Når P-verdien økes vil fartøyet virke mer og mer solid/stabil inntil P blir for høy, da vil den begynne å oscillere/pendle.

I-verdien er tidsperioden vinkelforandringer samples og midles over.

Kraften som benyttes for å gjennopprette Multirotorens utgangsposisjon økes jo lengre endringen er tilstede inntil man når en maksimumsverdi. En høyere I-verdi vil øke Multirotorens evne til å holde en heading.

D - betegner hvor fort Multirotoren vil returnere til utgangsposisjon. En høyere verdi (siden den er i utgangspunktet negativ vil det si et høyere tall - altså nærmere null) vil gi en brå korreksjon tilbake til utgangsposisjon.

Når disse verdiene innvirker til dels på hverandre skjønner du at her ligger det masse muligheter til mange timers moro for å finne den optimale verdien på PID på alle akser.. Som nevnt i Del 1, vil du ha PlugNPlay, kjøp et KK kontrollerkort!

Vil du lese mer om den fascinerende PID verdenen kan du prøve denne linken:

http://www.rcgroups.com/forums/showthread.php?t=1375728

Når du føler at Multirotoren din reagerer fornuftig både i forhold til stikkebevegelser og korrigeringer som følge av bevegelser du genererer for hånd er det på tide å se om den flyr. Dette bør foregå ute, et stykke fra folk og gjerne på et mykt underlag. Gi rolig gass til den begynner å virke lett. Så prøver du forsiktig en pitch forandring mens den er på bakken. Reagerer den rett vei, prøver du en roll forandring. Fremdeles ok? Gi litt mer gass til den så vidt løfter seg fra bakken og sett den ned igjen (et lite hopp). Ingen stygge tendenser (dreier den fort rundt sin egen yaw-akse, må du kanskje endre retningen i Arduino sketchen vist tidligere). Virker alt fornuftig så langt er det ingen vei tilbake, gi rolig gass til den letter fra bakken og ta det derfra. Trenger du hjelp er det bare å hive seg på et forum:

http://www.rcgroups.com/multi-rotor-helis-659/

 Nå har du forhåpentligvis blitt kjent med Multirotoren din, du vet hvordan du programmerer og konfigurerer, endrer PID verdier etc. Om du ikke har mye erfaring med å fly multirotorer kan du se frem til mye moro og en hel del krasj. Imidlertid er det både interessant og lærerikt, nøkkelord for den fine hobbyen vår. Takket være bidragsytere som har øst rikelig og gratis fra sin kunnskap kan selv dekatommeltottere fly multirotorer. En varm takk sendes disse kunnskapsrike og gavmilde individer.

Artikkelforfatteren har prøvd å være så nøyaktig som mulig, men feil kan forekomme. Forhåpentligvis finnes det en webside der eventuelle feil/mangler kan rettes.

Hovedhensikten med artiklene har vært å være en hjelp og inspirasjon for de som måtte ønske å prøve seg innen Multirotorer. Jeg vil takke redaktøren som ga meg anledning til å skrive og dere som har giddet å lese det jeg hadde å formidle.

MD

Bilder av ferdig kontroller