ich bin neu in der Arduino Welt und völlig unfähig bitte nicht steinigen^^ Ich sehe den Wald vor lauter Bäumen nicht mehr...
Im Prinzip würde ich gerne erfahren ob es überhaupt möglich ist die Frequenz eines PWM Signals über einen Arduino Uno V3 im Berreich
von 0Hz-3000Hz zu erzeugen und zu Steuern.
Ein Simples Ja oder nein würde mir sehr weiterhelfen.^^
#//---------------------------------------------- Set PWM frequency for D3 & D11 ------------------------------
//TCCR2B = TCCR2B & B11111000 | B00000001; // set timer 2 divisor to 1 for PWM frequency of 31372.55 Hz
//TCCR2B = TCCR2B & B11111000 | B00000010; // set timer 2 divisor to 8 for PWM frequency of 3921.16 Hz
//TCCR2B = TCCR2B & B11111000 | B00000011; // set timer 2 divisor to 32 for PWM frequency of 980.39 Hz
TCCR2B = TCCR2B & B11111000 | B00000100; // set timer 2 divisor to 64 for PWM frequency of 490.20 Hz (The DEFAULT)
//TCCR2B = TCCR2B & B11111000 | B00000101; // set timer 2 divisor to 128 for PWM frequency of 245.10 Hz
//TCCR2B = TCCR2B & B11111000 | B00000110; // set timer 2 divisor to 256 for PWM frequency of 122.55 Hz
//TCCR2B = TCCR2B & B11111000 | B00000111; // set timer 2 divisor to 1024 for PWM frequency of 30.64 Hz#
Die PWM Frequenz ergibt sich aus dem eingestellten Takt (Prescaler) und dem ebenfalls einstellbaren TOP Wert. Damit kann man beliebige Teilerfaktoren einstellen, soweit eben die 16 Bit Register mitspielen.
Der Wert für die Pulslänge (duty cycle) muß dann irgendwo zwischen BOTTOM und TOP liegen.
also im Prinzip möchte ich ein Kettenfahrzeug bauen... gebaut ist es ja schon^^ Nun ist das ehr ein etwas exklusiveres Modell Aus Leistungs Gründen habe ich mich für 2 Schrittmotoren mit jeweils 3Nm entschieden.
Technische Daten:
Laut Datenblatt des Motor Treibers benötige ich ein Rechteck Signal PUL (+5V,0V) damit sich pro Puls der Motor um 1,8 Grad bei Vollschritt dreht.
Als Laie dachte ich mir ja wiso nimmst kein PWM Signal das ist ja ein Rechtecksignal^^. Hab dann kleinen Versuchaufbau gemacht und festgestellt bei 490Hz dreht sich der Motor. Als ich den Teiler aber verringerte und ein PWM Signal mit 980Hz erstelllt habe lief der Motor nicht mehr sondern brummte nur. Was für mich bedeutet das die Massseträgheit den Betrieb verhindert.
Daher überlegte ich mir ich könnte ja die Freuqenz langsam ansteigen lassen....
Aber ich könnte im Prinzip von Teiler zu Teiler Springen wäre jetzt meine nächste Überlegung....
Ein Programm mit HIGH, LOW, DELAY um mir ein Rechtecksignal zu erzeugen habe ich auch schon daran gedacht. Aber der DELAY gefällt mir nicht da dies ja im Prinzip mein gesamtes Programm Stoppt. Bei 2 Verschiedenen Motoren könnten ja im Prinzip in bestimmten Zeitintervalle keine "Richtungsänderungen" mehr wahrgenommen werden. Aber die Frequenzen sind ja relative hoch und die DELAYS sehr kurz.
Ich werde mal die Tage eine Versuchsaufbau Starten um festzustellen in wie fern die 2 Motoren sich gegenseitig behindern.
also laut Ihnen ist es im Prinzip möglich "jede" Frequenz einzustellen. Ich werde mich auf jedenfall noch in die Materie PRESCALER einlesen. Aber wenn ich es jetzt richtig verstanden habe: dann such ich mir einen festen Teiler aus und ändere die "zeitlich Signal länge" wodurch ich wieder eine andere Frequenz erhalte.
Aber wenn ich es jetzt richtig verstanden habe: dann such ich mir einen festen Teiler aus und ändere die "zeitlich Signal länge" wodurch ich wieder eine andere Frequenz erhalte.
Die PWM Frequenz ergibt sich aus dem Prozessortakt, dem Prescaler und dem Wert dem TOP-Wert (also wie weit das Timer/Counter Register zählt). Letzerer ist bei dem Standard PWM immer 8 Bit. Wenn man es per Hand macht sind auch noch andere Werte möglich. Aber letztlich ist man meistens in einem bestimmten Raster festgelegt. Das ist auch völlig in Ordnung. Manchmal braucht man eine höhere PWM Frequenz, aber es gibt keinen Grund wirklich alle möglichen Werte abzudecken.
Und die PWM Frequenz hat nichts dem Tastgrad zu tun! Das sind zwei verschiedene Sachen
wenn ich auch etwas beitragen darf.
Mit PWM hat das alles nichts zu tun. Du musst dir einen Rechteckgenerator programmieren. Automatisch ergibt sich dann ein Tastverhältnis von konstant 50%. Die Formeln stehen im µC Manual. Den Prescaler kannste dir vorstellen wie die Messbereichsauswahl beim Multimeter. Die Feineinstellung in dem gewählten Messbereich macht dann der TOP Wert. Der weitere Zusammenhang ist. Je kleiner der TOP Wert desto höher die Frequenz im jeweiligen Messbereich. Wenn du dich da durchgebissen hasst, dann haste den Timer verstanden. Zumindestes die Grundlagen.
Einen Hinweis noch. Gewöhne dir die Bitschreibweisen ab. Du blickst irgendwann nicht mehr durch und damit schleichen sich Fehler ein. Gängige Schreibweisen und damit Manual kompatibel ist zum Bsp.
TCCR1A = (1<<COM1B1) | (1<<WGM11) | (1<<WGM10);
daran kann jeder Leser sofort erkennen welches Bit in welchen Register gesetzt werden soll.
In der Arduino IDE müssen auch alle Timer Register vorher genullt werden. Ganz wichtig.
Ansonsten gibts immer noch die von combie erwähnte Stepper Lib.
Danke schön^^ das mit dem Rechteckgenerator hört sich gut an ich denke mal es wird eine weile Dauern bis ich mich da durchgearbeitet habe aber von nix kommt nix xD.
ich denke hier liegt ein Missverständnis vor^^ Ich hab mir gerade alle vier Beispiel Stepper Dateien im Arduino angeschaut. Meiner Meinung nach funktionieren diese "nur" mit einem L293D Motortreiber und mit relative leistungsschwachen Schrittmotoren bis 1 Ampere
Meine Motordaten liegen aber bei 4,2 Ampere
Daher benützte ich eine DM542T der lediglich 2 Eingänge Besitzt PUL und DIR
Bei einem L293D hab ich 4 Eingänge die jeweils das Magnetfeld Takten....
Anbei hab ich noch ein Bild meines Versuchsaufbau eingestellt.