Digitale Teilkreise 'selbstgebaut'

Status
Es sind keine weiteren Antworten möglich.

Martin_R

Neues Mitglied
Hallo zusammen,

nach dem ich längere Zeit in diesem Forum nur lesenderweise anwesend war, möchte ich mich auch auf diesem Weg mal bemerkbar machen.

Ich habe vor, mir für mein Dobson-Teleskop digitale Teilkreise mit leicht erhältlichen und nicht allzu teuren Bauteilen aufzubauen.

Für die Höhenachse habe ich mir dafür einen Neigungssensor (Messbereich ± 60°) ausgesucht, da bei meinem Gerät der Teleskoptubus in der Höhenachse nur um etwas mehr als 90° schwenkbar ist.

Für die Azimutachse habe ich einen Drehgeber mit 1024 Impulsen je Umdrehung im Auge.
Da es diesen Geber auch mit Gegentaktausgängen gibt, lässt sich das ganze auf insgesamt 4096 Impulse je Umdrehung 'aufbohren'.

Die Signale sollen dann mit einem Microcontroller aufbereitet und zur Anzeige gebracht werden.

Hat jemad von Euch sowas schon mal gemacht?

Für Tipps und Ratschläge wäre ich sehr dankbar!

Nun möchte ich allen noch ein schönes 'Restostern' wünschen.


Grüße

Martin
 
Hi Martin!

Bin gerade an der selben Sache und habe z.B. auch Alternativen zu den klassischen Encodern gesucht.
Beim Neigungssensor war mir die Auflösung zu gering.
Hast du auch 0,1°? Alternativ hatte ich auch mit optischen Maus- Sensoren gebastelt aber die "prellen" manchmal.

Ein gutes Kompendium habe ich bei den Jungs hier gefunden...
http://www.grecner.cz/astro/index_a00.htm

Du musst eigentlich nur die Werte deiner Encoder auf- und absummieren und bei Anfrage auf die Schnittstelle das Ergebnis übermitteln. Für das Format such mal nach MG3 oder MG5 Protokoll.

Ich nehme einen Atmega8 in Verbindung mit dem BTM-222 Bluetooth Modul. Seriell war mir zu "alt" auch wenn es am einfachsten geht und USB braucht auch ein Kabel.
Mein Ziel ist erstmal das Ganze mit Astromist übers Handy zu nutzen. Das kann ich dann mit einer Halterung am Hut vom Dobson befestigen.

Ich habe sogar schon den G-Sensor im Handy versucht. Der ist auch sehr genau. Da bräuchte man dann garnix anderes, nur das Handy am Dobson aber der (die) haben bei Temperaturänderungen einen ganz schönen Drift.
Sprich wenn's kälter wird, stimmen die Werte nicht mehr.


Schöne Grüße!

Marcel
 
Zuletzt von einem Moderator bearbeitet:
Hallo Martin,

als einfache Teilkreise ohne Koordinatentransformation habe ich sowas unlängst für meine Monti-Steuerung gemacht. Schau mal im blauen Forum, Selbstbau/Technikforum, 12.02.10, "Sternbüchlein"

Ich habe 500er Encoder verwendet, mit einem 1:5 Getriebe davor.

Geber mit Gegentaktausgängen sind übrigens nicht das was du meinst, sondern Quadraturausgänge (90° Phasenverschiebung). Gegentaktausgänge sind im Pegel invertiert (180°), zur störsicheren Übertragung.

Willst du einfach Azimut und Polhöhe anzeigen, oder auf RA/DE umrechnen? Letzteres ist numerisch nicht ohne....

cs
Martin
 
Hallo Marcel, Hallo Martin,

was ich vorhabe ist folgendes:

Der Neigungssensor, den ich mir ausgesucht habe, bringt eine theoretische Auflösung von 0,13°.
Das Teil hat den Vorteil, dass es absolut arbeitet, d.h. nach einmaliger Kalibrierung müsste das ganze immer passen.

