- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 195

Thema: Roboterarm mit Schrittmotoren ?!

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2012
    Beiträge
    511
    Es gibt Treiber wo genau diese Vorgehensweise zum sofortigem Tot der Selbigen führt!
    gehört da mein Treiber dazu ??

    Jetzt endlich was zum Roboterarm : Heute werde ich es vielleicht noch schaffen ein Video zu machen. (Es sind nur zwei Achsen die bis jetzt funktionieren, da ich nur zwei Treiber besitze ,aber wenigstens schon mal etwas).

    Stell euch das aber nicht zu schön vor, denn er ist erstens noch lange nicht fertig und zweitens gibt es noch viel zu verbessern.

    Doch noch eine Frage zum Programm : Ich möchte nach jedem Start eine Ref-Fahrt machen und habe auch dafür Endschalter angebaut.
    Bloß habe ich es noch nicht geschafft ,dass die Motoren dann aufhören zu laufen ,wenn der Schalter berührt wird ???
    Woran liegt es??? Verwendet habe ich Pulldown - Widerstände.

    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    $baud = 9600
    $hwstack = 32
    $swstack = 32
    $framesize = 32
    
    Config Portd.7 = Output
    
    Config Portd.2 = Output
    Config Portd.3 = Output
    Config Portd.6 = Output
    
    Config Portc.2 = Output
    Config Portc.3 = Output
    Config Portc.4 = Output
    
    Config Portb.3 = Input                                      'Endschalter
    Config Portb.4 = Input                                      'Endschalter
    Sw1 Alias Portb.3
    Sw2 Alias Portb.4
    
    Dim I As Integer
    
    Wait 1
    Sound Portd.7 , 400 , 450
    Sound Portd.7 , 400 , 250
    Sound Portd.7 , 400 , 450
    Wait 5
    
    
    Portd.3 = 1
    
    Do                                                          'Endschalterposition anfahren
      Portd.6 = 0 : Waitus 1 : Portd.6 = 1
      Waitms 10
      If Sw1 = 1 Then Exit Do
    Loop
    
    
    
    Portc.3 = 0
    
    Do                                                          'Endschalterposition anfahren
      Portc.4 = 0 : Waitus 1 : Portc.4 = 1
      Waitms 10
      If Sw2 = 1 Then Exit Do
    Loop
    
    
    
    Do                                                          'Hauptprogramm
      Sound Portd.7 , 400 , 450
      Sound Portd.7 , 400 , 250
      Sound Portd.7 , 400 , 450
      Wait 2
    Loop
    End


    Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_6195.jpg
Hits:	21
Größe:	58,9 KB
ID:	24396 Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_6197.jpg
Hits:	15
Größe:	34,7 KB
ID:	24397

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    15.03.2011
    Ort
    Dresden
    Alter
    37
    Beiträge
    1.937
    Du generierst die Steuerpulse für die Schrittmotoren mit wait-Anweisungen? Zum Testen mag das noch gehen, aber zum anständigen Betrieb würde ich da eher mit Timern arbeiten, dann sind die Schrittzeiten komplett unabhängig vom Hauptprogramm und daher recht stabil. So, wie du es hast, wird zwischen den Schritten die wait-Anweisung ausgeführt, wodurch keine anderen Berechnungen in dieser Zeit möglich sind.

    Wegen dem nicht Reagieren auf die Endschalter: schon mal probiert, ob die auch wirklich richtig schalten? Also mal etwas Hardwaredebugging machen: 1-2 LEDs mit Widerstand an einen Ausgang stöpseln und den Zustand der Schaltereingänge dort nochmal ausgeben lassen. Ganz davon ab würde ich die Schleife eher so abbrechen:
    Code:
    Do                                                          'Endschalterposition anfahren
      Portc.4 = 0 : Waitus 1 : Portc.4 = 1
      Waitms 10 
    Loop Until Sw2 = 1
    Ansonsten müsste der Code aber eigentlich funktionieren, daher tippe ich mal auf einen Verdrahtungsfehler.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2012
    Beiträge
    511
    So, habe es jetzt hin bekommen :
    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    $baud = 9600
    $hwstack = 32
    $swstack = 32
    $framesize = 32
    
    Config Portd.7 = Output
    
    Config Portd.2 = Output
    Config Portd.3 = Output
    Config Portd.6 = Output
    
    Config Portc.2 = Output
    Config Portc.3 = Output
    Config Portc.4 = Output
    
    Config Pinb.3 = Input                                       'Endschalter
    Config Pinb.4 = Input                                       'Endschalter
    Sw1 Alias Pinb.3
    Sw2 Alias Pinb.4
    
    
    Waitms 500
    Sound Portd.7 , 400 , 450
    Sound Portd.7 , 400 , 250
    Sound Portd.7 , 400 , 450
    Wait 2
    
    Portd.3 = 1
    
    Do                                                          'Endschalterposition anfahren
      Portd.6 = 0 : Waitus 1 : Portd.6 = 1
      Waitms 10
    Loop Until Sw1 = 1
    
    Do                                                          'Hauptprogramm
      Sound Portd.7 , 400 , 450
      Sound Portd.7 , 400 , 250
      Sound Portd.7 , 400 , 450
      Wait 2
    Loop
    End
    Lag an der Programmierung : If Sw1 = 1 Then Exit Do


    Wie willst du das mit Timern realisieren ?? Habe jetzt keine richtigen Vorstellungen davon ,da ich ja noch nicht so lange Progge.
    Wäre für einen Lösungsansatz sehr dankbar.
    Geändert von Der Einsteiger (01.02.2013 um 19:13 Uhr)

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    15.03.2011
    Ort
    Dresden
    Alter
    37
    Beiträge
    1.937
    Zum Thema Timer:
    http://halvar.at/elektronik/kleiner_...timer_counter/

    Zum Vorgehen zur Steuerung von Schrittmotoren:
    Ich mache es so, dass ich in der ISR erst den Timer auf den neuen Zeitwert setze, dann den Ausgangsport High schalte, kurz warte (1µs) und ihn wieder auf Low setze. Vom übergebenen Zeitwert ist dann abhängig, wann die ISR dann das nächste mal aufgerufen wird. Die Berechnung des Zeitwerts kann man dann in die Hauptschleife verfrachten. Erweitern lässt sich das natürlich auch, zB. mit Schrittzähler, Beschleunigungsrampen oder Bresenhamalgorithmus zur linearen Interpolation von mehreren Motoren (damit nicht jeder einen Timer belegen muss). Wenn man mehrere Motoren so zwischen einzelnen Punkten interpoliert und die Abstände zwischen den Punkten recht klein wählt, dann dürften sich ziemlich runde Bahnen generieren lassen. Hab das aber selber auch noch nicht so vollständig getestet.

    Hier nochmal ein bisschen Code zum Timer:

    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    $baud = 9600
    
    On Timer1 Isr1
    
    Config Timer1 = Timer , Prescale = 8
    Enable Timer1
    Enable Interrupts
    
    Config PortA = Output
    PortA.1 = 0
    
    Dim Zeit As Byte
    Zeit = 100              'einzelner Schritt dauert 100*Prescaler/Quarzfrequenz= 50 µs
    
    Do
    !NOP                     'Hauptschleife ist komplett frei, hier kann alles andere berechnet werden
    Loop
    
    Isr1:
    Load Timer1 , Zeit
    Toggle PortA.1
    Waitus 1
    Toggle PortA.1
    Return
    Mit dem Prescaler kann man dann die Quarzfrequenz skalieren. Mit niedrigen Werten kann man die Taktrate höher auflösen, dafür aber keine ganz niedrigen Geschwindigkeiten mehr fahren. Für mich hat sich ein Prescaler von 8 als ganz nützlich herausgestellt, aber natürlich kannst du damit selber ein wenig herumprobieren.

Ähnliche Themen

  1. Roboterarm
    Von Bionade200 im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 08.09.2011, 16:48
  2. Roboterarm
    Von rappitmaster im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 27
    Letzter Beitrag: 28.08.2008, 18:52
  3. Roboterarm
    Von oratus sum im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 7
    Letzter Beitrag: 31.08.2007, 21:36
  4. Roboterarm
    Von Tacki im Forum Elektronik
    Antworten: 23
    Letzter Beitrag: 20.03.2007, 18:12
  5. Roboterarm
    Von Gasi_Hasi im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 10
    Letzter Beitrag: 10.06.2004, 04:10

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress