Spørgsmål:
beregning af hældning ved hjælp af accelerometer?
troy jensen
2010-06-03 09:49:01 UTC
view on stackexchange narkive permalink

Jeg har et analogt udstyr ADXL203 accelerometer på et breadout-kort og ville bruge dette til at måle hældningen på noget udstyr med en rimelig høj frekvens (20-30 Hz). Jeg tilslutter det til en campbells cr3000 logger for at gøre sensingen. Er der nogen, der har anvisninger om, hvordan sensorudgange skal fortolkes. Tak

tak til alle for kommentarerne. meget hjælpsom hilsen TROY
Jeg ved, at jeg har det højeste, men hvis du ikke kan lide min, skal du i det mindste acceptere andres.
Fem svar:
Kortuk
2010-06-03 20:12:27 UTC
view on stackexchange narkive permalink

Jeg har en række ting at sige her, og nogle af dem indebærer at være enig med pingswept og nogle med penjuin.

cr3000

cr3000-sampling på 16 bits og 100 Hz vil sampler lidt langsomt, så du nemt kan fjerne støj fra dine data, men med en væsentlig højere præcision kan den bruges. Jeg tvivler på, at du kan få 13 eller 14 bits præcision uden nogle ret gode filtreringsalgoritmer. Accelerometre har lært mig, at vibration er djævelen, sprængte fononer.

Outputkondensator

Du skal sørge for at gøre som databladet siger, og signalteorien dikterer. For at citere databladet:

Outputtet fra ADXL103 / ADXL203 har en typisk båndbredde på 2,5 kHz. Brugeren skal filtrere signalet på dette tidspunkt for at begrænse aliasfejl. Den analoge båndbredde må ikke være mere end halvdelen af ​​den analog-til-digitale samplingsfrekvens for at minimere aliasing. Den analoge båndbredde kan reduceres yderligere for at reducere støj og forbedre opløsning.

Dette betyder, at du skal vælge en kondensator for at holde din hastighed under 50Hz. Hvis du placerer det over dette, kan du få aliasing, og aliasing gør vibrationsstøj til en djævel, du har underskrevet en aftale med. De angiver, hvordan man beregner støjniveauer fra enheden, og ved en 50Hz båndbredde en top til peak støj på .006 * Tyngdekraften vil ikke engang blive bemærket, hvis du har dette på en enhed med vibrationer.

Fortolkning Data

Dette er sandsynligvis det, du er mest interesseret i, og det er relativt let at gøre. Du skal mærke et tidspunkt, hvor enheden er neutral, det er når den er flad, og du har den relativt stille. Giv det et sekund eller to på dette tidspunkt, og så kan du tage medianen af ​​disse data for at bestemme no-G-spændingen. Derefter kan du bruge dette som et punkt, du sammenligner enheden med. Fra dette punkt kan jeg direkte citere databladet:

Når accelerometeret er vinkelret på tyngdekraften, ændres dets output næsten 17,5 mg pr. grad af hældning.

Så du kan bare bruge denne tilnærmelse, hvis du ikke vil vippe meget, men du bliver nødt til at bruge geometri, hvis du planlægger at vippe i begge retninger og i vinkler, der ikke er ekstremt små.

Hvis du vil blive større, har de endda ligningerne stavet som:

PITCH = ASIN (AX / 1 g)
ROLL = ASIN (AY / 1 g)

Så vidt jeg kan ringe, giver din enhed en 1V ændring pr. 1G acceleration placeret på den. Hvis du har udført kalibreringsfasen, skal du være i stand til at tage målinger, trække forskydningen, og du har antallet af G'er, der opleves.

Stop med at læse her, medmindre du løber ind i problemer, eller du gerne vil have flere oplysninger for at forbedre tilgangen.

Jeg tilføjede en anstændig smule mere om andre tilgange og metoder til at forbedre din tilgang til hurtigt skiftende systemer eller systemer, hvor du skal programmere enheden til at udføre prøverne.

Samplingsfrekvens

Du skal sampling betydeligt hurtigere end den hastighed, hvormed din enhed ændrer retningen, i hvilken den accelererer, da du skal måle orientering 20-30 gange pr. sekund. du skal være i stand til at måle hurtigt nok til at filtrere vibrationsstøj og acceleration ud på grund af andre påvirkninger, som jeg har fundet at være ret store, når jeg arbejder med et accelerometer.

3-akset accelerometer

