Korkens styrkort för multirotors (KFly) - Nya bilder s. 27!
Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan
Ja gyrona är lite svårare. Helst skall man ha en platta man kan skruva fast allt i som man kan ställa till olika konstanta rotationshastigheter. Men det betyder att man inte kan ha några kablar eftersom de tvinnas efter några varv.
Min lösning när jag har hållit på med det där är att helt enkelt integrera ner gyrona till vinkel och sedan rotera dem tex 90 grader. Det blir ju 180 grader om det tex är 2x fel. Fast det är viktigt att du bara roterar i just den axeln. "Vigglar" man fram och tillbaka så får man in fel. Jag fräste en kub som jag kunde sätta mitt kort i, så är det bara att tippa gyrona över en kant. Jag satte dessutom en axel i kuben där jag hängde upp den och satte en encoder på. Så går det att jämföra under rörelse också mellan encoder och gyro. Encodern bestod av en motor med encoder på, så blev det både axelupphängning och encoder i ett.
Min lösning när jag har hållit på med det där är att helt enkelt integrera ner gyrona till vinkel och sedan rotera dem tex 90 grader. Det blir ju 180 grader om det tex är 2x fel. Fast det är viktigt att du bara roterar i just den axeln. "Vigglar" man fram och tillbaka så får man in fel. Jag fräste en kub som jag kunde sätta mitt kort i, så är det bara att tippa gyrona över en kant. Jag satte dessutom en axel i kuben där jag hängde upp den och satte en encoder på. Så går det att jämföra under rörelse också mellan encoder och gyro. Encodern bestod av en motor med encoder på, så blev det både axelupphängning och encoder i ett.
Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan
Låter som om du blandar ihop signed och unsigned int.
Enligt databladet är värdena på tvåkomplementsform, dvs signed int. Tolkar du dem som unsigned så kommer du få precis det problem du beskriver.
Enligt databladet är värdena på tvåkomplementsform, dvs signed int. Tolkar du dem som unsigned så kommer du få precis det problem du beskriver.
Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan
Så här ser rådatat ut (övre i signed decimal och undre i hex).
Jag har dock swapat Hi och Lo byten för att det ska stämma med MCUn.
Ser du något fel? När jag bara kollade på rådata manuellt och använde en hex calculator fick jag samma resultat som nu.
Edit2:
Såhär ligger rådatat i bilden:
ACC_X_LO ACC_X_HI ACC_Y_LO ACC_Y_HI ACC_Z_LO ACC_Z_HI .....
Edit: Unionen som konverterar data:
Jag har dock swapat Hi och Lo byten för att det ska stämma med MCUn.
Ser du något fel? När jag bara kollade på rådata manuellt och använde en hex calculator fick jag samma resultat som nu.
Edit2:
Såhär ligger rådatat i bilden:
ACC_X_LO ACC_X_HI ACC_Y_LO ACC_Y_HI ACC_Z_LO ACC_Z_HI .....
Edit: Unionen som konverterar data:
Kod: Markera allt
typedef struct /* Data stream structure */
{
int16_t acc_x;
int16_t acc_y;
int16_t acc_z;
int16_t temperature;
int16_t gyro_x;
int16_t gyro_y;
int16_t gyro_z;
} MPU6050_Data_Stream;
/* This union will convert the raw data stream to signed values */
typedef union
{
uint8_t raw_data[14];
MPU6050_Data_Stream Data;
} MPU6050_Data;
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan
Jag får också att du får ca 1060 i amplitud, dvs ca 1024 LSB/g.
Kan du testa vad du får för olika resultat för AFS_SEL = 0, 1, 2, 3? Det borde ju bli 16384 LSB/g, 8192 LSB/g, 4096 LSB/g och 2048 LSB/g. Går kanske att dra lite slutsatser från.
Också om du orienterar sensorn lite olika, blir längden samma men på olika komponenter?
Kan du testa vad du får för olika resultat för AFS_SEL = 0, 1, 2, 3? Det borde ju bli 16384 LSB/g, 8192 LSB/g, 4096 LSB/g och 2048 LSB/g. Går kanske att dra lite slutsatser från.
Också om du orienterar sensorn lite olika, blir längden samma men på olika komponenter?
Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan
Jag testade och resultatet är:
7700 till 8500 i absolutbelopp på 2g,
3800 till 4200 i absolutbelopp på 4g,
1900 till 2100 i absolutbelopp på 8g och
950 till 1050 i absolutbelopp på 16g.
Allt beroende på hur man lutar den.
Jag börjar få gråa hår över detta. Vet heller inte hur jag ska felsöka det.
Har till och med kollat igenom mina I2C divare så de inte skiftar någon stans.
7700 till 8500 i absolutbelopp på 2g,
3800 till 4200 i absolutbelopp på 4g,
1900 till 2100 i absolutbelopp på 8g och
950 till 1050 i absolutbelopp på 16g.
Allt beroende på hur man lutar den.
Jag börjar få gråa hår över detta. Vet heller inte hur jag ska felsöka det.
Har till och med kollat igenom mina I2C divare så de inte skiftar någon stans.
Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan
Så här ser min kod ut när jag initierar sensorn:
Läsning av värden från sensorn:
Presentation av värdena med 3 decimaler. Första delen i koden är för att skapa + eller - på axeln så att det stämmer med verkligheten. Temperaturen har ingen decimal:
Datan som skickas ut på seriesnöret för presentationsyfte:
Hoppas att du blir klokare av min kod 
/// Marcus
Kod: Markera allt
Sensor_Setup:
HBusOut gw, $6B, [%10000000] ' Device Reset
DelayMS 100
HBusOut gw, $6B, [%00000000] ' Disable sleep
HBusOut gw, $19, [159] ' 50Hz = Sample Rate = Gyroscope Output Rate (8kHz) / (1 + SMPLRT_DIV)
'HBusOut gw, $1A, [%00000000] '
HBusOut gw, $37, [%01110000] ' INT_PIN_CFG
HBusOut gw, $38, [%00000001] ' INT_ENABLE
If G_scale = 200 Then HBusOut gw, $1B, [%00011000] ' 2000 °/s
If G_scale = 100 Then HBusOut gw, $1B, [%00010000] ' 1000 °/s
If G_scale = 50 Then HBusOut gw, $1B, [%00001000] ' 500 °/s
If G_scale = 25 Then HBusOut gw, $1B, [%00000000] ' 250 °/s
If HPF = 0 Then
If A_scale = 16 Then HBusOut gw, $1C, [%00011000] ' 16g, HPF off
If A_scale = 8 Then HBusOut gw, $1C, [%00010000] ' 8g, HPF off
If A_scale = 4 Then HBusOut gw, $1C, [%00001000] ' 4g, HPF off
If A_scale = 2 Then HBusOut gw, $1C, [%00000000] ' 2g, HPF off
Else
If A_scale = 16 Then HBusOut gw, $1C, [%00011001] ' 16g, HPF 5Hz
If A_scale = 8 Then HBusOut gw, $1C, [%00010001] ' 8g, HPF 5Hz
If A_scale = 4 Then HBusOut gw, $1C, [%00001001] ' 4g, HPF 5Hz
If A_scale = 2 Then HBusOut gw, $1C, [%00000001] ' 2g, HPF 5Hz
EndIf
DelayMS 100
Return
Kod: Markera allt
Read_Force:
HBusIn gr, $3B, [Ay, Az, Ax, Temp, Gy, Gz, Gx]
Return
Kod: Markera allt
'AxS = ((Ax.15 * 2) + "+")
AxS = ("-" - (Ax.15 * 2))
Ax = Abs Ax
If A_scale = 16 Then AmX = Ax
If A_scale = 8 Then AmX = Ax / 2
If A_scale = 4 Then AmX = Ax / 4
If A_scale = 2 Then AmX = Ax / 8
Ax = AmX / 1000
Kod: Markera allt
'GxS = ((Gx.15 * 2) + "+")
GxS = ("-" - (Gx.15 * 2))
Gx = Abs Gx
Gx = Gx / 131
If G_scale = 50 Then Gx = Gx * 2
If G_scale = 100 Then Gx = Gx * 4
If G_scale = 200 Then Gx = Gx * 8
Kod: Markera allt
Temp = (Temp + 12421) / 340
Kod: Markera allt
HSerOut [SDec Temp, "gC", " Ax:", AxS, Dec Ax, ".", Dec3 AmX, " Ay:", AyS, Dec Ay, ".", Dec3 AmY, " Az:", AzS, Dec Az, ".", Dec3 AmZ, " Gx:", GxS, Dec4 Gx, " Gy:", GyS, Dec4 Gy, " Gz:", GzS, Dec4 Gz, " - eXit", CR]

