"9 grader av frihet" IMU (1 / 12 steg)
Steg 1: I2C kommunikation
All kommunikation mellan komponenterna i denna styrelse sker genom en digital språk kallas I2C. Komponenterna ansluts via I2C är antingen masters eller slavar. En master komponent kommer att ställa in klockan I2C och slavar lyssna till denna klocksignal.
Alla komponenter kommunicerar över I2C är anslutna genom att samma två linjer - SDA och SCL; för att undvika förvirring, varje komponent har en unik adress där det kan skicka eller ta emot meddelanden, det kommer att ignorera meddelanden går till olika adresser. Adresserna för I2C komponenter är vanligt fastställda av tillverkaren, även om du kanske kan ändra några eller alla av adressen bitar själv (kolla databladet).
Jag använder tråd biblioteket för att kommunicera med min hårdvara via I2C - biblioteket kommer automatiskt installerat i nyare versioner av Arduino IDE.
När jag vill ställa ett register på en av mina sensorer, kör jag kod som ser ut så här:
Wire.beginTransmission(GYRO_ADDRESS);
WIRE_SEND (0x16); //register att skriva till
WIRE_SEND (0x1B), //value
Wire.endTransmission();
När jag vill ta emot data från sensorer kör jag kod som ser ut så här:
Wire.beginTransmission(GYRO_ADDRESS);
WIRE_SEND(0x1D); Skickar adressen att läsa från
Wire.endTransmission();
Wire.beginTransmission(GYRO_ADDRESS);
Wire.requestFrom (GYRO_ADDRESS, 6); Begäran 6 byte
While(Wire.available()) / / ((Wire.available()) & &(i<6))
{
buff [i] = WIRE_RECEIVE(); Läs en byte
i ++;
}
Wire.endTransmission();
Båda sensorerna jag använder för detta projekt har många användardefinierade parametrar som påverkar hanteringen (spänna av acc/mag/gyro drift, motkrav, avbrott, upplösning, uppdateringstid, etc). För att börja programmera I2C enheter, måste du läsa igenom databladet, särskilt det avsnitt som kallas "Registrera beskrivning", så att du vet hur du ställa var och en av dessa parametrar på ditt chip.