mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Sinus mit Atmel


Autor: Michael O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich möchte mit meinem Atmega 88 einen Sinus erzeugen. Dieser sollte 
zwischen 1kHz und 100kHz umschaltbar sein (Oder auch zwei anderen 
Frequenzen). Wichtig ist, dass diese Frequenzen recht genau sind.
Ich hab schon mit PWM und Filtern gearbeitet, Problem hier ist aber, 
dass zwei verschiedene Filter verwendet werden müssen, für die beiden 
Frequenzen und auch die genauigkeit lässt zu wünschen übrig. Auch mit 
R2R hab ich gearbeitet, leider war das aber auch nicht wirklich genau.
Nun hab ich an einen DDS Chip gedacht, aber ist das nicht einwenig 
overskillt für meine Anforderungen?

Würd mich über Hilfe freun.

Grüsse Michi

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Definiere dein ungenau, stimmt die frequenz nicht?

Hast du den einen Quarz für deinen uC spendiert?
Ohne den wird deine Ausgabefrequenz nie genau sein, egal wie du die 
Sinuswelle letztendlich erzeugst.

;-)

Autor: Michael O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Durch die Rundung der Sinustabelle ist er halt nicht besonders genau. 
Auch die Verwendung von unterschiedlichen Filtern gefällt mir nicht.

Ja habe einen 12MHz Quarz dran.

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Nun hab ich an einen DDS Chip gedacht, aber ist das nicht einwenig
>overskillt für meine Anforderungen?

Auf jeden Fall. Hier unter Projekte findest Du einen schönen
Signalgenerator (DDS-Prinzip), der einen Mega8 benutzt.

Autor: guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Elm Chan hat einen DDS Generator mit zwei 16 bit Kanälen, beliebigen 
Mustern per SD Karte und überschaubarer Hardware entworfen.
Evt. kann man da ein paar Ideen aufgreifen und mit einfließen lassen.

Wenn es aber nur ein Sinus sein soll führt ein DDC Chip mit Sicherheit 
schneller zur Lösung.

