Forum: Projekte & Code KOMPASS KMZ10A KMZ10B ATmega8 Assembler


von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Mit relativ wenig Aufwand entsteht ein hinreichend genauer Kompass
mit 2 Sensoren vom Typ KMZ10.

Einfach die Kalibrierungstaste betätigen, einen Moment warten bis das 
blinken aufhört, dann langsam die Senoren um 360° drehen und nochmals 
die Kalibrierungstaste drücken.

Die Sensoren müssen um 90° versetzt angeordnet sein, der Sensor (ADC0 
und ADC1) ist der Hauptsensor, der Hilfssensor (ADC2 und ADC3) bestimmt, 
ob der Hauptsensor nach OSTEN oder nach WESTEN gerichtet ist.

Auf das im Schaltplan eingezeichnete LCD-Modul kann verzichtet werden, 
es zeigte nur die Pegel der Sensoren an.

Bitte aufpassen, die Sensoren KMZ10A und KMZ10B lassen sich sehr schnell 
(schon durch einen in der Nähe befindlichen magnetischen 
Schraubenzieher) ungewünscht magntisieren bzw. ummagnetisiern.

Versuche haben gezeigt, dass ein definiertes vormagnetisieren doch 
garnicht so verkehrt ist.

Die Sensoren in der Schaltung müssen nur so geschaltet sein, wenn sie 
nach Norden zeigen, muss am ADC0 für den Hauptsensor bzw. ADC2 für den 
Hilfssensor der höchste Spannungswert anliegen.


Bernhard

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Die beiden Sensoren (Prototyp) ^^

von Thomas B. (Firma: Druckerei Beste) (virtupic)


Lesenswert?

Uih! Hätte nicht gedacht, dass man mit diesen Sensoren einen Kompass 
bauen kann. Habe bisher nur darüber gelesen, aber noch nix getestet. 
Aber man liest von den wildesten Konzepten...

> Versuche haben gezeigt, dass ein definiertes vormagnetisieren doch
> garnicht so verkehrt ist.

Genau deswegen. Magentoresistive Sensoren sollen unterhalb der Sättigung 
nur zu gebrauchen sein, wenn man sie in die richtige Richtung 
vormagnetosiert. KMZ51 / KMZ52 haben dafür schon Spulen integriert. Aber 
mit der Kalibrie kriegt man das wohl wenigstens temporär in den Griff.

virtuPIC
/ggadgets for tools & toys

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Wie lange hält den diese kalibrierung? Weiß der Kompaß dan wo Norden ist 
oder muß man den zum kalibrieren einmal ausrichten?

Hätte noch nen paar Fragen:
- wozu ist der LDR da?
- warum nuzt du für die 32x32 nicht den Hardware multiplizierer? Hat das 
nen Grund?

von Bernhard S. (bernhard)


Lesenswert?

@Thomas

mit dem KMZ51 würde ich auch gern mal experimentieren, do wo bekommt man 
ein soches Bauteil her?


@Läubi


> Wie lange hält den diese kalibrierung?

Solange, bis sich die Vormagnetisierung des KMZ aus irgendwelchen 
Gründen ändert. (z.B. Starkes Magnetfeld, Temperaturenschwankungen, 
Erschütterungen usw.)

Momentan arbeit die Schaltung seit ca. 14 Tagen ohne erneutes 
kalibrieren.

Die Kalibrierungsdaten werden im EEOROM des µC abgelegt.



> Weiß der Kompaß dan wo Norden ist oder muß man den zum kalibrieren
> einmal ausrichten?

Wärend des Kalibriervorgangs muss der Kompass um 360° gedreht werden. 
Dabei werden die minimalen und maximalen Spannungswerte der Sensoren 
ermittelt.
Der maximale Spannungswert am Hauptsensor ist dann Norden, der minimale 
der Süden.

Experimente ergaben: der größte Spannungswert am Hauptsensor liegt an, 
wenn die Oberseite des KMZ nach Norden zeigt.


>wozu ist der LDR da?

kann zur Helligkeitsregelung verwendet werden.


>warum nuzt du für die 32x32 nicht den Hardware multiplizierer?

Künstlerische Freiheit ;)


Bernhard

von Thomas B. (Firma: Druckerei Beste) (virtupic)


Lesenswert?

