- 3D-Druck Einstieg und Tipps         
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
    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?

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

    das wäre schön und würde zwei Teile einsparen. Ich habe den selben Encoder (ALPS STEC12E) mit und ohne 100nF ausprobiert, beides hat die gleiche Wirkung. Ich versuche morgen mal das dezidiert zu beschreiben.

    Wichtiger wäre mir allerdings die Problematik der "Verheiratung" der beiden Code-Stücke zu etwas sinnvollem. Dazu jmd Anregungen?

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Bad Bramstedt
    Alter
    45
    Beiträge
    1.369
    Wie wäre es denn wenn Du die Codestücke ordnest - also die Teile der Encoderabfrage dort hin schreibst wo zum beispiel die Ports und Subs definiert/deklariert werden...deine Encoderabfrage mit in die do loop der (leeren) Hauptschleife kopieren oder ausschneiden. Die do loop vom encoder vorher im einzelprogramm kann man komplett auskommentieren ( '( ...auskommentierter codetext... ') oder normal mit ' ) oder entfernen. Die Subs bleiben wo sie sind.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    02.04.2009
    Beiträge
    78
    Ok, ich versuch's mal.


    Code:
      ' Testprogramm  für A3967 Platine mit Dir Step und Enable
    
    $regfile = "attiny2313.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 8000000                                          'Quarzfrequenz
    $baud = 9600
    
    
    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
    
                    ' Inputs: Drehimpulsgeber an d.0 und d.1 sowie Taster an d.3
    '-----Deklarationen fuer Drehimpulsgeber:
    Config Pind.0 = Input 
        Encoder_a Alias Pind.0             'Encoder Signal B  an Pin 2
    Config Pind.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 stellvertretend für Step, Dir, Enable
                    ' In der endgültigen Hardware liegen: Step/Takt auf PD.2 / Taster auf PD.3 / Enable auf PD4 / Richtung auf PD5 /
    Config Portd.2 = Output 
        Portd.2 = 0                       'das ist Pin 6   - alles mit Pulldown   -  steht für Step/Takt
    Config Portd.5 = Output 
        Portd.5 = 0               ' Pin 9  - der hier steht für Dir
    Config Portb.4 = Output 
        Portb.4 = 0                       ' Pin 16   -  diese Led steht für Enable
    
    Led_gelb Alias Portd.2
    Led_gruen Alias Portd.5
    Led_rot Alias Portb.4
    
    
    On Timer1 Isr_timer1        'Deklaration der Timerroutine
                    
        
    Dim Wert As Word
    Wert = 100                          'willkürlich gewählter Startwert
    Dim Zustand As Byte
    
           '***********Hauptschleife:**********
    Do
    
    Zustand = Encoder(Pind.0 , Pind.1 , Linksroutine , Rechtsroutine , 0)
    
       If Wert > 100 Then Led_rot = 1
    
       If Wert < 100 Then Led_gruen = 1
    
    Loop
    
    End
    
    
    Isr_timer1:
       Timer1_reload = 45536                                    'Vorgabe für 400 / sec
       Timer1 = Timer1_reload
       Toggle Led_gelb        '= Stepper_takt
    Return
    
    
    Linksroutine:
    Decr Wert
    Return
    
    Rechtsroutine:
    Incr Wert
    Return
    So, und beim Starten dieses Codes leuchtet zunächst die gelbe Led (ist klar, Timer1), und beim Drehen je eine Raste leuchtet grün und in die andere rot, gehen aber nicht wieder aus. Dies jeweils egal mit Encoder mit 100nF gegen GND oder ohne und ebenso mit dem Pollin-Drehencoder ohne Kondensatoren, der hier schon mehrfach angesprochen wurde und der mehr oder weniger Ärger macht.
    Ich habe an der Encoder-Routine mal hinten die 1 auf 0 geändert, weil ich ja das Prog ja weiter laufen lassen will. Mit 1 stoppt es hier wohl.

    Wie bekomme ich es hin dass rot und grün wieder ausgehen?
    Uind eben das Grundproblem - wie bekomme ich schnelleren/langsameren Takt an D2/Led_Gelb aufgrund Links/Rechtsdrehung hin?

    Vielen Dank für Eure Anregungen!
    Geändert von MrMiffy08 (16.10.2012 um 22:19 Uhr) Grund: paar Fehlerchen

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Bad Bramstedt
    Alter
    45
    Beiträge
    1.369
    die LEDs gehen nicht aus weil Du sie nur einschaltest wenn > oder < ... einfach noch ne bedingung mit dazu schreiben die ausschaltet wenn > oder < jeweils dazu. leider wenig zeit grade...

    EDIT: Kann es sein, das unter jedes IF auch ein END IF muss?
    Geändert von HeXPloreR (17.10.2012 um 16:47 Uhr)

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    02.04.2009
    Beiträge
    78
    Hallo HeXPlore!

    Vielen Dank für Deine Hinweise! Ich habe mal eine Else eingefügt und den Timer Takt mal auf sichtbar korrigiert. das takkert jetzt mit 1Hz und die Led's gehen an und aus wie sie sollen. Also dieser Teil funktioniert jetzt schonmal. Super!
    Der Gesamte Code sieht jetzt so aus:

    Code:
    $regfile = "attiny2313.dat"
    $crystal = 8000000
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    $baud = 9600
    ' BASCOM-Programm
    ' Stefan Hoffmann 2009
    ' Drehimpulsgeber/Encoder     mit ENCODER-Befehl
    '
    ' In: Drehimpulsgeber an d.0 und d.1 sowie Taster
    
    '-----Deklarationen fuer Drehimpulsgeber:
    
    
      ' Testprogramm  für A3967 Platine mit Dir Step und Enable
    
    $regfile = "attiny2313.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 8000000                                          'Quarzfrequenz
    $baud = 9600
    
    
    Config Timer1 = Timer , Prescale = 256
    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
    
                    ' Inputs: Drehimpulsgeber an d.0 und d.1 sowie Taster an d.3
    '-----Deklarationen fuer Drehimpulsgeber:
    Config Pind.0 = Input
        Encoder_a Alias Pind.0                                  'Encoder Signal B  an Pin 2
    Config Pind.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 stellvertretend für Step, Dir, Enable
                                                      ' In der endgültigen Hardware liegen: Step/Takt auf PD.2 / Taster auf PD.3 / Enable auf PD4 / Richtung auf PD5 /
    Config Portd.2 = Output
        Portd.2 = 0                                             'das ist Pin 6   - alles mit Pulldown   -  steht für Step/Takt
    Config Portd.5 = Output
        Portd.5 = 0                                             ' Pin 9  - der hier steht für Dir
    Config Portb.4 = Output
        Portb.4 = 0                                             ' Pin 16   -  diese Led steht für Enable
    
    Led_gelb Alias Portd.2
    Led_gruen Alias Portd.5
    Led_rot Alias Portb.4
    
    
    On Timer1 Isr_timer1                                        'Deklaration der Timerroutine
    
    
    Dim Wert As Word
    Wert = 100                                                  'willkürlich gewählter Startwert
    Dim Zustand As Byte
    
           '***********Hauptschleife:**********
    Do
    
    Zustand = Encoder(pind.0 , Pind.1 , Linksroutine , Rechtsroutine , 0)
    
       If Wert > 100 Then
       Led_rot = 1
        Else
        Led_rot = 0
      End If
    
       If Wert < 100 Then
       Led_gruen = 1
        Else
        Led_gruen = 0
      End If
    
    Loop
    
    End
    
    
    Isr_timer1:
       Timer1_reload = 34286                                    'Vorgabe für 400 / sec
       Timer1 = Timer1_reload
       Toggle Led_gelb                                          '= Stepper_takt
    Return
    
    
    Linksroutine:
    Decr Wert
    Return
    
    Rechtsroutine:
    Incr Wert
    Return
    Wie könnte ich nun weiter kommen mit der "Verheiratung" der Funktionen?

    Vielen Dank wieder für alle Hinweise!

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

    ich hatte heute morgen beim Grübeln über mein Problem eine Erleuchtung: ist das was ich da brauche für die Ansteuerung nicht eigentlich PWM? Also ich will ja mit dem Encoder langsamer/schneller steuern, der Takt soll sich dabei verändern. Kann man denn so langsames PWM erzeugen? Oder ist es besser, PWM schneller zu machen und sw-mäßig runterzuteilen? Ist der Gedanke überhaupt korrekt?

    Danke für Eure Hilfe!
    Geändert von MrMiffy08 (18.10.2012 um 23:46 Uhr)

Ä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
  •  

12V Akku bauen