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
>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).
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.
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
Hallo! Einfach mal suchen, gabs schon tausend mal. Hier: http://www.rn-wissen.de/index.php/Servoansteuerung Gruß Denny
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?
hi Denny, was hat der Servo mit den Schrittmotor zu schaffen, der wird doch komplett anders angesteuert. MFG
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
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
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
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
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
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
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
Du umgehst das Problem und löst es nicht. Keine gute Technik. Michael
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.