mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenzerzeugung ohne DDS Overkill??


Autor: Boris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich zerbrech mir hier gerade seit Stunden den Kopf...

ich will für eine luxuriöse Schrittmotor-Karte einen einstellbaren 
Reckteck erzeugen, und zwar digital in diskreten Schritten. Soll 
heissen, ich will mit einem 8-bit Wert, eine Frequenz von ca. 5KHz bis 
etwa 50kHz möglichst linear einstellen können.

Alle bisherigen Versuche laufen darauf hinaus, dass gegen oberes oder 
unteres Ende hin, die Stufen astronomische Weiten annehemen.

Hat mir jemand da vielleicht einen Tip?

BTW, ich hab in der schaltung noch ein CPLD mit hunderten freien Gates, 
wäre schön wenn sich sowas mit Gattern lösen ließe.

Nur falls jemand was weis...

Danke
Boris

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 2Mhz gibt es alle 40 taktzyklen einen interrupt. Jetzt nur noch die 
int´s
zählen und mit dem 8bit wert vergleichen. Zuvor sollte man den 
int-counter
aber noch auf 8eineb  bit gerechten wert runterrechnen. In ASM ist dies 
mit
einer risc cpu mög.

Der weg über einen CPLD ist def. falsch!

Autor: +++ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es, wenn du inden CPLD einen Zähler und ein Vergleichregister 
programmierst, das bei Gleichheit den Zähler auf Null zurücksetzt und 
dieser dann von neuem beginnt hochzuzählen? Wenn du die Rücksetzung 
synchron zum (System-)Takt machst, kannst du das Rücksetzsignal als 
neues Taktsignal verwenden. Eine Veränderung des Vergleichswertes ändert 
somit den Takt. Das müsste das sein, was du suchst.

@gast: Das Vergleichen alleine bringt es nicht, der Zähler muß auch 
zurückgesetzt werden.

Autor: Boris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@+++: dann hab ich aber wieder das gleiche Problem: ich teile den Takt 
effektiv durch zwei, drei, vier etc... 3,5 wär da nicht drin.

Die DDS chips von analog können das doch auch, ich kapier einfach nicht, 
wie die des machen!

Wie macht man aus einem 1MHz Zähler einen, der mit 666KHz zählt?
Da liegt für mich der Hund begraben!

@Gast: ich will aber nicht noch nen µc aufs Board knalen, was 
wahrscheinlich nichtmal mehr draufpasst.
Wieso sollte ein CPLD der falsche Weg sein?

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wie macht man aus einem 1MHz Zähler einen, der mit 666KHz zählt?
>Da liegt für mich der Hund begraben!

Was spricht gegen +++ Aussage? Erhoehe einfach den Zähler von 8Bit auf 
32Bit.

Autor: Wolfgang Horn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, Boris,


Du: "Wie macht man aus einem 1MHz Zähler einen, der mit 666KHz zählt?
Da liegt für mich der Hund begraben!"

Geht auch nicht.
Einen einigermaßen schönen Sinus bekommst du ("du" allgemein gemeint) 
nur, wenn dessen Frequen sehr klein ist gegenüber dem Systemtakt, wenn 
du viele Punkte pro Schwingung hast.
Ein Signal bei halbem Systemtakt besteht dann nur noch aus zwei Punkten 
je 360 Grad und ist möglicherweise Gleichspannung, bei 1/3 Systemtakt 
stottert dein Sinus schon entsetzlich krumm.

Eine Lösung dürfte weniger in vielen Gattern zu finden sein als in hohem 
Systemtakt.


Ciao
Wolfgang Horn

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach doch die DDS im CPLD oder im Controller selber. Bei z.B. 62,5 KHz 
fester Abtastrate und 16 Bit Zähler kommst Du auf knapp 1 Hz Auflösung. 
Die DDS wird einfach realisiert, indem zu jedem Abtastzeitpunkt ein 
fester Wert zu einem Register dazuaddiert wird. Die resuliterende 
Frequenz ergibt sch dann zu:

Abtastfrequenz * Addierwert / Maximaler Zählwert des Registers

Und mit dem Wert des Registers kann man auch über eine einfache Tabelle 
andere Kurvenformen erzeugen.

Gruß Jörg

Autor: Heinz Kleister (heinzkleister)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte lesen!! Er will eine Rechteckspannung, da ist DDS definitiv ein 
Overkill

Autor: Zip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fuer ein Rechtecksignal ist ein genügend grosser Zähler an einer 
genügend grossen Frequenz Vorbedingung. Ein CPLD kann das. Wenn man's 
gerne dikret macht nimmt man 74HC590, counter mit Latch. Da klemmt man 
den kaskadierbaren Carry an den Load und er beginnt von Neuem.

Z

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Boris

>ich will für eine luxuriöse Schrittmotor-Karte einen einstellbaren
>Reckteck erzeugen, und zwar digital in diskreten Schritten. Soll
>heissen, ich will mit einem 8-bit Wert, eine Frequenz von ca. 5KHz bis
>etwa 50kHz möglichst linear einstellen können.

>BTW, ich hab in der schaltung noch ein CPLD mit hunderten freien Gates,
>wäre schön wenn sich sowas mit Gattern lösen ließe.

