Forum: Mikrocontroller und Digitale Elektronik Verständnissfrage PWM ATMEGA 16


von intenso (Gast)


Lesenswert?

Guten Nabend zusammen,

ich arbeite mich gerade durch das AVR-GCC-Tutorial und bin nun bei PWM 
angekommen.

Habe die Vorgehensweise soweit fast ganz verstanden und folgendes 
Programm geschrieben:
1
int main(void){
2
DDRD = (1<<PD5); // OCIA setzen
3
4
TCCR1A =  (1<<COM1A1) | (1<<WGM11);  //9Bit PWM & nicht invertierende PWM
5
TCCR1B =  (1<<WGM13) | (1<<WGM12) | (1<<CS10)); // 10BIT PWM und CK Takt
6
ICR1 = 0x6FFF; //Endwert
7
8
OCR1A = 0x3FFF; //Zähler
9
10
while(1)
11
{
12
}
13
14
return 0;
15
}

Soweit ist doch das Programm ok oder?

Nun meine Fragen:

Wo entnehme ich das Spannungssignal?
Denn ich möchte gerne einen 5V DC Motor über die PWM steuern.
Wo müsste ich den Spannungswert abnehmen?

Die PWM Frequenz steuer ich über den CK Takt?
Also Motor schneller und langsamer drehen?

Was passiert wenn der OCR1A Wert erreicht wird?
Wird dann wieder auf 0 Gezählt und wenn dieser wieder auf 0 ist wieder 
hoch bis Endwert?

Wenn ja wofür musste ich dann ICR1 definieren?

Hoffe ihr könnt mir weiter helfen.

von Thomas K. (thomas_k39)


Lesenswert?

Hallo,

So wie Du den Chip konfigurierst, zählt der Timer/Counter 1 mit dem 
CPU-Takt hoch von 0 bis 0x6FFF (dem Wert in ICR1). Danach beginnt er 
wieder bei 0.

Die PWM wird mit dem OC1A an Port D5 generiert. Und zwar wird der 
Ausgang auf high (~5V) geschaltet, wenn der Zähler bei 0 beginnt. Sobald 
der Zähler den Wert im OCR1A erreicht, wird der Ausgang auf low (~0V) 
geschaltet.

Die Steuerung des Motors erreichst Du über das Ändern des Wertes im 
OCR1A. Je kleiner der Wert ist, desto länger ist der Ausgang PD5 auf 
low. Je nach Schaltung dahinter (dreht der Motor, wenn der Ausgang auf 
high oder low ist?), desto schneller/langsamer wird er.

Thomas

von intenso (Gast)


Lesenswert?

Hallo,

vielen Dank für die Antwort.

Nun habe ich noch eine Frage.

Habe mir einen einfachen 5V Gleichstrom Motor gekauft.

Aber wie kann ich diesen nun mit PWM steuern? Da dreht sich nicht. Habe 
schon andere Taktfrequenzen getestet usw.

Muss ich eine Externe Schaltung aufbauen mit Transistor und Co?

Dachte eigentlich das würde so gehen.

von Karl H. (kbuchegg)


Lesenswert?

intenso schrieb:

> Aber wie kann ich diesen nun mit PWM steuern? Da dreht sich nicht. Habe
> schon andere Taktfrequenzen getestet usw.

Wenn du den Motor einfach so an den Pin anhängst, wird sich da auch 
nichts tun. Die 'Spannung' ist eine Sache. Aber irgendwo muss ja auch 
der Strom herkommen.

Häng statt dem Motor mal eine LED (samt Vorwiderstand) an den OCR Pin. 
An der Helligkeit der LED kannst du feststellen, ob deine PWM überhaupt 
funktioniert.

> Muss ich eine Externe Schaltung aufbauen mit Transistor und Co?

Für den Motor:
Hängt zwar vom Motor ab. Da es aber unwahrscheinlich ist, dass du einen 
Wald und Wiesen Motor hast, der mit 10mA auskommt wirst du wohl ober 
übel einen Motortreiber brauchen.

> Dachte eigentlich das würde so gehen.
Im Prinzip kannst du auch einen LKW mit der blossen Hand zum Radwechsel 
anheben. Die 40 Zentimeter hochstemmen sind ja bei der 'Auslegung' 
deiner Arme kein Problem.
Wo liegt hier wohl der Denkfehler?

(Wie weit du etwas mit der Hand aus physikalischen Gründen hochheben 
kannst, ist eine Sache. 40 Zentimeter ist kein Problem, 3 Meter wären 
ein Problem. Aber ob du auch die Kraft dazu hast, ist eine andere Sache. 
Ohne Treiber [sprich Wagenheber], wird das wohl eher nichts werden)