For det andet, hvis du har et tre-akset accelerometer, så kan du ganske let genkende, når en akse mister en del af accelerationen på grund af tyngdekraften (dvs. når z-aksen har, falder dens størrelse med 2m / s ^ 2, ved, at gevinsten, du så på den anden akse, er tyngdekraften). Dette vil stadig være rodet, men generelt vil der være en tilføjelse af acceleration, som giver den nødvendige hastighed til at ændre din orientering og derefter en ændring i accelerationen på grund af orienteringsændring, hvilket ofte giver dig mulighed for at genkende orientering.

Problemer med 2-akse

Dette bliver, som penjuin sagde, næsten umuligt med et 2-akset accelerometer og i bedste fald skitseret, hvis du har et system, der kan have 20-30 forskellige retninger et sekund, eller hvis du har brug for at have et nøjagtigt mål orientering til enhver tid. Jeg er sikker på, at en kandidatstuderende kunne skrive en ret flot afhandling om dette, eller en doktorgrad kunne skrive en afhandling om forbedring af denne algoritme.

Vibrationsstøj

For at tilføje mere, hvis du kan læg din enhed oven på noget, der holder den statisk låst til din enheds bevægelse, men dæmper vibration, får du meget bedre tal og har ikke brug for så meget softwarefiltrering. Der kan placeres en simpel polstring af skumtype mellem accelerometeret og din enhed, og hvis det er digitalt, bør dette ikke øge elektrisk støj og hjælpe med at absorbere lidt vibrationsstøj. Dette bør kun gøres, hvis du ser problemer med vibrationsstøj.

Digital accelerometer

Jeg vil foreslå et digitalt accelerometer, som du kan bruge SPI til at oprette forbindelse til. Data kan klokkes ud med en meget meget høj hastighed, og du kan arbejde i baggrunden, da din SPI udfører det konstante arbejde med at indlæse det næste sæt værdier. Du bliver nødt til at have en dejlig mikrokontroller, hvis den skal gøres digitalt. Hvis du kan give mig bedre detaljer om, hvad du vil gøre, kan jeg give bedre feedback. Hvis du vil have en advarsel baseret på vippedetektion, skal det være meget let at gøre med al analog, men hvis du vil måle udstyrets position og vinkel under drift, gør dig klar til noget arbejde.

Venligst lad mig vide, om der er noget, jeg kan tilføje for at gøre dette svar mere klart eller anvendeligt til det, du ledte efter.

Bare for ordens skyld er dette svar episk.
Dr. Kortuk, ph.d. i accelerometre! :-)
Jeg skrev dette svar, fordi jeg fortsatte med at tænke, at jeg havde glemt noget, så indså jeg, at det var lidt langt, og tilføjede det rigtige hurtigt, hvordan man svarede det, men det ser ud til, at folk foretrækker det lange svar.
På vibrationsstøjen har jeg muligvis haft en større mængde i driftstiden på grund af tilstedeværelsen af ​​en børsteløs DC (BLDC) -motor, men før den blev tændt, var der stadig betydelige vibrationstal.
jeremy
2010-06-03 16:44:41 UTC
view on stackexchange narkive permalink

Jeg har skrevet og omskrevet dette svar flere gange med mange skøre matematiske ideer, men jeg tror ærligt talt ikke, at dette kan gøres med nogen nøjagtighed. Du kan lave nogle vektormatematik, men hvad hvis:

  • Objektet holder op med at bevæge sig
  • Objektet har en konstant hastighed
  • Objektet rammer en bump / du støder på det
  • Den genererede kraft, der bevæger sig op ad hældningen, er under opløsning på Z-aksen

Mens jeg er sikker på, at der er en skør løsning til at gøre dette slags ting, jeg er ikke sikker på, at det ville være det værd; accelerometre er simpelthen ikke designet til denne opgave (i det mindste efter min viden). For det, du forsøger at opnå, vil jeg foreslå en gyroskopisk tilgang ved hjælp af enhver af disse, som alle ville være ret resistente over for alle ovenstående problemer.

