mikrocontroller.net

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


Autor: Micha Joo (michady)
Datum:

Bewertung
0 lesenswert
nicht 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 Moderator
Autor: ST500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Micha Joo (michady)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Denny S. (nightstorm99)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Einfach mal suchen, gabs schon tausend mal.

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


Gruß Denny

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Micha Joo (michady)
Datum:

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

MFG

Autor: Micha Joo (michady)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Axel Düsendieb (axel_jeromin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Micha Joo (michady)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gerhard K. (mikros)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Wieso fragst Du nicht Dino?

Autor: Axel Düsendieb (axel_jeromin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Micha Joo (michady)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Charly B. (charly)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Micha Joo (michady)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael W. (retikulum)
Datum:

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

Michael

Autor: Micha Joo (michady)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.