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
intmain(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
return0;
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.
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
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.
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)
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?
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
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...
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.
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.
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ß