- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 27

Thema: Schrittmotor: Wie viele Schritte pro Sekunde?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    15.03.2011
    Ort
    Dresden
    Alter
    37
    Beiträge
    1.937
    Was willst du überhaupt mit PWM? Der Schrittmotorcontroller reagiert nur auf steigende oder fallende Flanken (je nach Treiber), und die kommen bei PWM in der konstanten PWM-Frequenz. Du brauchst aber veränderliche Frequenz, da jeden Puls einen Schritt weiterbewegt wird. Piept der Motor denn? Sieht nämlich so aus, als ob die PWM-Frequenz so hoch ist, dass der Schrittmotor nicht hinterher kommt. Ich verwende zum Testen von Schrittmotortreibern gerne einen einfachen Inverter-Taktgeber, dessen Frequenz sich mit nem Poti verändern lässt und setz den an den Takteingang vom Treiber. An Richtung kann man dann einen Umschalter mit Anschlüssen nach H und L setzen.

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.09.2009
    Beiträge
    164
    Das mit dem Taktgeber wäre eine Alternative. Ich bin im Moment allerdings im Hotel und kann von hier aus nichts bestellen

    Ich habe das Programm geändert: PWM habe ich jetzt ausgebaut und anstelle einen Timer definiert.

    Allerdings dreht sich nix. Ich habe alle möglichen Kabelpositionen mit den Kabelpaaren ausprobiert.

    Folgende Pins habe ich an den Controller angeschlossen:
    Dir
    Step
    Enable

    VMOT
    GND
    2B
    2A
    1A
    1B
    VDD
    GND

    Hier noch einmal das geänderte Programm:

    Code:
     ' Stepper Testprogram
     
    $prog , 255 , &B11011001,
    $regfile = "m2560def.dat"
    $hwstack = 82                                               '80
    $framesize = 68                                             ' 64
    $swstack = 68                                               '44
     
     
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 19200
     
     
    Config Pind.5 = Output
    Led Alias Portd.5
     
    Config Pinc.0 = Output                                      ' Stiftleiste JP 2; Pin 3; PC0
    Stepper1_reset Alias Portc.0
     
    Config Pinc.1 = Output                                      ' Stiftleiste JP 2; Pin 4; PC1
    Stepper1_rotational_direction Alias Portc.1
     
    Config Pinc.2 = Output                                      ' Stiftleiste JP 2, Pin 5; PC2
    Stepper1_enable Alias Pinc.2
     
    Dim Stepper1_speed As Integer
    Dim I1 As Integer
     
    Echo Off
     
    Led = 0                                                     ' LED einschalten
     
    Stepper1_enable = 1                                         ' Stepper1 off
     
    I1 = 0
     
    Do
       Toggle Led
       Waitms 75
       I1 = I1 + 1
    Loop Until I1 = 20
     
    Wait 5
     
    Stepper1_rotational_direction = 1
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      Do
             Toggle Led
             Waitms 200
     
             Stepper1_enable = 0                                ' Stepper1 on
     
             Config Timer0 = Timer , Prescale = 256             ' Stiftleiste JP 1; Pin 26
             Timer0 = 131
     
      Loop
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    End
    Ist das Programm so in Ordnung?

    Vielen Dank.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    15.03.2011
    Ort
    Dresden
    Alter
    37
    Beiträge
    1.937
    Wenn ich das richtig sehe, wird nirgends der Timer definiert, nirgends eingeschaltet und nirgends die zugehörige Sub aufgerufen. Lies dir mal das hier durch, dann wird dir hoffentlich klar, wie der Timer funktioniert.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.09.2009
    Beiträge
    164
    So, ich hoffe der Timer0 ist jetzt in Ordnung

    Allerdings dreht sich der Schrittmotor immer noch nicht.

    Wahrscheinlich ist die Frequenz zu hoch, sollte nach meinen Erkenntnissen z.Z. bei 62500 Hz liegen, oder? Laut einem Beitrag, ziemlich am Anfang meines Problems, sollte der Schrittmotor 200 Hz vertragen können, d.h. ich lasse den Timer0 von 62300 an zählen und habe somit eine Frequenz von 200 Hz. So meine Annahme, aber trotzdem dreht sich der Schrittmotor immer noch nichtL

    Was läuft falsch?

    Hier noch einmal das geänderte Programm:

    Code:
     ' Stepper Testprogram
     
    $prog , 255 , &B11011001,
    $regfile = "m2560def.dat"
    $hwstack = 82                                               '80
    $framesize = 68                                             ' 64
    $swstack = 68                                               '44
     
     
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 19200
     
     
    Config Pind.5 = Output
    Led Alias Portd.5
     
    Config Pinc.0 = Output                                      ' Stiftleiste JP 2; Pin 3; PC0
    Stepper1_reset Alias Portc.0
     
    Config Pinc.1 = Output                                      ' Stiftleiste JP 2; Pin 4; PC1
    Stepper1_direction Alias Portc.1
     
    Config Pinc.2 = Output                                      ' Stiftleiste JP 2, Pin 5; PC2
    Stepper1_enable Alias Pinc.2
     
    Config Pinc.3 = Output                                      ' Stiftleiste JP 2, Pin 6; PC3
    Stepper1_step Alias Pinc.3
     
    Dim I1 As Integer
     
     
    Echo Off
     
    Led = 0                                                     ' LED einschalten
     
    Stepper1_enable = 1                                         ' Stepper1 off
     
    I1 = 0
     
    Do
       Toggle Led
       Waitms 75
       I1 = I1 + 1
    Loop Until I1 = 20
     
    Wait 5
     
    Stepper1_direction = 1
    Stepper1_enable = 0                                         ' Stepper1 on
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Config Timer0 = Timer , Prescale = 256                      ' Stiftleiste JP 1; Pin 26
    Enable Timer0
    On Timer0 Timer_irq
    Enable Interrupts
    Timer0 = 62300
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      Do
             Toggle Led
             Waitms 70
      Loop
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    End
     
    'Dies ist der Programmteil, der in dem von ihnen gewählten
    'Intervall aufgerufen wird
    Timer_irq:
    Timer0 = 62300.
    Stepper1_step = 0 : Waitus 1 : Stepper1_step = 1
    Return
    Hat jemand einen Tipp?

    Vielen Dank.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    15.03.2011
    Ort
    Dresden
    Alter
    37
    Beiträge
    1.937
    Ich glaub, da hast du was durcheinandergebracht.
    Den Timer0 kannst du nur bis 255 einstellen, Timer1 geht bis 65535.
    Wenn du dann den Timer auf 62300 stellst, zählt er von da an bis 65535 und läuft dann über. Macht 3236 Zeiteinheiten. Bei 16Mhz Taktfrequenz hast du eine Taktzeit von 0,0625µs, multipliziert mit dem Prescaler ist eine Zeiteinheit des Timers 16µs. 3236*16µs ergibt einen Takt von 51,776ms, ergo eine Frequenz von eta 19,3 Hz. Eigentlich müsste der Schrittmotor damit schon langsam laufen. Ich schätze mal, wenn du Timer1 verwendest, sollte das laufen, vorrausgesetzt natürlich, du hast den Treiber richtig angeschlossen

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.09.2009
    Beiträge
    164
    Aha, gut. Dann stell ich morgen früh mal auf Timer1 um. Kannst du mir noch einmal erklären wie du auf folgende Werte kommst:
    Taktzeit 0,0625µs
    Zeiteinheit des Timers 16µs
    von 51,776 ms auf 19,3 Hz

    Vielen Dank für deine Mühe

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    15.03.2011
    Ort
    Dresden
    Alter
    37
    Beiträge
    1.937
    Controllertakt: 16000000 Hz -> 1/Takt=0,0625 µs
    0,0625 µs * 265 (Prescaler) = 16 µs
    Alternativ kannst du auch den Controllertakt durch den Prescaler Teilen und dann das Reziproke daraus bilden, kommt aufs selbe hinaus.

    1/51,776ms = 19,3 Hz

Ähnliche Themen

  1. Schrittmotor verliert Schritte
    Von DF8UZ im Forum Motoren
    Antworten: 4
    Letzter Beitrag: 26.10.2010, 20:01
  2. Schrittmotor verliert Schritte
    Von bcs im Forum Motoren
    Antworten: 2
    Letzter Beitrag: 07.08.2010, 17:45
  3. Einzelne Schritte mit Schrittmotor
    Von Timotor11 im Forum Motoren
    Antworten: 10
    Letzter Beitrag: 17.09.2009, 17:09
  4. Antworten: 4
    Letzter Beitrag: 26.09.2008, 08:39
  5. Wie viele Messungen maximal mit dem internen ADC pro Sekunde
    Von Florian im Forum AVR Hardwarethemen
    Antworten: 17
    Letzter Beitrag: 02.04.2005, 23:13

Berechtigungen

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

LiFePO4 Speicher Test