INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Erzeugung einer PWM aus TTL Werten



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

30.08.2013, 10:09
Beitrag #1

paddsen Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Aug 2013

2012
2013
EN



Erzeugung einer PWM aus TTL Werten
Hi Leute,

Ich beschäftige mich gerade damit, wie ich mithilfe einer Labview-Karte eine PWM erzeugen kann, die wiederrum eine Leistungsstufe steuern soll. Es ist für mich ein Einstiegsprojekt, ich habe bisher meist nur kleine Datenerfassungsaufgaben mit Labview gelöst. Jetzt geht es jedoch nur zweitrangig um die Signalerfassung und hauptsächlich um die Erzeugung von hochfrequenten TTL Signalen.

Erstmal mein Vorhaben:
Ich möchte einen VI programmieren, das es mir ermöglicht, eine PWM aus 5V TTL Impulsen zu erzeugen. Die Impulsbreite ist pro Programmausführung konstant und die Impulsbreite soll über einen Drehregler in LabVIEW einstellbar sein. Wichtiges Kriterium ist die hohe Frequenz der PWM: Sie soll bis 20 kHz gehen, ein Duty Cycle soll also nur 50 us dauern und das kleinste erzeugbare Rechteck soll 1 us einen High-Pegel annehmen.

Zur Verfügung habe ich die schnelle PCIe Karte NI-PCIe 6351, deren interne Timer für diese Aufgabe schnell genug sein sollten.

Das Programm hat also keine allzugroße Komplexität, man stellt das Tastverhältnis ein und die PWM Frequenz und durch einen digitalen Trigger von aussen wird das Programm gestartet. Ein Durchlauf soll auf ein paar Sekunden begrenzt sein.

Ich habe in den Core 1 und 2 Kursen von NI, die ich als Student günstig bekommen habe, leider wenig mit Tasks und internen Countern gemacht und bisher versucht das NI Example anzupassen: siehe Anhang.

Leider habe ich keine Idee, wie ich an solche hohen Frequenzen herankomme. Ich muss ja auch die Verzögerung in der Schleife deaktivieren, da ein Raster von 1 ms zu groß ist.

Habt ihr eine Idee, wie ich an der Sache weitermachen kann?


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
30.08.2013, 11:26
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Erzeugung einer PWM aus TTL Werten
Prinzipiell sieht das gut aus, Erzeugung des PWM über Counter.
Solange der User per Drehknopf/Schieberegler o.ä. die Eingaben zum Duty-Cycle per Hand macht, halte ich eine Reaktions- und Updaterate von 100 Hz ebenfalls für sehr gut.

Die 20 kHz Grundfrequenz erledigt der Counter für dich, ebenfalls das Verhältnis von High zu Low.

Ich kann somit deine Bedenken nicht ganz nachvollziehen.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.08.2013, 12:24
Beitrag #3

paddsen Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Aug 2013

2012
2013
EN



RE: Erzeugung einer PWM aus TTL Werten
Hey, danke für deine Antwort!

Ich habe momentan die Karte nur simuliert und werde das Ganze jetzt bald mit einem Oszi mal testen. Ich will mit dem Programm dann später parallel auch noch bis zu 3 analoge Inputs (Ströme, transformiert auf den Messbereich von 0-10V) abtasten und kontinuierlich darstellen. Ist mein Programm bei einer PWM Frequenz von 20 kHz dann sehr leistungsfordernd, oder wird eine Abtastung mit ca. 10kS pro Kanal problemlos machbar sein?

Gerade baue ich an einem Programm herum, das ein Forenmitglied hier gebaut hat, hauptsächlich um den Umgang mit den Counter Signalen und den Tasks zu verstehen. Wie es aussieht kann ich so auch 3 Phasen mit verschiedenen Duty-Cycles betreiben.

Auf jeden Fall komme ich voran. Für Tipps / Links usw zu der Aufgabenstellung bin ich sehr dankbar, da mir die Erfahrung mit DAQmx fehlt Smile

