kostenloser Webspace werbefrei: lima-city


C++ und PWM für Teleskopsteuerung (linux)

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    astro-os

    astro-os hat kostenlosen Webspace.

    Moin,

    seit ich an unserer Sternwarte den Software Support übernommen habe, bastle ich an einer neunen Teleskopsteuerung. Hierzu haben wir eine Lösung erarbeitet die den IOWarrior56 von Code Mercenaries verwendet. Wir möchten damit unter Linux neben den Schrittmotoren für Rektaszension und Deklination zu späterer Zeit auch noch die Kuppel nachführen.
    An den IOWarrior (ab hier IOW) haben wir ein Robotikbaord des Roboternetz.de angeschlossen über welches die Signale an die Motoren gegeben werden.

    Unter Linux ist der IOW wesentlich einfacher anzusteuern als unter Windows, da die Bibliotheken dem Betriebsystem angepasst, nicht so umständlich und unnötig aufgebläht sind.

    Man kann im Netz recht viel über Pulsweitenmodulation und C++ lesen, doch sind alle Links dazu immer mit hardwarespezifischer Programmierung versehen, welche dann irgendwelche Blackbox- Bibliotheken verwenden, die dann die PWM übernehmen.
    Solche Codebeispiele sind dann natürlich für unsere Zwecke nicht nützlich.

    Was wir derzeit schon fertig gecodet haben ist die Ausgabe über die Ports de IOW und eine Timerfunktion.

    Hat jemand Buchempfehlungen oder Vorschläge wie man eine PWM coden sollte?

    Was wir nicht brauchen ist eine hardwarespezifische Lösung die auf Mikorcontrollern basiert. Hier soll ganz bewußt die Cpu eines Desktops oder Latops genutz werden die aufgrund ihrer Verarbeitungsgeschwindigkeit im Gigaherzbereich einen entscheidenen Vorteil gegenüber Microcontrollern liefert. Außerdem ist der Einsatz eines solchen Rechners aufgrund der Fülle der zusätzlich zu verarbeitenden Daten notwendig. Es müssen z.B. Wetterdaten, Seeing am Beobachtungsort, Autoguidingkameradaten und einiges mehr in Echtzeit verarbeitet werden. Dies ist auch einer der Gründe weshalb kein Windowssystem zum einsatz kommen kann, da Microsoft keine Echtzeitbetriebsysteme liefert, auch nicht in 64bit. Linux dagegen hat den rt-kernel zum standard gemacht. Realtime heist hier, dass Prozesse zu genaudefinierten Zeitpunkten fertig sein müssen. Dieses Konzept reicht dann aus Steuerungsfehler ausgleichen zu können.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo astro-os,

    ich habe zwar jetzt keine Ahnung davon, aber ein kurzer Blick in Wikipedia und dann weiter nach Mikrocontroller.net scheint doch alles zu liefer, was man für eine Implementierung braucht.
    Es geht wohl nur darum, zu bestimmen, wie lange ein Ausgang auf 1 und wie lange er auf 0 gesetzt wird. Je nachdem, was euer Motor hören will musst Du ihm halt das entsprechende schicken. Du kannst ja mal erklären, wie der Motor eigentlich funktioniert.

    Edit:
    Was von Interesse wäre: Welche Signale sollen Puls-Weiten-moduliert werden? Willst Du einen Spannungsverlauf ausgeben oder inkrementiert der Motor die Pulse oder ...

    Beitrag zuletzt geändert: 1.3.2011 19:54:37 von darkpandemic
  4. Autor dieses Themas

    astro-os

    astro-os hat kostenlosen Webspace.

    Moin,

    die Mikrocontroller.net Seite ist mir bekannt. Ich habe sie auch schon zu Rate gezogen als ich den Timer geschrieben habe. Die Frage war ja ob das alles ist. Ich bin mir da irgendwie nicht sicher, denn wenn ja dann ist das ein Bischen zu einfach. Ich verstehe dann nicht wieso Steuerungen so viel Geld kosten, wobei hier immer das Argument geliefert wird, die Software wäre das aufwendige und teure.

    Bei den derzeit eingesetzen Motore handelt es sich um bipolare Schrittmotore, mit vier Spulen. Zum Einsatz kommt wie schon erwähnt das Robotikboard vom Roboternetz.de, was die digitalen Signale an die Spulen weitergibt. Hier müssen immer im Wechsel zwei Spulen im Microstepping betrieb mit Strom versorgt werden was kurze Pulse bedeutet. Ein Richtungsbit gibt an wie herum die Motore laufen sollen.

    Wie gesagt, wenn das wirklich alles ist, dann ist die Aufgabe schon gelöst.
  5. Also im Grunde die Programmierung bei solchen Sachen erst der letzte Schritt. Vorher stellt sich die Frage: Über welchen Anschluss willst du deine Schrittmotoren mit dem PC verbinden? Hier würden sich (USB), Seriell & Parallel anbieten. USB klammere ich mal aus, da etwas aufwändiger und der Serielle und der Parallele Anschluss in diesem Fall völlig ausreichen.

    Jetzt frage ich mich aber, was du bei deiner kleinen Anwendung für Ansprüche stellst, wenn du einen Echzeit-Kernel forderst? Ein paar Schrittmotoren nachzustellen, naja... Das ist ehrlich gesagt keine so komplizierte Anwendung, als ob da nicht die ein oder andere vielleicht unfaire Zuteilung von Timeslots deinem Vorhaben einen Riegel vorschieben würde. Aber generell begrüße ich natürlich die Entscheidung, einmal Linux für so etwas auszuprobieren.

    Kommen wir zu letzten: Wie willst du Schrittmotoren, also Stepper, für die du Augenscheinlich schon eine Logik besitzt, mittels PWM ansteuern und dann auch noch vom Computer aus!???
    Schau besser noch einmal nach, was PWM bedeutet, damit kannst du (mehr oder weniger gut) Gleichstrommotoren in ihrer Drehzahl/Drehmoment regeln. Für deine Stepper brauchst du das nicht, da reicht es, wenn du für jeden Schritt einen Bitwechsel an einem Port manuell (von mir aus sogar mit WaitMS oder dergleichen) ausführst. PWM ist für mich Hardwareseitige Pulsweitenmodulation mit deutlich höheren Frequenzen, die können deine Schrittmotoren eh nicht ab ;-)

    Folglich würde ein primitives

    Sub drehe_schritte_im_UZ(Schritte){
    
    For x = 0 to Schritte
       Pin1 = True
       Waitms 10
       Pin1 = False
    Next
    
    }


    reichen.
    Also wirklich einfachster foo.
  6. Autor dieses Themas

    astro-os

    astro-os hat kostenlosen Webspace.

    erasmuz schrieb:
    Also im Grunde die Programmierung bei solchen Sachen erst der letzte Schritt. Vorher stellt sich die Frage: Über welchen Anschluss willst du deine Schrittmotoren mit dem PC verbinden? Hier würden sich (USB), Seriell & Parallel anbieten. USB klammere ich mal aus, da etwas aufwändiger und der Serielle und der Parallele Anschluss in diesem Fall völlig ausreichen.


    Wie ich geschrieben habe ist das Robotikboard über den IOWarrior56 von Code Mercenaries angeschlossen und dies ist eine USB Schnitstelle. USB auszuklammern ist heutzutage kompletter Blödsinn, da es ersten für einen ganz kleinen Geldbeutel sehr gute Schnittstellen wie den IOW gibt und zweitens Serielle/Parallel Schnittstellen zu langsam und zu programmieraufwendig sind.


    Jetzt frage ich mich aber, was du bei deiner kleinen Anwendung für Ansprüche stellst, wenn du einen Echzeit-Kernel forderst? Ein paar Schrittmotoren nachzustellen, naja... Das ist ehrlich gesagt keine so komplizierte Anwendung, als ob da nicht die ein oder andere vielleicht unfaire Zuteilung von Timeslots deinem Vorhaben einen Riegel vorschieben würde. Aber generell begrüße ich natürlich die Entscheidung, einmal Linux für so etwas auszuprobieren.

    Ich glaube Dir ist die Tragweite nicht bewußt. Es handelt sich hierbei nicht um Kinkerlitzchen sondern um die Steuerung einer ganzen Sternwarte mit 6-Meter-Kuppel. Das Teleskop hat einen 24" Spiegel und 7460mm Brennweite und wiegt 1Tonne. Der angestrebte Endfehler muss, aufgrund der wissenschaftlichen Ansprüche << 1" liegen. Da wir die Schnecken und die Ritzel sowie die Lagerung nicht austauschen können, was einem Neubau gleich käme und finanziell nicht machbar ist, müssen wir das ganze Elektronik- und Softwareseitig machen und somit alle auftretenden Fehler über die Programmierung abfangen. Hierzu können wir keine Mikrocontroller verwenden weil diese einfach zu langsam sind. Wie ich auch schon schrieb müssen eine ganze Reihe von Daten verarbeitet werden um ein entsprechendes Korrektursignal dann an die Motoren übermitteln zu können. auch die Übertragung der Singale muss schnell genug erfolgen da die professionelle Kamera keine Fehler verzeiht. Wegen der hohen Vergrößerungen werden natürlich auch alle Fehler entsprechend mitvergrößert. Bei 200fach ist auch ein kleinster Fehler 200mal so groß bei 800fach noch wesentlich stärker. Dies geht also nur mit einem Echtzeitsystem wie Linux. Echtzeit heisst, dass Prozesse zu einem vorher eindeutig festgelegten Zeitpunkt beendet sein müssen. Windoofs ist aufgrund seiner Speicherverwaltung und des Non-RT-Konzepts nicht in der Lage das zu leisten. Desweiteren muss nicht nur das Teleskop hin und her gefahren und nachgeführt werden sondern, diese Nachführung auch korregiert sowie die Kuppel nachgeführt werden. Dazu müssen Wetterdaten wie Seeing aufgenommen verarbeitet und dem Steuersignal hinzgefügt werden. Alles in allem eben keine einfach Anwendung.


    Kommen wir zu letzten: Wie willst du Schrittmotoren, also Stepper, für die du Augenscheinlich schon eine Logik besitzt, mittels PWM ansteuern und dann auch noch vom Computer aus!???
    Schau besser noch einmal nach, was PWM bedeutet, damit kannst du (mehr oder weniger gut) Gleichstrommotoren in ihrer Drehzahl/Drehmoment regeln. Für deine Stepper brauchst du das nicht, da reicht es, wenn du für jeden Schritt einen Bitwechsel an einem Port manuell (von mir aus sogar mit WaitMS oder dergleichen) ausführst. PWM ist für mich Hardwareseitige Pulsweitenmodulation mit deutlich höheren Frequenzen, die können deine Schrittmotoren eh nicht ab ;-)

    Ich habe mehr und mehr das Gefühl, dass Du meinen Beitrag nicht verstanden hast. Ich habe deutlich geschrieben das die Motoren durch das Robotikboard getrieben werden. Eine PWM ist für Stepper zwingend Notwendig weil man ihnen auf anderem Wege kein genaues Verhalten sagen kann. Synchronmotoren werden mit Differential-Integral-Proportional-Reglern gesteuert, welche die Drehzahl geben. Bei einem Stepper muss man angeben wieviele Schritte pro Zeiteinheit gemacht werden sollen bzw wieviele Mikorsteps das sein sollen. PWM ist mit Nichten eine rein hardwareseitige Angelegenheit, wenn man eben keinen Microcontroller einsetzen kann, weil diese zu langsam sind.


    Also wirklich einfachster foo.


    Wenns wirklich nur ein Timer ist, ist es wirklich Pillepalle und ich verstehe nicht weshalb andere käuflich erwerbbare Steuerungen deshalb soviel kosten.

    Update:
    Hat jemand auf die Schnelle nen Tip für ne Firewire oder Ethernetschnitstelle, ohne das ich lange googlen muss?

    Beitrag zuletzt geändert: 6.3.2011 14:55:54 von astro-os
  7. Ich würde mich an deiner Stelle erst einmal etwas mehr mit dem Thema beschäftigen, dir wird hier sicher niemand etwas fertiges zusammenbauen / Programmieren. Und selbst wenn du der Hauptsternbeauftragte der NASA bist, der Hubble in Position bringen soll um die Marsmännchen für BigBrother zu filmen - etwas technisches Sachverständnis ist auf jedenfall von Nöten.
    Das fängt schon mit der richtigen Ansteuerung der Stepper an, eine Tonnenschwere Kuppel wird wohl keine kleinen Stepper aus Modellrobotern besitzen, sondern doch aller wahrscheinlichkeit etwas massivere Geräte, wo wir wieder bei der von mir erwähnten maximalen Ansteuerungsfrequenz wären und so weiter und so fort. Google und vorallem Wikipedia helfen sicher weiter ;-)
    Wenn du bereits fertige Hardware verwenden willst (IO-Warrior, war ja mal Ct Projekt...) dann solltest du doch am besten deren Handbücher lesen, da es sich hier um einsteigerfreundliche projekte Handelt, würde ich doch mal sehr stark davon ausgehen, dass es dort Handbücher und Beispielaufbauten/Ideen â mass gibt.
    Dann kannst du dir auch auf wiki.ubuntuusers.de ansehen, wie du dir einen Live-Kernel bastelst :-D
  8. Also bei Gebäudedimensionen genügt eigentlich eine Asynchronmotor mit Encoder und Bremse, die können dann auch kostengünstig in den benötigten Leistungskategorien beschafft werden, ansteuern tut man sowas dann mit Frequenzumrichtern die dann eine eigene Inteligenz mitbringen mit der sie auf Sollwerte reagieren können oder an eine Prozessleitsteuerung (SPS, IPC) via BUS angebunden werden können...Positioniergenauigkeit erreicht man dann am besten über einen im Verhältnis zur Strecke kleinen Refferenzsensor der den Nullpunkt für dann relative Encoderwerte liefert.

    Gehen tut sowas natürlich auch im kleinen:

    2-Achsen Kamera Verstellung mit Steppern

    Ich habe dabei einen Arduino und 2 parallel angesteuerte Schrittmotorplatinen benutzt.

    Beitrag zuletzt geändert: 10.3.2011 20:05:31 von fatfox
  9. Autor dieses Themas

    astro-os

    astro-os hat kostenlosen Webspace.

    erasmuz schrieb:
    Ich würde mich an deiner Stelle erst einmal etwas mehr mit dem Thema beschäftigen, dir wird hier sicher niemand etwas fertiges zusammenbauen / Programmieren. Und selbst wenn du der Hauptsternbeauftragte der NASA bist, der Hubble in Position bringen soll um die Marsmännchen für BigBrother zu filmen - etwas technisches Sachverständnis ist auf jedenfall von Nöten.
    Das fängt schon mit der richtigen Ansteuerung der Stepper an, eine Tonnenschwere Kuppel wird wohl keine kleinen Stepper aus Modellrobotern besitzen, sondern doch aller wahrscheinlichkeit etwas massivere Geräte, wo wir wieder bei der von mir erwähnten maximalen Ansteuerungsfrequenz wären und so weiter und so fort. Google und vorallem Wikipedia helfen sicher weiter ;-)
    Wenn du bereits fertige Hardware verwenden willst (IO-Warrior, war ja mal Ct Projekt...) dann solltest du doch am besten deren Handbücher lesen, da es sich hier um einsteigerfreundliche projekte Handelt, würde ich doch mal sehr stark davon ausgehen, dass es dort Handbücher und Beispielaufbauten/Ideen â mass gibt.
    Dann kannst du dir auch auf wiki.ubuntuusers.de ansehen, wie du dir einen Live-Kernel bastelst :-D

    Moin,

    am Sachverstand mangelt es da nicht sondern an der Zeit. Es hat nichts damit zu tun wer was ist, sondern wenn es jemanden gibt der auch wenn es nur entfernt ist, etwas ähnliches schon mal gemacht hat, dann kann man durchaus auf diese Erfahrungen zurückgreifen und muss nicht das Rad neuerfinden. Aber diese Sichtweise scheint Dir fremd zu sein.
    Die Handbücher der IOW sind nicht für solche Projekte ausgelegt. Auch auf die Ansteuerung von Motoren wird nicht eingegangen. Es wird vornehmlich auf das ansteuern von Display eigegangen. Natürlich wird die Kuppel nicht über einen kleinen Stepper bewegt sondern über einen 0,5kw Starken Synchronmotor, welcher aber sehr easy über nen PIDRegler gesteuert werden kann.
    Das RTAI ist ja schon im PAE-Kernel enthalten und natürlich ist ubuntuusers ein ständiger Begleiter.


    Also bei Gebäudedimensionen genügt eigentlich eine Asynchronmotor mit Encoder und Bremse, die können dann auch kostengünstig in den benötigten Leistungskategorien beschafft werden, ansteuern tut man sowas dann mit Frequenzumrichtern die dann eine eigene Inteligenz mitbringen mit der sie auf Sollwerte reagieren können oder an eine Prozessleitsteuerung (SPS, IPC) via BUS angebunden werden können...Positioniergenauigkeit erreicht man dann am besten über einen im Verhältnis zur Strecke kleinen Refferenzsensor der den Nullpunkt für dann relative Encoderwerte liefert.

    Gehen tut sowas natürlich auch im kleinen:

    2-Achsen Kamera Verstellung mit Steppern

    Ich habe dabei einen Arduino und 2 parallel angesteuerte Schrittmotorplatinen benutzt.


    Du hast ziemlich gut geraten. Es wird tatsächlich ein Asynchronmotor mit Bremse aber ohne Encoder eingesetzt. Das mit dem Encoder war 20 Jahren nicht Spruchreif. Um die Positionsgenauigkeit werde ich mir keine Gedanken machen müssen, da ich mir eine Lösung über MEMS ausgedacht habe, die nicht nur kostengünstig sondern auch sehr leicht zu realisieren ist. Ein Digitaler Kompass in Form von Mems kostet gerade mal 8$ und lässt sich super mit einem am Teleskop befestigten Inntertialsystem korrelieren. MEMS machen so vieles so viel einfacher.
    Allerdings konnte ich deine Seite nicht aufrufen...

    Die Schrittmotorplatine kenn ich, habe mich aber da her für das RobotikBoard aus dem Roboternetz entschieden, weil damit gleichzeitig bischen mehr ansteuerbar ist.

    Update:
    Habs geschaftt Deine Seite auf anderem Wege zu öffenen. Die Idee mit der Kamera find ich ziemlich Klasse.

    Beitrag zuletzt geändert: 15.3.2011 22:23:55 von astro-os
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!