/// Marcus
Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan
Tänk på att det är alltid 16bitar mellan max och min oavsett om du har valt 2g eller 16g.
Jag har även en rutin som kalibrerar axlarna och justerar offsetvärdet på dom.
/// Marcus
Jag har även en rutin som kalibrerar axlarna och justerar offsetvärdet på dom.
/// Marcus
Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan
Tackar!
Jag har testat att ha exakt samma inställningar som du, men samma fel kvarstår. Just att den inställda känsligheten /2.
>> Tänk på att det är alltid 16bitar mellan max och min oavsett om du har valt 2g eller 16g.
Japp, jag har tänkt på de, just nu så spottar den bara ur sig rådatat så MCUn gör inga tolkningar just nu.
Jag har nu också testat att skicka ut datat via serieporten också så att det inte är GDB som tolkar något fel och det är samma resultat där.
Han någon några fler tankar om vad det kan vara?
Det känns som ett inställningsfel, men jag har gjort som i många guider så det bör fungera.
Jag har testat att ha exakt samma inställningar som du, men samma fel kvarstår. Just att den inställda känsligheten /2.
>> Tänk på att det är alltid 16bitar mellan max och min oavsett om du har valt 2g eller 16g.
Japp, jag har tänkt på de, just nu så spottar den bara ur sig rådatat så MCUn gör inga tolkningar just nu.
Jag har nu också testat att skicka ut datat via serieporten också så att det inte är GDB som tolkar något fel och det är samma resultat där.
Han någon några fler tankar om vad det kan vara?
Det känns som ett inställningsfel, men jag har gjort som i många guider så det bör fungera.
Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan
Tänk på att +-16g ger ett mätspann från sensorn på 32g = det dubbla.
/// Marcus
/// Marcus
Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan
Lond, fast databladet är ju ganska tydlig med att "LSB sensitivity" är 2048 LSB/g vid AFS_SEL = 3. Det innebär ju att 1 g => ca 2048 i värde ut.
Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan
Jag ser det i databladet men ur sensorn på "AFS_SEL = 3" (16g) så får jag ut 1024 LSB/g.
/// Marcus
/// Marcus
Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan
Ok, så du får ut samma resultat som Korken.
Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan
Så bara för att förtydliga allt (så jag inte har blivit galen
).
lond, får du också 1024 per g? Är det så, så är det kanske bara någon felskrivning i databladet.

