- LiFePO4 Speicher Test         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 25 von 25

Thema: RP6: Beispiel Devantech CMPS03

  1. #21
    Neuer Benutzer Öfters hier
    Registriert seit
    20.06.2011
    Beiträge
    18
    Anzeige

    LiFePo4 Akku selber bauen - Video
    ups, war wohl im gedanken noch in 2010. Dachte der beitrag wäre von letztem Monat. Meinst Du es würde ausreichen wenn ich den vorne auf ne Erweiterungsplatine setze? Ich hatte gehofft den Kompass unter anderem für Drehmanöver zu verwenden, also während der Drehung den kompass abzufragen? Odere reicht da die Distanz zu den Motoren nicht aus? Hab gelesen das er nicht auf den geografischen Nordpol ausgerichtet ist. Das stellt für meinen Verwendungszweck aber glaube keine so große rolle. Hatte vor mit meinen Sensoren und Dem Kompass eine Karte zu Zeichnen und die Strecke die gefahren wurde zurück zu fahren und Hindernisse so umgehen das er den Sinnvollsten weg zurück sucht. Dabei geht es weniger um Zeit als um Ressourcenschonung (manchmal ist weniger eben mehr). Die Empfindlichkeit gegen andere Magnetfelder liegt wenn ich mich da richtig erinnere mit dem verwendeten Material des Sensors zusammen. Ich hatte da mal was interessantes drüber gelesen.
    Ah, google sei dank ich habs gefunden:
    Im Prinzip gibt es verschiedene Möglichkeiten, statische Magnetfelder zu messen. Man könnte
    mit einer rotierenden Spule versuchen über die darin induzierte Spannung das Erdmagnetfeld
    zu bestimmen. Dagegen spricht, dass man bei einem voll elektronischen Kompass gerade
    versucht, rotierende Teile unbedingt zu vermeiden. Eine zweite Möglichkeit wäre ein Hall
    Sensor, jedoch reicht die Empfindlichkeit heutiger Hall Sensoren nicht aus, um einen Kompass
    mit hoher Auflösung zu bauen. Meist werden für Kompass - Magnetfeldsensoren
    weichmagnetische Materialien eingesetzt. Diese reagieren stark nichtlinear auf äußere statische
    Magnetfelder, beschreiben durch die bekannte Hysteresschleife. Weichmagnetische
    Sensoren für die Erdmagnetfeldmessung sind oft als Ring ausgebildet und werden dann als
    Flux - Gate - Sensoren bezeichnet.
    In unserem Fall verwenden wir jedoch einen stabförmigen Sensor aus amorphem weichmagnetischem
    Material. Es wurde uns kostenlos von der Vakuumschmelze Hanau zur Verfügung
    gestellt und hat die Form eines Bandes mit 1 mm Breite und 25 Mikrometer Dicke ( Vitrovac
    6018, Zusammensetzung (Co,Fe,Mn,Mo)70(Si,B)30 ). Amorphe weichmagnetische Materialen
    werden durch rasche Abkühlung einer Metallschmelze erzeugt, wobei die Abkühlgeschwindigkeit
    etwa eine Million Grad pro Sekunde beträgt, so dass die Schmelze keine Zeit
    hat, zu kristallisieren. Der Vorteil amorpher ferromagetischer Materialien ist, dass sie schon
    bei ziemlich geringem äußerem Magnetfeld in die Sättigung geraten, mechanisch aber relativ
    unempfindlich sind.
    Hier noch der link falls jemand interesse hat.
    http://www.fh-rosenheim.de/fileadmin...er_Kompass.pdf

  2. #22
    Benutzer Stammmitglied Avatar von ScummVM
    Registriert seit
    02.04.2010
    Ort
    Österreich
    Beiträge
    79
    Mach ja nix wenn der Betrag schon etwas älter ist
    Hab mir die aktuelle Beschreibung des CMPS03 auf robotikhardware.de angesehen und festgestellt das die mittlerweile geändert wurde.
    Ich habe meinen Kompass mit der Pin Methode kalibriert nicht über I2C - im Endeffekt habe ich den Sensor 5x kalibriert Nord/Ost/Süd/West/Nord , dann hats funktioniert.

    Bei mir ist der Kompass ganz vorne auf der Erweiterungsplatine montiert. Gemessen habe ich nur im Stillstand, während der Fahrt habe ich nie gemessen, so hatte ich keine Probleme damit.
    Klicke auf die Grafik für eine größere Ansicht

