Seg... pinne. (9 / 14 steg)
Steg 9: Två sensorer, en vinkel.
Svar: båda.
Skälet för att använda två sensorer även om det finns endast en relevant fysisk variabel (vinkel) beror på att varje typ av sensor har fördelar och nackdelar av sig själv. Genom att blanda ihop de bästa delarna av varje, uppnås en bättre övergripande uppskattning av vinkeln. Jag skrev detta allt i denna vitbok, men här ger jag en kort sammanfattning.
Accelerometern.
Den mäter acceleration, rätt? Tja, inte riktigt. Den mäta kraft per enhet samlas. Så kommer att det mäta kraft på grund av gravitationen som om den vore en faktisk acceleration. Känsligheten för Sparkfun Razor IMU ges som 300mV/g, vilket innebär att produktionen kommer att ändras av 0.3V per 9,8 m/s ^ 2 av acceleration.
Hur omvandlas detta till en vinkel? Tänka mig använda accelerometer axeln som pekade i riktning mot resor av fordonet. Som fordonet tomterna framåt, ser axeln positiv kraft på grund av gravitationen. Som fordonet platser bakåt, ser det negativa kraft. Det är frestande att säga att vinsten bör vara 300mV/90º, eftersom pitching 90º motsvarar 1g. Men det är lutningen på utdata nära 0 ° som är viktigt, och tack vare trigonometri denna sluttning råkar vara 300mV/rad eller 300mV / 57.3º. Se bilden nedan för ett exempel på detta.
Eftersom den Arduino ADC ger ett 10-bitars värde baserat på 5V referens, kan du beräkna vinsten på raw ADC värdet av:
(57.3º/0.3V)*(5V/1024LSB) = 0.932º / LSB
LSB (minst signifikanta biten) är bara ett sätt att säga en bit. Detta är värdet som du vill multiplicera raw analoga värdet för att få en vinkel i grader. Observera att du också måste ta ifrån noll vinkel förskjutning från den analoga signalen. Detta finns bäst experimentellt, genom att hålla plattformen i noll vinkel och läsa av värdet.
Så varför inte bara använda accelerometern att mäta vinkeln och göras? Problemet är att accelerometern inte kan skilja mellan gravitation och faktiska acceleration. Så, om plattformen är perfekt nivå men fordonet accelererar framlänges, det kommer att registrera samma som luta bakåt. Tar en långtidsmedelvärdet, dock är endast "accelerationen" som återstår gravitation. Tyvärr, långsiktiga genomsnitt bidrar inte till snappy återkopplad reglering. Ange...
Gyroskopet.
Mer exakt bör det kallas en vinkelformig hastighet sensor, eftersom det har lite att göra med en faktisk svänghjul-baserade gyroskop. Det rapporterar tillbaka en signal som är proportionell mot graden av rotation. På en balanserande plattform vore dess känsliga axel är parallell till axeln av rotation av hjulen. Sparkfun IMU gyron har en känslighet av 3.33mV/º/s på 4 x-kanaler, vilket betyder utgång ändringarna 3.33mV för varje º / s av rotation.
Eftersom den Arduino ADC ger ett 10-bitars värde baserat på 5V referens, kan du beräkna vinsten på raw ADC värdet av:
[(1º/s)/0.00333V]*(5V/1024LSB) = 1.466(º/s)/LSB
Detta är värdet som du vill multiplicera den råa analog ingång för att få en vinkelformig hastighet i grader per sekund. Som accelerometern, måste noll offset för gyrot dras först. Det kan hittas genom att hålla plattformen stationära och läsa av analog.
För att komma från grader per sekund grader, kan gyro signalen vara integrerade. För varje steg i tid ger gyro signalen multipliceras med varaktigheten av tiden mellan stegen en stegvis förändring i vinkel. Den totala vinkeln är den löpande summan för dessa höjningar. Detta orsakar ett problem dock: om gyro signalen inte är exakt noll när plattformen är inte rotera (och det kommer aldrig att bli) integration kommer att glida. Med ingen absolut referens finns det inget sätt att korrigera för denna driva med gyro signalen ensam. Men under kortare perioder ger gyrot en mycket känslig vinkel uppskattning som är immun mot buller från horisontell acceleration av fordonet
Så en sensor är bra för kortsiktiga, snabb-svar vinkel uppskattningar. Den andra är bra för långsiktig, drift-fri absoluta vinkel i genomsnitt. Börjar du se där detta kommer...?