-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: CMPS03 an RP6

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Ort
    Preetz
    Alter
    30
    Beiträge
    150

    CMPS03 an RP6

    Anzeige

    Hi,

    Mit folgendem Programm wollte ich testweise einfach die Himmelsrichtung bestimmen.
    Ich lese die Register 2 und 3 des CMPS03 via I2C aus und die ergeben zusammen die Himmelsrichtung von 0-3599.

    Code:
    // Includes:
    
    #include "RP6RobotBaseLib.h" 	
    #include "RP6I2CmasterTWI.h"
    
    #define CMPS03		0xC0
    /*****************************************************************************/
    // Main:
    
    
    uint16_t directionCMPS03(void)
    	{
    		I2CTWI_initMaster(100);
    		
    		uint8_t cmpsbuffer[2];
    		uint16_t direction;
    		
    		I2CTWI_transmitByte(CMPS03, 2); 			// Ab dem zweiten Reigster Daten anfordern
    		I2CTWI_readBytes(CMPS03, cmpsbuffer, 2); 	// und in dem Array speichern
    		
    		direction = ((cmpsbuffer[0] * 256) + cmpsbuffer[1])/10; 
    		
    		return direction;
    	}
    	
    // Main
    
    
    int main(void)
    {
    	initRobotBase(); 
    	setLEDs(0b111111);
    	mSleep(1000);
    	setLEDs(0b100100); 
    
    	
    	// Main loop
    	while(true) 
    	{
    		task_RP6System();
    		uint16_t direction;
    		direction = directionCMPS03();
    		writeString_P("\n Driection=\t");
    		writeInteger(direction,DEC);
    	}
    	
    	return 0;
    }
    Leider erhalte ich jedoch nur Datenmüll.
    Die Werte verhalten sich bei einer Drehung des Roboters Teilweise linear, aber manchmal fällt der Wert, dann steigt er wieder, dann springt er, aber bei mehreren Umdrehungen immer das gleiche Muster.

    Start bei 1088
    dann springt er auf 2506
    und steigt an auf 2623
    dann springt er auf 971
    und sinkt ab auf 944
    und steigt an auf 1139
    und sinkt ab auf 1088

    und dass soll eine Umdrehung von 360° sein???

    Da es ja immer das Gleiche ist, muss der Sensor ja immerhin etwas messen. Also scheint das Programm OK zu sein. Da es jedoch Müll ist, wird der Sensor etweder von außen gestört, oder ist enfach nur kaputt.
    Wie kann ich das feststellen oder beheben?

    Ich habe den CMS03 alleine auf der Erweiterungsplatine auf einer Steckleiste. Also sind prinzipiell keine großen Magnetfelder vom Rooter in der Nähe. Und wenn der CMS03 nur draußen funktioniert, dann hätte ich das gerne vorher gewusst.

    mfg WarChild
    (c) Rechtschreibfehler sind rechtmäßiges Eigentum des Autors (c)

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Ort
    Preetz
    Alter
    30
    Beiträge
    150
    Hehe,
    ich habe einfach mal das Chassis entfernt, und erhalte zwar bessere Werte,
    linear alternierend zwischen 2390 und 2760,
    aber immernoch keine verwendbaren Daten.

    PS: Mein CMPS03 erzeug ein leises sehr hochfrequentes Pfeifen. Ist das normal?

    mfg WarChild
    (c) Rechtschreibfehler sind rechtmäßiges Eigentum des Autors (c)

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.01.2008
    Beiträge
    164
    die i2c-geschwindigkeit muss verändert werden.
    deine twi-einstellung passt nicht zum kompass, ein bisschen damit rumspielen.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.01.2008
    Beiträge
    164
    kannst auch mit pwm antreiben, ist störungsfreier.

    ich erhalte bei 360grad-drehung einen wert von 1180 ,sind ca 1/3 grad und das reicht : atmega32 8 mhz

    Code:
    Config Timer1 = Timer , Prescale = 256
    
    Dim W As Word
    Dim E As Word
    
    Enable Interrupts
    
    Do
    
       Waitms 200
       Bitwait Pinc.2 , Reset
       Bitwait Pinc.2 , Set
       W = Timer1
       Bitwait Pinc.2 , Reset
       E = Timer1 - W
       Print E
    
    Loop
    
    End

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Hallo WarChild,

    du kannst ja 'mal mit diesem Prog vergleichen:
    http://www.roboternetz.de/phpBB2/viewtopic.php?t=34352

    Mein CMPS03 gibt kein Geräusch von sich. Du ruftst die CMPS03-Funktion aber auch sehr schnell hintereinander im Main Loop auf! Ich würde ihm eine halbe Sekunde Pause nach jeder Messung gönnen. In meinem Programm ist das mit einer Stopwatch gemacht.

    Gruß Dirk

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.01.2008
    Beiträge
    164
    Ich würde ihm eine halbe Sekunde Pause nach jeder Messung gönnen.
    500ms warten, das ist unsinn, les mal die beschreibung genau durch für den kompass.

    hier geht es um die twi-geschwindigkeit.

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Ort
    Preetz
    Alter
    30
    Beiträge
    150
    Also das Piepen kommt sobald ich die Betriebspannung anlege.

    Die Taktrate sollte eigentlich OK sein.

    Laut Handbuch:
    • SCL Geschwindigkeit bis zu 1 MHz
    CMPS03 unterstützt die Standard I2C Taktraten von 100 und 400 khz. Wird mehr als 100khz genutzt,
    sollte man nach schreiben der Registeradresse eine kurze Pause von ca. 50us einbauen.
    Ich habe keinen Pufferelko parallel geschaltet, weil ich dachte 100mA könnte ich auch so liefern.

    Pin 1 und 9
    Das Kompassmodul benötigt lediglich 5V und verbraucht im Durchschnitt ca. 15 mA. Da jedoch kurzzeitig Stromspitzen von bis zu 100mA auftreten können, sollte sich in der Nähe ein Elko zur Bufferung befinden.
    Wie empfindlich reagieren eure Module auf Umweldeinflüsse? Kann er auch an einem Fernseher vorbei messen oder ist der Fernseher immer Norden?
    (c) Rechtschreibfehler sind rechtmäßiges Eigentum des Autors (c)

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Ort
    Preetz
    Alter
    30
    Beiträge
    150
    Ich habe jetzt das o.g. Programm, dass anscheinend bei allen funktioniert, ausprobiert, bin in den Garten gegangen und habe genau die gleichen Werte erhalten wie zuvor bei meinem programm nur mit einem hübschen dezimalpunkt.

    Meine persönliche Diagnose lautet: Chip defekt!!!
    Das piepen klingt auch eher ungesund, leicht kratzig, wie ein schlechtes Steckernetzteil.

    mfg WarChild
    (c) Rechtschreibfehler sind rechtmäßiges Eigentum des Autors (c)

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Das piepen klingt auch eher ungesund, leicht kratzig, wie ein schlechtes Steckernetzteil.
    Klingt nicht gut ...

    Nebenbei: Der I2C-Bustakt hat mit deinem Problem nichts zu tun. Einen Elko würde ich dem CMPS03 gönnen.

    Gruß Dirk

    P.S.: Was mir noch einfällt: Du hast keine Abstandhalter aus Metall zu Befestigung des Moduls genommen? Oder?
    Erklärung: Es gibt Lötpunkte direkt neben den Befestigungslöchern, die einen Kurzschluss machen könnten.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Ort
    Preetz
    Alter
    30
    Beiträge
    150
    Das hatte ich auch gesehen, deshalb ist der Chip momentan nur mit einer Stiftleiste auf mein Erweiterungsmodul gesteckt.

    Wie groß sollte der Elko sein?

    mfg WarChild
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken bild006.jpg  
    (c) Rechtschreibfehler sind rechtmäßiges Eigentum des Autors (c)

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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