Forum: Mikrocontroller und Digitale Elektronik Delay, Verzögerung !?


von Oliver Herpel (Gast)


Lesenswert?

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

von Karl heinz B. (kbucheg)


Lesenswert?

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.

von Hans (Gast)


Lesenswert?

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

von Markus (Gast)


Lesenswert?

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

von Sonic (Gast)


Lesenswert?

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.

von Johnny (Gast)


Lesenswert?

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.

von Markus (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.