Stap 4: Gebruik-kalibratie
Waarom hebben We nodig om te kalibreren?
Niet is de sensor al uit de fabriek gekalibreerd?
Dit zijn de tien opeenvolgende lezingen (acceleraties gevolgd door angular snelheden; x, y, z in beide gevallen) met de GY521 in stilstand, verticale positie (as + X naar boven):
- 17088 208-1048 5-1-216
- 17028 308-1320 4 3-250
- 16988 360-1212 7 3-236
- 16876 376-1032-13-36-218
- 16972 244-1348-13-25-226
- 17060 316-1156 -2-11 --224
- 16948 328-1300-31 0-224
- 17016 332-1124 1-1-209
- 17088 348-1088 -6-27-238
- 284 van 17072-1104-13-24-228
Als het apparaat echt verticale was, de lezingen voor de versnellingen moeten worden (zie hieronder de reden): (16384, 0, 0); en als het apparaat echt nog, de lezingen was voor de gyroscoop moet worden: (0,0,0). Dus: de lezingen moeten alles geweest: [16384, 0, 0, 0, 0, 0]: wat is er mis? Of, is eigenlijk iets mis?
Waarschijnlijk er drie dingen gebeuren:
- het apparaat is nog steeds, althans met geen merkbare beweging, maar het is waarschijnlijk niet perfect verticaal,
- Er is signaal ruis, en dit is waarschijnlijk de oorzaak van de schommelingen in de instant lezingen,
- de lezingen zijn rauwe, niet gekalibreerd, dat is waarom ze "", gemiddeld afgeweken zijn.
Dus, laten we gaan stap voor stap.
ADC voor de MPU6050
De MPU6050 heeft een geïntegreerde ADC (analoog / digitaal-Converter), die elk kanaal (acceleratie en angular snelheden, elk in x, y, z) in 16-bits uitgangen. Dus 2 ^ 16 verschillende resultaten mogelijk zijn: 0 en 65535, of-32768 naar +32767. Deze serie van lezingen is toegewezen in de standaard configuratie van + - 2g in de versnellingen en +-250 deg/s in angular snelheden. Dan 1 g 16384 LSB (minder Signifficant bits, of digitale raw eenheden van lezing correspondeert), en 1 deg/s komt met 131 LSB overeen.
Beide bereiken kunnen worden gewijzigd in de configuratie-instellingen via software door Jeff Rowberg van code (zie vorige stap). De mogelijkheden zijn:
- Versnelling bereiken: + - 2g, 4g, 8g 16g
- Gyrokompassen bereiken: +-250, 500, 1000, 2000 deg/s.
Opmerking dat vanwege de ADC van 16 bit inbelbeperking, uitbreiding van het bereik van metingen de gevoeligheden vermindert: het + - 4 g-bereik toegewezen in het bereik van een lezing van (-32768, +32767) geeft 8192 LSB/g.
Dus, de ruwe lezingen kunnen worden omgezet in "fysieke" eenheden met de bekende gevoeligheden zijn:
- 1,042969 0,012695 - 0,063965 0,038168 - 0,007634 - 1,648855
- 1,039307 0,018799 - 0,080566 0,030534 0,022901 - 1,908397
- 1,036865 0,021973 - 0,073975 0,053435 0,022901 - 1,801527
- 1,030029 0,022949 - 0,062988 - 0,099237 - 0,274809 - 1,664122
- 1,035889 0,014893 - 0,082275 - 0,099237 - 0,190840 - 1,725191
- 1,041260 0,019287 - 0,070557 - 0,015267 - 0,083969 - 1,709924
- 1,034424 0,020020 - 0,079346 - 0,236641 0,000000 - 1,709924
- 1,038574 0,020264 - 0,068604 0,007634 - 0,007634 - 1,595420
- 1,042969 0,021240 - 0,066406 - 0,045802 - 0,206107 - 1,816794
- 1,041992 0,017334 - 0,067383 - 0,099237 - 0,183206 - 1,740458
- Eenheden: g en deg/s
Goed, maar... Wat is het echte resultaat? Hoeveel decimalen kunnen goed worden gebruikt? Heb ik geselecteerd met 6 decimalen, maar waarom niet 10?
Manipulatie van getallen
Wat we kunnen zeggen is dat met een betrouwbaarheidsniveau van 95% (gebaseerd op alle records van de kalibratie, niet alleen de 10 hieronder) het gemiddelde kunnen worden berekend met statistische hulpmiddelen en inachtneming van de regels van significante cijfers. Zie hier de spreadsheet, waarvan de resultaten zijn:
- AX = 17002 +-5 LBS <> - 1.038 +-0.000 g
- Ay = 328 +-4 LBS <> - 0.020 +-0.000 g
- AZ =-1170 +-6 pond <> --0.071 +-0.000 g
- GX =-1.9 +-0,7 LBS <> --0.014 +-0.005 º / s
- Gy = 0,6 +-1.1 kg <> - 0,004 +-0,008 º / s
- Gz =-227 +-1 kg <> --1.730 +-0,007 º / s
Duidelijk, gewoon door te kijken naar de resultaten: de versnelling lezingen lijken te zijn "betrouwbare", en Gy is niet. Maar zelfs deze "statistisch gecorrigeerd" gemiddelden zijn nog steeds niet wat men zou verwachten! Versnelling moet 1.000; en daarnaast, men vraagt zich af waarom het gemiddelde van Gz is zo hoog als het apparaat niet bewegende was.
Dus, voer kalibratie - eindelijk!
Kalibratie (van de versnellingsmeter)
Eerste opmerking: kalibratie is niet bedoeld als oplossing van de resultaten van een defecte sensor. Als uit de resultaten van de vorige zijn wij van mening dat sensor Gz waarschijnlijk gebroken of miss-verbonden is, dan is er waarschijnlijk geen kalibratie die kan repareren.
Tweede opmerking: een kalibratie vergelijkt lezingen, of lezingen met aannames. Extrapolatie buiten deze lezingen vereist zorg.
De MPU6050 wordt een theoretische lineaire relatie tussen de gemeten versnellingen of angular snelheden en de uitvoer weergegeven. (Het product specificatie gegevensblad vermeldt een "niet-lineariteit" van 0,5% en 0,2%, respectievelijk; "cross-as gevoeligheid", de mate van verandering in één as geïntroduceerd door de toepassing van versnelling of hoeksnelheid op een andere as, is 2%).
Dan is het misschien mogelijk correcties toe te passen om de omzetten vergelijkingen. In het vorige geval, voor de versnellingen leidt de correctie van de fout van de winst tot:
- AX(g) = (Ax(LBS)) / (16384 + 618)
Offset afwijkingen kunnen ook worden gecorrigeerd:
- Ay(g) (Ay(LBS) - 328) = /(16384-328)
- AZ(g) = (Az(LBS) +1170)/(16384+1170)
Deze compensatie procedure zou juist als we zijn er zeker van dat de versnellingsmeter echt verticale was (+ X omhoog) wanneer de kalibreren maatregelen werden genomen - anders, het is niet juist. Het kan zijn dat de fout dus ingevoerd klein is, maar het is toch niet correct. En, helaas, het is moeilijk om zeker te zijn van de juistheid van de verticaliteit waarmee de MPU6050 wordt geplaatst tijdens de kalibratie.
Een alternatieve kalibratieprocedure (de "zes posities-test") zou moeten lezen zesmaal de versnelling resultaten, met het apparaat nog steeds. Op elk van deze gevallen zou de sensor worden gedraaid, zodat elke keer een verschillende as op de "verticale" (+-x/y/z is). De lezingen op elke positie voor alle assen biedt voldoende informatie om een gedetailleerde kalibratie.
Een eenvoudige beschrijving van deze procedure vindt u hier; meer precieze info hier; ernstiger hier.
Ongeacht de positie van de sensor, als het niet beweegt, moet dan de norm of de absolute waarde van de versnelling van de vector 1 g (of welke is de versnelling van de zwaartekracht op uw locatie). Dit kan ook worden gebruikt voor calibratie doeleinden in elke positie van de sensor.
Kalibratie (van de versnellingsmeter) anders dan met G
Twee eenvoudige extra kalibratie tests lijken mogelijk, hoewel ik niet hen hebben ontwikkeld:
- Vrije val: een versnellingsmeter in een vrije val moet lezen (0,0,0), ongeacht de ruimtelijke oriëntatie. Waarschijnlijk zal het moeilijk genoeg om gegevens te verzamelen alvorens een arrestor (vanaf mijn 7e verdieping duurt de tester nauwelijks langer dan 2 seconden ingedrukt tot de straat).
- Slinger: Een slinger op waarvan bob de GY521 is zou meten acceleraties en angular snelheden die relatief gemakkelijk zijn te berekenen.
Kalibratie (van de gyroscoop)
De standaardprocedure voor het kalibreren van de versnellingsmeter gebruikt kan worden gebruikt voor de offset controle van de gyroscoop, maar het biedt geen idee over de fout krijgen. Als de fout van de winst worden gecontroleerd moet, ik neem aan dat een gekalibreerde slinger vereist worden kan.
Hoeveel tijd voor warming-up? En voor de kalibratie?
Een grafiek is gekoppeld met het weergeven van de lezingen die aangemeld zo spoedig mogelijk na het voeden van de Arduino. Geen opwarmperiode is herkenbaar - of, als er om het even, dat lijkt zeer korte en geen praktische gevolgen voor mijn doeleinden.
De vraag hoeveel tijd nodig is voor kalibratie gegevens lezen kan worden omgezet in een statistisch probleem: hoeveel monsters moeten uit een algemene populatie nauwkeurig schatting van het gemiddelde? Het antwoord is: maar liefst vereist om te zorgen voor stabiele resultaten. Er zijn expliciete expressies voor het aantal monsters, maar, in het algemeen en als haalbaar is, het is beter om zo veel veronderstellingen over de bevolking mogelijk. Een bijgevoegde grafiek toont de evolutie van de schatting van de Ax met de grootte van de steekproef. Na 10-15 seconden van lezingen zijn de resultaten vrij stabiel, en mijn aanbeveling zou zijn om te lezen voor 20-25 s bij een frequentie van ten minste 25 Hz.