Guten Tag, ich mache gerade meine ersten Versuche mit den Atmel Mikrocontrollern und arbeite mit dem STK500 und dem AVR Studio. Zu Beginn habe ich erst mal ein paar LED's eingeschaltet, dann ein Blinklicht erzeugt und fange nun an mich mit den Timern zu beschäftigen. Mit dem Timer1 habe ich schon geschafft ein CTC-Interrupt zu erzeugen. Nun möchte ich ein PWM Signal an PORTB PIN1 zu erzeugen. Leider komm ich da seit Gestern nicht weiter und hoffe das mit jemand helfen kann. Laut Datenblatt des Attiny 25 habe ich die Möglichkeit mit dem Timer 1 am PinB1 und am PinB4 ein PWM signal zu erzeugen. "Auszug Datenblatt Seite 90" >When the PWM mode is selected, Timer/Counter1 and the Output Compare >Register C -OCR1C form a dual 8-bit, free-running and glitch-free PWM >generator with outputs on thePB1(OC1A) and PB4(OC1B) pins and inverted >outputs on pins PB0(OC1A) and PB3(OC1B). Nun habe ich die Register folgendermaßen gesetzt, um ein PWM am PinB1 mit 500kHz zu erzeugen. DDRB |= (1 << PB1); TCCR1 |= ((1 << PWM1A) | (1 << CS10) | (1 << COM1A1) > (1 << COM1A0)); OCR1C = 127; Leider tut sich am PinB1 gar nichts. Kann mir jemand erklären was ich falsch mache? Vielen Dank!
> TCCR1 |= ((1 << PWM1A) | (1 << CS10) | (1 << COM1A1) > (1 << COM1A0));
Na, da stimmt hinten aber was nicht... Ist das wirklich genau Dein
Original-Code?
Oh, so hat ich es auch im Original Code stehen. Hab es jetzt in TCCR1 |= ((1 << PWM1A) | (1 << CS10) | (1 << COM1A1) | (1 << COM1A0)); geändert. Läuft aber auch so noch nicht.
DDRB = (1<<PB1); //OCOB als Ausgang //Timer/Counter Control Register A //Fast PWM, Clear OC0B on Compare Match, set OC0B at BOTTOM TCCR0A = (1<<COM0B1) | (1<<WGM01) | (1<<WGM00); //Timer/Counter Control Register B TCCR0B = (1<<CS01); //8er Prescaler //Output Compare Register B (Weil PB1, OC0B benutzt wird) OCR0B = 0x7F; Edit: Hoppala, es ging dir ja um 16Bit PWM...
Dein initialer Code ist so schlecht nicht, aber du musst OCR1A noch einen Wert zwischen 1 und 127 zuweisen. Fang erstmal mit 63 an, das liegt in der Mitte, sodass das Tastverhältnis 1:1 sein sollte.
Tim T. wrote:
> Edit: Hoppala, es ging dir ja um 16Bit PWM...
Kannst ja mal versuchen, mit nem Tiny25 ne 16-Bit-Hardware-PWM
hinzukriegen... Wird schwierig!
Danke für die Hilfe. Es lag am OCR1A Register, das war 0 und daher kein PWM zu sehen. Nun hab ich noch ne Frage. Wenn ich nen Motor über PWM in der Geschwindigkeit regeln will(natürlich über nen Treiber), woher was ich welche PWM Frequenz dafür geeignet ist. Hab noch nen Motor rumfliegen aber kein Datenblat dazu. Werd einfach mal ein wenig damit rumprobieren, aber vielleicht hab ihr da ein paar Richtwerte für mich.
Johannes M. wrote: > Tim T. wrote: >> Edit: Hoppala, es ging dir ja um 16Bit PWM... > Kannst ja mal versuchen, mit nem Tiny25 ne 16-Bit-Hardware-PWM > hinzukriegen... Wird schwierig! Oops, stimmt ja auch, der hat ja nur 2 8er. Hatte TCCR1 jetzt mit 16Bit gleichgesetzt...
Sieh einfach zu das du über dem hörbaren Bereich (bei mir etwa 12 kHz) bist. Im phase correct PWM mode bei 8 MHz intern OC ohne Prescaler liegst du bei etwa 15,7 kHz PWM Frequenz.
Tim T. wrote: > Im phase correct PWM mode bei 8 MHz intern OC ohne Prescaler liegst du > bei etwa 15,7 kHz PWM Frequenz. Guck dir doch bitte wenigstens den Controller erstmal an, bevor du dich zu solchen Aussagen hinreißen lässt. Erstens hat der ATtiny25 gar kein phasenrichtiges PWM, und zweitens kann man bei ihm den Timer aus einem via PLL gesteuertem Taktvervielfacher treiben, sodass sich viel größere PWM-Frequenzen ermöglichen lassen.
Jörg Wunsch wrote: > Tim T. wrote: > >> Im phase correct PWM mode bei 8 MHz intern OC ohne Prescaler liegst du >> bei etwa 15,7 kHz PWM Frequenz. > > Guck dir doch bitte wenigstens den Controller erstmal an, bevor du > dich zu solchen Aussagen hinreißen lässt. Erstens hat der ATtiny25 > gar kein phasenrichtiges PWM, und zweitens kann man bei ihm den Timer > aus einem via PLL gesteuertem Taktvervielfacher treiben, sodass sich > viel größere PWM-Frequenzen ermöglichen lassen. Datenblatt unter http://www.atmel.com/dyn/resources/prod_documents/doc2586.pdf Seite 77 bzw. 82. PS: Es geht freundlicher... PPS: Es liegt ein solcher hinten links auf meinem Schreibtisch, allerdings noch verfused.
Tim T. wrote: > Datenblatt unter > http://www.atmel.com/dyn/resources/prod_documents/doc2586.pdf > Seite 77 bzw. 82. OK, ich hatte mir nur den Timer 1 angeguckt, von dem hier ja die Rede war. > PS: Es geht freundlicher... Kritik angenommen.
Welche PWM-Frequenz sinnvoll und machbar ist, hängt vom Motor und auch
vom Treiber ab. Generell kann man sagen: Je höher die Schaltfrequenz,
desto geringer die Stromwelligkeit und damit auch die
Drehmomentwelligkeit und die Geräuschentwicklung. Allerdings gehen bei
höheren Schaltfrequenzen auch die Schaltverluste rapide nach oben,
weshalb bei höheren Betriebsströmen eher kleinere Schaltfrequenzen
gewählt werden sollten, um den Motortreiber nicht abrauchen zu lassen.
Man muss einen Kompromiss machen. Bei kleinen Modellbaumotörchen mit
Betriebsströmen im Bereich weniger 100 mA kannste aber i.d.R. mit der
Schaltfrequenz durchaus in den Bereich jenseits von 20 kHz, wenn der
Treiber das mitmacht.
@Tim:
> PS: Es geht freundlicher...
Ich finde Jörgs Antwort in Anbetracht der Tatsache, dass Du schon
zweimal nen ziemlichen Bock geschossen hast, weil Du Dir den µC bzw.
das dazugehörige Datenblatt offensichtlich tatsächlich nicht richtig
angesehen hast, überhaupt nicht sonderlich unfreundlich...
Jörg Wunsch wrote: > OK, ich hatte mir nur den Timer 1 angeguckt, von dem hier ja die > Rede war. Ok, ich hatte in meinem ersten Post alles beschrieben wie man den Timer0 nutzen kann, allerdings im Beispiel dort noch mit Fast PWM und nem 8er Prescaler. Finde deine Rückmeldung aber sehr positiv. Ich kenn das ja selber wenn man jemandem was um die Ohren haut das dann doch nicht so ganz stimmt^^
Johannes M. wrote: > @Tim: >> PS: Es geht freundlicher... > Ich finde Jörgs Antwort in Anbetracht der Tatsache, dass Du schon > zweimal nen ziemlichen Bock geschossen hast, weil Du Dir den µC bzw. > das dazugehörige Datenblatt offensichtlich tatsächlich nicht richtig > angesehen hast, überhaupt nicht sonderlich unfreundlich... Ok, zu meinem ersten Bock muss ich wirklich zugeben das ich da nicht für ins Datenblatt geschaut habe, ist irgendwie so drin TCCR1 ist 16 Bit und da ich TCCR0A/B grade erst für ne 8 Bit PWM benutzt hab, war ich noch davon überzeugt. Der 2. sollte sich aufgeklärt haben. In Anbetracht das der OP wohl grade erst mit Controllern anfängt und eh rumbastelt, wollte ich ihm einfach etwas an die Hand geben was bei meinen ersten Gehversuchen mit PWM und Motoren aus der Grabbelkiste funktioniert hat. Was ist dem OP wohl lieber, eine Antwort ala ohne DB des Motors wirst Du keine Antwort dazu bekommen oder eine Aussage zu einem Wert der gehen sollte?
Tim T. wrote: > Ok, zu meinem ersten Bock muss ich wirklich zugeben das ich da nicht für > ins Datenblatt geschaut habe, ist irgendwie so drin TCCR1 ist 16 Bit und > da ich TCCR0A/B grade erst für ne 8 Bit PWM benutzt hab, war ich noch > davon überzeugt. Ist ja auch bei den meisten AVRs so, dass Timer 1 ein 16-Bit-Timer ist. In dem Zusammenhang vielleicht auch noch entschuldbar... Bei zweiten Klops meinte ich eher die Sache mit der Frequenz. Aber ist ja auch wurscht... Fest steht (um zum eigentlichen Thema zurückzukommen): Um genauere Aussagen zur Frage des OP zu machen, müsste man schon etwas mehr über den Motor und evtl. auch den Treiber wissen. "Hab noch nen Motor rumfliegen" ist in dem Zusammenhang etwas zu schwammig.
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.