Hallo zusammen, ich bin komplett neu auf dem Gebiet FPGA / VHDL, daher bitte ich falsches wording und unpräzise Ausdrucksweise zu entschuldigen. Danke für euer Nachsehen :-). Board: BASYS3 von Xilinx Problemstellung: - Ich möchte für eine Vibrationsuntersuchung einen hochauflösenden Frequenzsweep für eine DC Motoransteuerung erstellen. - Der Sweep soll um die 50kHz durchgeführt werden in einem Frequenzband von ca. 50 Hz. - Duty des Highsiders soll 50% betragen - (Totzeit zwischen HS und LS kommen später auch noch dazu, aktuell möchte ich aber erstmal die Sollfrequenz des Highsiders exakt treffen) Ist-Stand: - ich habe einen 32-Bit Zähler, 1 LSB = 0,00232.. Hz - aktuell liege ich mit der Frequenz von ca. 4Hz daneben - ich habe schon versucht größere Zähler zu verwenden, jedoch ohne Erfolg - Von der Genauigkeit muss ich jedes Hz sweepen Anbei ein Screenshot der aktuellen Simulation. Habt Ihr Ideen wie ich meine Genauigkeit hier erhöhen kann? Ich bin über jegliche Hilfe sehr dankbar! Viele Grüße Mike
Mike schrieb: > Habt Ihr Ideen wie ich meine Genauigkeit hier erhöhen kann? DDS, aber das erzeugt Jitter. DDS sinus gefiltert und mit Komparator dann wieder in PWM geht ohne (relevanten) Jitter.
Hallo Michael, erstmal danke für deine Antwort! Könntest du mir bitte etwas genauer skizzieren wie ich dies in VHDL umsetzten müsste? Ich wüsste jetzt leider nicht wie ich dies direkt so umsetzen kann. Danke dir!
Michael B. schrieb: > DDS, aber das erzeugt Jitter. nicht wenn man es richtig macht > DDS sinus gefiltert und mit Komparator dann wieder in PWM DDS gefiltert, dann PLL, dann wieder DDS
Hallo zusammen, könnt Ihr mir bitte ausführlicher beschreiben wie ich vorgehen muss, um das Ziel eines hochauflösenden PWM-Signals hier zu erreichen? Vielen Dank!!
Wie hoch aufgelöst soll das denn sein? Der FPGA löst auf mindestens 10ns genau auf. Wenn du die modulierst, kannst zu z.B. zwischen 50.000 und 49975 hin und herschalten. Um das zu automatisieren, wurde bereits DDS vorgeschlagen, also ein Zähler, der de facto ab und an springt und sich um die Zielfrequenz einpendelt. Da diese Umschaltung schnell passiert und der Motor träge ist, bekommst du die Zwischenstufe der PWM. http://www.96khz.org/oldpages/soundsynthesiswithdds.htm Um das zu verbessern, filtert man einen DDS-Sinus-Wert und nutzt diesen wieder als Takt für eine ganzzahlige DDS. Der Schritt vereinfacht sich durch Nutzung des MSB. Um die Filterung zu optimieren wird man den Wert verrauschen. http://www.96khz.org/oldpages/limitsofdds.htm
:
Bearbeitet durch User
Macht man sowas nicht mit 2 Quarzoszillatoren, einem Mischer und einem Teiler 2:1? Wenn sich die Nennfrequenzen um 100kHz unterscheiden kommen hinten 50kHz mit 50% raus. Den Sweep erzeugt man analog mit einer Kapazitätsdiode. Mouser hat Quarze mit 6.4 und 6.5 MHz oder 8.0, 8.1, 8.9, 9.0, 9.1 MHz.
Bauform B. schrieb: > Macht man sowas nicht mit 2 Quarzoszillatoren, einem Mischer und einem > Teiler 2:1? Wenn sich die Nennfrequenzen um 100kHz unterscheiden kommen > hinten 50kHz mit 50% raus. Den Sweep erzeugt man analog mit einer > Kapazitätsdiode. Mouser hat Quarze mit 6.4 und 6.5 MHz oder 8.0, 8.1, > 8.9, 9.0, 9.1 MHz. nein, so macht man es sicher nicht.
Weil es nicht funktioniert oder weil es sooo letztes Jahrtausend ist?
Jürgen S. schrieb: > Wie hoch aufgelöst soll das denn sein? Der FPGA löst auf mindestens 10ns > genau auf. Wenn du die modulierst, kannst zu z.B. zwischen 50.000 und > 49975 hin und herschalten. Ich müsste in dem Frequenzbereich wirklich jedes einzelne Hz im Sweep abtasten > Um das zu verbessern, filtert man einen DDS-Sinus-Wert und nutzt diesen > wieder als Takt für eine ganzzahlige DDS. Der Schritt vereinfacht sich > durch Nutzung des MSB. Um die Filterung zu optimieren wird man den Wert > verrauschen. Hier hast Du mich abgehängt. Wie komme ich von dem DDS-Sinus-Wert auf mein hochaufgelöstes PWM? In meinem VHDL code verwende ich anstatt des Sinus direkt eine Abfrage beim Phasenaccumulator: <50%: PWM signal high >50%: PWM signal low
Bauform B. schrieb: > Weil es nicht funktioniert oder weil es sooo letztes Jahrtausend ist? Theoretisch ginge es vielleicht sogar Praktisch: man macht es so nicht!
Mike schrieb: > Hier hast Du mich abgehängt. Wie komme ich von dem DDS-Sinus-Wert auf > mein hochaufgelöstes PWM? Weil du einen Sinus sehr gut (u.U. auch analog) filtern kannst und daraus eine sehr fein einstellbare Frequenz bekommst, die dann ihrerseits wieder Basis eines PWM-Taktes ist. Eine andere, rein digitale Lösung wäre es, mit alternativ getakteten Schaltungsteilen zu arbeiten, deren PLL andere Phasen liefern, und dann passend umzuschalten.
Antti L. schrieb: > Bauform B. schrieb: >> Weil es nicht funktioniert oder weil es sooo letztes Jahrtausend ist? > > Theoretisch ginge es vielleicht sogar > Praktisch: man macht es so nicht! Ein Problem dabei sind die Mischprodukte, die sehr gut gefiltert werden müssen, weil diese eben genau wieder Phasenoffsets reinschleppen, bzw noch beinhalten. Wenn man das anlog bauen möchte oder kann, dann wäre eine Strombandführung denkbar, also eine Schaltung, die selbständig zu irgendeinen Zeitpunkt mittels Vorgabe, Integrator und Komparator umschaltet. Dies würde sich dann automatisch auf jeden beliebig feinen Umschaltpunkt einstellen - ungeachtet, einer digitalen Rasterung.
Nur mal zum Verständnis: Ein Signal von ~50 kHz in 1-Hz-Schritten abzufahren, wäre für eine Resonanzsuche gut mit Güten im gleichen Verhältnis, also bis Q = 50.000. Ist das der Zweck der Übung? Wo gibt es solche scharfen Resonanzen? Dann wäre auch die jeweilige Verweildauer der Steps mit zu beachten. Edit: Und nebenbei bemerkt sind wir mit knapp 10^-5 auch im Bereich der Genauigkeit einfacher Quarzoszillatoren.
:
Bearbeitet durch User
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.