Hallo, weiss jemand wie ich mir eine Verzögerung basteln kann? Also, ich benötige eine Verzögerung für die Ansteuerung eines Schrittmotors. Ich arbeite mit der Entwicklungsumgebung Visual Studio 2005 und programmiere in C++ (MFC). Ich habe bereits versucht, mir eine Verzögerung mit Hilfe des Time Stamp Registers zu basteln. Das hat auch funktioniert, allerdings sind die Zeitabstände nicht immer gleich und gleiche Zeitabstände benötige ich für die Ansteuerung des SM. Der Schrittmotor sollte eine Arbeitsgeschwindigkeit von ungefähr 1mm/sec haben. Der Motor benötigt für 1mm genau 400 Schritte, d.h. ich benötige eine Verzögerung von 1.25ms, dann würde der Motor alle 2.5ms (mit fallender Flanke) einen Schritt machen. Damit ich den Motor beschleunigen und abbremsen und auch langsamer fahren kann müsste die Verzögerung varriert werden können. Ich möchte die Verzögerung in meinem C++ Programm aufrufen, etwa so: delay(us). Der Timer sollte us-Genauigkeit oder besser besitzen. Mittlerweile bin ich soweit, dass ich sagen kann das ganze mit Hilfe eines geeigneten Timer-/Counter-Bausteins oder einem Mikrocontroller zu realisieren. Nur leider habe ich keine Ahnung wie ich da rangehen soll. Die CPU-Frequenz müsste auf jeden Fall fest sein, dann könnte man doch sicherlich änlich wie es bei dem Time Stamp Register der Fall ist das Counter Register mit jedem Takt erhöhen und dieses Register für die Verzögerung auslesen. Nur ist es möglich den Code als Inline-Assembler in C++ zu integrieren? Fragen über Fragen Vielleicht könnt ihr mir dabei helfen Viele Grüsse Olli
Vergiss MFC und Windows. Windows ist kein Real-Time Betriebssystem. Das wird nie was. > Mittlerweile bin ich soweit, dass ich sagen kann das ganze mit > Hilfe eines geeigneten Timer-/Counter-Bausteins oder einem > Mikrocontroller das hört sich schon besser an. Du stellst einen µC für diese Aufgabe ab. Der µC steuert den Schrittmotor an und erhält zb über die serielle Schnittstelle oder über USB Kommandos. Kommandos darfst du dir selbst ausdenken, könnten aber zb sein: 400 Schritte nach rechts, 300 Schritte nach links. Ist mit einem µC gar nicht mal so schwer zu realisieren. > Nur ist es möglich den Code als Inline-Assembler > in C++ zu integrieren? Von welchem C++ redest du? Visual C++? Du dürftest noch nicht realisiert haben, dass du in diesem Fall 2 Computer programmieren musst. Der erste ist dein Windows- Rechner, der seine Kommandos über eine serielle Schnittstelle zum 2. Computer (dem µC) schickt, der sie dann umsetzt.
windows kann im besten fall 10ms.. irgendwelche NT4 versionen hatten mal 1ms oder war das 2k.. auf jeden fall hat alles neuere wieder 10ms.. du kannst dir im besten fall mit einem highresulution-timer behelfen... aber dann bist du dann bei 100% last.... mit nem uC geht das ohne probleme...dem schickst du per uart und rs232 einfach das runter was er tun soll und er schickt dir dann wieder was rauf wenn er fertig ist... mit pc ist das fast nicht zu realisieren da die betriebssysteme einfach nicht echtzeitfähig sind bzw nicht dafür gedacht sind ein paar pins zu toggeln ;) 73
Kein Wunder das das mit Windoof nicht klappt ! Das ist schließlich kein Echtzeit-Betriebssystem ;) Wenn der Windoof Rechner den Motor ansteuern soll, mußt Du z.B. einen µC via RS232 anschließen und dem dann die Werte übermitteln. Bei Verwendung eines µCs würde sich dann anbieten den Motor gleich mittels PWM anzusteuern. Wie das geht findest Du hier im Forum zur genüge, einfach nach PWM suchen ;) Bevor Du damit anfängst ist es allerdings ratsam sich erstmal das Tutorial anzusehen ;) Viel Spaß, Markus
Wir haben eine CNC-Maschine die direkt vom PC angesteuert wird - allerding DOS! Was mich das schon Nerven gekostet hat!!! Nimm doch als Vorbild die Hybrid-Teile die's bei Reichelt gibt (wie oben erwähnt) 1 Bit für die Richtung, Geschwindigkeit und Steps per Schnittstelle. Vielleicht als Rückmeldung noch 2 Bit für Endschalter.
Es bringt eigentlich nichts, über Windows herzuziehen, mit Linux wäre es in dieser Weise ebenfalls nicht zu realisieren! Wie bereits herausgefunden, muss hierfür eine geeignete Elektronik her, welche den Schrittmotor steuert und die Anweisungen vom PC bekommt, z.B. über die serielle Schnittstelle.
Zitat Johnny: "Es bringt eigentlich nichts, über Windows herzuziehen, mit Linux wäre es in dieser Weise ebenfalls nicht zu realisieren!" Das stimmt zwar, nur gibt es für jedes freie Un*x Derivat auch eine Echtzeitumgebung ;) Die kann es bei Windows Aufgrund dessen interenn Aufbaus nicht geben, daher werden ja für Windows immer extra Echtzeit-Karten angeboten, auf denen dann z.B. OS9 läuft. Die sinnvollste Lösung hier dürfte wohl ein AT-Tiny mit UART und PWM sein. Meine Meinung, Markus
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.