- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 41

Thema: Bascom: Schrittmotorsteuerung mit Drehencoder?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    02.04.2009
    Beiträge
    78

    Bascom: Schrittmotorsteuerung mit Drehencoder?

    Hallo Leute ich hab mal wieder eine Frage, bin lausiger Programmier-Anfänger:

    Ich will einen Schrittmotor steuern, der 48 S/U hat und per A3967 getrieben wird, also mit Enable, Dir und Step. Die Hardware steht und funktioniert, hab ein kl. Testprogramm damit laufen.
    Code:
      ' Stepper_test1.bas - Testprogramm  für A3967 Platine mit Dir Step und Enable
    
    $regfile = "attiny2313.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 8000000                                          'Quarzfrequenz
    $baud = 9600
    
    
    
    Declare Sub Key_pressed
    Dim I As Long
    Config Timer1 = Timer , Prescale = 1
    Enable Timer1
    Timsk.toie1 = 1
    Dim Timer1_reload As Word
    Portd.4 = 1                                                 ' Pullup Widerstand ein   für Enable - ****Enable =0 bedeutet Motor On!!!!  ****
    Enable Interrupts
    
    Config Pind.2 = Output
    Stepper_takt Alias Portd.2
    
    Config Pind.4 = Output
       Stepper_enable Alias Portd.4
       Portd.4 = 0                                              'sprich Motor ON
    
    On Timer1 Isr_timer1
    
     ' Step/Takt auf PD.2 / Taster auf PD.3 / Enable auf PD4 / Richtung auf PD5 /
    
               '***********Hauptschleife:**********
    
    Do
    
    
    
    Loop
    
    End
    
    
    
    Isr_timer1:
       Timer1_reload = 45536                                    ' Vorgabe für 400 / sec
       Timer1 = Timer1_reload
       Toggle Stepper_takt
    Return

    Der Schrittmotor soll nun aber mittels eines Drehencoders langsamer und schneller gemacht werden, die Routine hab ich aus dem Hoffmann-Buch.

    Code:
    '-----Deklarationen fuer Drehimpulsgeber:
    Config Portd.0 = Input : Encoder_a Alias Pind.0             'Encoder Signal B  an Pin 2
    Config Portd.1 = Input : Encoder_b Alias Pind.1             'Encoder Signal A  an Pin 3
    Config Pind.3 = Input : Taster1 Alias Pind.3
    
    Pind.0 = 1                                                  'Pullups für den Drehencoder
    Pind.1 = 1
    Pind.3 = 1
                                                                'LED-Outputs:
    Config Portd.2 = Output : Portd.2 = 0                       'das ist Pin 6   alles mit Pulldown
    Config Portd.5 = Output : Portd.5 = 0                       ' Pin 9
    Config Portb.4 = Output : Portb.4 = 0                       ' Pin 16
    Led_gelb Alias Portd.2
    Led_gruen Alias Portd.5
    Led_rot Alias Portb.4
    
    ' BASCOM-Programm
    ' Stefan Hoffmann 2009
    ' Drehimpulsgeber/Encoder     mit ENCODER-Befehl
    '
    ' In: Drehimpulsgeber an d.0 und d.1 sowie Taster
    
    Dim Wert As Word
    Wert = 100
    Dim Zustand As Byte
    
    Do
    Zustand = Encoder(pind.0 , Pind.1 , Linksroutine , Rechtsroutine , 1)
    
       If Wert > 100 Then Led_rot = 1
    
       If Wert < 100 Then Led_gruen = 1
    
       If Taster1 = 0 Then Led_gelb = 1
                                              'Zu Testzwecken
    Loop
    End
    
    Linksroutine:
    Decr Wert
    Return
    
    Rechtsroutine:
    Incr Wert
    Return
    Ich schnall einfach nicht, wie ich diese Routine mit einer Timer-Takterzeugung verheiraten kann. Der Takt ist doch konstant, und die Encoder-Routine braucht das doch als Variable, oder?

    Habt ihr eine Idee, wie man so was lösen kann?

    Vielen Dank für Anregungen!

    MM08

    (PS: - ich hatte schon einen anderen Code in Arbeit - s. Link und wieder verworfen, weil ich da schließlich vor dem gleichen Problem stand und kein Takt rauskam. Jetzt will ich das Ganze mal abspecken und klein und möglichst einfach wieder anfangen.)
    Geändert von MrMiffy08 (13.10.2012 um 12:47 Uhr)

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    02.04.2009
    Beiträge
    78
    Hallo,

    merkwürdig, in meinen Emails sehe ich dass HeXPloreR mir am Nachmittag zweimal geantwortet hat, aber im Forum sehe ich die Beiträge bis jetzt nicht. Hab schon mal aus- und eingeloggt, kpl. neu gestartet, mal sehen wann ich sie sehen kann.

    Ich habe jedenfalls nach seinen Vorschlägen (im unteren Codeschnipsel) die Doppelpunkte weggenommen und eigene Zeilen für jeden Befehl gemacht und die Inputs mit PIN statt Port benannt.
    Jetzt passiert hier schon mal etwas mehr und Reproduzierbares, aber so richtig glücklich bin ich damit noch nicht. Ich mache da morgen mal weiter mit, muss mal in die Heia.

    Grüße MM08
    Geändert von MrMiffy08 (17.10.2012 um 23:39 Uhr) Grund: Daddeldu im Text

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Bad Bramstedt
    Alter
    45
    Beiträge
    1.369
    ja richtig, aber ich habe sie wieder gelöscht weil ich einfach noch zu unsicher bin was die Port config betrfft. Und ich möchte mir abgewöhnen zu schnell und vorallem wenig hilfreiche Beträge ab zu geben

    Aber denke schon das es PinD.0 statt PortD.0, bei InPut heissen müsste. PortD (OHNE .x) benutzt man besser nur wenn man den ganzen Port als Input nutzen möchte.

    Benutzt Du denn auch Drehimpulsgeber so wie im Beispiel gedacht (Hab das Buch seit gestern nachmittag auch )
    Taster extra oder im Geber?
    Taster korrekt angeschlossen (Pullup/-down beachtet)?

    Mehr weiß ich dazu momentan nicht.

    Viel Erfolg
    Geändert von HeXPloreR (14.10.2012 um 08:13 Uhr)

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.01.2007
    Ort
    westliches Pannonien
    Beiträge
    123
    Ja, Super! Ihr seid klasse!

    Mein 2.0.7.3 macht den Code so geändert jetzt auch!

    Vielen, vielen Dank!

    Wie schön, dass hier so viele hilfreiche Leute am Werk sind, die ihr Wissen mit anderen teilen.....


    Diese Antwort in dem anderen Faden läßt allerdings den Schluß zu,
    daß das Problem erledigt ist, oder?

    MfG

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    02.04.2009
    Beiträge
    78
    Hallo zusammen,
    @HeXPloreR - danke für den Hinweis mit Port und Pin, das half schon mal weiter. DIe mit : getrennten Anweisungen hatte ich mal irgendwo gesehen und sofort falsch zur Regel erklärt. Ich gewöhn mir das sofort wieder ab!

    Ja, den Encoder nutze ich wie im Buch - mit der Änderung dass die Kontakte jeweils noch 100nF gegen GND als Entprellung bekommen haben. UNd Pullups sind im zweiten Code drin, ich benutze den eingebauten Taster auch, ebenfalls mit Pullup, die schalten ja alle gegen GND.

    @Rone -
    (PS: - ich hatte schon einen anderen Code in Arbeit - s. Link und wieder verworfen, weil ich da schließlich vor dem gleichen Problem stand und kein Takt rauskam. Jetzt will ich das Ganze mal abspecken und klein und möglichst einfach wieder anfangen.)
    ist ja schon eine Weile her; das "erledigt" bezog sich auf die unklare Fehlermeldung des Compilers, die dann endlich weg war. Die grundsätzliche Problematik die sich danach stellte war, dass keine sinnvolle Funktion dabei herauskam. Ich mach dazu noch mal einen abschließenden Beitrag in dem anderen Thread.

    Was hier jetzt übrig ist, ist dass die beiden Teilcodes funktionieren, aber ich noch keine Ahnung habe wie ich den Drehencoder Code mit dem Rest so verknüpfe dass der Takt für den Schrittmotor im ersten Teil sich dadurch regeln läßt. Dazu eine Idee? Ich bin mit Variablen &Co nicht sehr erfahren, was man da so anstellen kann.

    Vielen Dank für weitere Hilfe!
    Geändert von MrMiffy08 (14.10.2012 um 11:06 Uhr)

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.07.2009
    Beiträge
    405
    Ich habe mal ein Board geroutet da hat es mit den Kondensatoren am Encoder nicht geklappt - ohne dann schon.
    Meine Idee war das im encoder Befehl ein entprellen schon integriert ist?

Ähnliche Themen

  1. Schrittmotorsteuerung LB1845 und atmega48 in BASCOM
    Von chris155 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 09.05.2010, 18:41
  2. Wie Drehencoder anschließen ?
    Von Blamaster im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 07.09.2009, 19:01
  3. Menüsteuerung mit Drehencoder ?
    Von Blamaster im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 25
    Letzter Beitrag: 30.06.2009, 22:34
  4. Drehencoder auswerten
    Von MartinFunk im Forum C - Programmierung (GCC u.a.)
    Antworten: 11
    Letzter Beitrag: 16.05.2007, 16:05
  5. Drehencoder Panasonic
    Von Mr-400-Volt im Forum Software, Algorithmen und KI
    Antworten: 0
    Letzter Beitrag: 04.02.2007, 20:47

Berechtigungen

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

LiFePO4 Speicher Test