Der von mir in's Auge gefasste Drehgeber (1024 Impulse/U) hat zwei um 90° phasenverschobene Ausgänge (zur Richtungserkennung), die zusätzlich auch noch invertiert anliegen.
D.h., ich hätte dann mehr Impulse zur Verfügung, wenn ich die Impulse mit einem Monoflop verkürze, dass ich die invertierten sicher von den anderen Impulsen trennen kann.
Da der Drehgeber noch einen 0-Ausgang hat, vermute ich, dass er noch eine Nullmarke an einer bestimmten Position ausgeben kann und somit nach überfahren der Referenzmarke wieder absolut arbeitet (sorgfältiges Einnorden des Teleskops mal vorausgesetzt).

Ich möchte lediglich die Position in Azimut und Polhöhe auf einem zweizeiligen Display zur Anzeige bringen, an eine Steuerung ist, zumoindest derzeit, noch nicht gedacht.
Als Prozessor habe ich einen PIC16F877A vorgesehen.

ls Display habe ich mal eines als sehr preiswertes 'Basteldisplay' mit einer angenehmen amberfarbenen Hintergrundbeleuchtung bekommen, das könnte Nachttauglich sein, hab' ich allerdings noch nicht ausprobiert.


Grüße

Martin
 
Hallo Martin,

ein monoflop geht, oder einfach ein RC-Glied dessen Ein- und Ausgang auf ein Exor-Gatter gehen. Dieses liefert dann bei jeder Zustandsänderung auf dem Signal einen kurzen Puls. Die Exor-Ausgänge der beiden Signale A und B kann man auf ein Or-Gatter geben, dort hat man dann die 4-fache Auflösung. Aus den Werten von A und B nach der Flanke kann man die Richtung ermitteln.

Ich kann dir meine Schaltung zukommen lassen. Besteht aus einem 74HC86, einem 74HC14, und 2 74HC00. Ein Ausgang liefert Up-Pulse, der andere Down-Pulse. Ich gehe damit auf 2 Intr-Eingänge, wo in der ISR dann nur n++ oder n-- gemacht wird.

Hier ein Foto von meinen RA- und DE-Motorplatinen, die Encoderauswertung ist markiert:

Link zur Grafik: http://www.astroselbstbau.homepage.t-online.de/radek_drive.jpg

Die invertierten Signale braucht man nicht, sie liefern keine zusätzliche Information. Einziger Sinn ist eine bessere Störunterdrückung bei langem Anschlußkabel.

cs
Martin
 
Zitat von Martin_Raabe:
Hallo Martin,
Ich kann dir meine Schaltung zukommen lassen.

Hallo Martin!

Ich hätte auch Interesse an deiner Schaltung. Bisher habe ich die Encoder direkt am Atmega und werte sie mit der Encoder- Funktion in Bascom aus. Das ist noch nicht das gelbe vom Ei.
Er zählt zwar schön rauf und runter aber manchmal auch wenn sich der Encoder nicht bewegt. Scheinbar ist die Encoderscheibe auf "Kantenstellung" und prellt irgendwie.

Ich hatte statt klassischem Encoder auch schon an einen AS5040 oder ähnliches gedacht. Was hälst du von diesen Magnetsensoren? Schon mal verbaut?


Schöne Grüße!

Marcel
 
Hallo Martin, hallo Marcel,

hier die Schaltung. Bei INT0 kommt ein Puls raus wenn sich der Encoder vorwärts dreht, bei INT1 wenn er sich rückwärts dreht.

Die Richtungsauswertung könnte man natürlich auch per SW machen. Ist aber kritisch bei schnellen Schwenks wenn die Latenzzeit des Interrupts zu groß ist, oder der Geber in schneller Folge einen Schritt vor und wieder zurück macht.

Bisher habe ich nur optische Encoder verwendet (die HEDS Baureihe von HP/Agilent/Avago), bzw. beruflich optische Heidenhains.

cs
Martin