Im Anhang mal das VI, das ich mir anschaue und evtl erstmal an meine Bedürfnisse anpasse/verstehe.
   


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.08.2013, 12:29 (Dieser Beitrag wurde zuletzt bearbeitet: 30.08.2013 12:34 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Erzeugung einer PWM aus TTL Werten
Hallo paddsen,

solange du möglichst viel Arbeit an den DAQmx-Treiber delegierst, wird dein Programm (im Rahmen der Möglichkeiten der Hardware) gut arbeiten. Also:
- AI-Kanäle mit Samplerate definieren und Messdaten mit sinnvoller Blockgröße abfragen (üblich sind 0,1s-Blöcke).
- AI-Kanälen kann man eine Skalierung zuweisen, so kannst du deine 0-10V gleich wieder in Stromwerte umrechnen lassen.
- Die PWM-Generierung läuft auch im Treiber oder direkt in der Hardware, belastet also kaum die CPU.
- Das Producer-Consumer-Schema vereinfacht fast immer den (Rechenzeit-)effizienten Umgang mit den Messdaten.

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.08.2013, 12:38
Beitrag #5

paddsen Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Aug 2013

2012
2013
EN



RE: Erzeugung einer PWM aus TTL Werten
Danke!

Ok, dann ist jetzt erstmal alles klar und ich kann mich an die Realisierung machen. Ich habe gerade die ganzen DAQmx Tuts auf der NI Seite gelesen und komme immer mehr hinter die Thematik. Ich werde jetzt mal mit einer Niederfrequenten PWM beginnen, diese über Counter der Karte generieren und dann mit Oszi oder einer LED testen.

Das Ganze soll später einen Umrichter auf 3 Phasen ansteuern, doch erstmal muss das TTL Signal sauber stehen. Der Tipp, die Karte selber möglichst viel machen zu lassen und der CPU wenig Arbeit zu machen ist auf jeden Fall super...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.09.2013, 09:19
Beitrag #6

paddsen Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Aug 2013

2012
2013
EN



RE: Erzeugung einer PWM aus TTL Werten
Hi Leute, also so langsam wirds mit der 3 Phasen-PWM. Ich hänge gleich mal ein Screenshot von meinem aktuellen Hauptprogramm an. Ich habe mich an einem anderen Thread und an dem offiziellen PWM Beispiel orientiert. Das Ausgangsbeispiel war 2 Phasig, ich habe dann einfach die lokale Variable und das VI, das das gemeinsame binäre Array erzeugt so erweitert, dass es nun eben auch noch einen Duty Cycle 3 gibt. Irgendwo muss ich aber auch noch der Taskerstellung der DAQmx Blöcke sagen, dass ich jetzt plötzlich 3 Duty Cycles habe.... wo finde ich das?

Ich hab dann auch noch die Generation der PWM angepasst: der Duty Cycle soll nicht mit dem High-Intervall anfangen, sondern mit einem Low- Intervall, dann die Einschaltzeit des High-Intervalls und dann nochmal der Rest der Aus-Phase in einem genauso großen Low-Intervall wie zu beginn, sodass die Duty Cycles immer zeitlich mittig sind. Ich zeige euch mal auch hier das VI. Vielleicht habt ihr noch Verbesserungsvorschläge, was Recheneffizienz angeht. Iche kenne mich nicht so aus, welche Array Operationen weniger und welche mehr Ressourcen brauchen.
   
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
05.09.2013, 09:58
Beitrag #7

paddsen Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Aug 2013

2012
2013
EN



RE: Erzeugung einer PWM aus TTL Werten
Hier jetzt auch noch das Sub VI, das über Compound Arrithmetic eine multiples Duty Cycle Array bekommt... mit 2 Duty Cycle Arrays funktioniert das wunderbar, ich habe jetzt einfach das 3te Array hinzugefügt und dann eben den Shift auf 2 gesetzt. WObei mir noch nicht 100% ig klar ist, warum man das so löst und vor allem warum ein Ausgangsarray entsteht, das 1000 Werte hat, obwohl die 3 einzlenen Duty Cycle Arrays je 1000 bits besitzen.    

Ich bereite mal eine ZIP vor und werde das komplette Programm hochladen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.09.2013, 16:07 (Dieser Beitrag wurde zuletzt bearbeitet: 05.09.2013 16:09 von GerdW.)
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Erzeugung einer PWM aus TTL Werten
Hallo paddsen,

Zitat:über Compound Arrithmetic eine multiples Duty Cycle Array bekommt... mit 2 Duty Cycle Arrays funktioniert das wunderbar, ich habe jetzt einfach das 3te Array hinzugefügt und dann eben den Shift auf 2 gesetzt. WObei mir noch nicht 100% ig klar ist, warum man das so löst und vor allem warum ein Ausgangsarray entsteht, das 1000 Werte hat, obwohl die 3 einzlenen Duty Cycle Arrays je 1000 bits besitzen
Du verwendest ein OR-Funktion bei der CompoundArithmetic: Hier werden Bits verknüpft. Deine Shift-operationen sorgen dafür, dass die Bits für jeden Kanal sich nicht "überlagern": der erste Kanal nutzt Bit0, der zweite Bit1 und der dritte nun Bit2...

Wenn du 3mal 1000 Werte per OR verrechnest, bekommst du als Ergebnis 1000 Werte. (Analog: wenn du 3mal 1000 Werte addierst, bekommst du ja auch 1000 Summen...)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2013, 12:19
Beitrag #9

paddsen Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Aug 2013

2012
2013
EN



RE: Erzeugung einer PWM aus TTL Werten
Hey, danke für den hilfreichen Beitrag, jetzt habe ich das NI Beispiel so weit verändert, dass ich eine 3 Phasige PWM ausgebe und auch die Impulsform soweit stimmt. Das ist schonmal echt super.

Gerade hänge ich an einem wahrscheinlich einfacheren Problem fest. Wenn ich ich das Programm zur Erzeugung des Ausgangssignals nach zufälliger zeit über den Stop Button stoppe ( dieser befindet sich in der Event Struktur), dann ist es manchmal so, dass die DOs auf High und manchmal auf Low schalten. Kann ich irgendwie einstellen, dassbei jedem Durchlauf die gleiche Reaktion erzeugt wird?

Wie würdet ihr es machen, wenn das ganze programm aus den Screenshots als Sub VI betrieben werden soll, bei dem die einzelnen Tastverhältnisse der 3 Phasen automatisch verstellt werden sollen und bei dem auch die kontinuierliche PWM Generation irgendwann per STOp Button im neuen VI angehalten werden soll. ich habe einfach den STOP-Button als Input des VIs definiert und will mit einem neuen VI in der Lage sein, die PWM Generation zu stoppen... irgendwie scheitert das Vorhaben jedoch immer wieder.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2013, 12:44
Beitrag #10

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Erzeugung einer PWM aus TTL Werten
(06.09.2013 12:19 )paddsen schrieb:  Gerade hänge ich an einem wahrscheinlich einfacheren Problem fest. Wenn ich ich das Programm zur Erzeugung des Ausgangssignals nach zufälliger zeit über den Stop Button stoppe ( dieser befindet sich in der Event Struktur), dann ist es manchmal so, dass die DOs auf High und manchmal auf Low schalten. Kann ich irgendwie einstellen, dassbei jedem Durchlauf die gleiche Reaktion erzeugt wird?
Einfach selber programmatisch nach der While-Loop alle DOs auf Low setzen?!

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Erzeugung der Pulse mit NI USB 6002(DAQmx) Felix777 10 11.687 10.08.2015 22:49
Letzter Beitrag: jg
  Erzeugung eines stufenlos einstellbaren PWM-Signals Fredy Dilker 14 21.840 24.03.2014 11:01
Letzter Beitrag: GerdW
  Erzeugung unterschiedlicher Analogsignale hans-gebert 3 4.934 24.04.2012 23:15
Letzter Beitrag: jg
  Erzeugung Analogausgangssignal kpalime 9 8.963 18.01.2011 21:54
Letzter Beitrag: kpalime
  Zwei DAQmx Channels zur Erzeugung zweier Analog Outputs zur Steuerung eines galvano XY-Scanners RiSo1985 18 16.806 22.01.2010 11:02
Letzter Beitrag: Lucki
  Probleme bei gleichzeitiger Signalerfassung und -Erzeugung yrthy 4 5.024 18.07.2008 17:12
Letzter Beitrag: IchSelbst

Gehe zu: