Korkens styrkort för multirotors (KFly) - Nya bilder s. 27!

Berätta om dina pågående projekt.
Agwan
Inlägg: 1617
Blev medlem: 15 september 2009, 09:05:14

Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan

Inlägg av Agwan »

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.
Användarvisningsbild
LHelge
Inlägg: 1772
Blev medlem: 2 september 2007, 18:25:31
Ort: Östergötland
Kontakt:

Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan

Inlägg av LHelge »

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.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan

Inlägg av Korken »

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.
Screenshot from 2012-11-07 15-55-29.png
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.
Användarvisningsbild
Andax
Inlägg: 4379
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan

Inlägg av Andax »

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?
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan

Inlägg av Korken »

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.
Användarvisningsbild
lond
Inlägg: 3548
Blev medlem: 23 september 2009, 11:52:45
Ort: Hyssna

Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan

Inlägg av lond »

Så här ser min kod ut när jag initierar sensorn:

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
Läsning av värden från sensorn:

Kod: Markera allt

Read_Force:

HBusIn gr, $3B, [Ay, Az, Ax, Temp, Gy, Gz, Gx]

Return
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:

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
Datan som skickas ut på seriesnöret för presentationsyfte:

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]
Hoppas att du blir klokare av min kod :)

/// Marcus
Användarvisningsbild
lond
Inlägg: 3548
Blev medlem: 23 september 2009, 11:52:45
Ort: Hyssna

Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan

Inlägg av lond »

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
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan

Inlägg av Korken »

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.
Användarvisningsbild
lond
Inlägg: 3548
Blev medlem: 23 september 2009, 11:52:45
Ort: Hyssna

Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan

Inlägg av lond »

Tänk på att +-16g ger ett mätspann från sensorn på 32g = det dubbla.

/// Marcus
Användarvisningsbild
Andax
Inlägg: 4379
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan

Inlägg av Andax »

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.
Användarvisningsbild
lond
Inlägg: 3548
Blev medlem: 23 september 2009, 11:52:45
Ort: Hyssna

Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan

Inlägg av lond »

Jag ser det i databladet men ur sensorn på "AFS_SEL = 3" (16g) så får jag ut 1024 LSB/g.

/// Marcus
Användarvisningsbild
Andax
Inlägg: 4379
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan

Inlägg av Andax »

Ok, så du får ut samma resultat som Korken.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan

Inlägg av Korken »

Så bara för att förtydliga allt (så jag inte har blivit galen :roll: ).
lond, får du också 1024 per g? Är det så, så är det kanske bara någon felskrivning i databladet.
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.
Mycket bra rekommendation, tack! :D
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.
Användarvisningsbild
lond
Inlägg: 3548
Blev medlem: 23 september 2009, 11:52:45
Ort: Hyssna

Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan

Inlägg av lond »

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 :humm: :humm:

/// Marcus
Användarvisningsbild
Andax
Inlägg: 4379
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: Korkens styrkort för multirotors (KFly), Rev.2 på sidan

Inlägg av Andax »

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.
Skriv svar