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


von Hubert George (Gast)


Angehängte Dateien:

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

von Ralle (Gast)


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

von Hubert George (Gast)


Lesenswert?

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

von Ralle (Gast)


Lesenswert?

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

von Thomas E. (thomase)


Lesenswert?

DIDR0 &= ~(1<<ADC5D);

Dieses Bit muss gesetzt und nicht gelöscht werden.

mfg.

von Hubert George (Gast)


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

von I. L. (Gast)


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

von Hubert George (Gast)


Lesenswert?

Also ich habe noch keinen RC-Filter angeschlossen ist jetzt direkt vom 
AVR Pin

von Düsendieb (Gast)


Lesenswert?

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

von Hubert George (Gast)


Lesenswert?

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

von Hubert George (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


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.

von Hubert George (Gast)


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?

von Karl H. (kbuchegg)


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.

von Hubert George (Gast)


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

von Hubert George (Gast)


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.

von Rene K. (draconix)


Lesenswert?

Mach mal nen Bild von deinem Oszi.

von Hubert George (Gast)


Lesenswert?

Hab leider kein Oszi hab nur ein Multimeter.

von Hubert George (Gast)


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.

von Hubert George (Gast)


Lesenswert?

Ich hab auch mal manuell den Wert verstellt aber nie mehr als 4V.

von Rene K. (draconix)


Lesenswert?

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

von Hubert George (Gast)


Lesenswert?

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

schon eigenartig

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.