Hallo,
ich möchte vom PC aus einen auf 360° umgebauten (Modellbau-)Servo
mittels PWM ansteueren. Sinn der ganzen Sache ist es, einen
Drehzahlverlauf mittels Sensor aufzuzeichnen und mittels Servo wieder
"wiederzugeben". Das ganze könnte ich entweder in C/C++ oder noch
schöner in LabVIEW programmieren.
Aber wie bekomme ich mit meinem PC ein schönes PWM-Signal ausgegeben?
Manuell einstellen über ein Poti geht nicht, mit einem Mikrocontroller
wird es schwierig einen ganzen Verlauf wieder abzuspielen. Das ganze
muss Frequenzmäßig nicht sonderlich genau sein.
Ich habe mir schon einen vorhandenen FT232-Experimentierboard (von
www.b-redemann.de) angeschaut, mit dem kann ich das PWM-Signal aber nur
in 7 "Stufen" über ein DIP-Switch einstellen. Eine NI-USB-Modul ist mit
>200 EUR für dieses Projekt leider deutlich zu teuer. An Schnittstellen
steht zwar COM und LPT zur Verfügung, praktischer wäre jedoch eine
Lösung via USB.
Vielleicht fällt ja jemanden noch etwas einfacheres ein...
Gruß,
Catherine
> Aber wie bekomme ich mit meinem PC ein schönes PWM-Signal ausgegeben? Ein PC allein schafft das mit seinen 3 Gigahertz Takt leider nicht. :-/ Du wirst das am einfachsten über eine Schnittstelle an einen uC senden, der dir dann das Servoansteuersignal erzeugt. > praktischer wäre jedoch eine Lösung via USB. Da kommt auf die Schnelle eigentlich nur ein USB-Seriell-Wandler für 5€ in Betracht.
Da schließe ich mich meinem Vorredner an. Auf einem PC wirst du das nicht hinbekommen. Selbst wenn du es schaffst die PWM in der gewünschten GEschwindigkeit hinzubekommen, macht dir das Betriebssystem einen Strich durch die Rechnung: Dein Prozess läuft ja nicht die gesamte Zeit, sondern wird um BS unterbrochen um andere Prozesse auszuführen. Also hättest du in dem Fall immer nur ein PWM-Signal, wenn dein Prozess gerade Prozessorzeit zugeteilt hat. (Wenn das falsch ist, lasse ich mich natürlich hier auch eines besseren belehren) Nimm einen µC, der über UART mit dem PC kommuniziert. Das ist einfacher als man denkt, dank der hervorragenden Tutorials auf dieser Seite.
Nunja, dass ich nicht einfach 2 Kabel an die CPU löte und dann ein PWM Signal habe war mir schon klar. Was ich als mögliche Lösungen im Auge hatte waren unter anderem: - NI Datenerfassungskarte (z.B. NI6009 USB), ist aber zu teuer - FT232 mit der Experimentierplatine, nur 7 Pulsweiten möglich - Mikrocontroller (standalone), kein Abspielen einer ganzen Sequenz möglich - Mikrocontroller (kommuniziert mit PC via UART und erhält entsprechende Kommandos) habe ich was vergessen oder gibt es noch einen einfacheren oder eleganteren Weg? Eventuell irgend ein Selbstbau-Projekt das sich z.B. mit LabVIEW ansteuern lässt? Meinetwegen auch über RS232...
USB-Audio-Dongle (~5€). Signal durch Schmidt-Trigger jagen, dann auf den Servo? => Kann gleich zwei ("Stereo")-Servos => Speichern- und Abspielen ganzer Sequenzen sehr einfach (WAV-File) => Komprimierung als MP3 mit lustigen Nebeneffekten möglich Keine Ahnung ob das gut funktioniert, wär aber sicher einen Versuch wert, denke ich.
Nicht mit Wondows oder Linux arbeiten, sondern mit Freedos (oder MS-DOS), das ganze in Assembler programmieren, damit kann man perfekte PWM an COM1 oder Gameport produzieren. Guck mal bei http://en.wikipedia.org/wiki/A86_%28software%29
1 | - Mikrocontroller (standalone), kein Abspielen einer ganzen Sequenz |
2 | möglich |
Wieso soll das nicht gehen?
@Stephan Du hast den LPT vergessen ;) Damit kann man (wenn man gut ist) unter Dos bis zu 12 Servos direkt ansteuern. Ich habe einmal einen Wahnsinnigen gesehen der die PWM für einen f/U Wandler mit einem Dos-PC generiert hat. Der Drehstrommotor ist sogar gelaufen. (Wenn auch sehr "holprig") >>- Mikrocontroller (standalone), kein Abspielen einer ganzen Sequenz >>möglich >Wieso soll das nicht gehen? Er will damit sagen dass er es nicht kann ;)
Bernhard schrieb:
> Er will damit sagen dass er es nicht kann ;)
Bei "Catherine" haette ich jetzt spontan nicht auf einen "ihn" getippt..
aber egal... ;)
Selbstverstaendlich kann ein PC auch direkt eine PWM erzeugen, das
bisher Geschriebene ist groesstenteils Mist (mit Ausnahme der
Audio-Dongle-Idee, die ich ganz nett finde).
Warum sollte ein Rechner mit 3GHz nicht in der Lage sein, eine PWM zu
erzeugen, wenn ein Mikrocontroller mit 'nem halben MHz das auch schaffen
kann? Threading ist auch kein Problem, es gibt auch bei PCs
Interrupts...
Anyways, das einfachste waere meiner Meinung nach folgendes (wenn man
ohnehin einen PC zur Verfuegung hat):
Jedes einigermassen aktuelle Motherboard bringt diverse PWM-Generatoren
mit, zur Lueftersteuerung naemlich. Die sind mittels Software auch
problemlos zu beeinflussen (Luefterdrehzahl regeln).
Einige serielle Schnittstellen koennen auch CTS/RTS im KHz-Bereich
wackeln lassen.
Parallele Schnittstelle (dann am besten unter DOS) sollte auch
problemlos fuktionieren.
Last but not least kann das ganze auch ein µC (alleine oder in
Verbindung mit PC) erledigen. ;)
Volker
@Volker Das mag ja alles sein, aber es ist eben nicht vorhersagbar wieviele Sekunden die PWM wegen z.B. Festplatte aufraeumen oder Autoarchivieren ... mal nicht bedient wird. Gast
vfsdj schrieb: > @Volker > > Das mag ja alles sein, aber es ist eben nicht vorhersagbar wieviele > Sekunden die PWM wegen z.B. Festplatte aufraeumen oder Autoarchivieren > ... mal nicht bedient wird. > > Gast Das ist selbst bei Windows schlichtweg falsch. Ich erwaehnte doch die Interrupts bereits? Bei der Loesung mit der Lueftersteuerung wuerde ich auch eher auf ein Single-Thread-OS gehen, wenn eine 3rd-Party Software verwendet wird, aber selbst unter Win ist eine Verzoegerung von max. einigen Mikro- bis Millisekunden zu erwarten (wenn andere Threads alle CPU-Kerne voll auslasten). In der Zeit wuerde die PWM natuerlich nicht ausbleiben, der neue Wert kaeme nur spaeter. Volker
@Volker Die Audiovariante kann man leider nicht so ohne weiteres anwenden. Denn was Haug generieren will ist genau genommen kein PWM, sondern ein PPM Signal. Dass ist ein 1 bis 2ms langes high Signal, gefolgt von einem ca. 20ms-th low Signal. Um soetwas unter einem Betriebssystem wie Windows machen zu können muß man zumindest einen Treiber schreiben der einem das Signal generiert. Und da kann man nicht garantieren dass die Signale richtig erzeugt werden. Die einfachste und sicherste Methode ist immer noch ein Mikrokontroller.
Und warum sagst Du mir das? Weil ich die Idee als einzige nicht mit "Mist" betitelt habe? ;) Es bleibt aber dabei dass ein PC ein PWM-Signal sehr wohl und sehr genau erzeugen kann (je nach Vorgehen sogar genauer als ein Mikrocontroller, da bessere Aufloesung durch hoeheren Takt). Persoenlich wuerde ich fuer dieses Projekt aber auch einen µC nehmen. Volker
Volker Schulz schrieb: > Es bleibt aber dabei dass ein PC ein PWM-Signal sehr wohl und sehr genau > erzeugen kann (je nach Vorgehen sogar genauer als ein Mikrocontroller, > da bessere Aufloesung durch hoeheren Takt). Und wie? > Persoenlich wuerde ich fuer dieses Projekt aber auch einen µC nehmen. Achso, weil das PWM Signal vom PC "zu genau" dann ist, oder wieso?
Simon K. schrieb: > Volker Schulz schrieb: >> Es bleibt aber dabei dass ein PC ein PWM-Signal sehr wohl und sehr genau >> erzeugen kann (je nach Vorgehen sogar genauer als ein Mikrocontroller, >> da bessere Aufloesung durch hoeheren Takt). > > Und wie? > Hab doch schon mehrere Moeglichkeiten genannt. Die Lueftersteuerung waere im Prinzip nichts anderes als µC + PC, es wird ein Wert festgelegt und an den Controller uebermittelt, der dann die PWM generiert. Ein µC bietet nichts, was ein PC nicht auch bieten wuerde. Timer, Interrupts, I/O-Pins... Was braucht man denn mehr fuer eine PWM? >> Persoenlich wuerde ich fuer dieses Projekt aber auch einen µC nehmen. > > Achso, weil das PWM Signal vom PC "zu genau" dann ist, oder wieso? Hehe.. Nein, fuer dieses Projekt nur µC OHNE PC. Volker
Volker Schulz schrieb: > Hab doch schon mehrere Moeglichkeiten genannt. > > Die Lueftersteuerung waere im Prinzip nichts anderes als µC + PC, es > wird ein Wert festgelegt und an den Controller uebermittelt, der dann > die PWM generiert. Dann erzeugt aber der PC nicht mehr die PWM, sondern eben ein Hilfs-Mikrocontroller. > Ein µC bietet nichts, was ein PC nicht auch bieten wuerde. Timer, > Interrupts, I/O-Pins... Was braucht man denn mehr fuer eine PWM? Natürlich. Ein Mikrocontroller ist ja nichts anderes als ein kleiner PC in einem Chip. Aber du brauchst eine schnelle Anbindung an die I/O Pins (zB LPT?). Aber dazwischen sitzt noch ein IC, nämlich der LPT Treiber.
Simon K. schrieb: > Volker Schulz schrieb: >> Hab doch schon mehrere Moeglichkeiten genannt. >> >> Die Lueftersteuerung waere im Prinzip nichts anderes als µC + PC, es >> wird ein Wert festgelegt und an den Controller uebermittelt, der dann >> die PWM generiert. > Dann erzeugt aber der PC nicht mehr die PWM, sondern eben ein > Hilfs-Mikrocontroller. Bei diesem Ansatz ist das korrekt. > >> Ein µC bietet nichts, was ein PC nicht auch bieten wuerde. Timer, >> Interrupts, I/O-Pins... Was braucht man denn mehr fuer eine PWM? > Natürlich. Ein Mikrocontroller ist ja nichts anderes als ein kleiner PC > in einem Chip. > Aber du brauchst eine schnelle Anbindung an die I/O Pins (zB LPT?). Aber > dazwischen sitzt noch ein IC, nämlich der LPT Treiber. Und dadurch entstehen Delays, die einer PWM gefaehrlich werden koennten, meinst Du? Liegt's vielleicht am Gehaeuse des Treiber-IC? Denn Treiber / Puffer haben die µC auch noch vor den I/O-Ports, nur sind die eben im selben Package. Volker
Es geht um ein Servo-Signal, also etwas recht langsammes. Das sollte auch der Windows-PC schaffen. In der WINMM.DLL ist ein Eventtimer der dafür ausreichend genau ist und priorität besitzt. Ich habe damit mal DCF77 Signale über die COM1 (DTR) ausgegeben und auf dem selben PC nebenher einen Messplatz programmiert und erprobt. Beispiel habe ich auf die Schnelle nur in VB gefunden: http://www.activevb.de/tipps/vb6tipps/tipp0101.html gruß hans
Volker Schulz schrieb: >>> Ein µC bietet nichts, was ein PC nicht auch bieten wuerde. Timer, >>> Interrupts, I/O-Pins... Was braucht man denn mehr fuer eine PWM? >> Natürlich. Ein Mikrocontroller ist ja nichts anderes als ein kleiner PC >> in einem Chip. >> Aber du brauchst eine schnelle Anbindung an die I/O Pins (zB LPT?). Aber >> dazwischen sitzt noch ein IC, nämlich der LPT Treiber. > > Und dadurch entstehen Delays, die einer PWM gefaehrlich werden koennten, Unter anderem. > meinst Du? Liegt's vielleicht am Gehaeuse des Treiber-IC? Denn Treiber / > Puffer haben die µC auch noch vor den I/O-Ports, nur sind die eben im > selben Package. Es geht nicht um I/O Treiber, es geht um LPT Chips, die die komplette LPT Kommunikation abhandeln. Da ist weit mehr als nur ein I/O Treiber drin.
Simon K. schrieb: > Volker Schulz schrieb: >>>> Ein µC bietet nichts, was ein PC nicht auch bieten wuerde. Timer, >>>> Interrupts, I/O-Pins... Was braucht man denn mehr fuer eine PWM? >>> Natürlich. Ein Mikrocontroller ist ja nichts anderes als ein kleiner PC >>> in einem Chip. >>> Aber du brauchst eine schnelle Anbindung an die I/O Pins (zB LPT?). Aber >>> dazwischen sitzt noch ein IC, nämlich der LPT Treiber. >> >> Und dadurch entstehen Delays, die einer PWM gefaehrlich werden koennten, > Unter anderem. Falsch. Jedenfalls nicht in der Groessenordnung, in der wir uns hier bewegen. Selbst der Timer des OS reicht noch fuer eine perfekte 1KHz PWM und das ist schon 20 Mal mehr als wir hier brauchen. Mit dem System-Timer koennen wir locker in den zweistelligen KHz-Bereich gehen. Wenn man aus irgendwelchen Gruenden mal noch viel schneller werden muss (habe ich noch nicht erlebt), dann gibt's bei einem PC ja noch reichlich weitere I/O-Moeglichkeiten, die dann aber nicht mehr ganz so bequem zu benutzen sind. > >> meinst Du? Liegt's vielleicht am Gehaeuse des Treiber-IC? Denn Treiber / >> Puffer haben die µC auch noch vor den I/O-Ports, nur sind die eben im >> selben Package. > Es geht nicht um I/O Treiber, es geht um LPT Chips, die die komplette > LPT Kommunikation abhandeln. Da ist weit mehr als nur ein I/O Treiber > drin. Nochmal falsch. Anders als beim seriellen Port (der hier uebrigens auch noch ausreichen wuerde) wird LPT-Kommunikation in Software (Treiber) abgehandelt, auf die I/Os kann man direkt per Hardwareadresse zugreifen. Volker
Hallo, also erstmal vielen Dank für die ganzen neuen Ideen, ein paar davon werde ich wohl 'abarbeiten' müssen. Also versteift euch nicht unbedingt zu sehr auf das "PWM mit PC" erzeugen. In erster Linie muss auf dem PC nur ein LabVIEW oder C/C++ Programm laufen welches zumindestens Befehle irgendwo hin schickt wo dann das PWM (genauer: PPM) Signal entsprechend generiert wird. Ich hatte auf Antworten gehofft (wohlgemerkt gehofft, nicht erwartet) wie "nimm eine xyz-Interfacekarte, die kann das". Das würde zumindestens den Versuchsaufbau etwas minimieren. Denn nach der bisher bessten Idee habe ich jetzt einen PC mit LabVIEW der Befehle mittels USB-to-Serial Wandler und UART an einen Mikrocontroller schickt, der dann das PWM-Signal erzeugt was dann wiederum zum Servo auf den (ohnehin schon aufwendigen) Versuchsaufbau geht. Gibt es nicht schon eine fertige USB-Servotester-Platine nach Möglichkeit mit LabVIEW Treibern? Gruß, Catherine
Catherine Haug schrieb: > Denn nach der bisher bessten Idee > habe ich jetzt einen PC mit LabVIEW der Befehle mittels USB-to-Serial > Wandler und UART an einen Mikrocontroller schickt, der dann das > PWM-Signal erzeugt was dann wiederum zum Servo auf den (ohnehin schon > aufwendigen) Versuchsaufbau geht. Das klingt komplizierter als es ist und der Aufbau dauert nicht viel laenger als das Schreiben Deines Satzes. ;) > Ich hatte auf Antworten gehofft (wohlgemerkt gehofft, nicht erwartet) > wie "nimm eine xyz-Interfacekarte, die kann das". Das würde zumindestens > den Versuchsaufbau etwas minimieren. Achso! Dann nimm doch die "Propeller Servo Controller" Interfacekarte von Parallax, die kann das! ;) http://www.parallax.com/Store/Accessories/MotorServoControllers/tabid/160/CategoryID/35/List/0/Level/a/ProductID/595/Default.aspx?SortField=ProductName%2cProductName Volker
Fast vergessen: Kostet US$39.00, also etwas unter 30.00 EUR + S&H + Zoll. Und dann lohnt sich das googlen nach fertigen Softwareloesungen vielleicht noch, die dann meist den LPT-Port benutzen und voellig gratis sind. Volker
Hallo Catherine, wenn du schon einen FT232 hast, könntest Du das Signal mit dem "bit bang mode" des FT232 erzeugen. Mit einer Baudrate von 9600 Baud ergibt sich eine Datenrate von 153600 Bytes/Sekunde. also ca 6,5us Auflösung. Bei einer Pulsbreite von 1-2ms (20ms Periode) für das Servo-Signal ergeben sich knapp 154 Stufen die sich einstellen lassen. http://www.ftdichip.com/Documents/AppNotes/AN232R-01_FT232RBitBangModes.pdf
Anja schrieb: > Mit einer Baudrate von 9600 Baud ergibt sich eine Datenrate von 153600 > Bytes/Sekunde. Wie hast Du denn das gerechnet?!? 9600 Baud sind bei 8N1 ziemlich genau 960 Bytes pro Sekunde. ;) Volker
Moin Catherine, im Ausgangspost erwähntest du LabView... Kann man Labview nicht dazu bringen beliebige Signale auf der Soundkarte auszugeben? Ich hab bisher nur Matlab, bzw. für solche Sachen Simulink, benutzt und da konnte man mit der Soundkarte recht viel machen. Ich habe mir zu diesem zweck extra mal eine Soundkarte mit 96kHz Samplingrate angeschafft, da ich damit Schwingungen von Maschinen zur Zustandsüberwachung von Lagern etc. aufgenommen habe. Die Frage ist doch eigentlich nur, ob die Soundkarte es schafft Flanken mit ausreichende Steilheit zu produzieren. Aber bevor man sich da was Bastelt, wird kurz das Oszi an die Soundkarte angeklemmt und geprüft. Sollten die Flanken nicht steil genug sein, könnte man ja noch mit etwas Hühnerfutter nachhelfen. Gruß, Ole
Volker Schulz schrieb: > Anja schrieb: >> Mit einer Baudrate von 9600 Baud ergibt sich eine Datenrate von 153600 >> Bytes/Sekunde. > > Wie hast Du denn das gerechnet?!? > [...] Mein Fehler, hatte angenommen wir waeren immernoch bei der PC-auf-Interface-Methode... ;) Volker
>im Ausgangspost erwähntest du LabView... Kann man Labview nicht dazu >bringen beliebige Signale auf der Soundkarte auszugeben? >Ich hab bisher nur Matlab, bzw. für solche Sachen Simulink, benutzt und >da konnte man mit der Soundkarte recht viel machen. Ich habe mir zu >diesem zweck extra mal eine Soundkarte mit 96kHz Samplingrate >angeschafft, da ich damit Schwingungen von Maschinen zur >Zustandsüberwachung von Lagern etc. aufgenommen habe. >Die Frage ist doch eigentlich nur, ob die Soundkarte es schafft Flanken >mit ausreichende Steilheit zu produzieren. >Aber bevor man sich da was Bastelt, wird kurz das Oszi an die Soundkarte >angeklemmt und geprüft. Sollten die Flanken nicht steil genug sein, >könnte man ja noch mit etwas Hühnerfutter nachhelfen. Wier reden hier von PPM und nicht von PWM. PPM mit dem Soundblaster zu erzeugen ist nicht so ohne weiteres möglich. >Ich hatte auf Antworten gehofft (wohlgemerkt gehofft, nicht erwartet) >wie "nimm eine xyz-Interfacekarte, die kann das". Das würde zumindestens >den Versuchsaufbau etwas minimieren. Ein uC wie der ATmega8 ist eigentlich kein wirklicher Aufwand. Da reicht die Minimalbeschaltung ( http://www.mikrocontroller.net/articles/AVR-Tutorial:_Equipment ) + ein RS232-TTL Wandler ( http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART )um direkt oder über einen USB-RS232 Wandler mit dem PC zu reden. Ich vermute dass einer der Gründe warum der Versuchsaufbau "minimiert" werden soll der ist, dass man nicht löten will/kann. Wenn dies der Fall ist, dann würde ich den Adurino oder andere Mikrokontroler Entwicklungsboards empfehlen. Die muß man halt noch selbst prograsmmieren. Aber dass ist nicht wirklich kompliziert.
Bernhard schrieb: > [...] > Ich vermute dass einer der Gründe warum der Versuchsaufbau "minimiert" > werden soll der ist, dass man nicht löten will/kann. > Wenn dies der Fall ist, dann würde ich den Adurino oder andere > Mikrokontroler Entwicklungsboards empfehlen. > Die muß man halt noch selbst prograsmmieren. > Aber dass ist nicht wirklich kompliziert. Sollte Deine Annahme stimmen, waere meines Erachtens das fertig aufgebaute oben genannte USB-Interface-Board vielleicht die geschicktere Empfehlung. Bei 30 EUR Kaufpreis allemal. Frei nach dem Motto: Plug & Pray. ;) Volker
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.