von intenso (Gast)


Lesenswert?

Hallo,

du hast absolut Recht.

Habe garnicht an dem Strom gedacht.

Wenn ich den Motor nur an 5V vom µC anschließe sehe ich wie die LED am 
Pollinboard dunkel wird, da der Motor soviel Strom zieht und Spannung 
einbricht.

Habe eine LED + Vorwiderstand an den Ausgang angeschlossen.
Über den unterschiedlichen Zähler (OCR1A) sehe ich wie sich die 
Taktfrequenz der LED verändert.

Somit funktioniert die PWM.

Was ich nun aber nicht verstehe ist, dass ich ja anscheinden durch den 
ORCIA Wert auch den Spannungswert ändern kann richtig?

Wenn ich den Zählerwert reduziere, fängt die LED an schneller zu 
blinken, was ja auch richtig ist, da der Zählerwert immer wieder 
schneller erreicht wird. Die Helligkeit ändert sich auch. Wenn ich nun 
aber die Taktfrequenz änder, ändert sich auch wieder die Helligkeit der 
LED. Also so richtig dimmen lässt sich die LED nicht was?

Denn wenn ich das Tein zu Taus Verhältniss verändere erhalte ich doch 
auch einen unterschiedlichen Mittelwert und somit eigentlich eine 
Helligkeitveränderung oder?

Oder liegt das an der LED das dich nicht gut dimmbar ist?

von Thomas K. (thomas_k39)


Lesenswert?

Hallo,

Also eine Leistungsstufe (Transistor mit Basiswiderstand) brauchst Du 
schon. Ich kenne Deinen Motor nicht, aber die Kleinspannungsmotoren die 
ich gefunden habe brauchen schon im Leerlauf 80mA und mehr - die 
ATmega16 kann aber höchstens 20mA liefern.

Ich hätte die Schaltung überschlagsmässig etwa so dimensioiert:

Basiswiderstand 470 Ohm, BC337 (verträgt bis 800mA), Motor mit 
Freilaufdiode zwischen +5V und Kollektor.

Thomas

von Thomas K. (thomas_k39)


Lesenswert?

Hmm, also wenn Du die LED blinken sehen kannst, stimmt irgend etwas mit 
Deinem Aufbau noch nicht. Schon bei einer Taktfrequenz von 1MHz sollte 
die LED mehr als 30 Mal pro Sekunde ein- und ausgeschaltet werden...

von Karl H. (kbuchegg)


Lesenswert?

intenso schrieb:

> Wenn ich den Zählerwert reduziere, fängt die LED an schneller zu
> blinken, was ja auch richtig ist

Nein.
Ist falsch.
Das ist dann keine PWM.

Bei einer PWM bleibt die Blinkfrequenz gleich.
Ledigliche das Verhältnis von Ein zu Aus-Zeit verändert sich.

> Was ich nun aber nicht verstehe ist, dass ich ja anscheinden
> durch den ORCIA Wert auch den Spannungswert ändern kann richtig?
Falsch.
Du hast ständig 5V Pulse. Egal wie deine PWM eingestellt ist. Die 
Spannung ist gleich. Lediglich das zeitliche Mittel verändert sich durch 
die unterschiedlichen Verhältnisse von Ein zu Aus.


> Oder liegt das an der LED das dich nicht gut dimmbar ist?
Ganz im Gegentum.
Eine LED funktioniert ausgezeichnet.

von intenso (Gast)


Lesenswert?

Im Prinzip schon,

aber wenn ich eine sehr geringe Taktfrequenz nehme und einen relativ 
hohen Zähler Wert (kleiner als das permanent 5V anliegen) einstelle, 
kann man durchaus die LED blinken sehen.

von intenso (Gast)


Lesenswert?

Habe gerade erst den Bericht von Herrn Buchegger gelesen,

werde noch mal meinen Aufbau prüfen

von intenso (Gast)


Lesenswert?

So ich glaube ich muss mich besser ausdrücken.

Tut mir leid wenn es Missverständnisse gab:

Also wenn ich nur den Wert im Register OCR1A ändere, leuchtet die LED 
durchgehend und verändert nur ihre Leuchtkraft.

Was ich vorhin parallel gemacht hatte war, das ich die Taktfrequenz 
(CS10-CS12) geändert hatte.

Dadurch kam es glaub ich zum Missverständnis durch meine Person.

Werde mir gleich mal eine Leistungsstufe überlegen und melde mich morgen 
wieder.

Vielen Dank für die toll Unterstützung.

Gruß

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.