Tuesday, 5 December 2017

Glidande medelvärde filter accelerometer


Ett enkelt, enkeltpoligt lågpass, rekursivt IIR-filter är snabbt och enkelt att implementera, t. ex. där x, y är de raka (ofiltrerade) XY-accelerometersignalerna, xf, yf är de filtrerade utsignalerna och k bestämmer filternas tidskonstant (vanligtvis ett värde mellan 0,9 och 0,9999. där en större k betyder en längre tidskonstant ). Du kan bestämma k empiriskt, eller om du vet din önskade avstängningsfrekvens, Fc. då kan du använda formeln: där Fs är provfrekvensen. Observera att xf, yf är de tidigare värdena för utsignalen på RHS och de nya utgångsvärdena på LHS i uttrycket ovan. Observera också att vi antar här att du kommer att samplera accelerometerns signaler med vanliga tidsintervaller, t. ex. var 10: e ms. Tidskonstanten kommer att vara en funktion både k och detta provtagningsintervall. Omfattande filter Detta exempel visar det rekommenderade arbetsflödet för att generera C-kod från en MATLAB-funktion med kommandot codegen. Det här är stegen: 1. Lägg koddirektivet till MATLAB-funktionen för att indikera att den är avsedd för kodgenerering. Detta direktiv gör det också möjligt för MATLAB-kodanalysatorn att identifiera varningar och fel specifika för MATLAB för kodgenerering. 2. Skapa en MEX-funktion för att kontrollera att MATLAB-koden är lämplig för kodgenerering. Om fel uppstår bör du fixa dem innan du genererar C-kod. 3. Testa MEX-funktionen i MATLAB för att säkerställa att den är funktionellt ekvivalent med den ursprungliga MATLAB-koden och att inga felaktiga fel uppstår. 4. Generera C-kod. 5. Kontrollera C-koden. Förutsättningar Det finns inga förutsättningar för detta exempel. Skapa en ny mapp och kopiera relevanta filer Följande kod skapar en mapp i din nuvarande arbetsmapp (pwd). Den nya mappen innehåller bara de filer som är relevanta för det här exemplet. Om du inte vill påverka den aktuella mappen (eller om du inte kan skapa filer i den här mappen), ska du ändra din arbetsmapp. Kör kommando: Skapa en ny mapp och kopiera relevanta filer Om medelvärdesfiltret Funktionen Funktionen averagingfilter. m fungerar som ett medelvärdefilter på ingångssignalen som tar en ingångsvektor av värden och beräknar ett medelvärde för varje värde i vektorn. Utgångsvektorn har samma storlek och form som ingångsvektorn. Kodgensamlingsdirektivet indikerar att MATLAB-koden är avsedd för kodgenerering. Skapa några provdata Generera en högljudd sinusvåg och plott resultatet. Generera en MEX-funktion för testning Generera en MEX-funktion med kommandot codegen. Codegen-kommandot kontrollerar att MATLAB-funktionen är lämplig för kodgenerering och genererar en MEX-funktion som du kan testa i MATLAB innan du genererar C-kod. Eftersom C använder statisk typing måste kodgen bestämma egenskaperna hos alla variabler i MATLAB-filerna vid kompileringstid. Här levererar kommandoradsalternativet - arg en exempeldata så att kodgen kan utgå från nya typer baserat på ingångstyperna. Genom att använda den ovan angivna provsignalen som exempeldata säkerställs att MEX-funktionen kan använda samma ingång. Som standard genererar kodgen en MEX-funktion som heter averagingfiltermex i den aktuella mappen. Detta gör att du kan testa MATLAB-koden och MEX-funktionen och jämföra resultaten. Testa MEX-funktionen i MATLAB Kör MEX-funktionen i MATLAB Generera C-kod Inspektera den genererade koden Kommandot codegen med alternativet - config coder. config (lib) genererar C-kod förpackad som ett fristående C-bibliotek. Den genererade C-koden finns i mappen codegenlibaveragingfilter. Filerna är: Inspektera C-koden för medelfiltret. c Funktion Välj ditt landAccelerometrar Accelerometrar mäter accelerationen. Det är acceleration på grund av rörelse och även acceleration på grund av tyngdkraften. Accelerometrar används ofta för att beräkna en lutningsvinkel. De kan bara göra det på ett tillförlitligt sätt när de är statiska och inte rör sig. För att få en exakt vinklingsvinkel kombineras de ofta med en eller flera gyro39s och kombinationen av data används för att beräkna vinkeln. Digitala accelerometrar ger dig information genom att använda ett seriellt protokoll som I2C. SPI eller USART, medan analoga accelerometrar kommer att mata ut en spänningsnivå inom ett fördefinierat område som du måste konvertera till ett digitalt värde med en ADC (analog till digitalomvandlare) - modul. I denna handledning kommer vi kortfattat att förklara funktionen hos accelerometrar, hur de används för att mäta lutningsvinklar och slutligen ge några exempelkod. Se även handledningen om att kombinera accelerometer och gyrodata för att ge en bättre lutningsvinkel för ett dynamiskt system. Vad mäter accelerometerns accelerationsmätare acceleration. För ett statiskt föremål som är accelerationen på grund av gravitationen (1g). Observera också att utsignalen från accelerometrar inte är linjär men är en sinusvåg, så att du inte kan ta den direkta utgången som en proportionell representation av en vinkel för lutning baserat på tyngdkraften. Normalt kommer en accelerometer39s x - och y-utgångsspänningar att vara halva matningsspänningen vid mätning av nollg (dvs anordningen är vinkelrätt mot gravitationen - horisontell). Kantla det på ett sätt och spänningen kommer att öka, luta den åt andra hållet och den kommer att minska. Med en accelerationsmätare på triaxaxeln mäter z-axeln 1g med enheten horisontellt. Utgången från en accelerometer är en sinusvåg av uppmätt acceleration. Accelerometrarna är känsligare för små förändringar i lutningen när de är vinkelräta mot gravitationen. Dvs. när horisontella små ändringar i lutningen ger användbara mätvärden. Förbi ca 45 grader av lutning blir de alltmer känsliga. Av detta skäl är det vanligt att använda mer än ett axelvärde vid bestämning av vinkeln som visas nedan. Mätning av vinklar med en axel Om du vill mäta lutningen i både x och y-axeln med en axel med 2 axlar kan du helt enkelt använda sin-1 (a) där a är utgången från en axel på accelerometern. Kom ihåg att bortom 45 och -45 grader kommer noggrannheten att minska mätlinjevinkeln med två axlar. Minskningen i upplösning och noggrannhet utöver 45 grader av lutning kan förbättras med hjälp av 2 axlar för att mäta lutningen. Tyngdpunkten som verkar på x-axeln är en sinusfunktion medan den som verkar på y-axeln är en cosinus. När x-axelns känslighet börjar släppa av efter 45 grader av lutning ökar känsligheten av y-axeln. Som framgår av tabellen nedan visar de fetstilade delarna av varje rad området med mest känslighet. Således genom att kombinera x - och y-värdena kan en mycket förbättrad noggrannhet erhållas. Mätning av vinkelvinkel med tre axlar För noggranna mätningar av lutning i x - och y-planen behöver vi därför en 3-axels accelerometer. Vi kan använda formeln ovan för att beräkna vinklarna med x och z för x-axeln och använda y och z för y-axeln. Men vi kan förbättra sakerna ytterligare genom att använda alla tre utgångarna för att beräkna varje vinkel. Detta görs med hjälp av följande formler. Låt oss komma ner till någon kodning Förhoppningsvis är vi nu ganska tydliga om principerna, men vi kan se hur detta görs i praktiken. Vi använder en 3-axels accelerometer och utarbetar vinklar för rull (x) och tonhöjd (y). Vi antar att beroende på vilken typ av accelerometer som används har du läst värdena för x, y och z och att du också har utgångsvärden för x, y och z när accelerometern är stationär och nivå. tomrumsräknare (tomrum) Använd xy och z från accelerometer, beräkna x och y vinklar float xval, yval, zval, resultat unsigned short long x2, y2, z2 24 bit Låt oss få avvikelser från vår baslinje xval (float) accelvaluex - Accelcenterx Yval (Float) Accelvaluey - (Float) Accelcentery Zval (Float) Accelvaluez - (Float) Accelcenterz Träna ut rutorna x2 (unsigned short long) (xvalxval) y2 (unsigned short long) (Yvalyval) Z2 (unsigned short long) (zvalzval) X Axis resultsqrt (y2z2) resultxvalresultat accelanglex atan (resultat) Y Axis resultsqrt (x2z2) resultyvalresultat accelangley atan (resultat) Ok, det är det. Bara ett par noter om accelerometrar i allmänhet. De är mycket känsliga och är därför ganska benägna att vibrera. Om du använder ett i ett system med motorer eller andra vibrationskällor, föreslår jag starkt någon form av skumdämpning. Också, ta flera avläsningar från accelerometern och genomsnitts dem för att filtrera bort eventuellt brus.

No comments:

Post a Comment