Autor: Robert L. (manateemoo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
100kHz Grundfrequenz mit einem PWM ist ja schon recht heftig.
Ich würde es mit einem D/A Konverter Chip versuchen z.B. (LTC1661)

Autor: Billy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das würde ich auch machen.
Einfach die Werte vorab berechnen, da kannst du die Genauigkeit ja 
festlegen und dann speicherst du das in einer Tabelle ab.
Wir haben so etwas mal im Studium gemacht um ein elektronisches Klavier 
zu bauen. Hat wunderbar funktioniert.

Autor: Michael O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Zahlreichen Antworten. Hab mich jetzt doch nochmals an die 
PWM Variante rangemacht. Eventuell kann ich die obere Frequenz von 
100kHz noch runternehmen.

In welchem Frequenzbereich kann ich mit der PWM Variante in etwa 
arbeiten?

Habe folgende Präsentation gefunden:
http://www.avr-asm-tutorial.net/avr_de/praesentati...

Hier wird auf Seite 8 mit einem Programm gearbeitet, welches alles 
nötige ausrechnet. Wo krieg ich das Programm her? hat das eventuell 
irgendwer?

Habs leider per google und auf der Page nicht gefunden.

Grüsse Michi

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael O. schrieb:
> Danke für die Zahlreichen Antworten. Hab mich jetzt doch nochmals an die
> PWM Variante rangemacht. Eventuell kann ich die obere Frequenz von
> 100kHz noch runternehmen.

Das muss dann aber deutlich drunter liegen.

> In welchem Frequenzbereich kann ich mit der PWM Variante in etwa
> arbeiten?

rechne nach.
Mit einer 8 Bit PWM kannst du maximal 12  1  8 = 1.5
1.5 Mio mal pro Sekunde einen neuen PWM Wert erzeugen.
Mehr geht nicht, denn der PWM Counter muss von 0 bis 255 durchzählen,
bis ein PWM Zyklus durch ist.

Das bedeutet, dass du bei 100kHz eine Sinusschwingung aus gerade mal 15 
Samples zusammensetzen kannst.
Von deinem gewünschten Sinus wird da nicht mehr viel übrig bleiben.

> Habe folgende Präsentation gefunden:
> http://www.avr-asm-tutorial.net/avr_de/praesentati...
>
> Hier wird auf Seite 8 mit einem Programm gearbeitet, welches alles
> nötige ausrechnet. Wo krieg ich das Programm her? hat das eventuell
> irgendwer?

Hast du dir auch angesehen, mit welcher Frequenz die Demo arbeitet?
In die gleiche Kerbe fällt auch:
> Wir haben so etwas mal im Studium gemacht um ein elektronisches
> Klavier zu bauen. Hat wunderbar funktioniert.

Tonfreuquenzen sind winzig gegen das was du vor hast.
Bei kleinen Frequenzen ist es simpel per DDS eine Signalform zu 
erzeugen. Interessant wird es bei hohen Frequenzen.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:

> rechne nach.
> Mit einer 8 Bit PWM kannst du maximal 12  1  8 = 1.5
> 1.5 Mio mal pro Sekunde einen neuen PWM Wert erzeugen.
> Mehr geht nicht, denn der PWM Counter muss von 0 bis 255 durchzählen,
> bis ein PWM Zyklus durch ist.

Du meinst eher
12 / 1 / 2^8
. Das sind auch gerade mal 46kHz. Das kommt mir schon realistischer vor. 
Nicht umsonst haben gängige DDS ICs 50 oder 100MHz Takt.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simon K. schrieb:

> Du meinst eher
12 / 1 / 2^8
. Das sind auch gerade mal 46kHz.
> Das kommt mir schon realistischer vor.

Drum kam mir die Zahl so hoch vor.
Danke für die Korrektur.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Simon K. schrieb:
>
>> Du meinst eher
12 / 1 / 2^8
. Das sind auch gerade mal 46kHz.
>> Das kommt mir schon realistischer vor.
>
> Drum kam mir die Zahl so hoch vor.
> Danke für die Korrektur.

Keine Ursache, musste aber auch erst mal schmunzeln und nachgucken.

Übrigens: Wenn man einen 20MHz AVR Typ nimmt, dann kommt man schon fast 
auf die doppelte Frequenz bei 8 Bit Auflösung. Alternativ einen der 
Tiny's die eine 64MHz PLL für die Timer eingebaut haben. Wobei dann 
natürlich die Rechenleistung für die DDS selber fehlt.

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Anforderungen an die Rechenleistung für die DDS schleife sind nicht 
so hoch. In ASM sind das etwa 8-12 Zyklen. Auch wenn man den 8 Bit PWM 
mit 64 MHz hat, sind das noch 64 Zyklen bei 16 MHz. Da sind 100 kHz 
theoretisch gerade noch dirn, aber besser wäre da doch ein echter DA 
Wandler oder ein R2R Netzwerk.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Anforderungen an die Rechenleistung hängt stark von der Breite des 
Phasenakkumulators ab, möchte ich behaupten.

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So schlimm ist das mit dem Phasenakkumulator nicht. Ein Byte mehr 
braucht 1 Zykluns mehr. Realistisch sind ohnehin vor allem 24 oder 32 
Bit für den Phasenakkumulator.  Die größere Frage ist da eher ob die 
Sinustabelle 256,512 oder 1024 Einträge hat.

Autor: Stephan M. (stephanm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit einem 32 Bit Phasenakkumulator und einer 512 Byte LUT für den Sinus 
kriegt man bei 12MHz Taktfrequenz 1MS/s aus einem AVR heraus. (1.5MS/s 
wären mit 18MHz Takt auch noch zu machen, wenn der verwendete AVR das 
mitmacht.)

Ich hab hier seit ein paar Tagen einen Testaufbau mit den genannten 
Daten stehen, mit DAC0800 als D/A-Konverter und einem Butterworth-Filter 
7. Ordnung als Filter. Auch ein 250kHz-Signal am Ausgang sieht auf dem 
Oszilloskop noch schön nach Sinus aus.

Bei Interesse am Projekt bitte melden.

Liebe Grüße,

Stephan

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.