Stap 1: De versnellingsmeter
Als wij dit vak op een plaats met geen zwaartekracht velden of voor die kwestie met geen andere velden die van invloed kunnen zijn op de bal positie - zal de bal gewoon zweven in het midden van het vak. U kunt veronderstellen het vak wordt in de buitenste-ruimte ver-ver uit de buurt van de kosmische organen, of als dergelijke plaats is moeilijk te vinden stel je ten minste een ambacht van de ruimte een baan rond de planeet waar alles is in gewichtloze toestand. In de afbeelding hierboven ziet u dat we aan elke as een paar muren toewijzen (we verwijderd de muur Y + zodat we in de doos kijken kunnen). Stel je voor dat elke muur drukgevoelig is. Als we plotseling het vak naar links verplaatsen (we versnellen met versnelling 1g = 9,8 m/s ^ 2), de bal zal raken van de muur X-. We meten de kracht van de druk die de bal is van toepassing op de muur en een waarde van-1 g op de X-as de uitgang.
Houd er rekening mee dat de versnellingsmeter eigenlijk detecteert een kracht die is gericht in de tegenovergestelde richting van de versnelling vector. Deze kracht wordt vaak genoemd Inertial kracht of fictieve dwingen . Een ding je van dit leren moet is dat een versnellingsmeter maatregelen versnelling indirect via een kracht die wordt toegepast op een van de muren (volgens ons model, het zou een veer of iets anders in het echte leven versnellingsmeters). Deze kracht kan worden veroorzaakt door de versnelling, maar zoals we in het volgende voorbeeld zien zullen is het niet altijd veroorzaakt door versnelling.
Als we ons model en het op aarde zet de bal op de Z-muur zal vallen en zal een kracht van 1g van toepassing op de onderste wand, zoals in de afbeelding hieronder:
In dit geval het vak is niet bewegen, maar we krijgen nog een lezing van-1 g op de Z-as. De druk die de bal heeft toegepast op de muur werd veroorzaakt door een kracht van de zwaartekracht. In theorie zou het een ander soort kracht - bijvoorbeeld, als je bedenkt dat onze bal metallic, plaatsen van een magneet naast het vak kan verplaatsen de bal zodat het raakt een andere muur. Dit werd gezegd gewoon om te bewijzen dat in wezen versnellingsmeter maatregelen niet versnelling dwingen. Het gebeurt gewoon dat versnelling veroorzaakt een inertial kracht die gevangen door het detectiemechanisme van de kracht van de versnellingsmeter genomen is.
Hoewel dit model is niet precies hoe een MEMS-sensor is gebouwd is het vaak nuttig bij het oplossen van de versnellingsmeter gerelateerde problemen. Er zijn eigenlijk vergelijkbaar sensoren die hebben metalen ballen binnen, ze heten tilt switches, maar ze meer primitieve zijn en meestal ze alleen vertellen kunnen als het apparaat is geneigd binnen enkele variëren of niet, niet de omvang van de helling.
Tot nu toe hebben wij de versnellingsmeter uitvoer op een enkele as geanalyseerd en dit is alles wat die je met een enkele as versnellingsmeters krijgt. De reële waarde van de triaxiale versnellingsmeters komt van het feit dat ze traagheids krachten op alle drie assen kunnen detecteren. Laten we terug naar onze outkadermodel, en laten we het vak 45 graden naar rechts draaien. De bal zal nu 2 muren raken: Z- en X-zoals in de afbeelding hieronder:
De waarden van 0.71 zijn niet willekeurig, ze zijn eigenlijk een benadering voor SQRT(1/2). Dit wordt meer duidelijk als we onze volgende model voor de versnellingsmeter invoeren.
In het vorige model hebben wij vast de zwaartekracht-kracht en onze denkbeeldige doos gedraaid. In laatste 2 voorbeelden hebben we de output in 2 verschillende vak posities, geanalyseerd, terwijl de kracht vector constant gebleven. Terwijl dit nuttig was in het begrip van hoe de versnellingsmeter samenwerkt met externe krachten, is het meer praktisch berekeningen uit te voeren als we het coördinatensysteem op de assen van de versnellingsmeter repareren en stel je dat de kracht-vector om ons heen draait.
Neem eens een kijkje op het model hierboven, ik de kleuren van de assen bewaard zodat u een geestelijke overgang van het vorige model naar de nieuwe database kunt maken. Stel je voor dat elke as in het nieuwe model loodrecht op de respectieve vlakken van het vak in het vorige model staat. De vector R is de vector van kracht, dat is het meten van de versnellingsmeter (het zou de kracht van de zwaartekracht of de traagheids kracht uit de bovenstaande voorbeelden of een combinatie van beide). RX, Ry, Rz zijn projectie van de R-vector op de X, Y, Z-assen. Let wel op de volgende relatie:
R ^ 2 = Rx ^ 2 + Ry ^ 2 + Rz ^ 2 (Eq. 1)
dat is in feite het equivalent van de stelling van Pythagoras in 3D.
Vergeet niet dat een beetje eerder ik u dat vertelde de waarden van SQRT(1/2) ~ 0.71 zijn niet willekeurig. Als u ze in de bovenstaande formule aansluit, na eraan herinnerend dat onze zwaartekracht-kracht 1 g was we kunnen controleren of die:
1 ^ 2 = (-SQRT(1/2)) ^ 2 + 0 ^ 2 + (-SQRT(1/2)) ^ 2
gewoon door te vervangen door R = 1, Rx = - SQRT(1/2), Ry = 0, Rz =-SQRT(1/2) in Eq.1
Na een lange preambule van theorie krijgen we dichter bij de echte leven versnellingsmeters. De waarden Rx, Ry, Rz eigenlijk lineair gerelateerd zijn aan de waarden die uw levensechte versnellingsmeter zal output en die u kunnen gebruiken voor het uitvoeren van diverse berekeningen.
Voordat we er laten we praten een beetje over de manier waarop versnellingsmeters zullen deze informatie aan ons leveren. Meeste versnellingsmeters zal vallen in twee categorieën: digitaal en analoog. Digitale versnellingsmeters krijgt u informatie over het gebruik van een serieel protocol zoals I2C, SPI of USART, terwijl de analoge versnellingsmeters zal de uitgang van een spanningsniveau binnen een voorgedefinieerd bereik dat u hoeft te converteren naar een digitale waarde met behulp van een ADC (analoog digitaal conversie)-module. Ik zal niet ingaan op veel detail over hoe ADC werkt, deels omdat het een dergelijk uitgebreid onderwerp en deels omdat het verschilt van één platform naar het andere. Sommige microcontroller zal hebben een ingebouwde ADC modules sommigen van hen zal externe onderdelen nodig om uit te voeren van de ADC-conversie. Geen kwestie welk type van ADC zult module kunt u eindigen met een waarde in een bepaald bereik. Voor het voorbeeld een 10-bit ADC-module zal de uitgang van een waarde in het bereik van 0..1023, er rekening mee dat 1023 = 2 ^ 10 -1. Een 12-bit ADC-module zal output van een waarde in het bereik van 0..4095, merk op dat 4095 = 2 ^ 12-1.
Laten we gaan rekening houdend als volgt een eenvoudig voorbeeld, stel dat onze 10 bit ADC-module gaf ons de volgende waarden voor de drie kanalen van de versnellingsmeter (assen):
AdcRx = 586
AdcRy = 630
AdcRz = 561
Elke ADC-module zal hebben een referentie spanning, laten we aannemen dat in ons voorbeeld is 3,3 v. Als u wilt een 10 bit adc waarde omzetten in spanning gebruiken we de volgende formule:
VoltsRx = AdcRx * Vref / 1023
Hier een berichtje: dat voor 8 bit ADC de laatste scheidingslijn zou 255 = 2 ^ 8-1, en voor 12 bit ADC laatste scheidingslijn zou 4095 = 2 ^ 12 -1.
Deze formule toe te passen op alle 3 kanalen krijgen we:
VoltsRx = 586 * 3.3V / 1023 = ~ 1.89V (we ronde alle resultaten op 2 decimale punten)
VoltsRy = 630 * 3.3V / 1023 = ~ 2.03V
VoltsRz = 561 * 3.3V / 1023 = ~ 1.81V
Elke versnellingsmeter heeft een zero-g spanningsniveau, kunt u vinden in specificaties, dit is de spanning die correspondeert met 0g. Om de waarde van een ondertekende spanning te krijgen moeten we berekenen de verschuiving van dit niveau. Laten we zeggen dat onze spanningsniveau 0g is VzeroG = 1.65V. We berekenen de spanning verschuift van zero-g spanning als volgt::
DeltaVoltsRx = 1.89V - 1.65V = 0.24V
DeltaVoltsRy = 2.03V - 1.65V = 0.38V
DeltaVoltsRz = 1.81V - 1.65V = 0.16V
We hebben nu onze versnellingsmeter lezingen in volt, het is nog niet in g (9,8 m/s ^ 2), om te doen de finale conversie we de gevoeligheid van de versnellingsmeter passen, meestal uitgedrukt in mV/g. laat zeggen onze gevoeligheid = 478.5mV / g = 0.4785V / g. gevoeligheid waarden vindt u in de specificaties van de versnellingsmeter. Om de waarden van de laatste kracht uitgedrukt in g gebruiken we de volgende formule:
RX = DeltaVoltsRx / gevoeligheid
RX = 0.24V / 0.4785V / g = ~ 0,5 g
Ry = 0.38V / 0.4785V / g = ~ 0,79 g
RZ = 0.16V / 0.4785V / g = ~ 0.33 g
Kon combineren we uiteraard alle maatregelen in één formule, maar ik ging door alle stappen duidelijk hoe je van ADC lezingen naar een kracht vector component, uitgedrukt in g te maken.
RX = (AdcRx * Vref / 1023 - VzeroG) / gevoeligheid (Eq.2)
Ry = (AdcRy * Vref / 1023 - VzeroG) / gevoeligheid
RZ = (AdcRz * Vref / 1023 - VzeroG) / gevoeligheid
We hebben nu alle 3 onderdelen die onze inertial kracht vector definiëren, als het apparaat is niet onderworpen aan andere krachten anders dan de zwaartekracht, kunnen we aannemen dat is de richting van onze zwaartekracht-kracht-vector. Als u wilt berekenen van de hellingshoek van het apparaat ten opzichte van de grond kunt u de hoek tussen deze vector- en Z-as berekenen. Bent u ook geïnteresseerd in de per-as richting van de helling u dit resultaat kunt opsplitsen in 2 componenten: hellingshoek op de X- en Y-as die kan worden berekend als de hoek tussen zwaartekracht vector en X / Y-as. Het berekenen van deze hoeken is meer eenvoudig dan u zou denken, nu dat we hebben de waarden berekend voor Rx, Ry en Rz. We gaan terug naar onze laatste model van de versnellingsmeter en doen sommige extra notaties:
De hoeken die wij zijn geïnteresseerd in zijn de hoeken tussen de X, Y, Z-as en de kracht vector R. We zullen deze hoeken definiëren als Axr, Ayr, Azr. Je ziet van de rechte hoek driehoek gevormd door R en Rx die:
cos(AXR) = Rx / R, en zo ook:
cos(Ayr) = Ry / R
cos(AZR) = Rz / R
We kunnen aftrekken van de Eq.1 die R = SQRT (Rx ^ 2 + Ry ^ 2 + Rz ^ 2).
We kunnen nu onze hoeken vinden met behulp van de arccos() functie (de omgekeerde cos()-functie):
AXR = arccos(Rx/R)
Ayr = arccos(Ry/R)
AZR = arccos(Rz/R)
We zijn gegaan een lange weg te leggen van de versnellingsmeter model, gewoon om te komen tot deze formules. Afhankelijk van uw toepassingen kunt u elke tussenliggende formules die we hebben afgeleid gebruiken. Zal ook introduceren wij de gyroscoop model binnenkort, en we zullen zien hoe de versnellingsmeter en gyroscoop gegevens kunnen worden gecombineerd om nog nauwkeuriger schattingen van de helling.
Maar voordat we dat laten we doen doen sommige nuttiger notaties:
cosX = cos(Axr) = Rx / R
Gezellige = cos(Ayr) = Ry / R
cosZ = cos(Azr) = Rz / R
Deze triplet heet vaak Richting cosinus , en daarmee in feite de eenheidsvector (vector met lengte 1) die dezelfde richting als onze R-vector heeft. U kunt gemakkelijk controleren dat:
SQRT (cosX ^ 2 + gezellige ^ 2 + cosZ ^ 2) = 1
Dit is een aardige eigenschap omdat het ontslaat ons van het toezicht op de modulus(length) van R vector. Vaak als we gewoon geïnteresseerd zijn in de richting van onze inertial vector, is het zinvol om te normaliseren het modulus ter vereenvoudiging van de andere berekeningen.