Link zur Grafik: http://maksunaut.bplaced.net/encoderauswertung2.jpg
 
Hallo Martin,

besten Dank für die Schaltung!

Ich muss mal sehen, ob ich bei meinem Controller noch einen interruptfähigen Eingang frei machen kann.

Der PIC16F877A hat leider nur vier, davon werden schon zwei von der seriellen Schnittstelle belegt, ein weiterer wird von einer Standardbibliothek als Ausgang für's LCD 'belagert'.



Gruß & CS

Martin
 
Hallo Martin,

mit 1 Intr-Eingang + 1 normaler Port-Eingang gibt es auch eine Lösung. Dann liefert ein Ausgang einen Puls bei jeder Änderung, und der 2. Ausgang liefert zeitgleich 0 oder 1 für Vorwärts oder Rückwärts.

Dann muss man in der ISR als erstes den Portpin einlesen, und je nach Zustand den Zähler inc oder dec.

Der PIC hat nicht zufällig einen Hardware-Zähler, mit externem Clock- und Up/Down Eingang?

cs
Martin
 
Es gibt von David Ek ein Encoder Schaltplan (16f84) im Internet. Dazu noch einen alten Palm inkl. freie Astronomie Software und alte serielle Maus. Sollte funktionieren.
 
Zitat von Martin_Raabe:
Hallo Martin,

mit 1 Intr-Eingang + 1 normaler Port-Eingang gibt es auch eine Lösung...

Diese Variante habe ich zur Zeit. A auf INT und B auf einen Port.
Hier habe ich allerdings das Problem mit dem Zählen auch wenn sich der Encoder scheinbar nicht dreht. Oder ich habe grundsätzlich was falsch gemacht. Aber es ist auch nicht immer nur manchmal. Daher habe ich nach einer zuverlässigen (Vor-)Schaltung gesucht, wo definitiv nur Richtung und Anzahl ankommt. Die Variante mit 2x INT finde ich auch nicht schlecht. Da hat der Controller fast nix mehr zu tun außer zählen und mit der Schnittstelle zu reden. Am Atmega8 habe ich nur 2 ext. INT. Ich habe aber noch einen Tiny2313, der hat PCINTs. Mal sehen, ob das auch geht...


Gruß!

Marcel
 
Hi Marcel,

Diese Variante habe ich zur Zeit. A auf INT und B auf einen Port. Hier habe ich allerdings das Problem mit dem Zählen auch wenn sich der Encoder scheinbar nicht dreht.

So meine ich das nicht. Das von dir beschriebene Problem entsteht, wenn nur 1 der 4 Flanken einer elektrischen 360°-Periode ausgewertet wird.

Also dann, wenn dein Intr also z.B. nur auf die steigenden Flanken auf A reagiert (und nicht auch auf die neg. Flanken).

Wenn dann der Encoder um einen Schaltpunkt wackelt, das Signal A also z.B. wie

0 1 0 1 0 1 0 1... aussieht, zählt der Zähler fälschlicherweise z.B.
1 2 2 3 3 4 4 5... , obwohl der Encoder auf der Stelle tritt.

Um das zu vermeiden musst du entweder auf beide Flanken von A reagieren, damit es z.B. so aussieht:
0 1 0 1 0 1 0 1...
1 2 1 2 1 2 1 2...

Oder du machst gleich die 4-fach Auswertung auf alle Flanken von A und B, dabei erhält man dann auch die maximale Winkelauflösung.

Obige Schaltung macht diese 4fach Auswertung.

Die Alternativversion für 1xIntr und 1x Porteingang funktioniert auch mit 4fach Auswertung. Dort geht nicht das Signal A (oder B) auf den Intr-Pin, sondern ein aus allen Zustandsänderungen generiertes Taktsignal. Dann gibt es ebenfalls keine Zählfehler.

cs
Martin
 
Hi Martin!

