Hallo zusammen, ich überlege in letzter Zeit, wie ich mir möglichst einfach und günstig eine simple Nachführung für die Astrofotografie bauen könnte. (Eine Nachführung soll die Drehung der Erde ausgleichen, damit Sterne bei längeren Belichtungszeiten nicht zu Strichen werden und punktförmig bleiben.) Ich habe vor eine Art Barndoor-Montierung zu bauen, allerdings mit einem Reibradantrieb an einem Kreissegment. Die Idee, einen DC-Getriebemotor als Antrieb zu verwenden, habe ich verworfen, da mit diesem die Drehzahl nur schwer konstant gehalten werden kann. Also soll es ein Schrittmotor sein! Als Steuerung habe ich momentan diese hier mit L297 und L298 im Visier: Beitrag "L297/L298 Schrittmotorsteuerung, Frage zu Bauteil" Hierfür brauche ich dann noch einen möglichst genauen Taktgeber, den ich auch justieren kann, da ich vermutlich Ungenauigkeiten in der Mechanik ausgleichen muss. Ich dachte da an einen Mikrocontroller mit einem Quarz als Frequenzreferenz. Nett wäre dabei noch, einen Schnellrücklauf auf Knopfdruck einzubauen. Die Taktrate könnte ich vmtl. über einen ISP einstellen - prinzipiell muss diese ja auch nicht oft geändert werden. (ein Display mit Einstelltasten für die Frequenz wäre daher vmtl. nicht nötig) Die Frequenz sollte im Halbschrittbetrieb vmtl. größenordnungsmäßig bei ~1kHz liegen. Ein Fehler von ~0,1% wäre toll. (Die Mechanik ist vmtl. eher der Schwachpunkt) Kann man mit so einem Mikrocontroller die Taktfrequenz so genau einstellen? Schrittmotorsteuerung und Mikrocontroller sind allerdings völliges Neuland für mich... Welchen Controller könnt ihr mir dafür empfehlen? Brauche dafür auch noch Programmer und software. Was meint ihr zu der erwähnten Schrittmotor-Steuerung mit L297 / L298 ? Schonmal Danke für eure Hilfe :) Viele Grüße Hannes Ps: Programmierkenntnisse sind praktisch nicht vorhanden - lediglich Überreste aus einer Vorlesung Computergrundlagen im 1. Semester, wo u.A. mit C und Python rumgespielt wurde. Elektronikkentnisse sind teilweise Vorhanden: Elektronikpraktikum (Transistorschaltungen, OPV, Logik, Schieberegister,... ) Löten kann ich einigermaßen - aber bitte kein smd. Die Schaltung würde ich vmtl. auf Streifenraster aufbauen, wenn nichts dagegen spricht. Als Stromversorgung dachte ich an einen 12V-Bleiakku.
Ohne Not würde ich diese Antiquitäten (L297/L298) nicht mehr verwenden. Es stimmt, lange Zeit waren diese Chips Standard, weshalb man sie auch in vielen Beispielen findet - aber lang, lang ist’s her. Such Dir was Aktuelleres und Komfortableres. Da sich die Schrittmuster, zur Steuerung eines Schrittmotors, nur schlecht "manuell" generieren lassen, Du zur genauen Nachführung sowieso eine möglichst genaue Zeit braucht, kommst Du um einen µP wohl nicht rum. Ein Quarz bzw. eine quarzgenaue Zeit ist dann sozusagen "Abfall".
Johannes M. schrieb: > eine simple Nachführung für die Astrofotografie Diese Baustelle wird wohl doch etwas größer werden. Die Schrittmotoransteuerung ist evtl. noch der einfachere Teil dabei. Dazu findest Du hier viele Beiträge wie: Beitrag "Schrittmotoren steurrung - fragen" Du brauchst auch eine sehr solide Mechanik, die nicht wackelt, wenn einer im Haus herumläuft und die korrekt nachführen kann!!!
Johannes M. schrieb: > Ps: > Programmierkenntnisse sind praktisch nicht vorhanden Das könnte sich als Stolperstein erweisen. Es sei denn, deine Montierung ist exakt waagrecht und exakt eingenordet. (*) > Die Schaltung würde ich vmtl. auf Streifenraster aufbauen, wenn nichts > dagegen spricht. Die Schaltung ist nicht das Problem (*) und der periodische Schneckenfehler deines Getriebes ist unter "ferner liefen".
:
Bearbeitet durch User
oszi40 schrieb: > Du brauchst auch eine sehr > solide Mechanik, die nicht wackelt, wenn einer im Haus herumläuft und > die korrekt nachführen kann!!! Das die Mechanik der schwierigste oder zumindest fehleranfäligste Teil der ganzen Konstruktion wird, ist für mich klar. Aber dabei kommt es auch auf die verwendeten Brennweiten und die Belichtungszeit an - ich habe nicht vor, mich mit professionellen schweren Montierungen zu messen, die auch mehrere Meter Brennweite noch sauber nachführen können. Bei den möglichen Belichtungszeiten habe ich an < 10min gedacht. Als Brennweite vllt. 100 bis 200mm... wenn man nach Barndoor-Montierung googelt, bekommt man mMn. einen guten Eindruck davon, wie solche Konstruktionen ausehen können und was möglich ist. An "richtige" Astrofotografie reicht das natürlich nicht heran :) http://forum.astronomie.de/phpapps/ubbthreads/ubbthreads.php/topics/1029545/Mein_Bandoorplan_wird_umgesetz Dieser Bericht zeigt sozusagen eine Luxus-Barndoor-Montierung. Etwas in der Art habe ich auch vor zu bauen, auch wenn ich diese Qualität vmtl. nicht erreichen werde. :) Karl Heinz schrieb: > Es sei denn, deine Montierung ist exakt waagrecht und exakt eingenordet. Das habe ich zumindest vor. Stichworte sind hier "Polsucher" und "Scheiner-Methode". Der Antrieb soll nur die Rektaszentionsachse nachführen. Die Steuerung muss also keine Koordinatentransformationen und Regelungsprobleme durchführen, sondern nur einen möglichst genauen Takt für den Schrittmotortreiber liefern. Amateur schrieb: > Such Dir was Aktuelleres und Komfortableres. http://www.watterott.com/de/Pololu-A4988-Schrittmotortreiber Meinst du soetwas? (@ oszi40: Danke für den Link :) ) Das hat scheinbar die gleiche Funktion wie L297/L298: Takt rein -> Motorstrom raus. Könnt ihr mir einen Mikrocontroller (= µP ?) empfehlen, der für diesen Zweck ausreicht, günstig und einfach in der Handhabung ist? Ich hab in dem Zusammenhang mit Frequenzerzeugung etwas von CTC-Mode gelesen... Danke für eure Hilfe :) Grüße Hannes
Johannes M. schrieb: > Meinst du soetwas? (@ oszi40: Danke für den Link :) ) > Das hat scheinbar die gleiche Funktion wie L297/L298: Takt rein -> > Motorstrom raus. Der unterschied besteht in ein paar Kleinigkeiten. Ob das aber bei dir und den zu erreichenden Drehzahlen eine Rolle spielt, wage ich mal zu bezweifeln. > > Könnt ihr mir einen Mikrocontroller (= µP ?) empfehlen, der für diesen > Zweck ausreicht, günstig und einfach in der Handhabung ist? So ziemlich jeder, der in den letzten 50 Jahren gebaut wurde. Ehrlich. Es spielt keine wirkliche Rolle. Das ist so, wie wenn du fragst, welches Auto wohl am besten geeignet ist um eine Rolle Klopapier von München nach Stuttgart zu transportieren. Alles geht: vom Smart bis zum 40-Tonner. Da hier im Forum die AVR bei weitem in der Überzahl sind: AVR-Tutorial > Ich hab in dem Zusammenhang mit Frequenzerzeugung etwas von CTC-Mode > gelesen... Ja. Ist eine Möglichkeit. Aber erst mal fängst du dort an, wo alle anfangen: mit einer LED an einem Portpin, die du gezielt einschalten, ausschalten, blinken lassen kannst. Dann gehts weiter und irgendwann nach der 25-ten Vorübung bist du dann soweit, dass du deinen Schrittmotor in einem genauen Takt Schritte machen lassen kannst und das ganze dann auch noch mit ein paar Tasten steuern kannst.
:
Bearbeitet durch User
Schrittmotoren erzeugen recht starke Vibrationen. Moderne Treiber mit Mikroschritt sind da schon besser, aber kein Vergleich mit Servomotoren. Solltest dir erst mal die Vibrationen von so einer Selbstbaufräse anschauen -- da bekommst du längere Striche als ganz ohne Nachführung :-(
Johannes M. schrieb: > Also soll es ein Schrittmotor sein! Willst du absichtlich verwackeln ? Mindestens Mikroschritt mit TB6560, besser BLDC mit Vektorsteuerung, ältertümlich Synchronmotor an variabler Frequenz.
Karl Heinz schrieb: > Es spielt keine wirkliche Rolle. Das ist so, wie wenn du > fragst, welches Auto wohl am besten geeignet ist um eine Rolle Klopapier > von München nach Stuttgart zu transportieren. Alles geht: vom Smart bis > zum 40-Tonner. Mir war schon bewusst, dass mein Vorhaben keine allzu großen Anforderungen an den Controller stellt, aber da ich noch keine Erfahrung mit Mikrocontrollern habe, wollte ich wissen, ob sich vllt. der Eine oder Andere besonders gut eignet. Zu deinem Autovergleich: Da bin ich sozusagen noch Fahrschüler ;) Ich werde mir vmtl. den ATmega8 zusammen mit Lochrasterplatine, sämtlichen Bauteilen (LED, R's, C's, Quarz, Spannungsregler,... ) und einem Programmer ordern. https://shop.myavr.de/index.php?sp=shoppingCart.sp.php&ses=I1RGTfCrCwCbyyCiB8CxCc2ChCrnB8CeCfhCmCpoCo0xB3CwaCxCgC8DhCjCaByBtDeC1BaC6DhDbC7B0BoC1tBdtCyDdDdCpg4CpCoikChB3CoB4CtB8ChCsCvdi Ist der empfehlenswert? Noch einer schrieb: > Moderne Treiber mit > Mikroschritt sind da schon besser der Pololu-Treiber unterstützt 1/16-Schritte, glaubst du dass das reicht? Werden die Vibrationen schwächer, wenn ich den Motorstrom schwächer einstelle? Ein hohes Drehmoment brauche ich ja eigentlich nicht... Grüße Hannes
Johannes M. schrieb: > Schrittmotorsteuerung und Mikrocontroller sind allerdings völliges > Neuland für mich... Zur Orientierung, wie so etwas praktisch gelöst werden kann: Beitrag "Schrittmotoransteuerung mit A4982 und ATmega328" Wenn Du nicht löten möchtest, würde sich ein Arduino Uno mit obigem Treibermodul (A4988) anbieten. Das Programm dafür läßt sich einfach anpassen, um den Motor ganz langsam zu drehen.
>Ein hohes Drehmoment brauche ich ja eigentlich nicht...
Durchaus wahrscheinlich, dass hier ein 12Volt-Billigmotor besser ist.
Hat hohe Induktivität und geringes Rastmoment. Auch möglich, dass es mit
passender Elastizität und Schwungmasse gut genug wird.
Lässt sich nicht so einfach vorhersagen. Sonst würde ja niemand diese
teuren Servomotoren kaufen.
Ganz andere Frage. Lässt es sich Stufenweise machen? Vor jedem Schritt
die Blende schließen und erst wieder öffnen, nachdem die Vibrationen
abgeklungen sind?
Bevor Du hier "mit Spatzen auf Kanonen" schießt, würde ich erst mal (nur um ein Gefühl dafür zu bekommen) einen Metallbaukasten suchen und für erste Heimwerker-Experimente einen Gleichstrom-Spielzeugmotor oder Scheibenwischermotor mit Untersetzung mit Labornetzteil testen. Die höhere Schule der Schrittmotorvariante kannst Du später noch machen, wenn Du die benötigte Kraft und Geschwindigkeit besser einschätzen kannst.
Hallo, da die Mintierung nur nachführen muss, ist Mikroschrittbetrieb nicht notwendig. Eine passende Getriebeuntersetzung kann die die Schritte soweit verkleinern, dass sie unter der Bildauflösung liegen. Vibrationen sind dann nicht sichtbar. Ein schneller Rücklauf geht dann aber nicht mehr, dafür müsste der Reibradantrieb kurz ausgekuppelt werden. Gruß, Martin Cibulski
m.n. schrieb: > Wenn Du nicht löten möchtest, würde sich ein Arduino Uno mit obigem > Treibermodul (A4988) anbieten. Das Programm dafür läßt sich einfach > anpassen, um den Motor ganz langsam zu drehen. Der Tipp mit dem Arduino ist wirklich gut! Ich hätte zwar nichts dagegen, das Teil selbst zusammenzulöten, aber das reduziert zumindest einige Fehlerquellen und letzendlich soll das Teil ja funktionieren :) Ich würde statt dem Uno allerdings lieber den Duemilanove verwenden, wenn nichts dagegen spricht, da dieser statt einem Keramikresonator ein wesentlich genaueres Quarz verwendet. Kann man bedenkenlos auf günstige Angebote von Ebay zurückgreifen oder sind die eher nicht zu empfehlen? Sowas z.B.: http://www.ebay.de/itm/New-SainSmart-Duemilanove-Board-ATmega328-Free-USB-Cable-For-Arduino-DE-Lager-/221586369391?pt=Wissenschaftliche_Ger%C3%A4te&hash=item339793ab6f Noch einer schrieb: > Lässt es sich Stufenweise machen? Die Schrittfrequenz liegt je nach Übersetzung und Motor vmtl. im Bereich von 1kHz... Aber das Prinzip wird trotzdem oft verwendet, indem die Belichtungszeit auf mehrere Aufnahmen verteilt wird und man diese dann nachträglich aufaddiert. Dadurch kann man leichte ungenauigkeiten in der Nachführung ausgleichen. Einen großen Motor werde ich vmtl. eh nicht verwenden, da ich wie gesagt, kein hohes Drehmoment benötige. Ob Vibrationen ein Problem werden, wird sich zeigen, allerdings gibt es einige Versionen mit Schrittmotor im Netz und die scheinen zu funktionieren. oszi40 schrieb: > Die > höhere Schule der Schrittmotorvariante kannst Du später noch machen, > wenn Du die benötigte Kraft und Geschwindigkeit besser einschätzen > kannst. Die Kraft wird wie gesagt nicht das Problem sein: Die Übersetzung ist recht groß, wodurch das nötige Drehmoment überschaubar bleibt - das ist simple Mechanik. Die nötige Motordrehzahl lässt sich auch recht einfach berechnen. Dass man sich in die Mikrocontrollergeschichte zunächst etwas einarbeiten muss und klein anfangen sollte, verstehe ich. Was aber ein Zwischenschritt über einen DC-Antrieb bringen soll, leuchtet mir nicht so ganz ein. Danke für eure Hilfe :) Grüße Hannes
Johannes M. schrieb: > Das habe ich zumindest vor. Stichworte sind hier "Polsucher" und > "Scheiner-Methode". Als Alternative solltest du dir die Methode von Edward Skinner King auch noch ansehen. Das ist noch einfacher als die Scheiner-Methode.
Johannes M. schrieb: > Ich würde statt dem Uno allerdings lieber den Duemilanove verwenden, > wenn nichts dagegen spricht, da dieser statt einem Keramikresonator ein > wesentlich genaueres Quarz verwendet. 1. Mit einem Uno könntest Du mein Programm fast unverändert verwenden. Zudem ist der Motorstrom per Software einstellbar. 2. Beim Uno kann man den keram. Resonator entfernen und der Quarztakt vom USB-Konverter nehmen. Unter http://www.mino-elektronik.de/fmeter/fm_software.htm#bsp7 "automatischer Abgleich..." 2.Absatz findest Du eine Beschreibung und ein Bild. Falls Du vielleicht irgendwann doch noch löten möchtest, kannst Du auch eine Leerplatine + A4982 meiner Schaltung bekommen.
m.n. schrieb: > Mit einem Uno könntest Du mein Programm fast unverändert verwenden. > Zudem ist der Motorstrom per Software einstellbar. Das mit dem Motorstrom funktioniert aber nicht mit dem Pololu-Platinchen, oder? Bei dieser wird der V_ref-Eingang doch mit dem Poti gesteuert, wenn ich das richtig sehe, und ist nicht herausgeführt. Aber wenn man will, kann man das sicher auch modifizieren. (Wenn ich meine SMD-Abneigung überwinde :) ) Ist deine Software nicht etwas zu komplex für meinen Zweck? Ich brauche doch eigentlich nur die Geschwindigkeits-Steuerung (und eine zusätzliche höhere Geschwindigkeit zum zurücksetzen). Danke für dein Angebot mit der Platine, aber das Layout verwendet doch größtenteils SMD, oder? Sind die Unterschiede vom Duemilanove in der Programmierung zum Uno sehr groß? Die µP's sind doch auch fast identisch, oder? Werner schrieb: > Als Alternative solltest du dir die Methode von Edward Skinner King auch > noch ansehen. Das ist noch einfacher als die Scheiner-Methode. Danke für den Hinweis - ich werd mal googeln :)
Johannes M. schrieb: > Sind die Unterschiede vom Duemilanove in der Programmierung zum Uno sehr > groß? Offensichtlich nicht; ich dachte, der Due... wäre schon ein ARM-Prozessor. Allerdings ist es wohl ein Vorgänger vom Uno. Johannes M. schrieb: > Ist deine Software nicht etwas zu komplex für meinen Zweck? Sie ist fertig und funktioniert. Ohne Rampe wirst Du kaum höhere Geschwindigkeiten fahren können; und ohne steuerbare Stromeinstellung mußt Du immer den max. Strom einstellen, egal ob er gebraucht wird oder nicht.
m.n. schrieb: > Allerdings ist es wohl ein Vorgänger vom Uno. Heist das, dass man deine Software auch auf diesem verwenden kann? Das wäre natürlich ideal und ich könnte die Bastelei am Uno vermeiden. Als Motor habe ich jetzt mal diesen hier ausgesucht: http://www.watterott.com/de/Schrittmotor-incl-Anschlusskabel Den Strom kann ich hoffentlich dauerhaft auf einem relativ niedrigen Wert eingestellt lassen, da nach dem Motor direkt eine recht hohe Übersetung folgt und so kein hohes Drehmoment nötig ist. Allerdings sollte es auch kein großes Problem sein, den Poti auf der Platine zu entfernen und den Kontakt mit einem PWM-Ausgang des Arduino zu verbinden... m.n. schrieb: > Ohne Rampe wirst Du kaum höhere > Geschwindigkeiten fahren können Zum Nachführen liegt die Drehzahl vmtl. bei ca 1 U/min und beim zurückfahren vlt. bei 200 U/min - hältst du das für möglich ohne Rampe? Was hätte eine zu hohe Drehzahl für Folgen? Schrittverlust würde in meinem Fall keine Rolle spielen, da ich keine absoluten Positionen anfahren muss. Danke für deine Hilfe :) Grüße Hannes
Johannes M. schrieb: > Als Motor habe ich jetzt mal diesen hier ausgesucht: > http://www.watterott.com/de/Schrittmotor-incl-Anschlusskabel Wenn Du schon dort kaufen möchtest, dann nimm ein anderes Model in Bauart NEMA17: http://www.watterott.com/de/Schrittmotor-Unipolar/Bipolar-200-Steps/Rev-42x48mm-40V-1200mA-NEMA-17?xfa9ed=c77580383fc9047c4bb1e6523a761621 Dich wird jetzt die geringere Phasenspannung und der höhere Strom irritieren. Spannung und Strom regelt der Motortreiber selber, daher ist das für Dich kein Problem. Aber: mit diesen Spulendaten kann sich der Motor wesentlich schneller drehen als der zuvor genannte Typ. Gerne könntest Du ja die Datenblätter (Drehzahlkurve) vergleichen, und rate mal, warum beim 12V Motor keins verfügbar ist? ;-) Der Motortreiber (mit A498x) ermöglicht auch den 24V Betrieb, wobei der Versorgungsstrom bei höherer Betriebsspannung sinkt, sodass die aufgenommene Leistung von Treiber + Motor nahezu gleich bleibt! Johannes M. schrieb: > Zum Nachführen liegt die Drehzahl vmtl. bei ca 1 U/min und beim > zurückfahren vlt. bei 200 U/min - hältst du das für möglich ohne Rampe? > Was hätte eine zu hohe Drehzahl für Folgen? 1 Upm entspricht ca. 3,3 Vollschritten/s. Es ist ratsam, die höchste Mikroschrittauflösung zu verwenden, die möglich und sinnvoll ist. Bei dem obigen Treiber A4988 ist das 1/16 Schritt, was einer Schrittfrequenz von 53,3 Hz entspricht. Diese Frequenz wird sehr wahrscheinlich aus dem Stillstand vom Motor bestens verkraftet. Natürlich hängt es von den äußeren Massen, und, und, und ab. Dennoch dürfte es egal sein. Bei 200 Upm ohne Startrampe müßte die Start-Stopp-Frequenz (so nennt man das) bei >= 666,6 Vollschritten/s liegen. Mein Erfahrungswert bei NEMA17-Motoren und geringer äußerer Masse liegt bei 100-150 Vollschritten/s (bei 12V Versorgungsspannung). Ohne Rampe wird sich der Motor nicht bewegen und nur vor sich hinsummen: ohne Rampe geht es nicht!
@ Johannes, ist an sich eine gute Idee mit dem Selbstbau, wenn es um das Bauen geht. Wenn ich mir allerdings die Preise für gebrauchte Teleskop Montierungen oder zumindest die der Antriebseinheiten ansehe und dann den teils robusten Aufbau dieser sehe, also ich würde mir nicht zutrauen da eine brauchbare Nachführung hinzubekommen. Als Anhaltspunkt für die Herstellersuche könnten vielleicht die Typen in der Einstelung der Teleskopsteuerungen von Stellarium dienen. Wenn Du lieber selst bauen möchtest, ignorier bitte diesen Beitrag...
Hier noch ein "Blick zur Sonne" für alle die Stellarium nicht kennen. Die Nachtansicht zeigt natürlich mehr von da ganz weit Draußen :-)
hp-freund schrieb: > Wenn ich mir allerdings die Preise für gebrauchte Teleskop Montierungen > oder zumindest die der Antriebseinheiten ansehe und dann den teils > robusten Aufbau dieser sehe, also ich würde mir nicht zutrauen da eine > brauchbare Nachführung hinzubekommen. Kannst du mir mal eine (oder zwei) brauchbare Kombis aus Montierung und Antrieb vorschlagen? Darüber, ob eine EQ-1 für Fotografie ausreicht, gibt es ja sehr unterschiedliche Meinungen. Ich habe vor allem Bedenken wegen der recht kleinen Schneckenräder, wo sich Schneckenfehler o.Ä. vmtl. recht stark bemerkbar machen. Viele billigen Antriebe dafür sind dann auch nur mit DC-Motoren ausgestattet und damit für Fotografie auch eher suboptimal. Ich habe den Eindruck, dass man da unter 150€ (eher 200€) nicht wegkommt... Wie siehst du das? Ich vermute, dass ich zumindest die nötige Drehzahl der Nachführung recht genau hinbekomme mit meinem geplanten Aufbau: Das Kreissegment (aus Multiplex) für den Reibradantrieb wird vmtl. einen Radius von 250mm haben und mit Oberfräse und Fräszirkel sollten relative Abweichungen im Radius auch recht klein sein (vmtl. 0,1mm). Als Reibrad nehme ich dann eine Silberstahlwelle aus einem Drucker (vmtl. leicht angerauht für einen höheren Haftreibungskoeffizienten), die mit einer Feder angepresst wird. Damit erreiche ich mit einer 8mm-Welle an der ersten Stufe eine Übersetzung von etwa 1/60. Der Schrittmotor wird dann vmtl. über ein Schneckengetriebe die Stahlwelle antreiben (wieder etwa 1:30 übersetzt). Schneckenfehler sollten sich dadurch eher schwach zeigen, da sich diese relativ schnell dreht und die Drehzahlschwankungen durch die Schnecke nur kleine Winkelabweichungen erzeugen. Die Drehzahl justiere ich dann, indem ich mein längstes Objekiv auf einen Stern mit möglichst kleiner Deklination (-> na am Himmelsäquator -> höchste Geschwindigkeit am Himmel -> "worst case") Für das Einnorden werde ich vmtl einen billigen Sucher am beweglichen Teil der Montierung befestigen. Um den Sucher parallel zur Drehachse einzustellen, will ich ihn (am Tag) auf ein weit entferntes Objekt (z.B. Strommasten) richten und ihn dann so einstellen, dass sich das Fadenkreuz beim Drehen um die Nachführachse nicht bewegt. Ob das Justieren über den Sucher genügt, muss ich dann ausprobieren... Wenn nicht muss ich wohl "Einscheinern" :) Soweit meine Theorie :) Motor und Steuerung werde ich vmtl. für unter 50€ inkl. Gehäuse etc. hinbekommen. Die Mechanik kann ich vorraussichtlich aus vorhandenem Material aufbauen. m.n. schrieb: > Wenn Du schon dort kaufen möchtest, dann nimm ein anderes Model in > Bauart NEMA17: > http://www.watterott.com/de/Schrittmotor-Unipolar/Bipolar-200-Steps/Rev-42x48mm-40V-1200mA-NEMA-17?xfa9ed=c77580383fc9047c4bb1e6523a761621 > > Dich wird jetzt die geringere Phasenspannung und der höhere Strom > irritieren. Spannung und Strom regelt der Motortreiber selber, daher ist > das für Dich kein Problem. Die Preisdifferenz ist zumindest vernachlässigbar ;) Heisst das, dass der Treiber sich die Spannung per PWM ziemlich verlustfrei selbst zurechtbiegt und ich mehr oder weniger nur auf die Leistung zu achten habe? (und ob der Treiber den Strom verträgt...) m.n. schrieb: > ohne Rampe geht es nicht! Ok, dann werde ich mich wohl darauf einlassen müssen und mich am Code von m.n. entlanghangeln. :) Oder eben vorerst die "Rückfahrt" von Hand machen - Der automatische Schnellrücklauf ist ja auch mehr ein "nice to have" :D Läuft das Programm von m.n. ohne weiteres auf dem Duemilanov? Der ist ja scheinbar der Vorgänger vom Uno... Der Duemilanove wäre von daher lieber, da ich mir das Löten am Board für den Quartz-Takt erspare und er auch noch etwas günstiger ist... Viele Grüße :) Hannes
Johannes M. schrieb: > Läuft das Programm von m.n. ohne weiteres auf dem Duemilanov? Eine Anpassung findest Du hier, ganz unten: http://www.mino-elektronik.de/Generator/takte_impulse.htm#bsp7 Und auch folgendes Programm sollte nach Änderung der Taktfrequenz auf 16 MHz auf einem ATmega328 laufen: http://www.mino-elektronik.de/Generator/takte_impulse.htm#bsp2 Damit kann man mit 62,5ns Auflösung eine genaue Schrittfrequenz vorgeben, wie es zum Testen sicherlich günstig ist. Die letzte Einstellung wird gespeichert, sodass der Taktgenerator nach dem Einschalten gleich loslaufen kann. Ich plane eine Kombination der beiden Programme, mit der dann ein Schrittmotor per ser. Schnittstelle (bzw. USB beim Arduino) bedient werden kann. Das braucht aber noch seine Zeit!
> as braucht aber noch seine Zeit!
Bin mir noch nicht so sicher, wie sich die mechanische Trägheit von
schwerer Kamera und schwerem Objektiv auf Deinen SM-Antrieb auswirkt.
Evtl. verliert ein schwächlicher SM einige Schritte?
Bei der Untersetzung? Letzten Endes muss die Kamera 1 Umdrehung pro Tag (genauer in 23:56) machen. So schwach kann der Motor fast nicht sein, dass er bei einer Untersetzung von 1:1440 die Kamera nicht rumwuchten kann.
m.n. schrieb: > Eine Anpassung findest Du hier, ganz unten: ... Danke :) Karl Heinz schrieb: > So schwach kann der Motor fast nicht sein, dass er bei einer > Untersetzung von 1:1440 die Kamera nicht rumwuchten kann. Ich habe auch schon überlegt, ob ich nicht besser einen kleineren SM verwenden sollte. Hat ein größerer Schrittmotor irgendwelche Nachteile gegenüber einem kleineren bei identischer Leistung? (also stark gedrosselter Strom am größeren Motor) ... mal abgesehen vom Gewicht. Grüße Hannes
Johannes M. schrieb: > Ich habe auch schon überlegt, ob ich nicht besser einen kleineren SM > verwenden sollte. Der o.g. ist schon recht klein. Johannes M. schrieb: > Hat ein größerer Schrittmotor irgendwelche Nachteile gegenüber einem > kleineren bei identischer Leistung? Pauschal gesagt haben größere SM eine größere eigene Masse zu bewegen, neigen stärker zu Resonanzen (bei Nennstrom) und machen mehr Geräusche. Optimal wäre ein Motor mit geringem Rastmoment, damit er die Mikroschritte möglichst gut auflösen kann. Einige Motore werden 'für Mikroschritt geeignet' angepriesen, aber Papier ist geduldig und der Glaube an die Wahrheit von Werbeaussagen sehr schwach ;-)
Für Teleskopnachführung sind Schrittmotoren ungeeignet. Für diese Anwendung braucht man einen kontinuierlichen Antrieb. Im Idealfall einen 50Hz Langsamläufer plus Getriebe...
m.n. schrieb: > Der o.g. ist schon recht klein. Dann werde ich es vmtl. einfach mal damit versuchen :) Roland Ertelt schrieb: > Für Teleskopnachführung sind Schrittmotoren ungeeignet. Für diese > Anwendung braucht man einen kontinuierlichen Antrieb. Im Idealfall einen > 50Hz Langsamläufer plus Getriebe... Also Pauschalaussagen sind ja generell mit Vorsicht zu genießen aber hier gibt ja sicher tausende Beispiele, die das Gegenteil beweisen... Viele Grüße Hannes
Hi Johannes, hier mal ein kleines Beispiel, wie man Schrittmotoren ansteuern könnte:
1 | #include <stdio.h> |
2 | #include <stdlib.h> |
3 | #include <avr/io.h> |
4 | #include "lcd-routines.h" |
5 | #include <util/delay.h> |
6 | #include <stdint.h> |
7 | #include <avr/eeprom.h> |
8 | |
9 | #include "IncFile1.h" |
10 | |
11 | void sleep ( uint8_t ms ) |
12 | {
|
13 | for(; ms > 0; ms--) _delay_ms(1); |
14 | }
|
15 | |
16 | void sleepS ( uint8_t s ) |
17 | {
|
18 | int i=0; |
19 | for(i=0; i<s; i++){ |
20 | sleep(250); |
21 | //sleep(250);
|
22 | //sleep(250);
|
23 | //sleep(250);
|
24 | }
|
25 | }
|
26 | |
27 | int main(void) |
28 | {
|
29 | |
30 | // Datenrichtungsregister festlegen;
|
31 | //TASTERPORT = 0xFF; // INTERN PULL-UPs AKTIVIEREN
|
32 | TDDRX = 0x00; // ALLE PINS ALS EINGANG |
33 | TDDRX = 0b00010000; // PINB0 - PINB3 auf Eingang und PINB5 Ausgang |
34 | |
35 | MPORT = 0b00000000; |
36 | //MDDRX = 0xFF; // PORTC AUF AUSGANG
|
37 | MDDRX = 0b00011111; // |
38 | |
39 | // Initialisierung des LCD
|
40 | // Nach der Initialisierung müssen auf dem LCD vorhandene schwarze Balken
|
41 | // verschwunden sein
|
42 | lcd_init(); |
43 | |
44 | MENU = 0; |
45 | START = 0; |
46 | //
|
47 | WINKEL = 1; |
48 | ZEIT = 1; |
49 | WIEDERHOLUNGEN = 1; |
50 | //
|
51 | WINKEL = eeprom_read_byte(&eeWINKEL); |
52 | ZEIT = eeprom_read_byte(&eeZEIT); |
53 | WIEDERHOLUNGEN = eeprom_read_byte(&eeWIEDERHOLUNGEN); |
54 | //
|
55 | UpdateDisplay(); |
56 | |
57 | while(1) |
58 | {
|
59 | if (IstTaste1Gedrueckt()) |
60 | {
|
61 | Menuwahl(); |
62 | }
|
63 | if (IstTaste2Gedrueckt()) { |
64 | Next(); |
65 | }
|
66 | |
67 | if (IstTaste3Gedrueckt()) { |
68 | Before(); |
69 | }
|
70 | |
71 | if (IstTaste4Gedrueckt()) { |
72 | StartStop(); |
73 | }
|
74 | //sleep(10);
|
75 | }
|
76 | }
|
77 | |
78 | void StartStop(void) |
79 | {
|
80 | char *str; |
81 | int i=0,j=0; |
82 | //START++;
|
83 | //START %= 2;
|
84 | START = 1; |
85 | |
86 | lcd_clear(); |
87 | str = (char *) calloc(16, sizeof(char)); |
88 | |
89 | // STARTE
|
90 | // WERTE IN DAS EEPROM SPEICHERN
|
91 | eeprom_write_byte(&eeWINKEL, WINKEL); |
92 | eeprom_write_byte(&eeZEIT, ZEIT); |
93 | eeprom_write_byte(&eeWIEDERHOLUNGEN, WIEDERHOLUNGEN); |
94 | |
95 | MPORT |= (1<<MOT_SM0); //SM0 = 1 HALFSTEP |
96 | MPORT &= ~(1<<MOT_DIR); // GEGEN UHRZEIGER DREHEN |
97 | while( (i<WIEDERHOLUNGEN) && (START == 1) ){ |
98 | //
|
99 | //
|
100 | for(j=0;j<WINKEL;j++){ |
101 | MPORT |= (1<<MOT_STEP); |
102 | sleep(50); |
103 | MPORT &= ~(1<<MOT_STEP); |
104 | SignalOut(); |
105 | if(IstTaste4Gedrueckt()){ |
106 | START = 0; |
107 | j=WINKEL; |
108 | }
|
109 | }
|
110 | //
|
111 | sleepS(ZEIT); |
112 | |
113 | if(IstTaste4Gedrueckt()){ |
114 | START = 0; |
115 | }
|
116 | sleepS(ZEIT); |
117 | if(IstTaste4Gedrueckt()){ |
118 | START = 0; |
119 | }
|
120 | |
121 | i++; |
122 | |
123 | // LCD UPDATE
|
124 | lcd_clear(); |
125 | lcd_setcursor( 1, 1 ); |
126 | lcd_string("Gestartet ..."); |
127 | lcd_setcursor(1,2); |
128 | sprintf(str,"%4i",WIEDERHOLUNGEN-i); |
129 | lcd_string(str); |
130 | if(IstTaste4Gedrueckt()){ |
131 | START = 0; |
132 | }
|
133 | }
|
134 | MPORT &= ~(1<MOT_SM0); //SM0 = 0 FULLSTEP |
135 | |
136 | free(str); |
137 | UpdateDisplay(); |
138 | }
|
139 | |
140 | void SignalOut(void) |
141 | {
|
142 | PORTB |= (1<<PINB5); |
143 | sleep(100); |
144 | PORTB &= ~(1<<PINB5); |
145 | }
|
146 | |
147 | |
148 | void Menuwahl(void) |
149 | {
|
150 | MENU++; |
151 | MENU %= nMenus; |
152 | UpdateDisplay(); |
153 | }
|
154 | |
155 | void Next(void) |
156 | {
|
157 | switch(MENU){ |
158 | case 0: |
159 | WINKEL++; |
160 | break; |
161 | case 1: |
162 | ZEIT++; |
163 | break; |
164 | case 2: |
165 | WIEDERHOLUNGEN++; |
166 | break; |
167 | case 3: |
168 | BewegeMotor(0); |
169 | // MOTOR SCHRITT ++
|
170 | break; |
171 | default:
|
172 | break; |
173 | }
|
174 | UpdateDisplay(); |
175 | }
|
176 | |
177 | void Before(void) |
178 | {
|
179 | switch(MENU){ |
180 | case 0: |
181 | WINKEL--; |
182 | if(WINKEL < 0) |
183 | WINKEL = 0; |
184 | break; |
185 | case 1: |
186 | ZEIT--; |
187 | if(ZEIT < 0) |
188 | ZEIT = 0; |
189 | break; |
190 | case 2: |
191 | WIEDERHOLUNGEN--; |
192 | if(WIEDERHOLUNGEN < 0) |
193 | WIEDERHOLUNGEN = 0; |
194 | break; |
195 | case 3: |
196 | // MOTOR SCHRITT --
|
197 | BewegeMotor(1); |
198 | break; |
199 | default:
|
200 | break; |
201 | }
|
202 | UpdateDisplay(); |
203 | }
|
204 | |
205 | void UpdateDisplay(void) |
206 | {
|
207 | uint16_t f_winkel1 = 0; |
208 | uint16_t f_winkel2 = 0; |
209 | char *str; |
210 | lcd_clear(); |
211 | str = (char *) calloc(16, sizeof(char)); |
212 | switch(MENU){ |
213 | case 0: |
214 | lcd_setcursor( 4, 1 ); |
215 | lcd_string("Winkel"); |
216 | f_winkel1 = (WINKEL * 9) / 10; |
217 | f_winkel2 = ((WINKEL * 9) % 10); |
218 | //my_uitoa(f_winkel1, str);
|
219 | //my_uitoa(f_winkel2, str);
|
220 | //itoa(f_winkel1, str, 10);
|
221 | //itoa(f_winkel2, str, 10);
|
222 | //my_uitoa(f_winkel1, str);
|
223 | sprintf(str,"%2u,%1u gr",f_winkel1,f_winkel2); |
224 | break; |
225 | case 1: |
226 | lcd_setcursor( 5, 1 ); |
227 | lcd_string("Zeit"); |
228 | sprintf(str,"%4i s",ZEIT); |
229 | break; |
230 | case 2: |
231 | lcd_setcursor( 1, 1 ); |
232 | lcd_string("Wiederholungen"); |
233 | sprintf(str,"%4i mal",WIEDERHOLUNGEN); |
234 | break; |
235 | case 3: |
236 | lcd_setcursor( 1, 1 ); |
237 | lcd_string("Move"); |
238 | sprintf(str,"+ -"); |
239 | break; |
240 | default:
|
241 | lcd_setcursor( 8, 1 ); |
242 | lcd_string("ERROR"); |
243 | break; |
244 | }
|
245 | lcd_setcursor(1,2); |
246 | lcd_string(str); |
247 | free(str); |
248 | }
|
249 | |
250 | |
251 | void BewegeMotor(uint8_t richtung) |
252 | {
|
253 | if(richtung == 0){ |
254 | MPORT &= ~(1<<MOT_DIR); |
255 | }
|
256 | else{ |
257 | MPORT |= (1<<MOT_DIR); |
258 | }
|
259 | MPORT |= (1<<MOT_STEP); |
260 | sleep(20); |
261 | MPORT &= ~(1<<MOT_STEP); |
262 | }
|
263 | |
264 | |
265 | char IstTaste1Gedrueckt(void) |
266 | {
|
267 | static unsigned char zustand; |
268 | char rw = 0; |
269 | if(zustand == 0 && !(TASTER & (1<<TASTE1))) //Taster wird gedrueckt (steigende Flanke) |
270 | {
|
271 | zustand = 1; |
272 | rw = 1; |
273 | }
|
274 | else if (zustand == 1 && !(TASTER & (1<<TASTE1))) //Taster wird gehalten |
275 | {
|
276 | zustand = 2; |
277 | rw = 0; |
278 | }
|
279 | else if (zustand == 2 && (TASTER & (1<<TASTE1))) //Taster wird losgelassen (fallende Flanke) |
280 | {
|
281 | zustand = 3; |
282 | rw = 0; |
283 | }
|
284 | else if (zustand == 3 && (TASTER & (1<<TASTE1))) //Taster losgelassen |
285 | {
|
286 | zustand = 0; |
287 | rw = 0; |
288 | }
|
289 | return rw; |
290 | }
|
291 | |
292 | char IstTaste2Gedrueckt(void) |
293 | {
|
294 | static unsigned char zustand; |
295 | char rw = 0; |
296 | if(zustand == 0 && !(TASTER & (1<<TASTE2))) //Taster wird gedrueckt (steigende Flanke) |
297 | {
|
298 | zustand = 1; |
299 | rw = 0; |
300 | }
|
301 | else if (zustand == 1 && !(TASTER & (1<<TASTE2))) //Taster wird gehalten |
302 | {
|
303 | zustand = 2; |
304 | rw = 0; |
305 | }
|
306 | else if (zustand == 2 && (TASTER & (1<<TASTE2))) //Taster wird losgelassen (fallende Flanke) |
307 | {
|
308 | zustand = 3; |
309 | rw = 0; |
310 | }
|
311 | else if (zustand == 3 && (TASTER & (1<<TASTE2))) //Taster losgelassen |
312 | {
|
313 | zustand = 0; |
314 | rw = 0; |
315 | }
|
316 | else if (((zustand == 1) || (zustand == 2)) && !(TASTER & (1<<TASTE2))) //Taster wird gehalten |
317 | {
|
318 | zustand = 2; |
319 | rw = 1; |
320 | sleep(250); |
321 | //sleep(250);
|
322 | }
|
323 | return rw; |
324 | }
|
325 | |
326 | char IstTaste3Gedrueckt(void) |
327 | {
|
328 | static unsigned char zustand; |
329 | char rw = 0; |
330 | if(zustand == 0 && !(TASTER & (1<<TASTE3))) //Taster wird gedrueckt (steigende Flanke) |
331 | {
|
332 | zustand = 1; |
333 | rw = 0; |
334 | }
|
335 | else if (zustand == 1 && !(TASTER & (1<<TASTE3))) //Taster wird gehalten |
336 | {
|
337 | zustand = 2; |
338 | rw = 0; |
339 | }
|
340 | else if (zustand == 2 && (TASTER & (1<<TASTE3))) //Taster wird losgelassen (fallende Flanke) |
341 | {
|
342 | zustand = 3; |
343 | rw = 0; |
344 | }
|
345 | else if (zustand == 3 && (TASTER & (1<<TASTE3))) //Taster losgelassen |
346 | {
|
347 | zustand = 0; |
348 | rw = 0; |
349 | }
|
350 | else if (((zustand == 1) || (zustand == 2)) && !(TASTER & (1<<TASTE3))) //Taster wird gehalten |
351 | {
|
352 | zustand = 2; |
353 | rw = 1; |
354 | sleep(250); |
355 | //sleep(250);
|
356 | }
|
357 | return rw; |
358 | }
|
359 | |
360 | char IstTaste4Gedrueckt(void) |
361 | {
|
362 | static unsigned char zustand; |
363 | char rw = 0; |
364 | if(zustand == 0 && !(TASTER & (1<<TASTE4))) //Taster wird gedrueckt (steigende Flanke) |
365 | {
|
366 | zustand = 1; |
367 | rw = 1; |
368 | }
|
369 | else if (zustand == 1 && !(TASTER & (1<<TASTE4))) //Taster wird gehalten |
370 | {
|
371 | zustand = 2; |
372 | rw = 0; |
373 | }
|
374 | else if (zustand == 2 && (TASTER & (1<<TASTE4))) //Taster wird losgelassen (fallende Flanke) |
375 | {
|
376 | zustand = 3; |
377 | rw = 0; |
378 | }
|
379 | else if (zustand == 3 && (TASTER & (1<<TASTE4))) //Taster losgelassen |
380 | {
|
381 | zustand = 0; |
382 | rw = 0; |
383 | }
|
384 | return rw; |
385 | }
|
386 | |
387 | void my_uitoa(uint32_t zahl, char* string) { |
388 | int j=0,i=0; |
389 | char *st; |
390 | |
391 | st = (char *)calloc(10,sizeof(char)); |
392 | while(zahl>0){ |
393 | st[i] = (zahl%10) + '0'; |
394 | zahl = zahl / 10; |
395 | i++; |
396 | }
|
397 | for (j=0; j<=i; j++){ |
398 | string[j] = st[i-j-1]; |
399 | }
|
400 | string[i] = '\0'; |
401 | free(st); |
402 | }
|
Bülent C. schrieb: > Hi Johannes, > > hier mal ein kleines Beispiel, wie man Schrittmotoren ansteuern könnte: Ich will dir nicht zu nahe treten. Aber so lang du so programmierst, solltest du davon Abstand nehmen, anderen was beibringen zu wollen. Lies im Forum mit, lerne von dem was du siehst, aber versuch noch nicht anderen zu zeigen, wie man die Dinge sauber programmiert. Es heißt zwar immer, dass unter Blinden der Einäugige König sei, aber wenn es soweit ist, wird sich Johannes schon noch mal melden. Da mach ich mir keine Sorgen.
:
Bearbeitet durch User
Karl Heinz schrieb: > Aber so lang du so programmierst, solltest du davon Abstand nehmen, > anderen was beibringen zu wollen. :-) Hallo Karl Heinz....was genau ist denn unsauber am code? Vielleicht lerne ich ja mal was dazu?! ;-)
Bülent C. schrieb: > Karl Heinz schrieb: >> Aber so lang du so programmierst, solltest du davon Abstand nehmen, >> anderen was beibringen zu wollen. > > :-) Hallo Karl Heinz....was genau ist denn unsauber am code? Vielleicht > lerne ich ja mal was dazu?! ;-) Leider ziemlich viel. Kannst du zb begründen, wozu du die calloc brauchst? Die Tastenbehandlung: das funktioniert auch nur zufällig, weil der Rest des Codes nur so von delays wimmelt. und dann: 4 mal denselben Code? Die Schrittmotorsteuerung: ein generelles Prinzip in der µC-Programmierung lautet: delays sind für Neulinge ok, denn irgendwo muss man schliesslich mal anfangen. Aber nach dem man sich die ersten Hörner abgestossen hat, bedeutet der Begriff zeitliche Steuerung praktisch immer den Einsatz eines Timers. Die Menüsteuerung ist so noch einigermassen ok, auch wenn man das vereinfachen und vereinheitlichen könnte. Aber ok, bei so einem kleinen Menü geht das so noch. Die Ablaufsteuerung der Motorbewegung. Na, ja. Wenn ich beide Augen zudrücke. Es ist eine weltweite Konvention, dass Namen, die komplett in Grossbuchstaben geschrieben sind ausschliesslich für Makros reserviert sind und auch umgekehrt: Ist etwas ausschliesslich in Grossbuchstaben geschrieben, dann handelt es sich um ein Makro. Dieses Wissen ist an manchen STellen lebenswichtig, daher ist das eine der wenigen Konventionen an die sich tatsächlich Millionen von C Programmierer ohne Wenn und Aber halten. Es gibt keinen Grund, diese Konvention über Bord zu werfen. Vor allen Dingen nicht fr Variablennamen. So wie ich das sehe, gibt es da ein Include File, in dem sich eigentlich nur noch die globalen Variablen befinden können. Die anderen Funktionen sind, soweit ich das sehen kann, alle im C-File drinnen. Wozu das H-File? Das dient dann nur noch dazu, dass man nicht den kompletten Code an einer Stelle beisammen hat, sondern über mehrere Files suchen muss. So macht dieses Header File keinen Sinn und schadet mehr als es nützt.
:
Bearbeitet durch User
Danke für's Feedback. Ja, jeder kann noch was dazu lernen. Das mit den Delays gebe ich Dir vollkomen Recht. Eigentlich nutze ich Timer, warum ich das hier nicht gemacht habe wundert mich gerade ein wenig :-) Aber wo siehst du 4x den selben Code? Was die Namen in Großbuchstaben angeht, gebe ich Dir Recht. Ich muss mir das noch unbedingt intensiver angwöhnen. Im Include ist eigentlich nur noch das hier:
1 | #ifndef INCFILE1_H_
|
2 | #define INCFILE1_H_
|
3 | |
4 | |
5 | #ifndef F_CPU
|
6 | #warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"
|
7 | #define F_CPU 12000000UL
|
8 | #endif
|
9 | |
10 | void sleep ( uint8_t); |
11 | |
12 | #define TASTERPORT PORTB
|
13 | #define TDDRX DDRB
|
14 | |
15 | #define TASTER PINB
|
16 | #define TASTE1 PINB2
|
17 | #define TASTE2 PINB1
|
18 | #define TASTE3 PINB0
|
19 | #define TASTE4 PINB3
|
20 | |
21 | #define MDDRX DDRC
|
22 | #define MPORT PORTC
|
23 | |
24 | #define MOT_ENABLE PC0
|
25 | #define MOT_SM1 PC1
|
26 | #define MOT_SM0 PC2
|
27 | #define MOT_DIR PC3
|
28 | #define MOT_STEP PC4
|
29 | |
30 | uint8_t MENU; |
31 | uint32_t WINKEL; |
32 | uint8_t ZEIT; |
33 | uint8_t WIEDERHOLUNGEN; |
34 | uint8_t START; |
35 | |
36 | uint8_t eeZEIT EEMEM; |
37 | uint8_t eeWINKEL EEMEM; |
38 | uint8_t eeWIEDERHOLUNGEN EEMEM; |
39 | |
40 | const uint8_t nMenus = 4; |
41 | |
42 | char IstTaste1Gedrueckt(void); |
43 | char IstTaste2Gedrueckt(void); |
44 | char IstTaste3Gedrueckt(void); |
45 | char IstTaste4Gedrueckt(void); |
46 | |
47 | void Menuwahl(void); |
48 | void Next(void); |
49 | void Before(void); |
50 | void UpdateDisplay(void); |
51 | void StartStop(void); |
52 | |
53 | void my_uitoa(uint32_t, char*); |
54 | |
55 | void BewegeMotor(uint8_t); |
56 | void SignalOut(void); |
57 | |
58 | void sleep ( uint8_t ); |
59 | void sleepS ( uint8_t ); |
60 | |
61 | #endif /* INCFILE1_H_ */ |
Hallo Bülent, > Aber wo siehst du 4x den selben Code? Hier z.B.: > char IstTaste1Gedrueckt(void); > char IstTaste2Gedrueckt(void); > char IstTaste3Gedrueckt(void); > char IstTaste4Gedrueckt(void); Mit freundlichen Grüßen Thorsten Ostermann
Thorsten Ostermann schrieb: > Hallo Bülent, > >> Aber wo siehst du 4x den selben Code? > > Hier z.B.: > >> char IstTaste1Gedrueckt(void); >> char IstTaste2Gedrueckt(void); >> char IstTaste3Gedrueckt(void); >> char IstTaste4Gedrueckt(void); > > Mit freundlichen Grüßen > Thorsten Ostermann Hallo Thorsten, das ist nicht 4x der selbe Code.. höchstens 4x ähnlicher Code. VG, Bülent
:
Bearbeitet durch User
Bülent C. schrieb: > das ist nicht 4x der selbe Code.. Wenn sich Code nur in der Benamung von Variablen bzw. Konstanten unterscheidet, dann ist es 4 mal derselbe Code. Ok, 1 ist ein bischen anders. Ist aber trotzdem zumindest unschön. Denn in dem Fall fragt man sich: warum ist eigentlich 1 Taste anders, so man im Code überhaupt bemerkt, dass die eine codemässig ein wenig abweicht. Zumal diese ganze Flankenerkennung nur deshalb auch noch entprellt, weil der restliche Code mit delays gespickt ist.
:
Bearbeitet durch User
Bülent C. schrieb: > das ist nicht 4x der selbe Code.. höchstens 4x ähnlicher Code. Und warum nicht sowas wie: char IstTasteGedrueckt(uint8_t nummer);
:
Bearbeitet durch User
Karl Heinz schrieb: > Wenn sich Code nur in der Benamung von Variablen bzw. Konstanten > unterscheidet, dann ist es 4 mal derselbe Code. > Ok, 1 ist ein bischen anders. Die Unterscheiden sich doch nicht nur in der Benamung.. Schaumal bitte nochmal hin, es werden jeweils unterschiedliche PIN's abgefragt.
Bülent C. schrieb: > Karl Heinz schrieb: >> Wenn sich Code nur in der Benamung von Variablen bzw. Konstanten >> unterscheidet, dann ist es 4 mal derselbe Code. >> Ok, 1 ist ein bischen anders. > > Die Unterscheiden sich doch nicht nur in der Benamung.. Schaumal bitte > nochmal hin, es werden jeweils unterschiedliche PIN's abgefragt. Sag ich doch. Unterschiedliche Konstanten. Und was hindert dich jetzt daran, EINE EINZIGE Funktion zu schreiben, der man eine Pinbeschreibung mitgibt oder vielleicht gar bereits das Ergebnis der Bitabfrage vom Pin Register? Man könnte es auch so sagen: Was tust du, wenn du 8 Tasten im System hast? Kopierst du dann den Code noch 4 mal weiter und änderst den Namen für die Tastenkonstante? Im übrigen. Auch wenn die Funktionen sich in der Logik der Ablaufsteuerung ganz leicht unterscheiden, der UNterschied besteht nach ein paar Durchläufen im Kopf nur darin, dass die einen Tasten sofort bei der ersten Flanke die gedrckte Taste melden, während die anderen die gedrückte Taste um ein paar Zeiteinheiten (je nach delays ausserhalb) verzögert den Tastendruck meldet. Aber beide Codeversionen melden den Tastendruck beim niederdrücken. Da frag ich mich: warum sind da unterschiedliche Codeversionen vertreten? Und warum haben die einen Funktionen einen Sleep drinnen und die anderen nicht?
:
Bearbeitet durch User
Hallo zusammen, die Bestellung für den Duemilanove, Treiber und Motor ist raus :) Ich hab mir mal die Arduino-software installiert und beschäftige mich gerade mit der Programmierung. Ich weis, dass man als Anfänger erstmal schritt für Schritt vorgehen soll, aber ich hab mal versucht, das Ganze mit CTC und Rampe für den Schnellrücklauf zu programmieren... testen kann ich das Programm logischerweise noch nicht, aber ich bin trotzdem gespannt auf eure Meinungen :) Den Part mit der Timer-configuration für CTC habe ich größtenteis von hier übernommen: http://letsmakerobots.com/content/arduino-101-timers-and-interrupts Kann das so funktionieren? hier der code:
1 | void setup() |
2 | {
|
3 | pinMode(1, OUTPUT); //DIR-Signal |
4 | pinMode(2, OUTPUT); //Enable-Signal (Eingang am Treiber ist invertiert!!!) |
5 | pinMode(3, INPUT); // Vorwaertsfahrt-schalter |
6 | pinMode(4, INPUT); // Schnellruecklauf-schalter |
7 | pinMode(5, OUTPUT); //Taktausgang für Schrittmotortreiber |
8 | |
9 | // initialize timer1
|
10 | noInterrupts(); // disable all interrupts |
11 | TCCR1A = 0; |
12 | TCCR1B = 0; |
13 | TCNT1 = 0; |
14 | |
15 | OCR1A = 40000; // compare match register 16MHz/256/2Hz |
16 | TCCR1B |= (1 << WGM12); // CTC mode |
17 | TCCR1B |= (1 << CS11); // 8 prescaler |
18 | TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt |
19 | interrupts(); // enable all interrupts |
20 | }
|
21 | |
22 | ISR(TIMER1_COMPA_vect) // timer compare interrupt service routine |
23 | {
|
24 | digitalWrite(5, digitalRead(5) ^ 1); //wechselt den Zustand am Taktausgang |
25 | }
|
26 | |
27 | void loop() |
28 | {
|
29 | float slowfreq = 50.0; //Schrittfrequenz Nachfuehrbetrieb |
30 | float backfreq = 10000; //maximale Schrittfrequenz Schnellruecklauf |
31 | //Rampenparameter für Schnellruecklauf
|
32 | int rampsteplength = 5; //Stufenlänge der Rampe in ms |
33 | //-------------------------------------------------------------------
|
34 | if ((digitalRead(3) == LOW) && (digitalRead(4) == LOW)) { |
35 | digitalWrite(2, HIGH); //deaktiviert Treiber wenn Schalter in Mittelstellung |
36 | }
|
37 | //Vorwaertsfahrt-------------------------------------------------------(ohne Rampe)
|
38 | if (digitalRead(3) == HIGH) { //Wenn schalter auf Vorwaerts, dann |
39 | OCR1A = 1000000 / slowfreq; //setzt wert für Compare-Register bei 2000000 counts/s im Register bei 16MHz und prescaler 8 |
40 | //1000000 da für einen Taktzyklus zwei CTC-schritte notwendig sind
|
41 | digitalWrite(2, LOW); //aktiviert Treiber |
42 | digitalWrite(1, HIGH); //setzt DIR-Ausgang auf Vorwaerts |
43 | }
|
44 | //Schnellruecklauf-----------------------------------------------------(mit Rampe)
|
45 | if (digitalRead(4) == HIGH) { //Wenn schalter auf Schnellruecklauf |
46 | digitalWrite(2, LOW); //aktiviert Treiber |
47 | digitalWrite(1, LOW); //setzt DIR-Ausgang auf Rueckwaerts |
48 | do { |
49 | OCR1A = OCR1A - 100; //verringert Periodendauer |
50 | delay(rampsteplength); //Wartezeit bis zum nächsten Rampenschritt |
51 | } while (OCR1A < 1000000 / backfreq); |
52 | OCR1A = 1000000 / backfreq; //setzt Compare-Register auf den Endwert |
53 | }
|
54 | }
|
Haben jetzt die erfahreneren Programmierer die Flucht ergriffen? :) Wenn das Programm totaler Blödsinn ist, bitte raus damit :) Viele Grüße Hannes
Johannes M. schrieb: > Haben jetzt die erfahreneren Programmierer die Flucht ergriffen? :) > Wenn das Programm totaler Blödsinn ist, bitte raus damit :) Ich habs mir ehrlich gesagt nicht durchgesehen bzw. durchdacht. Warte bis du die Hardware hast, spiel es auf den Rechner und das System selbst wird dir 'sagen' wie gut es ist. Das ist doch der halbe Spass an der ganzen Sache! Mit einer Idee hochkommen, die Idee implementieren und der gnadenlose Rechner zerlegt dir dann die Idee und zeigt dir, was du übersehen hast. - Nächster Versuch. Nur so wird man im Lauf der Zeit besser. Keiner von uns ist mit dem heutigen WIssen und Können zur Welt gekommen. Die meisten haben unzählige Nächte, über Wochen und Monate hinweg, immer wieder was probiert, gelernt, Programme verändert, sind in Sackgassen geraten, haben (aus heutiger Sicht) simple Probleme analysiert und sich Lösungsmöglichkeiten überlegt von denen aus heutiger Sicht 90% schwachsinnig waren (aber gelernt hat man eine Menge dabei, und sei es nur ein "so gehts nicht"). Und ehe das kommt: Bei mir war es so, dass das alles weit vor der Zeit des Internet war. So etwas wie ein Forum, davon konnte man noch nicht mal träumen, weil man gar nicht wusste was das sein sollte.
:
Bearbeitet durch User
Was für eine Hardware hast du denn bestellt? Ich meine den Schrittmotor Treiber
Hallo Karl Heinz, ja ich könnte für die Taster eine Funktion schreiben, wollte ich aber nicht, bei 8 Tastern hätte ich das wohl gemacht. Timer zu nutzen ist vernünftig, aber verrate mir mal bitte was an einer delay Funktion so schlimm sein soll? Im Kontext der Schrittmotor Steuerung! Das eine inkrementiert in der Hardware das andere in der Software. So zeitkritisch ist die Anwendung nun mal auch nicht Vg, Bülent
Karl Heinz schrieb: > Warte bis du die Hardware hast, spiel es auf den Rechner und das System > selbst wird dir 'sagen' wie gut es ist. Da hast du wohl Recht - mit Hardware macht das vermutlich mehr Sinn und vor Allem Spass... Ich wollte mich gestern schon mal etwas in die Materie einarbeiten und hab diverse Tutorials durchstöbert und versucht Codes zu verstehen... Die Arduino-Software hab ich mir auch schonmal installiert und einfach mal drauf los geschrieben. Die Software gibt dann zumindest schonmal Rückmeldung darüber, ob der Syntax passt. Und das ist dabei raus gekommen :) Die Hardware ist hoffentlich bis zum We da, damit ich gleich loslegen kann :) Bestellt habe ich Folgendes: Treiber: http://www.watterott.com/de/Pololu-A4988-Schrittmotortreiber Motor: http://www.watterott.com/de/Schrittmotor-Unipolar/Bipolar-200-Steps/Rev-42x48mm-40V-1200mA-NEMA-17 Arduino: http://www.ebay.de/itm/221586369391 Grüße Hannes
Hallo, wie Karl Heinz schon geschrieben hat, macht es einfach Spass etwas selber zu machen. Grundsätzlich brauchst du einen sehr feinen Antrieb und daher eine solide mechanik.Jedes ruckeln des Motors stört einfach.
Bülent C. schrieb: > Hallo Karl Heinz, ja ich könnte für die Taster eine Funktion schreiben, > wollte ich aber nicht, bei 8 Tastern hätte ich das wohl gemacht. > Timer zu nutzen ist vernünftig, aber verrate mir mal bitte was an einer > delay Funktion so schlimm sein soll? Im Kontext der Schrittmotor > Steuerung! Im Kontext von Astrophotografie. Da sind Belichtungszeiten von mehreren Stunden keine Seltenheit. In dieser Zeit muss der Motor EXAKT seine Anzahl an Schritten machen. Nicht 1000 mehr, nicht 1000 weniger. Unabhängig davon, ob irgendwann der Wunsch aufkommt, auf einem LCD die bisher aufgelaufene Belichtungszeit mitzuschreiben. Unabhängig davon, ob zwischendurch irgendjemand auf irgendeiner Taste rumhämmert (und so ein paar delays mehr zur Ausführung bringt). Das ist keine CNC Maschine, bei der es egal ist, ob der Fräser nach 5 Stunde Bearbeitung noch 2 Sekunden länger braucht oder nicht, bis er dann endgültig fertig ist. Nach einer Zeiteinheit x hat der Motor exakt die vorgeschriebene Zahl y an Schritten zu machen. Tut er das nicht, dann holt man im günstigsten Fall nicht das Beste aus dem Photo raus und im schlimmsten Fall ist die Aufnahme versaut. Kannst du mir bitte erklären, was so schlimm daran ist, mit einem Timer umgehen zu lernen? Dann würde man eine Technik beherrschen, die recht problemlos verallgemeinert und sowohl bei kurzen als auch bei langen Zeiten einsetzbar ist. > Software. So zeitkritisch ist die Anwendung nun mal auch nicht ? Du hast dich schon mal mit Astrophotographie beschäftigt? Und zu den Tasten. Aha. Du kopierst also lieber Code 4 mal und machst dir dann die Mühe, die Tastennamen einzeln per Copy&Paste auszutauschen anstatt dir ein für alle mal eine einzige Funktion zu schreiben, samt einer zugehörigen struct, in der du deine Tasten definierst (an welchem Pin, an welchem Port, plus Zustandsvariablen wie benötigt). Nun gut. Ich hab halt andere Vorstellungen davon, wie sich Qualität in einer Software manifestiert. Aber ok, manche Leute reparieren eine Roststelle an ihrem Auto auch dadurch, dass sie einen Aufkleber drüberkleben.
:
Bearbeitet durch User
Roland Ertelt schrieb: > Für Teleskopnachführung sind Schrittmotoren ungeeignet. Kannst du mal verraten, wieso dann bewährte Steuerungen, wie z.B. die seit langem bewährte FS2, ausgereichnet mit Schrittmotoren arbeiten und dabei mit 3m Brennweite absolut punktförmige Sterne liefert?
Karl Heinz schrieb: > Kannst du mir bitte erklären, was so schlimm daran ist, mit einem Timer > umgehen zu lernen? Dann würde man eine Technik beherrschen, die recht > problemlos verallgemeinert und sowohl bei kurzen als auch bei langen > Zeiten einsetzbar ist. Ich habe doch nie behauptet es nicht zu können ;-) Hatte es in dem Fall einfach nur nicht getan. Karl Heinz schrieb: > Du kopierst also lieber Code 4 mal und machst > dir dann die Mühe, die Tastennamen einzeln per Copy&Paste auszutauschen > anstatt dir ein für alle mal eine einzige Funktion zu schreiben, samt > einer zugehörigen struct, JA! Wenn ich maleinen Fall habe, wo ich "viele" Tasten habe, werde ich da smal machen, aber nicht bei 4 Tasten!
m.n. schrieb: > Ich plane eine Kombination der beiden Programme, mit der dann ein > Schrittmotor per ser. Schnittstelle (bzw. USB beim Arduino) bedient > werden kann. Das braucht aber noch seine Zeit! Die Zeit ist gekommen ;-) http://www.mino-elektronik.de/Generator/takte_impulse.htm#bsp8
Hallo zusammen, wollte nochmal kurz ne Rückmeldung geben, wie der aktuelle Stand ist: Das Projekt hat sich doch etwas hingezogen, da ich nur wenig Zeit hatte und die einzelnen Komponenten doch recht viel Zeit in Anspruch nehmen. Die eigentliche Nachführmechanik mit Schrittmotorantrieb und -Steuerung läuft schon. Das Säulenstativ aus einem 6cm-Stahlrohr und der Kopf mit Polhöhenwiege (um die Nachführung auszurichten) sind praktisch fertig. Was noch fehlt ist ein Polsucher (wird vmtl. selbst gebastelt) und etwas Farbe für die Metallteile, da diese schon Flugrost ansetzen. Wenn alles fertig ist, gibt es natürlich einen ausführlichen Bericht mit Bildern... Der Schrittmotor ist vmtl. etwas überdimensioniert aber wenn der Motorstrom fast auf minimum eingestellt ist, läuft er recht leise. Was mich allerdings wundert: Der Schrittmotor läuft im 1/16-Mikroschrittbetrieb mit ~140Hz recht unruhig und scheint bei jedem Vollschritt einen kleinen Ruckler zu machen (-> ~8Hz), als ob die mikroschritte zu klein wären und zusammen nicht für einen Vollschritt reichen würden... Weis jemand, woran das liegen könnte? Viele Grüße Hannes
Hallo Hannes, was verwendest du denn für einen Treiber/Chip für die Ansteuerung? Mit freundlichen Grüßen Thorsten Ostermann
Ich habe in dem datenblatt etwas von Mixed Decay gelesen: "For some applications where microstepping at very low speeds is necessary, the lack of back EMF in the winding causes the current to increase in the load quickly, resulting in missed steps. This is shown in figure 2. By pulling the ROSC pin to ground, mixed decay is set to be active 100% of the time, for both rising and falling currents, and prevents missed steps as shown in figure 3." Laut dem Schaltplan auf der webseite ist der ROSC pin jedoch bereits mit R4(10K) auf GND gesetzt und somit Mixed Decay auf 100%, wenn ich das richtig sehe. R2, der ROSC mit 5V verbindet, ist mit "NP" bezeichnet - interpretiere ich das richtig, dass dieser nicht aufgelötet ist? Viele Grüße Hannes
Johannes M. schrieb: > Der Schrittmotor ist vmtl. etwas überdimensioniert aber wenn der > Motorstrom fast auf minimum eingestellt ist, läuft er recht leise. Das heißt, das Rastmoment dominiert die Drehung, sodaß der eingeprägte Strom ihn nicht auf die Sollposition drehen kann. Zunächst hinkt der Rotor hinterher und springt dann auf den nächsten Rastpunkt. Entweder der Strom soweit erhöhen, daß er möglichst gleichmäßig tickt, oder einen kleineren Motor nehmen. Hast Du etwas von meinem Programm nutzen können?
Aber das dürfte doch erst passieren, wenn das Motordrehmoment in der Größenordnung des Rastmoments liegt, oder? Das Rastmoment ist das Drehmoment, dass ich bei stromlosen und nicht kurzgeschlossenen Wicklungen aufwenden muss, um den Rotor zu drehen, richtig? Das Drehmoment, dass nötig ist, um den Schrittmotor (per Hand) im Nachführbetrieb zu Schrittverlust zu zwingen, ist jedoch wesentlich größer. Ich habe den Antrieb gerade nicht hier, um das zu testen, aber ich meine mich zu erinnern, dass das Ruckeln bei höherem Strom nicht weniger wurde. Eigentlich müsste ein Schrittmotor mit 140Hz im Mikroschrittbetrieb doch ähnlich klingen, wie einer im Vollschrittbetrieb mit 140Hz, oder? In diesem Threat wird ein ähnliches Problem beschrieben, allerdings auch ohne Lösung: http://www.astrotreff.de/topic.asp?ARCHIVE=true&TOPIC_ID=145722&whichpage=2 Von deinem Programm habe ich leider nichts verwenden können. Mein Programm sieht mehr oder weniger genau so aus, wie das, das ich weiter oben gepostet habe. Mir war der CTC-Modus für den genauen Takt wichtig. Damit triggere ich einen Interrupt und die ISR wechselt den Zustand am Taktausgang. Die Loop fragt dann zyklisch die schalterstellung ab und ändert je nachdem die Zustände des Enable- und Dir-Ausgangs und den Wert der Zählervariablen, die dann bei jeder ISR den wert für das CTC-Compare-Register updatet. Die Rampe für den Schnellrücklauf funktioniert so, dass die Zählervariable bei jedem loop-Zyklus um einen bestimmten Wert verringert, bis die Soll-Geschwindigkeit erreicht wird. Die Rampe folgt somit einer irgendwas mit 1/x-Funktion, aber das sollte für diesen Zweck egal sein. Das könnte ich noch ändern, indem ich statt dem wert für das compare-Register (der proportional zur Periodendauer ist) eine Frequenzvariable linear verändere, wodurch die Rampe auch linear werden würde. Grüße Hannes
Hallo Johannes, > Aber das dürfte doch erst passieren, wenn das Motordrehmoment in der > Größenordnung des Rastmoments liegt, oder? Nein, auch darunter hat das schon einen z.T. entscheidenden Einfluss. Gerade bei den Mikroschritten, die nahe an den Halbschritt-Positionen liegen, ist eine Wicklung ja nur mit wenigen Prozent des Nennstroms bestromt. D.h. da schlägt dann das Rastmoment voll durch. Nicht umsonst gibt es Treiber, bei denen man die Form der Stromkurve an den Motor anpassen kann. > Das Rastmoment ist das Drehmoment, dass ich bei stromlosen und nicht > kurzgeschlossenen Wicklungen aufwenden muss, um den Rotor zu drehen, > richtig? Genau. Das liegt typisch bei 2-5% des Haltemomentes. > Ich habe den Antrieb gerade nicht hier, um das zu testen, aber ich meine > mich zu erinnern, dass das Ruckeln bei höherem Strom nicht weniger > wurde. Das wäre allerdings eher ein Zeichen für das im Datenblatt beschriebene Verhalten. Jetzt wäre es hilfreich, wenn du den Wicklungsstrom messen könntest. Vielleicht kann ich dazu nächste Woche auch mal Tests machen. Ich habe ein Testrack mit Hallsensoren zur Phasenstrommessung. Eins von den Pololu-Boards hatte ich mir kürzlich erst zum Testen bestellt, bin aber bisher noch nicht dazu gekommen, mich damit auseinander zu setzen. > Eigentlich müsste ein Schrittmotor mit 140Hz im Mikroschrittbetrieb doch > ähnlich klingen, wie einer im Vollschrittbetrieb mit 140Hz, oder? Nein, gerade das soll der Mikroschritt ja verhindern. Durch das "sanftere" Weiterschalten sollte der Motor bei Mikroschritt deutlich ruhiger laufen. Mit freundlichen Grüßen Thorsten Ostermann
Hallo Torsten, Thorsten Ostermann schrieb: > Nein, auch darunter hat das schon einen z.T. entscheidenden Einfluss. > Gerade bei den Mikroschritten, die nahe an den Halbschritt-Positionen > liegen, ist eine Wicklung ja nur mit wenigen Prozent des Nennstroms > bestromt. D.h. da schlägt dann das Rastmoment voll durch. Nicht umsonst > gibt es Treiber, bei denen man die Form der Stromkurve an den Motor > anpassen kann. Heißt das, dass das Drehmoment im Mikroschrittbetrieb nicht für alle Schritte konstant ist? Ich dachte, dass die Wicklungen so bestromt werden, dass die Resultierende der beiden Kräfte den gleichen Betrag hat, wie die Kraft im Vollschrittbetrieb. Thorsten Ostermann schrieb: > Nein, gerade das soll der Mikroschritt ja verhindern. Durch das > "sanftere" Weiterschalten sollte der Motor bei Mikroschritt deutlich > ruhiger laufen. Auch dann wenn ich 100 Mikroschritte pro Sekunde mit 100 Vollschritten pro Sekunde vergleiche? (ergibt dann natürlich verschiedene Drehzahlen) Thorsten Ostermann schrieb: > Jetzt wäre es hilfreich, wenn du den Wicklungsstrom messen > könntest. kann ich am We mal versuchen (Multimeter?). Thorsten Ostermann schrieb: > Vielleicht kann ich dazu nächste Woche auch mal Tests machen. Das wäre klasse - vllt. hilft das ja weiter. Grüße Hannes
Hallo Johannes, > Thorsten Ostermann schrieb: >> Nein, auch darunter hat das schon einen z.T. entscheidenden Einfluss. >> Gerade bei den Mikroschritten, die nahe an den Halbschritt-Positionen >> liegen, ist eine Wicklung ja nur mit wenigen Prozent des Nennstroms >> bestromt. D.h. da schlägt dann das Rastmoment voll durch. Nicht umsonst >> gibt es Treiber, bei denen man die Form der Stromkurve an den Motor >> anpassen kann. > > Heißt das, dass das Drehmoment im Mikroschrittbetrieb nicht für alle > Schritte konstant ist? Ich dachte, dass die Wicklungen so bestromt > werden, dass die Resultierende der beiden Kräfte den gleichen Betrag > hat, wie die Kraft im Vollschrittbetrieb. In erster Näherung ist das Drehmoment im Mikroschrittbetrieb konstant. Der von mir beschriebene Effekt betrifft ja immer nur eine Phase, und zwar die, die in dem Moment ohnehin keinen großen Beitrag zum resultierenden Moment liefert. Die erste Näherung vernachlässigt aber das Rastmoment. Das führt dann u.U. zu Winkelfehlern. Es wird gerne so getan, als würde Mikroschritt nicht nur die Auflösung erhöhen, sondern auch die Genauigkeit. Hier sieht man mal wieder, dass das nicht stimmt. >> Nein, gerade das soll der Mikroschritt ja verhindern. Durch das >> "sanftere" Weiterschalten sollte der Motor bei Mikroschritt deutlich >> ruhiger laufen. > > Auch dann wenn ich 100 Mikroschritte pro Sekunde mit 100 Vollschritten > pro Sekunde vergleiche? (ergibt dann natürlich verschiedene Drehzahlen) Du hast dann ja unterschiedliche Drehfeldgeschwindigkeiten, also auch unterschiedliche Einflüsse durch Polteilung, Rastmoment usw.. Hinzu kommt, dass bei höherer Drehzahl die die Wicklung öfter umgepolt werden muss und die Gegen-EMK größer wird. Dann vergleichst du also Äpfel mit Birnen. > Thorsten Ostermann schrieb: >> Jetzt wäre es hilfreich, wenn du den Wicklungsstrom messen >> könntest. > > kann ich am We mal versuchen (Multimeter?). Das sollte dann aber schon ein True-RMS Multimeter sein. Und damit kannst du dann auch nur den statischen Fall messen. Besser wäre es eigentlich, wenn man per Oszilloskop und Hallsensor messen würde. Mit freundlichen Grüßen Thorsten Ostermann
Hallo zusammen, über die Feiertage war wenig Zeit, sodass ich nicht nach der Ursache für das Ruckeln suchen konnte. Aber dafür ist die Nachführung ansonsten fertig und hatte auch schon ihr "first light" - wie die Hobbyastromomen das nennen. Da der provisorische Polsucher nicht funktioniert hat (zu dunkel) habe ich zur Ausrichtung einfach am Winkelprofil des Polsuchers entlang den Polarstern angepeilt, was erstaunlich gut funktioniert hat. Nach einigen Versuchen mit 200mm, wo die Sterne nach 60s noch punktförmig waren, habe ich das 500mm-Tele montiert und den Orionnebel angepeilt. Das erste Bild im Anhang ist ein Stack aus 7 Aufnahmen mit jeweils 60s bei f/5,6 ;ISO 400 mit einer Nikon D80. Das zweite Bild ist eine Aufnahme mit 12mm bei 95s; ISO400; f/4. Die Ergebnisse sind für meine Verhältnisse ganz ansehnlich und haben meine Erwartungen übertroffen (gerade bei 500mm). Die übrigen 8 Bilder im Anhang zeigen den Aufbau der Montierung mit Polhöhenblock, Antrieb, Lager, Reibradantrieb, Stativ, Polsucher und die Steuerung mit Arduino und "Motor-shield". Stativ, Polhöhenblock und Polsucher sind aus geschweißtem Stahl aufgebaut. Der Reibradantrieb besteht aus Multiplex; das Kugelgelagerte Reibrad selbst ist eine 8mm-Welle aus einem Drucker. Für Fragen und Verbesserungsvorschläge bin ich offen :) Vielen Dank für eure Hilfe :) Grüße Hannes
Bülent C. schrieb: > #ifndef F_CPU > #warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert" > #define F_CPU 12000000UL > #endif Das hier solltest du bei Gelegenheit korrigieren. Kommentar und Wirklichkeit sollten zueinander passen. Glückwunsch zu dem Orion Foto. Ich könnte fast Lust bekommen, meiner Frau die Nikon zu entwenden und auch mal zu basteln.
Georg G. schrieb: > Glückwunsch zu dem Orion Foto. Ich könnte fast Lust bekommen, meiner > Frau die Nikon zu entwenden und auch mal zu basteln. Genau. Meine hat auch eine Nikon :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.