Jag gjorde det och fick ut att vid en vridning på 90 grader så fick jag ut att sensitivity borde vara 16.55LSB/dps.
Mycket nära det som står i databladet på 16.4LSB/dps.

lond, får du också 1024 per g? Är det så, så är det kanske bara någon felskrivning i databladet.
Mycket bra rekommendation, tack!Agwan skrev:Ja gyrona är lite svårare. Helst skall man ha en platta man kan skruva fast allt i som man kan ställa till olika konstanta rotationshastigheter. Men det betyder att man inte kan ha några kablar eftersom de tvinnas efter några varv.
Min lösning när jag har hållit på med det där är att helt enkelt integrera ner gyrona till vinkel och sedan rotera dem tex 90 grader. Det blir ju 180 grader om det tex är 2x fel. Fast det är viktigt att du bara roterar i just den axeln. "Vigglar" man fram och tillbaka så får man in fel. Jag fräste en kub som jag kunde sätta mitt kort i, så är det bara att tippa gyrona över en kant. Jag satte dessutom en axel i kuben där jag hängde upp den och satte en encoder på. Så går det att jämföra under rörelse också mellan encoder och gyro. Encodern bestod av en motor med encoder på, så blev det både axelupphängning och encoder i ett.

Jag gjorde det och fick ut att vid en vridning på 90 grader så fick jag ut att sensitivity borde vara 16.55LSB/dps.
Mycket nära det som står i databladet på 16.4LSB/dps.
Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan
Teoretiskt så skall det nog gå att få ut 2048 LSB/g vid AFS_SEL = 3 men än har jag inte hittat registret som låser upp det. Jag har nog tänkt att det är en felskrivning i databladet för att sedan gått vidare i programmeringen
/// Marcus


/// Marcus
Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan
Korken, på ditt kort har du plockat ut SWD-signalerna så att man kan hårdvaru-debugga t.ex. via ST-LINK?
I så fall är dagens tips STM-STUDIO. Det är ett program som kan plotta variabler i realtid som den hämtar via debug-interfacet. Testade det för första gången idag. Man laddar bara in .out filen så att den kan lista ut var variablerna ligger och sedan väljer man vilka variabler man vill plotta.
Se bara till att du valt "Direct Mode" för variablerna. Fick något felmeddelande om de inte var i den moden.
Man kan även plotta expressions som är matematiska eller logiska kombinationer av variabler. T.ex. om du vill plotta absolutbeloppet av accelerationen skulle det kunna vara sqrt(ax*ax+ay*ay+az*az)
Sedan kan man även plotta, t.ex. average, std, min max etc av variabler.
I så fall är dagens tips STM-STUDIO. Det är ett program som kan plotta variabler i realtid som den hämtar via debug-interfacet. Testade det för första gången idag. Man laddar bara in .out filen så att den kan lista ut var variablerna ligger och sedan väljer man vilka variabler man vill plotta.
Se bara till att du valt "Direct Mode" för variablerna. Fick något felmeddelande om de inte var i den moden.
Man kan även plotta expressions som är matematiska eller logiska kombinationer av variabler. T.ex. om du vill plotta absolutbeloppet av accelerationen skulle det kunna vara sqrt(ax*ax+ay*ay+az*az)
Sedan kan man även plotta, t.ex. average, std, min max etc av variabler.