> mit dem KMZ51 würde ich auch gern mal experimentieren, do wo bekommt man
> ein soches Bauteil her?

http://search.digikey.com/scripts/DkSearch/dksus.dll?Cat=1966657;keywords=kmz

Micht schreckt daran ab, dass ich die kleinen Pins mit meinen zwei 
linken Händen verlöten müsste...

>> Wie lange hält den diese kalibrierung?
...
> Momentan arbeit die Schaltung seit ca. 14 Tagen ohne erneutes
> kalibrieren.

Wie genau ist er denn? Ich gebe zu, den Code habe ich mir noch nicht 
angeguckt. Himmelsrichtung auf einen Oktanten genau anzugeben hilft beim 
Wandern oder Geocaching, aber zur Navigation auf dem Boot oder im 
Flugzeug sieht's anders aus.

virtuPIC
/ggadgets for tools & toys

von Bernhard S. (bernhard)


Lesenswert?

> Wie genau ist er denn?

Ich schätze seine Genauigkeit auf +- 1/16 Oktogon (+- 20°) ein, die 
höchste Genauigkeit lässt sich erreichen, wenn der Sensor genau 
waagerecht gehalten wird.

von Horst S. (freeman)


Lesenswert?

Hallo Bernhard,
da ich schon länger mit der Magnetgeschichte experimentiere ist es sehr 
interessant wie Du die Schaltung verdahtet hast. Könntest Du mir dies 
freundlicher Weise mitteilen????
Ich habe eine Magnetnadel in einer Drehspule gebaut und messe den 
Magnetstand über Fotozellen.

von Bernhard S. (bernhard)


Lesenswert?

Hallo Horst,

den Schaltplan findest Du ganz oben in der *.zip Datei

Bernhard

von Guido P. (took)


Lesenswert?

Nachdem ich http://www.tavrasm.org/ runter geladen und compiliert habe, 
die Ansteuerung von LCD-Display auskommentiert habe und eine 
Unstimmigkeit mit der Kalibrier-Taste gefixt habe (Laut Schaltplan liegt 
die an PB6, im Code stand tw. PC4... :-?) funktioniert das sogar schon 
auf meinem Steckbrett prima! :-)

Hier ein paar Bilder: 
https://blog.koeln.ccc.de/2009/02/15/mikrocontroller-bastelnachmittag/

Thx an Bernhard für den Code!

von Michael S. (Gast)


Lesenswert?

Hallo Bernhard,

dieser Thread hat mich motiviert, mit dem "analogen" Teil deines 
Versuches zu experimentieren, die Auswertung erfolgte mit einem 
Multimeter.

Mit der Ergebnis, dass mit dem KMZ10a auch eine Auflösung von 1 Grad 
erreichbar sein sollte.

Zunächst habe ich durch geänderte Widerstandswerte die Verstärkung der
Differenzspannung soweit erhöht (2x 20k + 50 Ohm -> 800-fache 
Verstärkung),
dass der verfügbare Mess-/Spannungsbereich bis 5 Volt besser ausgenutzt 
wird.

Die Differenzspannung liegt nun (vereinfachte Werte) zwischen 4,500 Volt
(Drahtanschlüsse des Sensors zeigen nach Süden) und 1,700 Volt 
(Drahtanschlüsse zeigen nach Norden).

Wichtig: Der KMZ10a wird horizontal ausgerichtet, die Drehachse steht 
senkrecht auf
der Grundebene.

Auffällig ist, dass sich die Nordrichtung nicht wirklich eindeutig 
einstellen lässt.
Dafür die Ost-West-Richtung umso besser.

Aber das wird schnell verständlich, wenn man sich den Zusammenhang 
zwischen der Ausrichtung des Sensors und der Differenzspannung einmal
als Tabelle darstellt:

Winkel    Sinus      U_diff    delta U_diff
gegen     (90° - Winkel)       (je 5 Grad)
Nord
0       1,000          4,500    0,005
5       0,996          4,495    0,016
10      0,985          4,479    0,026
15      0,966          4,452    0,037
20      0,940          4,416    0,047
25      0,906          4,369    0,056
30      0,866          4,312    0,066
35      0,819          4,247    0,074
40      0,766          4,172    0,083