Die Alternativversion für 1xIntr und 1x Porteingang funktioniert auch mit 4fach Auswertung. Dort geht nicht das Signal A (oder B) auf den Intr-Pin, sondern ein aus allen Zustandsänderungen generiertes Taktsignal. Dann gibt es ebenfalls keine Zählfehler.

Das bedeutet dann aber 3 Ports. Z.B. mit einem 74XX86 das gemeinsame Taktsignal erzeugen und auf den INT. A+B seperat an einen Port und den Rest komplett per Software.

Ich hatte leider gedacht es reicht, wenn einer der beiden INTs reagiert nur noch nach der Richtung auf dem dazugehörigen I/O Port zu gucken.

Was hälst du eigentlich von dieser Lösung...
http://basicelectronic.blogspot.com/2006/08/rotary-encoder-converter-circuit.html


Schöne Grüße!

Marcel
 
Hi Marcel,

Das bedeutet dann aber 3 Ports. Z.B. mit einem 74XX86 das gemeinsame Taktsignal erzeugen und auf den INT. A+B seperat an einen Port und den Rest komplett per Software.

Nein, nur 2 Ports. Auf den ersten (interruptfähigen) geht der Clock der 4fach Auswertung, der 2. Portpin wird von der Hardware auf Hi oder Lo gesetzt, je nachdem wie rum der Encoder dreht.

Die ISR macht dann einfach
if ( port2 ) n++;
else n--;


Was hälst du eigentlich von dieser Lösung...

Ist halt nur eine 1-fach Auswertung, die 3/4 der Auflösung verschenkt. Scheint mir auch am oben beschriebeben Zählfehlerproblem zu leiden.


cs
Martin
 
Zuletzt von einem Moderator bearbeitet:
Hallo Martin,

einen zweiten Interruptfähigen Eingang konnte ich freimachen.

Glücklicherweise liegen bei meiner Entwicklungsumgebung die Bibliotheken im Quellcode vor, so dass Anpassungen kein Problem darstellen.


Danke & Gruß

Martin
 
Hallo Martin,

ich habe schon einige digitale Teilkreise für mich und Freunde nach der Art von Robert Soubie gebaut.
http://astrosurf.com/soubie/codeurs_usb.htm

Auch schon alte PS2-Mäuse als Encoder verwendet.
in jüngster Zeit die von PWB-Encoder angebaut.
Betone, das ich kein Elektroniker bin.
Hat aber alles prima geklappt.

Ich weiss nicht wie weit du mit dem Bau fortgeschritten bist?
Wenn es dich interessiert, kann ich Dir eine ausführliche Bauanleitung nebst Bezugsquellen liefern.
bei Interesse sende mir eine PN

CS
Siegfried
 
Hallo Siegfried,

vielen Dank für Dein Angebot!

Encoder habe ich bereits, die Software dazu läuft (mit Ausnahme der Drehrichtungserkennung) auch schon.

Aktuell arbeite ich an der Leiterplatte für die Signalaufbereitung des Encoders nach dem Vorschlag weiter oben.

Sobald die fertiggestellt ist, geht es an den mechanischen Anbau an mein Teleskop.

Zum dimmen der Hintergrundbeleuchtung des vorgesehenen Displays habe ich am Microcontroller noch einen PWM-Ausgang zweckentfremdet, über 'nen 10K-Widerstand einen BC337 dran, mit dem die Hintergrundbeleuchtung auf Masse ziehen, funktioniert prima!

Sobald ich mit dem ganzen fertig bin, werde ich die Schaltung samt Software mal hier einstellen.

Wird allerdings noch ein weilchen dauern, da dies erst mein zweites Microcontrollerprojekt ist.

Grüße & CS

Martin
 
Hallo Martin,

war längere Zeit nicht mehr im Forum. daher jetzt erst meine Antwort.
Wünsche Dir viel Erfolg, bei Deinem Projekt und bin gespannt auf Deinen Beitrag, der mich sehr interessiert.

Gruß und klaren Himmel
 
Status
Es sind keine weiteren Antworten möglich.
Zurück
Oben