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