Hi
Ja du kannst dir einen DA Wandler aus Widerständen bauen, ist sehr einfach und günstig.
Oder du benutzt einen fertigen DA Wandler, aber meist teuer.
Oder du benutzt nen AVR der schon nen DA Wandler drin hat, z.B. nen Xmega.
Hallo
Ich frage mich, wie man mit möglichst geringem Material- und Pin-bedarf eine Sinuswelle und am besten auch andere Wellenformen mit guter Auflösung erzeugen kann.
Ich konnte im Internet keine für Anfänger wie mich leicht verständlichen Informationen finden.
Mit einem Kondensator allein gehts wohl nicht. Ausserdem könnte man die Wellenform nicht ändern. PWM fällt beim ATMega168, den ich dazu verwende sowieso weg(500Hz).
Vielleicht könnte man verschiedene Pins mit unterschiedlichen Widerständen im Takt ansteuern?
Also:
1 volt Pin, dann 2v, dann 3, 4, 5, und wieder 4, 3, 2, 1?
Oder gehts mit noch weniger Pins?
z.B. Software PWM mit >50 khz?
Oder weniger Rechenintensiv?
Vielen Dank für eure Antworten!
Ein Elektron ist das positivste, was ich mir vorstellen kann.
Hi
Ja du kannst dir einen DA Wandler aus Widerständen bauen, ist sehr einfach und günstig.
Oder du benutzt einen fertigen DA Wandler, aber meist teuer.
Oder du benutzt nen AVR der schon nen DA Wandler drin hat, z.B. nen Xmega.
Mit einen DA-Wandler mit Widerständen, wie ToBiKa empfiehlt, sind sehr
hohe Frequenzen möglich und das System ist auch frei von eventuellen
PWM-Resten. DA-Wandler nach der R2R-Widerstandsmethode brauchen
beispielsweise 8 Pins zur Darstellung von 256 Analogstufen.
In Frequenzumrichtern wird der "Sinus" mit reiner PWM erzeugt, hierbei
erfolgt die Glättung mit der Motorinduktivität. VG Micha
Das passende Verfahren heißt DDS. Für die Ausgabe braucht man da einen Digital-Analogwandler, in irgendeiner Form. Der µC ist dabei schon relativ stark beschäftigt.
Wenn die Frequenz der Sinuswelle nicht so hoch sein muss, kann man auch beim Mega168 einen PWM Ausgang als DA Wandler nutzen. Bei 7 Bit PWM Auflösung kommt man schon auf rund 150 kHz PWM Frequenz (bei 20 MHz takt) und könnte damit auch noch einen Sinus bis etwa 10 kHz darstellen. Am Ausgang braucht man dann als Hardware nur einen Tiefpassfilter - je niedriger die Frequenz, desto einfacher kann der Filter ausfallen.
Besser wird es mit einem externen DA Wandler oder halt einer R2R Widerstandskette, für wenig PINs ggf. auch am SPI Anschluß.
Bei der R2R-Lösung mit SPI zum DA-Wandlerm wäre SPI jedoch wieder
ein Nadelöhr, sicher bei niedrigen Frequenzen kein Problem. Ansonsten
Atmega32 o.ä. und dafür vielleicht 16 Pins vorsehen. Die Parallelausgabe
durfte nicht so zeitkritisch sein und 16 bit sind ja schon eine quasilineare
Auflösung. VG Micha
Hallo!
Vielleicht wäre es am einfachsten den Sinus in einer "lookup table" in Flash ablegen und mit gewünschter Frequenz nur ablesen und per R2R ausgeben.
MfG
So schlimm ist die Begrenzung der Datenrate durch SPI nicht - wenigstens nicht bei einem 8 Bit Wandler. Bei Hardware SPI kommt man bis 2 Zyklen pro Bit - mit einem Bit als Leerlauf (läßt sich nicht oder schwer vermeiden) kommt man da auf 18 Zyklen. Das wären bei 20 MHz Takt schon etwa über 1 MHz Abtastrate für den Ausgang.
So viel schneller kriegt man die DDS Schleife ohnehin nicht wenn die CPU nebenbei noch irgendwas machen soll. Selbst mit 100% Rechenzeit in der DDS Schleife liegt man auch schon bei wenigstens 9 bis 12 Zyklen.
So mal ne ganz andere Idee, wie wäre es z.B. einen XR2206 zu benutzen?! Dann musst dich um kaum noch was kümmern.
.. und nur mit R2R die Frequenz im Verhältnis 1000:1 ändern ...
MfG
Danke für die vielen schnellen Antworten.
Ich möchte unbedingt das Prinzip verstehen und auch nicht neue Bauteile besorgen müssen, deshalb möchte ich es so einfach wie Möglich ohne IC Bauen.
@Besserwessi:
Ich verstehe nicht ganz, wie das geht, Ich habe gedacht, die PWM - Frequenz des ATMega168 sei 500 Hz
Ausserdem möchte ich die Welle auch schnell und unkompliziert ändern können.
Damit ich es richtig verstehe: Ich nehme z.B. nur 4 Pins
Ich möchte die ganzen 40 mA des 168 nutzen , also müssen die Widerstände nach dem Ohmschen Gesetz
Pin 1: 25
Pin 2: 50
Pin 3: 75
Pin 4: 100
betragen. Der Controller macht also:
0 an, warten, 0 aus 1 an, ..., 4 aus 5 an, 5 aus 4 an, ...
Oder gehts effizienter?
Noch eine ganz andere Frage: wenn ich die Widerstände wie oben dimensioniere, fliessen dann, egal welche Last dran hängt, 40 mA?
Und was ist R2R?
Danke
Ein Elektron ist das positivste, was ich mir vorstellen kann.
Lesezeichen