![]() |
pwm oder takt erzeugen mit delphi
Hi,
ich würde gern in Delphi ein PWM Signal mit genau definiertem Takt erzeugen und es über die LPT1 ausgeben. Die Ausgabe über LPT1 ist kein Problem. Allerdings ist mir nicht bekannt wie ich unter delphi einen Takt (z.B 1MHz) erzeugen kann, oder wie ich ein PWM Signal erzeuge. Wer nett, wenn mir da mal jemand nen Tipp geben könnte. Bsten Dank |
Re: pwm oder takt erzeugen mit delphi
Herzlich willkommen in der Delphi-PRAXiS, unk.
Um dich an die Lösung heranzutasten kannst du dich erstmal mit der TTimer-Komponente von Delphi (Palettenseite Sytem) beschäftigen. Damit solltest du unter gewissen Bedingungen einen Takt bis zu 100 kHz realisieren können. Sobald du diese Technik ausgereizt hast kannst du im Microsoft Platform SDK das Kapitel Timers durcharbeiten. TTimer kapselt SetTimer (WM_TIMER). Mit passender Interrupt-Technik und den high performace counters lässt sich eventuell mehr machen, aber das ist nicht direkt mein Thema. Vermutlich ist eine spezielle PWM-Logik auf einem Adapter die eleganteste und zuverlässigste Lösung, aber vielleicht geht es dir ja nur ums Prinzip. Freundliche Grüße vom marabu |
Re: pwm oder takt erzeugen mit delphi
hm...hab ich mir auch schon mal angeguckt. Allerdings bräuchte ich nen schnelleren Takt. hab schon mal überlegt, ob ich den Takt extern, also von einem Quartz generieren lasse und dann über einen Eingang von LPT1 in meinem Programm verarbeite. Ist aber auch nicht ganz so einfach, weil ich ja auf die Taktflanken zugreifen können müsste, was ich allerdings auch nicht hinbekomme. Am liebsten hätte ich was derart, das ich das in Zeitabschnitten angebe, also : 1,01 ms bis 1,50 ms -> ausgang auf '1', sonst ausgang '0'. Dafür bräuchte ich aber n Timer der in dem Bereich arbeitet und nicht wie bei einem Wait oder Delay gleich den ganzen rechner bremst.
|
Re: pwm oder takt erzeugen mit delphi
du kannst doch das timer intervall auf 1 setzen, dann hast du 1ms.
|
Re: pwm oder takt erzeugen mit delphi
1ms reicht ihm nicht.
Ich weiß es nicht wie dringend/für was du es brauchst, aber du könntest ja einen Mikroprozessor dranhängen und per LPT ihn beauftragen das PWM Signal ein/ausschalten. Mit denen lässt sich sowas relativ einfach umsetzen (1-2€ für den Prozessor, paar cent für einen Quarz). MFG Maximus |
Re: pwm oder takt erzeugen mit delphi
Hab schon nen Mikrocontroller den ich als PWM Generator benutzen könnte, habe aber das Problem, das ich ein Steuerbares PWM Signal brauch. Ich muss also das Signal über den PC ändern können und zwar in einer Unterteilung von mind. 100 Schritten und das wie gesagt in Echtzeit vom PC aus. da die Parallele schnittstelle nur 8 Ausgänge hat, kann ich die 100 schritte damit nicht codieren.
Also erzähl erstmal schnell was ich machen will, vielleicht gibts dafür ja ne andere bessere Lösung und ich denk mal wieder zuviel im Kreis. Ich möchte über ein Delphi Programm Modellbau Servos in echtzeit ansteuern (mind. 3 Stück gleichzeitig). Als schnittstelle habe ich mir die LPT1 ausgesucht, weil ich da sowohl ausgänge wie auch eingänge hab, die ich über Delphi programmieren kann. So ein Servo braucht ein PWM Signal, welches einen Puls von 1ms bis 2ms länge alle 20ms (glaub ich) sendet. da ich aber den servo nicht bloss ganz nach links oder ganz nach rechts bewegen will, sondern in beliebige Positionen, muss ich den 1-2ms Puls genau einstellen können (ca 100 schritte von 1 bis 2 ms), also 1,01 -> 1,02 -> ...-> 1,98 -> 1,99 -> 2ms. Am besten wäre wenn ich das PWM Signal in delphi erzeugen könnte, dann könnte ich nämlich bis zu 8 Servos ansteuern (weil acht datenleitungen bei der Parallelschnittstelle). |
Re: pwm oder takt erzeugen mit delphi
Zitat:
Aber die 20 msec scheinen mir machbar. Einfach einen Timer dafür verwenden und im OnTimer()-Event das Signal hochsetzen, die pulse width in einem tight loop überwachen, und anschließend das Signal wieder herunterziehen. Die betroffenen Servos werden dann allerdings synchron gesteuert. Das Signal extern erzeugen lassen ist nicht nötig und würde wohl nur dann etwas bringen, wenn der MC auch die Servos steuern würde und der PC nur die Benutzerschnittstelle bereit stellen würde. marabu |
Re: pwm oder takt erzeugen mit delphi
Zitat:
|
Re: pwm oder takt erzeugen mit delphi
Windows ist kein Echtzeitsystem!
Insbesondere ist die Jitterzeit nicht determiniert. Läuft z.B. ein Floppylaufwerk, dann hält Windows schon mal für eine Sekunde an. Reger Netzwerkverkehr tut ein übriges. Alles was unter 20 ms liegt macht Probleme. Ich habe mal eine Steuerung für eine Anlage auf Basis von Windows NT und Delphi geschrieben. Die Peripherie war über Interbus angeschlossen. (ca, 800 Meßstellen und 400 Aktoren.) So ich unter 20 ms Systemtakt ging, gab es nicht definierte Störungen und Aussetzer auf dem Bus. Eine Stoppuhr für den Sportbereich, welche über den Parallelport von Lichtschranken gesteuert wird, habe ich unter DRDos laufen. Auf Window erreiche ich heute noch nicht die notwendige Genauigkeit und vor allen keine Reproduzierbarkeit, geschweige denn Eichbarkeit. Für die Lösung Deines Problems gibt es mehrere Ansätze. ( Wobei 1 MHz über den Parallelbus nicht übertragbar sind.) 1. Ein externer Mikroprozessor, den würde ich dann seriell anschließen. 2. Eine Soft-SPS. Da gibt es zum Beispiel bei Beckhoff eine Soft-SPS als Evaluierungsvariante. Die kann auch den Parallelport als I/O ansprechen. Die kostenfreie Variante ist auf eine Laufzeit von 1 Monat begrenzt. Einfaches Deinstallieren und neu Installieren verlängert die Laufzeit jeweils um einen Monat. 3. Es gibt Zusatzkarten, muss man mal im Internet suchen, die so etwas machen. Sind in der Regel aber nicht ganz billig. Müsste ich die Aufgabe lösen, so würde ich in Richtung seriell angeschlossene Karte mit einem Atmel denken. Solche Karten sind in der Größenordnung 40 - 80 € fertig kaufbar und der zugehörige Assembler ist kostenlos. Gruß Peter |
Re: pwm oder takt erzeugen mit delphi
Zitat:
MFG Maximus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz