Verständniss Frage PWM (ja/nein)

Hallo,

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#

http://arduino-info.wikispaces.com/Arduino-PWM-Frequency

Der Timer 2 hat hierbei 7 verschiedene Teiler die Frage ist nun kann ich jetzt einen Teiler von z.b. 17 benützten?

Problemstellung: Bau eines Kettenfahrzeuges.

3Nm Bipolar Schrittmotor
Motorendstufe DM542T

Teiler von z.b. 17

Du weißt es doch schon....
Nein!

Entweder verwendest du den Begriff PWM falsch, oder hast dich sonst irgendwie verrannt...

Tipp:
Wer in die falsche Richtung läuft, muss sich nicht beeilen.

Was willst du mit den Frequenzen anstellen?

Du kannst auch ein eigenes PWM- Signal bauen, mit variablen LOW und HIGH Zeiten...

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.

Perfekt danke schön für die schnelle Antworten.

@combie

also im Prinzip möchte ich ein Kettenfahrzeug bauen... gebaut ist es ja schon^^ Nun ist das ehr ein etwas exklusiveres Modell :slight_smile: 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....

@MaHa76

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.

@DrDiettrich

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.

Wieso PWM wenn du einen Schrittmotor ansteuern willst?

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

Als Laie dachte ich mir ja wiso nimmst kein PWM Signal das ist ja ein Rechtecksignal

Sach ich ja: Holzweg.
Vergiss die Idee
Und zurück auf "Start"

Mein Tipp:
Verwende die AccelStepper Library!

Zumindest:
Schaue dir an, wie die das machen.

Hallo,

wenn ich auch etwas beitragen darf. :slight_smile:
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.

Doc_Arduino:
wenn ich auch etwas beitragen darf. :slight_smile:

Das sollte eigentlich mein Text werden :slight_smile:

Impossibl3:
ich bin neu in der Arduino Welt und völlig unfähig bitte nicht steinigen^^

combie:
Mein Tipp:
Verwende die AccelStepper Library!

In dieser Kombination schließe ich mich dem Tipp an!

Wenn Du später mal Spaß an Timern hast, kannst Du Dich immer noch damit beschäftigen.

Impossibl3:
@MaHa76
Aber der DELAY gefällt mir nicht da dies ja im Prinzip mein gesamtes Programm Stoppt.

Grundsätzlich richtig erkannt, aber Verzögerungen kann man auch blockadearm mit millis() machen. MaHa76 weiß das und hat es sicherlich so gemeint :slight_smile:

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.

@combie /scherheinz

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.

Impossibl3:
Meiner Meinung nach funktionieren diese "nur" mit einem L293D Motortreiber und mit relative leistungsschwachen Schrittmotoren bis 1 Ampere

Nö, mit der AccelStepper kann man CNC-Maschinen bewegen.

In MultiStepper.pde siehst Du beispielsweise FULL2WIRE im Constructor, ersetze dies durch DRIVER:

AccelStepper stepper3(AccelStepper::DRIVER, STEPPIN, DIRPIN);

agmue:
Das sollte eigentlich mein Text werden :slight_smile:

Die Verwendung steht jeden frei. :slight_smile:

@ TO. Mach dich gedanklich frei. Software hat erstmal grundlegend keinerlei Hardwareeinschränkung. Die Lib auch nicht - ganz sicher.

Ok dann ist AccelStepper nochmal was anderes als die Bsp Dateien im Arduino.
Bin da durcheinander gekommen mein Fehler.

Also im Prinzip ist das gemeint? O.O (ich geh grad in Wald und grab Loch)

http://www.airspayce.com/mikem/arduino/AccelStepper/files.html

Da ist quasi der Taktgenerator ein Klacks^^

Hallo,

stellvertretend antworte ich, genau die Lib meinen die Jungs. :slight_smile:
Die Doku ist komplett und sehr umfassend.

Perfekt ich bedanke mich bei allen, es sind die richtigen Wörter genannt worden die ich einfach nicht gefunden habe^^

Wenn man mal endlich weiß wo nach man suchen muss gibt guten Content der einen weiter bringt.