Hallo zusammen,
ich habe eine Anwendung, bei der ich Signale taktsynchron mit einer
Frequenz von 10Mhz rausgeben muss. Da ja während der Ausgabesignale
Berechnungen ausgeführt werden müssen, stellt sich die Frage, welchen
Clock Takt ein Mikrocontroller haben muss, damit er die 10Mhz
Ausgabefrequenz stabil realisieren kann. Die Berechnungen Beschränken
sich auf Grundrechenarten und ein paar sin-Terme. Kann man das
abschätzen?
VG
Jo
Kommt ganz auf deinen Controller an. Hast du dich da schon entschieden?
Ich denke, du wirst hier relativ hoch arbeiten müssen, da Berechnungen
und vorallem Sinus Berechnungen (Vermute mal, das meinst du mit
sin-terme) schon einiges an Zeit brauchen.
Müssen die Berechnungen denn zwingend vor der nächsten Ausgabe fertig
sein? Falls ja, viel Glück.
Wenn du ein bisschen Assembler kannst weisst du, wie so eine Sinus
Rechnung aussehen kann. Nicht ganz so einfach diese dann mit so wenig
Code zu realisieren, dass das Zeitlich da noch passt..
Okay, also meinst du man sollte gleich einen FPGA nutzen? Ich hatte noch
keinen speziellen µC im Blick - aber wenn du meinst, dass es nicht
reichen wird...die Berechnungen müssen vor der Ausgabe fertig sein, ja.
Ist schwerig zu sagen. Ich kenne mich damit wohl etwas zu wenig aus, um
eine genaue Analyse liefern zu können.
Was ich dir mal beschreiben kann ist wie lange ein PIC16F887 für den
Wechsel eines Bits benötigt. (Folgender ist alles aus dem Kopf und 2
Lehrjahre zurück, keine Garantie dass noch alles 100 % stimmt):
Davon ausgehend, dass der PIC 8 MHz Systemtakt hätte, würde er für den
Befehl:
1
bsf Bit
einen Maschinenzyklus benötigen. Dieser berechnet sich mit:
1 / (8 MHz / 4) = 500 nS.
Und schon siehst du, dass bei einem Systemtakt von 8 MHz höchstens alle
500 nS ein Bitwechsel möglich wäre, was einer Frequenz von 2 MHz
entspricht.
Berechnet man für dein Vorhaben alles auf die genau selbe Art,
bräuchtest du alleine um den Zustand an einem Ausgangspin zu wechseln
einen Takt von 40 MHz. Willst du dazwischen noch Float-Rechnungen
machen, wird das nichts mehr.
Jo schrieb:> bei der ich Signale taktsynchron mit einer> Frequenz von 10Mhz rausgeben muss.
Was sind dass den für Signale? Ist das ein ganz normaler Digitaler
Ausgang, an welchem du den Zustand ändern willst?
In meinen Augen ein komplizierteres Problem, aber wie gesagt, keine
Garantie für die Angaben. Am besten wartest du noch ein wenig bis dir
jemand aus dem Forum eventuell das etwas genauer Erklären kann oder
jemand andere Lösungsvorschläge bringt.
Hoffe konnte dir trotzdem ein wenig helfen
Gruss
Handelt es sich bei deinen 10MHz nur um ein normales Rechtecksignal oder
soll das ein PWM-Signal werden?
Ansonsten kann man das schlecht abschätzen, wenn man deine Formel nicht
kennt. Aber mehrere Sinus Funktionen klingt schon mal nach viel
Rechenaufwand (bzw. suchen in Lookup-Tables). Hier kommt es dann drauf
an, wie viele Rechenschritte deine Formel in gekürzter Form noch hat.
Also wie viele Additionen, Subtraktionen und Multiplikationen. Bei
Divisionen wird es auch wieder knifflig, die dauern auch ewig. Soll das
ganze auch noch als Float berechnet werden, dann braucht dein µC auch
noch ein FPU, sonst wirst du wohl eine µC mit >1GHz brauchen (nur
geraten, kenne die Formel ja nicht)
Ja vielen Dank! Ich habe schon damit gerechnet, dass es zeitkritisch
ist. Ich möchte auch analoge Signale über einen D/A rausgeben. Die
schnellsten Entwicklerboards liegen bei 200MHz oder? Das wird dann
allerdings ziemlich eng...Vielleicht gibt es ja noch weitere Meinungen
dazu? Wie sieht es zeitlich gesehen mit if Abfragen aus? Eventuell
könnte ich vorher ein paar Rechnungen ausführen lassen und später immer
nur auf diese Ergebnisse zurückgreifen über if Abfragen. Wenn ein
Vergleich von zwei Werten dann auch wieder so viel Zeit in Anspruch
nimmt, habe ich nichts gewonnen...
Jo schrieb:> Ich möchte auch analoge Signale über einen D/A rausgeben.
Allerspätestens hier wirst du an die Grenzen der Möglichkeiten kommen.
Kommt ganz darauf an, mit welchem Compiler du arbeitest. Ich würde
schätzen, eine IF Abfrage braucht auch schnell man an die 6-7
Maschinenzyklen. Kannst dir das ja wieder selbst ausrechnen, die Links
die Ert gepostet hat dürften dir dabei helfen... vorraussetzung dafür
ist natürlich, dass du Assembler kennst.
Jo schrieb:> Hallo zusammen,>> ich habe eine Anwendung, bei der ich Signale taktsynchron mit einer> Frequenz von 10Mhz rausgeben muss.
Was für Signale? Wie viele Signale?
> Da ja während der Ausgabesignale> Berechnungen ausgeführt werden müssen, stellt sich die Frage, welchen> Clock Takt ein Mikrocontroller haben muss, damit er die 10Mhz> Ausgabefrequenz stabil realisieren kann.
Sehr viele Controller haben DMA d.h. wenn das Signal nebenher/vorher
berechnet werden kann, kann die DMA-Einheit die Daten nebenher passend
zum Takt irgendwohin schaufeln und das meistens deutlich schneller als
die CPU im Controller...
> Die Berechnungen Beschränken> sich auf Grundrechenarten und ein paar sin-Terme. Kann man das> abschätzen?
Der Sin könnte, je nach Anforderungen, auch aus einer Tabelle kommen.
Damit könnte sich die Berechnung deutlich beschleunigen lassen.
Falls die Tabellen zu groß für das interne SRAM gängiger Controller
werden, was sich ohne nähere Angaben wiederum nicht genau sagen lässt,
müsste was anderes überlegt werden.
Tabellen im Flash:
Die einzigen, mir bekannten, Controller, die auch bei vollem Takt (100
MHz) ohne Waitstates auf ihren Flashspeicher zugreifen können, wären die
RX von Renesas.
Bei Tabellen in einem externen Speicher (SRAM, SDRAM etc.) wäre die
Controller-Auswahl wieder riesig.