Variable Ausgangsspannung über PWM mit ATMega88

Gast #2003345
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
Angehängte Dateien:
Gast #2003671
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
Gast #2003688
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
#2008882
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.
Gast #2008970
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?
#2009184
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.
Gast #2010735
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
Gast #2010742
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren