Forum: Mikrocontroller und Digitale Elektronik Schrittmotor ansteuern über ein L293D Bascom


von Micha J. (michady)


Lesenswert?

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

: Verschoben durch User
von ST500-Besitzer (Gast)


Lesenswert?

>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).

von Wolfgang S. (wsm)


Lesenswert?

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.

von Micha J. (michady)


Lesenswert?

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

von Denny S. (nightstorm99)


Lesenswert?

Hallo!

Einfach mal suchen, gabs schon tausend mal.

Hier: http://www.rn-wissen.de/index.php/Servoansteuerung


Gruß Denny

von Karl H. (kbuchegg)


Lesenswert?

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?

von Micha J. (michady)


Lesenswert?

hi Denny,
was hat der Servo mit den Schrittmotor zu schaffen, der wird doch 
komplett anders angesteuert.

MFG

von Micha J. (michady)


Lesenswert?

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

von Axel D. (axel_jeromin) Benutzerseite


Lesenswert?

Hallo  Micha,
Deine LCD Ausgabe enthält bestimmt Wartezeiten, währenddessen keine 
Schritte zum Motor ausgegeben werden. Dadurch hast Du unterschiedlich 
lange Zeiten zwischen den Schritten.

Daher erst Fahren , dann Anzeige ändern.



Axel

von Micha J. (michady)


Lesenswert?

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

von Gerhard K. (mikros)


Lesenswert?

Hallo!

Wieso fragst Du nicht Dino?

von Axel D. (axel_jeromin) Benutzerseite


Lesenswert?

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

von Micha J. (michady)


Lesenswert?

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

von Charly B. (charly)


Lesenswert?

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

von Micha J. (michady)


Lesenswert?

Hallo Charly,
danke für deinen Vorschlag aber ich habe mich nun für eine andere 
Hardware entschieden, die Variante mit den L297 und L298 dort ist die 
Ansteuerung simpler gestaltet und es funktioniert gut was ich machen 
wollte.

frohes Fest noch.


Gruß micha

von Michael W. (retikulum)


Lesenswert?

Du umgehst das Problem und löst es nicht. Keine gute Technik.

Michael

von Micha J. (michady)


Lesenswert?

ja ich weiß, wollte diese erste Variante nur nehmen weil ich dafür 
weniger bauteile brauche, um ganz ehrlich zu sein, ich verstehe die 
Ansteuerung dafür nicht wiklich.

Gruß micha

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.