Name:	RP6.jpg
Hits:	28
Größe:	86,9 KB
ID:	19306

    Zur Abschirmung wäre wohl µ-Metall (http://de.wikipedia.org/wiki/Mu-Metall) am besten geeignet - aber woher nehmen.

    --
    Hab grad festgestellt das ich mein laufendes Programm gar nicht mehr hier reingestellt habe.
    Code:
    /*******************************************************************************
     * RP6 C-Control PRO M128 Erweiterungsmodul
     * ----------------------------------------------------------------------------
     * RP6 - M128 - CMPS03 Kompassmodul Test / Display Test
     * ----------------------------------------------------------------------------
     * by ScummVM
     ******************************************************************************/
    
    // RP6CCLib einbinden
    #include "RP6CCLib.cc"
    
    // RP6 Master Lib einbinden
    #include "RP6MasterLib.cc"
    
    // Stopwatch einbinden
    #include "RP6StopwatchesCClib.cc"
    
    // I²C Bus Adresse des Controllers auf dem Mainboard
    #define RP6_BASE_ADR    10
    
    // Die I²C Adresse des CMPS03 ist 0xC0:
    #define CMPS03_ADR      0xC0
    
    // CMPS03 Daten Register:
    #define VERSION         0               // Firmware Version
    #define LOW             1               // Lowbyte
    #define HIGH            2               // Highbyte
    #define CALIBRATE       15              // Kalibrierung
    
    //CMPS03 DATEN REGISTER AUSLESEN
    
    float grad, value;
    word messung;
    char result[2];
    byte messung_low, messung_high, version;
    
    void readCMPS03(void)
    {
        I2C_Start();
        I2C_Write(0xC0);
        I2C_Write(0xC2); // Register 2 lesen
        I2C_Stop();
        I2C_Start();
        I2C_Write(0xC1); // Register 1 lesen
        messung_high = I2C_Read_ACK();
        messung_low = I2C_Read_NACK();
        version = RP6_readRegister(0xC0, 0);
        messung = (( messung_high << 8 ) + messung_low);
        I2C_Stop();
        RP6_readRegisters(RP6_BASE_ADR, I2C_REG_ADC_UBAT_L, messageBuf, 2);
        adcBat = (messageBuf[1] << 8) | (messageBuf[0]);
    
    
        if (getStopwatch1() > 500) {
    
            value = (adcBat / 102.4);          // Spannung umrechnen
            grad = (messung / 10.0);           // Grad umrechnen
            print("Version: ");                // Version seriell
            printInteger(version);             // Version seriell ausgeben
            print(" | Richtung: ");            // Richtung seriell
            clearLCD();                        // LCD löschen
            printlnLCD("Richtung:",0,0);       // Richtung LCD
            Str_WriteFloat(grad,1,result,0);   // Winkel seriell ausgeben
            Serial_WriteText(0,result);
            setCursorPosLCD(1,0);              // Cursor Position
            writeStringLCD(result);            // Winkel am LCD ausgeben
            println(" Grad");                  // Grad seriell
            print(" | Akku: ");                // Akku seriell
            Str_WriteFloat(value,2,result,0);  // Spannung seriell ausgeben
            Serial_WriteText(0,result);
            println(" V");                     // Einheit Spannung
            setCursorPosLCD(1,6);              // Cursor Position
            printLCD("Grad");                  // Grad LCD
            setStopwatch1(0);
        }
    }
    
    // Mainprogramm
    
    void main(void)
    {
        RP6_CCPRO_Init(); // Auf Startsignal warten!
        I2C_Init(I2C_400kHz);
    
        newline();
        println("   ________________________");
        println("   \\| RP6  ROBOT SYSTEM |/");
        println("    \\_-_-_-_-_-_-_-_-_-_/ ");
        newline();
        println("        CMPS03 Test  ");
        newline();
    
        showScreenLCD("CMPS03 Test","");
    
        beep(100, 200, 300);
    
        setStopwatch1(0);
        startStopwatch1();
    
        while(true)
        {
            readCMPS03();
        }
    }
    Das Programm gibt die Richtung mit Kommastelle auf dem LCD aus und über die Serielle Schnittstelle die Version, Richtung und Akkuspannung. Es lässt sich sicher alles besser lösen - aber es läuft. Das Programm benutzt die Stopwatches für die M128 von Dirk https://www.roboternetz.de/community...ight=stopwatch

    Gruß
    ScummVM

  3. #23
    Neuer Benutzer Öfters hier
    Registriert seit
    20.06.2011
    Beiträge
    18
    Hi!
    Das passt ja. Hab ihn heute zugestellt bekommen!!! Wollte ihn so ziemlich genau so wie Du anbringen, also bin ich schon mal echt begeistert! Den Code hatte ich mal kurz überflogen, konnte ihn aber leider noch nicht testen, da ich heute schon 2 kannen Kaffee intus hab und das dann wohl eher ein Lötfiasko würde , werde ihn aber morgen früh mal "ranschrauben" und testen. Werde ihn über I2C kalibrieren das scheint mir doch die einfachere Methode zu sein. Ansonsten schön Aufgebaut dein rp6. Zum Thema Abschirmung mit MU, http://www.matthey.ch die könnten das liefern, und auch in mengen unter 30 Kg . Aber mal im ernst könnte ich nicht irgendein nichtmagnetisches Metall zur Abschirmung nehmen bzw. sogar Aluminium? Da es ja nur schwach magnetisch ist sollte es doch für eine gewisse Abschirmung reichen, oder habe ich da falsche Erinnerung an den Physikunterricht (hatte ne hübsche Lehrerin, deshalb verzeiht mir bitte wenn ich mich da irre)?
    Gruß littles

  4. #24
    Benutzer Stammmitglied Avatar von ScummVM
    Registriert seit
    02.04.2010
    Ort
    Österreich
    Beiträge
    79
    Und schon getestet?
    Probier erstmal wie der CMPS03 läuft - dann kann man immer noch über eine Abschirmung nachdenken (oder etwas höher montieren).
    Geändert von ScummVM (13.07.2011 um 23:49 Uhr)

  5. #25
    Neuer Benutzer Öfters hier
    Registriert seit
    20.06.2011
    Beiträge
    18
    Hi!
    Konnte das gestern nur kurz testen, weil ein guter Freund Vater geworden ist. Das Messen lief soweit ich das beurteilen konnte bei meinem Test gut. Werde heute mal schauen wie genau er sich kompassgetützt dreht. Hatte nicht das gefühl das der Kompass von den Motoren gestört wird während der Drehung. Aber das werde ich heute beim Dauertest genauer unter die Lupe nehmen. Bin mir aber ziemlich sicher das es Funktioniert.

Seite 3 von 3 ErsteErste 123

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen