Schrittmotor ansteuern über ein L293D Bascom

OP #1502390
Hallo Leute,
wie eigentlich muss ein Programm aufgebaut sein um ein Schrittmotor übe 
ein L293D an zu steuern.
Ich habe zwar hier schon einiges versucht, aber der Motor will sich 
nicht wirklich drehen, er springt nur ab und zu mal eine halbe 
Umdrehung.
Kann da jemand weiter helfen ?

Gruß Micha

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40

Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output



Portb.0 = 1
Portb.1 = 0
Portb.2 = 0
Portb.3 = 1

Portb.0 = 1
Portb.1 = 0
Portb.2 = 1
Portb.3 = 0

Portb.0 = 0
Portb.1 = 1
Portb.2 = 1
Portb.3 = 0

Portb.0 = 0
Portb.1 = 1
Portb.2 = 0
Portb.3 = 1
Gast #1502410
>Kann da jemand weiter helfen ?

Eine Bremse vielleicht?
Dein Motor wird z.Zt.mit ca. 2MHz angesteuert.
So schnell kann er nicht.
Mach zwischen den Schritten Pausen (1-2ms).
#1502434
Versuchs mal mit


do

Portb.0 = 1
Portb.1 = 0
Portb.2 = 0
Portb.3 = 1
Waitms 1000
Portb.0 = 1
Portb.1 = 0
Portb.2 = 1
Portb.3 = 0
Waitms 1000
Portb.0 = 0
Portb.1 = 1
Portb.2 = 1
Portb.3 = 0
Waitms 1000
Portb.0 = 0
Portb.1 = 1
Portb.2 = 0
Portb.3 = 1
Waitms 1000

Loop

Wenn keine Drehung zustande kommt, dann sind noch einzelne Zustände 
falsch.

Die Blöcke müssen dann ggf. getauscht werden.

Sonst die Wartezeiten schrittweise reduzieren.

Viel Erfolg

W.
OP #1503091
Hallo Leute,
ach so wartezeiten, danke erst mal, habe den mega erst mal auf 1Mhz 
zurück gesetzt und nun jedes mal 2 ms wartezeit zwischen .
Zuerst ging nun mal wieder auch nichts, aber nur deswegen weil wohl der 
L293d eine kleine Macke hat, nun dreht er sich ;)

Wie aber mache ich das er nur bestimmte Schritte weit sich ansteuern 
lässt, wie muss ich da vor gehen ? mit rechts und links denke ich mal 
brauche ich ja die reihenfolge nur ändern.

Gruß Micha
#1503116
Micha Dy schrieb:

> Wie aber mache ich das er nur bestimmte Schritte weit sich ansteuern
> lässt, wie muss ich da vor gehen ?

mitzählen und aufhören wenn die geforderte Anzahl an Schritten erreicht 
ist?


Wie wärs erst mal mit einer blinkenden LED?
OP #1517237
Hallo Leute,
nun habe ich ein Schrittmotor über ein zusammengestelltes programm 
bestimmte schritte zum laufen bekommen, der Motor schnurrt super und 
schnell, aber, so wie ich etwas auf dem LCD Display ausgebe, egal ob es 
die zeit ist oder irgend was anderes, läuft der Motor als würde er nur 
noch die Hälfte an geschwindigkeit haben und rattert auch läuft nicht 
mehr flüssig da hin.
woran kann das liegen, kann da jemand helfen was dieses sein kann.

gruß micha

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$hwstack = 10
$framesize = 40

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , 
Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Initlcd
Waitms 50
Cursor Off Noblink
Cls


                                      '##### Deine Portdefinition für 
den Stepper #####

Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output

Config Portb.4 = Output                                     '##### Motor 
an  #####

Config Portd.0 = Input
Config Portd.1 = Input


Tast1 Alias Pind.0
Tast2 Alias Pind.1

Portd.0 = 1
Portd.1 = 1

A1 Alias Portb.0                                            '##### Die 
Phasen-Anschlüsse des Steppers  #####
B1 Alias Portb.1
A2 Alias Portb.2
B2 Alias Portb.3

Motor Alias Portb.4                                         '##### motor 
an oder aus #####



Dim Schrittarray(4) As Byte

Schrittarray(1).1 = 1                                       '##### 
Tabelle mit dem Steuermuster #####
Schrittarray(1).2 = 0
Schrittarray(1).3 = 0
Schrittarray(1).4 = 1

Schrittarray(2).1 = 1
Schrittarray(2).2 = 0
Schrittarray(2).3 = 1
Schrittarray(2).4 = 0

Schrittarray(3).1 = 0
Schrittarray(3).2 = 1
Schrittarray(3).3 = 1
Schrittarray(3).4 = 0

Schrittarray(4).1 = 0
Schrittarray(4).2 = 1
Schrittarray(4).3 = 0
Schrittarray(4).4 = 1

Declare Sub Motorstep
Declare Sub Motoraus

Dim Sti As Word
Dim Schrittindex As Integer
Dim Zaehler As Integer
Dim Status As Byte

Config Timer1 = Timer , Prescale = 256
Const Timerwert = 31250
Timer1 = 34286

Enable Timer1
On Timer1
Enable Interrupts

Config Clock = Soft
Time$ = "08:55:55"


   Schrittindex = 0
   Zaehler = 0
   Motor = 0

   Do

     'Locate 1 , 1
     'Lcd Time$


      If Tast1 = 0 Then
      Incr Status
      If Status > 1 Then
         Status = 0
      Else
         Status = 1
      End If
        End If

      If Status = 0 Then
        Motor = 1
        Call Motorstep

      If Zaehler = 200 Then
      Call Motoraus
      Motor = 0
      Status = 1
      Zaehler = 0
      End If
       End If

   Loop
   End



   Sub Motoraus()
       A1 = 0
       B1 = 0
       A2 = 0
       B2 = 0
   End Sub



Sub Motorstep
      For Sti = 1 To 4
      Incr Schrittindex
      If Schrittindex > 4 Then
         Schrittindex = 1
      Incr Zaehler

   End If

      A1 = Schrittarray(schrittindex).1
      B1 = Schrittarray(schrittindex).2
      A2 = Schrittarray(schrittindex).3
      B2 = Schrittarray(schrittindex).4

       Waitms 3

   Next Sti


End Sub
OP #1517686
Hallo Axel,
hm, wartezeiten, eigentlich nicht, du siehst ja oben mein Code, da ist 
nur wen die Ausgabe, Locate 1 , 1 Lcd Time$ und da laufen nur die 
Sekunden.
##Daher erst Fahren , dann Anzeige ändern.##
wie soll ich das machen.

MFG Micha
Persönliche Seite #1518086
Hallo Micha,
ich bin kein Bascom Kenner, aber hinter "Lcd Time$" wird sich ein recht 
langes Unterprogramm verbergen.

Ruf daher die LCD Routinen nur auf, wenn der Motor steht. In den 
Endzustand soll doch wohl irgenwie ein Zeil mit derm Schrittmotor 
erreicht werden. Fahre von x1,y1 nach  x2,y2 wenn das erreicht ist, dann 
die LCD Ausgabe.


Axel
OP #1518152
Hallo Gerhrad,
##Wieso fragst Du nicht Dino?##

das kannst du ja im Forum nachlesen, oder ist es so schlimm wo anders 
auch noch nach Meinungen zu fragen.
Ich weis schon, das sich alle User, entweder in AVR-Praxis oder in 
Bascom AVR Microcontroller oder RoboterNetz oder oder, umsehen.

Wen ich das verbergen wollte, hätte ich mich bestimmt nicht hier und 
dort mit dem gleichen Namen und Anschrift angemeldet, oder.

Hallo Axel,
na mal sehen was sich da machen lässt.

MFG
#1530595
Hi Micha,

fahr den motor im interrupt, einen timer proggen der alle paar ms oder 
so
je nach geschwindigkeit einen int. ausloest, dort fahrst du dann
einen schritt und wieder raus, dann stockt u.U. die LCD ausgabe etwas
aber der motor laeuft rund,

ps prozessor vom takt her wieder hochschalten

frohes fest an alle

vlg
Charly

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.