Mach den DDS im CPLD. Ist einfach ein 16(32) Bit Addierer + Register. 
Das MSB ist dein Takt. Bei 10 MHz Systemtakt hat dein 50 kHz Takt einen 
systematischn Jitter von 1/200 Periode. Damit kannst du sicher leben.
Been there, done that.

@gast (Gast)

>Der weg über einen CPLD ist def. falsch!

Nööö.

>Eine Lösung dürfte weniger in vielen Gattern zu finden sein als in hohem
>Systemtakt.

Genau!

MfG
Falk

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Boris wrote:

> @Gast: ich will aber nicht noch nen µc aufs Board knalen, was
> wahrscheinlich nichtmal mehr draufpasst.

Puh, da muß aber das Board wirklich voll sein, wenn da nicht mal mehr 
ein ATtiny25 im SO-8 draufpaßt.

Mit 8..64Mhz interner Timertakt sollten die 50kHz auch fein genug 
auflösbar sein.

Anbindung dann über SPI oder I2C.


Peter

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein bit-rate-multiplier ist das richtige für den Zweck.
TTL Standard 7497 macht 64 gleiche Stufen mit n/64 der Taktfrequenz
http://pdf1.alldatasheet.com/datasheet-pdf/view/27...
ein gewaltiger Jitter, aber dem Schrittmotor sollte das egal sein.

Autor: +++ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Die DDS chips von analog können das doch auch, ich kapier einfach 
nicht,
wie die des machen!"
Ich weiß nicht von welcher (Preis-)Klasse von DDS-ICs wir sprechen, aber 
einige haben eine PLL mit drin, die den Systemtakt damit hochsetzen und 
dann durch teilen fast beliebige Verhältnisse einstellen können.
Eine andere Möglichkeit ist es durch Logik nur einzelne Takte ausfallen 
zu lassen. Das wäre aber sehr unsauber.

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den halben DDS kannst du weglassen, das Sinus-Rom und den DA-Wandler. Es 
sind wirklich nur der Addierer und Zwiscenspeicher nötig, wie Joerg und 
Falk geschrieben haben. Das höchstwertige Bit ist dein Ausgangssignal.

Bis 50 kHz geht das auch noch in TTL-Technik mit Volladdierern und 
D-Flipflops, aber ein Tiny oder ähnliches braucht deutlich weniger 
Platz. Auch ein Addierer im CPLD ist möglich. Je mehr Bit desto größer 
die Frequnezauflösung.

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry wenn ich blöd frage, aber dds ist doch sowas von simpel zu 
realisieren.
ich versteh die ganze aufregung darum nicht. egal ob cpld (DAS wäre 
overkill) oder per SW. man braucht doch nur einen addierer (und einen 
timer-interrupt). dann hat man direkt einen sägezahn. mit einer 
if-abfrage einer schiebe-operation macht man daraus einen rechteck. mit 
der selben abfrage und ein bischen arithmetik (addition, subtraktion, 
und einer schiebe-operation) macht man einen dreieck daraus. für sinus 
benötigt man noch eine tabelle. wo ist das problem ?!

gruß
rene

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Also linear geht erstmal auf digitaler Basis überhauptnicht. Es wird 
immer eine Auflösung innerhalb einer Schrittgrösse geben.
Aber mal so als Vorschlag, einen kleinen Atmel mit 16 Bit Timer nehmen 
und in CTC-Mode mit Toggelausgabe laufen lassen. Bei 8MHz Takt und einem 
Ladewert von 80 hst du genau 50KHz. 81 erzeugt dann einen Takt von 
49,38KHz. Die Auflösung nimmt in Richtung kleinere Freq. dann noch 
erheblich zu, da musst du halt jemanden rechnen lassen. Mit 16Bit @8MHz 
kommst du übrigens bis ca.122Hz runter, bei 8 Bit kommst du nur bis 
ca.15KHz. Sollte das für dich nicht reichen?

Viel Erfolg, Uwe

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier "mein erster DDS" mit 4* 74F382 4Bit-Addierern und 2* 74F374 
8-Bit-Registern. Eigentlich sollte noch ein lookahead-carrygenerator 
74F182 das ganze beschleunigen, war aber schwer beschaffbar. Das war 
lange vor AD9835 und ähnlichem, ca. 1988 oder 89. Das MSB als Ausgang 
reicht, ein Sägezahn mit Vergleicher bringt keine Verbesserung.

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Uwe

>Also linear geht erstmal auf digitaler Basis überhauptnicht. Es wird
>immer eine Auflösung innerhalb einer Schrittgrösse geben.

[ ]  Du kennst den Unterschied zwischen linear und diskret.

>Aber mal so als Vorschlag, einen kleinen Atmel mit 16 Bit Timer nehmen
>und in CTC-Mode mit Toggelausgabe laufen lassen. Bei 8MHz Takt und einem
>Ladewert von 80 hst du genau 50KHz. 81 erzeugt dann einen Takt von
>49,38KHz. Die Auflösung nimmt in Richtung kleinere Freq. dann noch
>erheblich zu, da musst du halt jemanden rechnen lassen. Mit 16Bit @8MHz

Ein 16 Bit DDS Zähler hat bei 8 Mhz eine Auflösung von 122 Hz über den 
gesammten Frequnzbereich. Mit 24Bit sind es schon ~0,5 Hz.

MfG
Falk

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.