PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CMPS03 an RP6



WarChild
28.01.2008, 23:26
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.



// 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??? #-o

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

WarChild
28.01.2008, 23:29
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

sechsrad
29.01.2008, 08:29
die i2c-geschwindigkeit muss verändert werden.
deine twi-einstellung passt nicht zum kompass, ein bisschen damit rumspielen.

sechsrad
29.01.2008, 08:32
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



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

Dirk
29.01.2008, 12:30
Hallo WarChild,

du kannst ja 'mal mit diesem Prog vergleichen:
https://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

sechsrad
29.01.2008, 13:53
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.

WarChild
29.01.2008, 15:48
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? :-k

WarChild
29.01.2008, 16:12
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

Dirk
29.01.2008, 16:26
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.

WarChild
29.01.2008, 16:35
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

Dirk
29.01.2008, 16:41
Das hatte ich auch gesehen, ...

War klar,- ich hatte nur zur Sicherheit gefragt.

Auf meiner CMPS03-Platine sitzt ein 100uF Elko und ein 100nF keram. Kondensator.

Gruß Dirk

SlyD
29.01.2008, 18:25
Hallo,

das der CMPS03 fiept ist normal denke ich, da dort eine kleine Induktivität drauf ist - könnte irgendein kleiner Schaltregler sein. Der CMPS03 den ich hier vor ein paar Monaten mal ausprobiert hatte, hat auch gefiept soweit ich mich erinnere.
Das fiepen kann aber nicht jeder Hören, da es recht hochfrequent ist.


Kalibriert hast Du den Sensor aber schon? Also einmal in die Runde drehen (das sind halt 360° ;) ) und N-O-S-W markiert? Es gibt verschiedene Versionen von dem Sensor und bei jeder wars etwas anders - mal nur drehen, mal mit nem taster die Himmelsrichtungen markieren... weiss ich nicht mehr so genau.

Die Kabel die man da über dem Sensor sieht können auch schon stören - und natürlich Magnetfelder aller art.

MfG,
SlyD

Dirk
29.01.2008, 18:50
Hallo WarChild,

ich habe erst jetzt dein Bild vom Aufbau gesehen (oder war das vorher nicht da?).

Ich würde auf jeden Fall alle Kabel unterhalb des CMPS03 verlegen bzw. besser den CMPS03 mit Kunststoff-Abstandhaltern mind. 5 cm oberhalb der Experimentierplatine montieren. Die Kabel und die vorne zu erkennende Ultraschallkapsel können das Magnetfeld stark verfälschen!
Der CMPS03 sollte der höchste Punkt auf dem RP6 sein.

Gruß Dirk

WarChild
29.01.2008, 20:42
Ich dachte das Kalibrieren würde nur sein 360° Radius an die wirklich, lokal gemessenen 360° anpassen. d.H. sein Norden nach Norden ausrichten. Ich dachte nicht, dass der absolut andere werte misst, wenn er nicht kalibriert ist.

Morgen werde ich das mal ausprobieren. Und die Montage von dem Sensor werde ich wohl auch verlegen. Am besten ich baue den oben auf mein metall-Chassie (siehe Avatar) auf. Ich muss dann nur aufpassen, dass er den nicht irgendwo abstreift. (Bettkanten...)

aber trotzdem vielen Dank.

Ich reagiere sehr empfindlich auf Störeffekte.Bei 60 oder 75 Hz Monitoren kann ich jeden Bildaufbau sehen, und mit diesem Pfeifen sinkt RP6 auf meiner Beliebtheitskala.

mfg WarChild

Dirk
29.01.2008, 20:56
... mit diesem Pfeifen sinkt RP6 auf meiner Beliebtheitskala.

Der CMPS03 pfeift und der RP6 AUCH?

Ich glaube, ich geh' nächste Woche 'mal zum HNO-Doc.

Gruß Dirk

WarChild
29.01.2008, 22:22
Der CMPS03 pfeift und der RP6 AUCH?

Natürlich pfeift der RP6 nicht, aber weil der CMPS03 auf dem RP6 hängt habe ich ihn alsgesamkonstruct gesehen.

mfg WarChild

cb2sn43
15.03.2008, 18:49
Hallo WarChild,

hast Du das Problem lösen können ? Ich bekomme auf Datenschrott.
In Deinem Code ist mir aufgefallen, dass Du zum lesen und schreiben die selbe Adresse 0xco verwendest. Laut Beschreibung müsste das doch 0xc0 und 0xc1 sein.

Gruß

Dirk
16.03.2008, 09:14
Hallo cb2sn43,

hast du gesehen, dass es hier:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=34352
... eine weitere Version, auch mit Schaltplan, für den RP6 gibt?

Gruß Dirk

cb2sn43
16.03.2008, 19:50
Hallo Dirk,

den Threat hatte ich auch heute gefunden und wenn man den richtigen Pin auf GND zieht klappt es auch mit der Kalibrierung "ARRRGGGG" .....

I einem Threat wurde darüber berichtet, dass der Kompass ein Pfeifen von sich gibt. Scheint normal zu sein, ich kann es auch hören und der Kompass funktioniert einwandfrei

Trotzdem noch mal Danke für die Hilfe

WarChild
17.03.2008, 15:19
Ja also nachdem ich eine seriöse Kalibrierschaltung mit microtaster an den RP6 angelötet habe, gibt der CMPS03 vernünnftige Werte aus. Zuvor habe ich manuell den Pin mit einem Draht auf Ground gezogen, dabei hat er anscheinend bei leichtem wackeln mit dem Draht mehrere himmelsrichtungen gleich belegt. Im Handbuch steht, dass er aus den letzten 4mal "pin 5 auf GND ziehen" seinen 360° Kreis berechnet.
Durch das Wackeln habe ich ihm höchstens 3 verschiedene Himmelsrichtungen gegeben.
Also ist eine saubere Kalibrierung der erste Schritt zu guten Messwerten.

mfg WarChild