-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: PWM *VERWIRRT SEI*

  1. #1

    PWM *VERWIRRT SEI*

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo, sicher ist das schon 1Mio. mal angesprochen worden....
    aber bitte habt erbarmen, ich verstehe es einfach nicht....

    Habe heute allein 4 Stunden recherchiert... aber es verwirrt mich immer mehr...

    Also ich möchte einen Schrittmotor möglichst stufenlos beschleunigen/bremsen können.

    Ich versuche mal meine Gedanken zu ordnen, und ihr meckert dann über meine Fehler, damit ich es verstehe...

    Ich versuche einfach mal ne beliebiges Modell....

    Also:
    - Der AVR hat eine Frequenz... sagen wir von einem Quartz vorgegeben (20.000 Hz)
    - Der Prescale gibt die Teilung an, also wie die 20Khz geteilt werden.
    (8,16,....) nehmen wir die 1024 ... also 20.000 / 1024 =19,53 Hz..

    Das würde also bedeuten, daß der Interrupt 19,53 mal pro Sekunde ausgelöst werden würde... ich also ne PWM Frequenz von 19,53 Pulsen pro Sekunde hätte.

    Der Duty Cycle / Width gibt die Pulslänge an... also wie lange High geschaltet wird...

    Soweit eigentlich alles klar...

    Aber was ich nicht verstehe... um die Frequenz varieren lassen zu können, um die Geschwindigkeit zu verändern müßte ich entweder den Prescale ständig verändern (Ich GLAUBE das geht nur in groben Schritten, klärt mich auf...) oder aber ich müßte den Maxcount des Timers verändern...
    Oder ich muß einen weg haben eine flexibele Anzahl von Interrupts pro
    Timer"durchlauf" zu generieren.

    Bitte erleutert mir mal, wie ich die Geschwindigkeit feinjustierbar verändere? Bitte möglichst simpel.. ich habe echt Probleme mich da reinzudenken...

    Mir gehts echt um eine möglichst variable Geschwindigkeitsveränderung in feinen Stufen....

    Ich weiß es geht jemanden der es weiß auf den Zünder immer alles wiederkäuen zu sollen, aber ich habe mich viel zu voll gelesen, und stehe nun orientierungslos auf der Weide

    Ich muß den Hintergrund kennen, um mir eigene Gedanken machen zu können, aber bin gerade von Zweifeln und Desorientierung geplagt...

    Wäre lieb....

    Lieber Gruß
    Chris

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    14.08.2004
    Ort
    Esting
    Alter
    38
    Beiträge
    37
    Hallo Chris,

    ich habe zwar auch noch keine Praktischen Erfahrungen dazu , aber in diesen beiden Tutorials steht was zum Thema:

    http://www.mikrocontroller.net/artic...edeutet_PWM.3F

    http://www.mikrocontroller.net/artic...nmodulation.29


    Ronny

  3. #3
    Ich weiß.... ich habe reichlich tutorials durch... aber ich Suche immernoch die Antwort nach der Änderung der Frequenz....

    Danke trotzdem...

    Lieber Gruß
    Chris

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.06.2006
    Alter
    26
    Beiträge
    113
    Alsoooo... du veraenderst nicht die frequenz sondern den zustand wie lange der PWM HIGH ist.. sehr gut ist das auf dieser grafik:


    Das ganze nennt man soviel ich weiss den duty cycle.. sehhhr gut erklaer hier:

    http://roboternetz.de/wissen/index.p...itenmodulation
    Stell dir vor es ist krieg - und keiner geht hin.
    Gewinner des Roboterwettbewerbs "Zukunft durch Innovation" des Bundeslandes NRW in Aachen.

  5. #5
    Jup, nur die Periode ist auf der Darstellung doch gleich... um einen Schrittmotor zu beschleunigen, muß ich doch den Highpegel nicht länger sondern die Periode kürzer machen?

    Sorry, stelle mich anscheinend extra blöd an

    Edit: Also bei einem Rechteck muß die Duty 50% der Periode einnehmen... gut aber wie verkürze ich denn nun die Periode variabel und fein?

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.06.2006
    Alter
    26
    Beiträge
    113
    du veraenderst den duty, nicht die periode! (oder vertue ich mich?)
    Stell dir vor es ist krieg - und keiner geht hin.
    Gewinner des Roboterwettbewerbs "Zukunft durch Innovation" des Bundeslandes NRW in Aachen.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    21.02.2007
    Beiträge
    38
    Hallo,

    also hab da auch nicht sooooviel Ahnung von, aber...

    damit Du nicht noch verwirrter wirst, kann es sein (oder versehe ich mich) ist in der Grafik von Wanderer ein Fehler!? Eine Periode geht immer von einem gleichen Punkt zum gleichen Punkt. Ok, schwer auszudrücken! Grins. Wenn die Periode an der ersten steigenden Flanke anfängt, dann muß sie auch an der zweiten steigenden Flanke aufhören! Im Bild hört sie aber erst bei der fallenden Flanke auf (bei langsam)!!!

    Gelernt habe ich das alles mal mit der PWM aber danach in der Praxis nicht mehr gebraucht. ABER, ich kenne PWM eigentlich nur für "normale" Motoren (dauererregt bzw. mit Hilfsenergie erregt) um die Geschwindigkeit zu regeln. Wenn ich mich jetzt nicht verdenke, dann macht das doch beim Schrittmotor keinen Sinn!!! Seine Geschwindigkeit wird über die Frequenz in der Abfolge (Ansteuerung) seiner einzelnen Wicklungen gesteuert! Da ist doch nix mit PWM, oder?

    Wenn ich mich da jetzt total verhauen habe, dann haut mich jetzt!

    Gruß, Hackes.

  8. #8
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Impuls(sagtmanso?) und duty zusammen bilden die Periode.

    In der Interrupt-Routine zählst du eine Variable hoch und immer, wenn diese Variable einen bestimmten Wert erreicht hat, endet der Impuls und duty beginnt. Wenn die Variable den Endwert erreicht hat(günstig ist z.b.255) endet auch duty und der neue Impuls beginnt. Die Variable wird wieder auf null gesetzt und das Ganze endlos wiederholt.

    Die Länge des Impuls ist die Pulsweite, die moduliert wird, indem der Vergleichswert zum Umschalten verändert wird. Die Periodendauer ist die Zeit zwischen den Interrupts mal dem Endwert der Zählvariablen und bleibt immer konstant.

    Aber eigentlich geht das ja am Thema vorbei, den Schrittmotoren werden per Frequenz angesteuert und nicht mit Pulsweiten. Im Ansatz ähnlich zählt auch hier eine Interruptroutine eine Zählvariable hoch. Beim Erreichen des Endwerts wird der Ausgang umgeschaltet und die Zählvariable auf null gesetzt. Das ergibt den Takt für den Schrittmotor, die Fequenz wird durch verändern des Endwertes eingestellt, Periodendauer ist dann Interruptabstand mal Endwert geteilt durch zwei.

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #9
    Wow, super... ja genau so.... jetzt raffe sogar ichs

    Vielen Dank an Alle Beteiligten, und nen extra Danke an den letzten Poster...

    Lieber Gruß
    Chris

  10. #10
    Denke ich habs so richtig gemacht mit der Frequenzlänge (Flanke>Flanke).

    Wie könnte man es besser machen?

    Jetzt fehlt noch die Duty(Highflankenlänge)... das Ding mit den Compares.... aber wie baut man das hier ein?

    Ihr sollt nicht für mich progen, sondern mir einfach nen Tipp geben...
    Das ich gewillt bin zu lernen habe ich mit diesem wundervollen Snippet ja bewiesen

    Guckt mal bitte rüber... würde mich über etwas konstruktive Tipps freuen...
    und falls sich einer mit der Duty auskennt, sind Infos dringend erwünscht...

    Vielen Dank nochmal für Eure Hilfe... ich hätte es sonst nie gerafft....

    Lieber Gruß
    Chris

    $regfile = "m8def.dat" 'AtMega8
    $crystal = 16000000 '16Mhz Quartz

    Dim Verzoegerung As Integer 'Verzögerung = erhöhen der Timerdifferenz
    Dim Z As Integer 'Z = Zähler zum entprellen des Tasters (Entpreller)

    Ddrd = &B11100000 'Ein und Ausgabeports definieren

    Verzoegerung = 0 'Zum Start keine Verzögerung

    Config Timer1 = Timer , Prescale = 64'Timer1 auf den aktuellen Timer setzen, Teiler 64
    Enable Timer1 'Timer aktivieren
    On Timer1 Isr_von_timer1 'Wenn der Timer überläuft zu Interrupt wechseln
    Enable Interrupts 'Interruptbehandlung starten

    Timer1 = 64000 - Verzoegerung 'Pulslänge =65535 - 64000 - 0


    Do 'Hauptprogramm

    If Pind.2 = 1 Then
    'Wenn Taster 1 gedrückt dann....

    Z = Z + 1 'Entpreller hochzählen
    If Z = 100 Then 'wenn Du genug geprellt hast gehts weiter
    Z = 0 'Entpreller zurücksetzen
    Verzoegerung = Verzoegerung + 1 'Verzögerung erhöhen
    End If
    End If


    If Pind.3 = 1 Then 'Wenn Taster 2 gedrückt dann...

    Z = Z + 1 'Entpreller hochzählen
    If Z = 100 Then 'wenn Du genug geprellt hast gehts weiter
    Z = 0 'Entpreller zurücksetzen
    Verzoegerung = Verzoegerung - 1 'Verzögerung verringern
    End If
    End If



    Loop
    End




    Isr_von_timer1: 'Interrupt Service
    Timer1 = 64000 - Verzoegerung ' Timer1 auf Startwert setzen
    Toggle Portd.6 ' Toggle an Portd.6


    Return

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •