mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Variable Ausgangsspannung über PWM mit ATMega88


Autor: Hubert George (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hy,

ich habe einen ATMega88 und versuche dort über einen Eingang die 
anliegende Spannung auszulesen und über einen Ausgang die Spannung als 
PWM Signal auszugeben. Als Referenz benutze ich die Stromquelle für den 
AVR (5V).
Als einmal Anwendung kann ich eine Spannung ausgeben, doch nich 
verändern.
Ich habe am ADC7 Eingang ein Potentiometer, damit verändere ich die 
Spannung und möchte das die Ausgangsspannung sich dementsprechend auch 
verändert.
Leider ist es mir bis jetzt nicht gelungen.

Denn Code habe ich als Anhang beigefügt.

Ich hoffe jemand von euch kann mir einen Tipp geben wie ich das Problem 
lösen kann.

thx

Autor: Ralle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin.

ICR1 = 0x00FA; // 2 ms period

der MAX-Wert im PWM Mode 14 ist in ICR1 vorgegeben = 250
der AD-Wandler liefert aber max 1023

Ralle

Autor: Hubert George (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heißt das ich soll den ICR1 Wert höher setzen?
Also auf ICR1 = 0x0400?
mfg

Autor: Ralle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn der Ausgang bei kleinem Eingangswert reagiert
und ab ca 1,2V am Eingang nicht mehr, ja

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DIDR0 &= ~(1<<ADC5D);

Dieses Bit muss gesetzt und nicht gelöscht werden.

mfg.

Autor: Hubert George (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thx erstmal das anheben des Wertes ICR1 hat schonmal geholfen nun seh 
ich einen direkten Einfluss des Potentiometers auf die ausgegebene 
Spannung.
Trotzdem habe ich noch ein paar Probleme.
Am Poti. liegen 3V an und ausgeben tut es aber 2,8V, bei allen Werten 
fehlen 200mV kann mir jemand erklären wo die hin sind ;-).
Benötige ich diese Variable überhaupt "DIDR0 &= ~(1<<ADC5D)", es handelt 
sich hier um eine Leiche weil ich den Code aus einem Tut angepast habe.
Außerdem benutze ich ja den ADC7 Eingang, ich weiß nicht inwiefern diese 
Einstellung Auswirkung auf das Programm hat.
thx

Autor: I. L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich vermute mal du wirst deine Ausgangs-PWM über ein RC-Filter 
D/A-wandeln.
Dein Filter bildet natürlich nebs einer integrierenden Funktion auf eine 
spannungsteilende Funktion, da der Xc des C wirksam ist.

Du solltest mal deine Werte bekannt geben, dann kann man helfen.



Gruß Knut

Autor: Hubert George (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe noch keinen RC-Filter angeschlossen ist jetzt direkt vom 
AVR Pin

Autor: Düsendieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann ist Dein Messgerät Dein Filter, die Messwerte sind zufällig und 
bestimmt nicht richtig

Autor: Hubert George (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe noch einen Kondensator 1 microF und einen Wiederstand 
10kOhm bin mir jetzt nicht sicher ob das reicht.

Autor: Hubert George (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wäre füre meine Zwecke der Fast PWM oder der Phase Correct PWM Mode 
besser?

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

Bewertung
0 lesenswert
nicht lesenswert
Ist im Grunde ziemlich egal, denn deine tatsächliche Spannung am Ausgang 
wird in nicht unerheblichem Masse von der Aussenbeschaltung am PWM-Pin 
abhängen.

Aber wenn schon, dann Fast. Damit erreichst du die schnellste 
PWM-Frequenz.


Die bessere Lösung wäre es, wenn du die Ausgangsspannung (nach Filterung 
natürlich) wieder mit einem ADC misst und die PWM entsprechend 
nachstellst. Dann landest du allerdings schon bei einem Regelkreis.

Autor: Hubert George (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ist Fast besser.
Dann hab ich noch überlegt ob es von der Verarbeitung schneller geht 
wenn der ADC im Free Mode läuft, also ständig im Hintergrund ausliest 
und der CPU nur das Register abfragt?

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

Bewertung
0 lesenswert
nicht lesenswert
Was willst du erreichen?
Wie sind deine Umgebungsbedingungen?

Das Wandeln selbst geht auch nicht schneller.

Kein Mensch sagt, dass die Reihenfolge sein muss

 while( 1 )
   Wandlung starten
   Ergebnis abwarten
   Ergebnis holen
   Ergebnis bearbeiten

die Reihenfolge kann ja auch so sein

  while( 1 )
    Ergebnis holen
    Wandlung starten
    Ergebnis bearbeiten

Dann wandelt dein ADC, während du das letzte Ergebnis bearbeitest und 
wenn du wieder zum Punkt kommst, an dem du den ADC befragst, ist der ADC 
mit der nächsten Messung schon wieder fertig, du holst es und startest 
den ADC gleich wieder neu damit er im nächsten Schleifendurchlauf das 
nächste Ergebnis fertig hat.

Autor: Hubert George (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich wollte den AVR vor einer Steuerung hängen, welche sofort und 
genau auf Spannungsänderungen am Signaleingang reagiert. Darum sollte 
die Spannung auch so konstant und genau wie möglich sein.
thx

Autor: Hubert George (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also bis jetzt schwankt die Ausgangsspannung immer sehr stark, bis zu 
300mV aber nur nach unten. Außerdem ist die maximale Spannung die ich 
ausgeben kann 4,5V benötige aber die vollen 5V.

Autor: Rene K. (draconix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach mal nen Bild von deinem Oszi.

Autor: Hubert George (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab leider kein Oszi hab nur ein Multimeter.

Autor: Hubert George (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab jetzt nochmal ein bissel rumgespielt aber ich bekomme die 
ausgegebene Spannung nicht über 4V. Und die 200mV unterschied sind auch 
immernoch vorhanden.

Autor: Hubert George (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab auch mal manuell den Wert verstellt aber nie mehr als 4V.

Autor: Rene K. (draconix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne Oszi wirst du da eh im dunklen Tappen. Versuch mal einen größeren C 
als Buffer dahinter zu legen.

Autor: Hubert George (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab nochmal ein bischen getestet.
Eingang      Ausgang
ab  800mV    + 200mV
ab 1900mV    - 200mV
ab 3000mV    - 300mV
ab 4000mV    stand 4V

schon eigenartig

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.