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
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
Heißt das ich soll den ICR1 Wert höher setzen? Also auf ICR1 = 0x0400? mfg
wenn der Ausgang bei kleinem Eingangswert reagiert und ab ca 1,2V am Eingang nicht mehr, ja
DIDR0 &= ~(1<<ADC5D); Dieses Bit muss gesetzt und nicht gelöscht werden. mfg.
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
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
Dann ist Dein Messgerät Dein Filter, die Messwerte sind zufällig und bestimmt nicht richtig
Also ich habe noch einen Kondensator 1 microF und einen Wiederstand 10kOhm bin mir jetzt nicht sicher ob das reicht.
Wäre füre meine Zwecke der Fast PWM oder der Phase Correct PWM Mode besser?
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.
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?
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.
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
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.
Ich hab jetzt nochmal ein bissel rumgespielt aber ich bekomme die ausgegebene Spannung nicht über 4V. Und die 200mV unterschied sind auch immernoch vorhanden.
Ich hab auch mal manuell den Wert verstellt aber nie mehr als 4V.
Ohne Oszi wirst du da eh im dunklen Tappen. Versuch mal einen größeren C als Buffer dahinter zu legen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.