45      0,707          4,090    0,090
50      0,643          4,000    0,097
55      0,574          3,903    0,103
60      0,500          3,800    0,108
65      0,423          3,692    0,113
70      0,342          3,579    0,116
75      0,259          3,462    0,119
80      0,174          3,343    0,121
85      0,087          3,222    0,122
90      0,000          3,100    0,122 -> Mittelwert !!
95     -0,087          2,978    0,121
100    -0,174          2,857    0,119
105    -0,259          2,738    0,116
110    -0,342          2,621    0,113
115    -0,423          2,508    0,108
120    -0,500          2,400    0,103
125    -0,574          2,297    0,097
130    -0,643          2,200    0,090
135    -0,707          2,110    0,083

140    -0,766          2,028    0,074
145    -0,819          1,953    0,066
150    -0,866          1,888    0,056
155    -0,906          1,831    0,047
160    -0,940          1,784    0,037
165    -0,966          1,748    0,026
170    -0,985          1,721    0,016
175    -0,996          1,705    0,005
180    -1,000          1,700

In Nord-Südausrichtung werden je Grad nur 0,001 V Differenz gemessen,
in Ost-Westausrichtung dagegen ca. 0,024 Volt je Grad (0,122 Volt je
5 Grad).
Am ADC eines ATtiny26 würden das schon fast 5 Digits (5 * 5mV =
0,025 Volt) je Grad ausmachen.

Was bedeutet, dass Winkel von 1 Grad differenzierbar sein sollten
(ich rede von Auflösung, nicht von Genauigkeit !!).

Im Messbereich von 45 / 135 Grad gegen Nord stehen immerhin noch fast 4 
Digits je Grad zur Verfügung.
Lediglich der Messbereich Nord/Süd +- 45 Grad taugt nicht gut zur 
Auswertung.

Nun würde ich (wenn ich denn einen weiteren KMZ10a in meiner Bastelkiste
hätte) einen zweiten Sensor um 90 Grad verdreht anordnen
(so wie bei deiner Messanordnung auch).

Allerdings würden ein Sensoren jeweils nur dann der Hauptsensor sein,
wenn er den oben angeführten Bereich (Ost-West +- 45 Grad) abdecken.
Der zweite Sensor liefert in diesem Fall als Nebensensor nur die 
Nordrichtung.

Ist der optimale Messbereich verlassen, dann tauschen Haupt- und 
Nebensensor ihre Funktion.

Damit sollte über den gesamten Vollkreis eine Auflösung von 1 Grad 
erreichbar sein.

PS.
Ist der KMZ10b wirklich alternativ zum KMZ10a einsetzbar ?
Laut Manual hat er nur 1/4 der Empfindlicheit des KMZ10a - und 
Navigation wird als Einsatzbereich beim KMZ10b nicht ausdrücklich 
erwähnt.

Dummerweise scheint niemand mehr den KMZ10a anzubieten.

mfg

Michael S.

von Sebastian G. (huehnerhose)


Lesenswert?

Hi!

Ich habe gerade interessiert mehrere Beiträge hier im Forum gelesen. Und 
komme ebenfalls zu der Frage: Lässt sich der KMZ10a durch den KMZ10b 
ersetzen? Und wenn ja mit welchem Verlust der Genauigkeit?
Ich brauche eigentlich nur eine Auflösung in ca. 8 Bereiche 
(N/S/W/O/NW/NO/SW/SO) da ich nur die grobe Ausrichtung eines GPS-Kompass 
(per Pfeil wird die Strecke zum nächsten Wegpunkt angezeigt) realisieren 
will. Dazu will ich eigentlich nur wissen wie herum das Handgerät gerade 
gehalten wird, da ich das ja leider nicht aus der GPS-Bewegung ablesen 
kann.

Denkt ihr da reicht eine anordnung von 2 KMZ10b?

Gruß & Dank

von Florian T (Gast)


Lesenswert?

Hallo, ich bin noch relativ neu und habe vorallem von Assembler noch 
keine Ahnung.

Ich habe gelesen, dass im code die Taste für die Kalibrierung auf dem 
falschen Port liegt. Nun meine Frage: was muss ich im Code ändern damit 
die Taste auch codeseitig an der richtigen stelle liegt.

an dem "falschen port geht die taste ja...

Gruß und Dank im Voraus,
Florian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.