Accelerometre er designet til dette faktisk, der er et helt afsnit om, hvordan man gør det. Accelerometre er meget meget lave i mange tilfælde, og nogle gange er omkostninger et større problem end perfekt funktionalitet.
Jeg prøver altid at forklare dette for studerende, og jeg vil tilføje det her, fordi jeg synes, det er et vigtigt koncept. Ingeniørarbejde handler ikke altid om at gøre det på den bedste måde, det handler om at gøre det på en sådan måde, at brugeren ikke kan se forskel på andet end prislappen.
Der er noget at sige for at gøre det først, og der er meget at sige for at gøre det bedre end den sidste fyr.
Jeg er enig, men det afhænger af dine motiver (som troy ikke har angivet); vil du have det til at fungere godt, eller vil du lære? De er ikke nødvendigvis gensidigt eksklusive, men du ville ikke skrive din egen compiler bare for at blinke en LED, medmindre du specifikt ønskede at lære om compiler-design.
Ja, jeg tilføjede, at for at diskutere dit svar, generelt hvis han har brug for at kunne fortælle en anden retning 30 gange i sekundet, vil det have gigantiske accelerationer på det, hvilket igen betyder, at du har brug for meget mere end 100 prøver a sekund.
Det ser ud til, at brugeren har et accelerometer, og det at være sværere giver dig en chance for at lære mere. LED-ideen var bare fordi der er en anstændig chance, hvis du implementerer noget billigt sådan, at du bruger en billig accelerationsmåleenhed.
pingswept
2010-06-03 19:40:15 UTC
view on stackexchange narkive permalink

Hvis jeg forstår databladet korrekt, vil output for hver akse variere mellem 1,5 V og 3,5 V, når du vipper rundt om aksen. Når enheden er flad (ignorerer ± 1 graders pakkejusteringsfejl), skal begge udgange læse 2,5 V.

Hvis du kun har brug for at måle hældningen i en retning, kan du tage afvigelsens bueform fra 2,5 V for at få vinklen i radianer, og konverter derefter til grader. Hvis enheden kan vippe i en hvilken som helst retning, kan du beregne de to vinkler og derefter beregne sammensat vinkel ud fra disse.

For at være eksplicit: vinkel omkring en akse = (180 / π) * bueform (Vout - 2.5)

For at få et godt frekvensrespons skal du bruge små outputkondensatorer, Cx og Cy. Fra fodnote 6 på s. 3 af databladet ser det ud til, at 0,02 uF giver dig en båndbredde på 250 Hz, hvilket sandsynligvis er omtrent det rigtige for din samplingsfrekvens. Du kan måske gå så højt som 0,1 uF og begrænse båndbredden til 50 Hz, men dine signaler begynder at blive svækket.

Jeg tror ikke, det vil dæmpe signalerne, medmindre du refererer til de højere frekvenser, hvilket er punktet på hætten. Han skal gå til 50Hz eller lavere for at matche sin dataudtagningsenhed.
Ah, jeg havde ikke tænkt på det fra aliasperspektivet. Jeg tror stadig, at store hætter vil dæmpe højfrekvente signaler, men det er faktisk en god ting i dette tilfælde. Så ja, det er godt at indstille båndbredden omkring 50 Hz.
Kortuk
2010-06-03 20:58:06 UTC
view on stackexchange narkive permalink

Jeg tilføjer et andet svar, fordi mit andet er stort, og du vil måske bare have det enkle.

Dit filterdæksel skal være 0,10 uF eller større for at holde dig under din aliaseringshastighed (50Hz). Du skal give en kalibreringsfase på et par sekunder med din enheds siddehøjde med al Gravity acceleration i Z-retning, dette er for at bestemme dit nul G-punkt.

Den spænding, du måler for dit nul G-punkt, det vil sandsynligvis være anderledes for X- og Y-retningen, repræsenterer intet. Bare tag den spænding, du får, og træk den fra den. Denne spænding, med offset trukket, er antallet af G'er, du kommer i den retning.

Tag buen, og du vil få din vinkel i den retning.

Dette ignorerer støj og anden acceleration. vær forberedt på, at NaN bliver et resultat, hvis du har det helt vippet, og der er nogen støj.

markrages
2010-06-11 01:57:19 UTC
view on stackexchange narkive permalink

For at få en hvilken som helst vinkel skal du måle tyngdekraftens acceleration i både X- og Y-retninger. træk den midterste spænding (2,5V) ud, så nul er "ingen acceleration."

Nu kan du finde vinklen med bueformet (y / x). Men det er irriterende at bruge på grund af delingen, og fordi tegnet er tvetydigt, så hvad du virkelig vil have C-funktionen atan2 (y, x). atan2 () får tegnet rigtigt til alle 360 ​​grader.


Off-topic, da du ikke bruger en mikro: Hvis du leder efter atan2 () til brug på en mikrocontroller, er der er en atan2 () -generator på min hjemmeside: http://vivara.net/cgi-bin/cordic.cgi

Det er ikke garanteret 2,5 V til 0G. da han sandsynligvis vil bruge en computer til at lave matematik, tvivler jeg på, at den metode, han bruger til at gøre matematikken, vil matche.


Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 2.0-licens, den distribueres under.
Loading...