PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom / Schrittmotoren Ansteuerung



Asuro91
03.08.2010, 19:28
hi
ich hab en Problem ich hab einen Bipolare Schrittmotor den ich ansteuern will.
ich hab mir die tabelle in rn-wissen http://www.rn-wissen.de/index.php/Schrittmotoren angeschaut und hab dafür eine Code geschrieben und auf meinem mega32 geflasht ( ich benutze ein rn-bord mit dem dort verbauten motor treiber) mein problem is das der sich net richtig dreht sondern nur ruckelt vieleicht kann ja mal jemand kurz mal den code anschauen vieleicht hab ich es auch komplet falsch gemacht.
danke Micha



$regfile = "m32Def.dat"
$crystal = 16000000


Config Portb.0 = Output
Motor1_spule1a Alias Portb.0
Config Portb.1 = Output
Motor1_spule1b Alias Portb.1
Config Portc.6 = Output
Motor1_spule2a Alias Portc.6
Config Portc.7 = Output
Motor1_spule2b Alias Portc.7
Config Pina.0 = Input
Taster_links Alias Pina.0
Config Pina.1 = Input
Taster_rechts Alias Pina.1

Porta.1 = 1
Porta.0 = 1
Do
If Taster_rechts = 0 Then

Motor1_spule1a = 1
Motor1_spule1b = 0
Motor1_spule2a = 1
Motor1_spule2b = 0
Waitms 10

Motor1_spule1a = 1
Motor1_spule1b = 0
Motor1_spule2a = 0
Motor1_spule2b = 1
Waitms 10


Motor1_spule1a = 0
Motor1_spule1b = 1
Motor1_spule2a = 0
Motor1_spule2b = 1
Waitms 10

Motor1_spule1a = 0
Motor1_spule1b = 1
Motor1_spule2a = 1
Motor1_spule2b = 0

End If
Loop
End

Carlos31
03.08.2010, 20:11
hi
das rn board hat sicher ein takt und richtungs signal , (l298, l297) denke ich , du must nicht jede spule separat ansteuern , schau dir ein beispiel program von dein board.
Guss

Asuro91
03.08.2010, 20:50
hi des bord ist mit einem L293D motortreiber ausgestattet. ich versteh nur nicht was du mit" takt und richtungs signal , (l298, l297) denke ich , du must nicht jede spule separat ansteuern" ich dachte man mzss jede spule seperat ansteuern da vom mC vier drähte in den motortreiber gehen und vier wider raus......und nach einem beispiel program für einem schrittmotor hab ich schon geschaut und keins gefunden
Gruss micha

Kampi
03.08.2010, 20:59
Es gibt "intelligente" Motortreiber die benötigen nur eine Richtungsvorgabe und dann macht der Schrittmotor mit jedem Takt einen Schritt. Bei einem normalen Motortreiber wie dem L297 musst du es so machen das die Spulen von dem Schrittmotor an dem Output von dem Treiber angeschlossen werden.

Asuro91
03.08.2010, 21:08
hi
@Kampi ich benutz ja des rn-controlerbord wie ich des anschlies is mir klar ich hab nur kein plan wie der Quellcode aussehen soll und ich benutz nicht einen L297 sondern einen L293D.... und wie geb ich im quellcode die richtung an könntet ihr mir ein beispiel geben oder posten also einen code wie ich des an den l293d weitergeb mit der dreh richtug und der bitfolge das sich der motor dreht
danke

Kampi
03.08.2010, 21:24
Ähhh meinte einen L293....tschuldigung Zahlendreher.
Die Richtung gibst du durch die Bitreihenfolge an. Die Motorspulen werden ja an die H-Brücken des Motortreibers angeschlossen.
D.h. du legst die beiden Enable-Pins auf High. Und dann werden die einzelnen Input-Pins nacheinander auf High gelegt.

Asuro91
03.08.2010, 21:44
hi also ich hab jetzt die enable pins auf high und dan die input pins alle nach einander auf high gelegt und der schrittmotor dreht sich völlig ohne system vor und zurück und wakclet hin und her
hier ist der code ich weiß net was ich falsch mach


$regfile = "m32Def.dat"
$crystal = 16000000


Config Portb.0 = Output
Motor1_spule1a Alias Portb.0
Config Portb.1 = Output
Motor1_spule1b Alias Portb.1
Config Portc.6 = Output
Motor1_spule2a Alias Portc.6
Config Portc.7 = Output
Motor1_spule2b Alias Portc.7
Config Pina.0 = Input
Taster_links Alias Pina.0
Config Pina.1 = Input
Taster_rechts Alias Pina.1
Config Portd.5 = Output
Config Portd.4 = Output


Porta.1 = 1
Porta.0 = 1
Portd.5 = 1
Portd.4 = 1

Do
If Taster_rechts = 0 Then

Motor1_spule1a = 1
Motor1_spule1b = 0
Motor1_spule2a = 0
Motor1_spule2b = 0
Waitms 2

Motor1_spule1a = 0
Motor1_spule1b = 1
Motor1_spule2a = 0
Motor1_spule2b = 0
Waitms 2


Motor1_spule1a = 0
Motor1_spule1b = 0
Motor1_spule2a = 1
Motor1_spule2b = 0
Waitms 2

Motor1_spule1a = 0
Motor1_spule1b = 0
Motor1_spule2a = 0
Motor1_spule2b = 1
Waitms 2

End If
Loop
End

Kampi
03.08.2010, 21:51
Schau mal hier drunter nach:
-> http://www.mikrocontroller.net/topic/158488
Weil du musst die Spulen auch schon richtig herum ansteuern. So wie du das gemacht hast lässt du den Motor erst nach links drehen und kehrst dann einfach die Polarität um und dadurch macht er einen Step zurück.

Asuro91
03.08.2010, 22:48
ja des is gerade mein problem das der einen step vor mancht und dan einen zurück auf der seite hab ich nix richtg gefunden was mir hilft die machen des doch auch so wie ich das die des einfach rum drehen also der code hier lässt den motor ein mal vor und einmal zurück drehen also einen step wie mach ich des das der nur links und nur rechts dreht????
sorry ich bin da voll der neuling und kapier es nicht



$regfile = "m32Def.dat"
$crystal = 16000000


Config Portb.0 = Output
Motor1_spule2a Alias Portb.0

Config Portb.1 = Output
Motor1_spule2b Alias Portb.1

Config Portc.6 = Output
Motor1_spule1a Alias Portc.6

Config Portc.7 = Output
Motor1_spule1b Alias Portc.7

Config Pina.0 = Input
Taster_links Alias Pina.0

Config Pina.1 = Input
Taster_rechts Alias Pina.1

'Config Portd.5 = Output
'Config Portd.4 = Output


Porta.1 = 1
Porta.0 = 1
'Portd.5 = 1
'Portd.4 = 1

Do
If Taster_rechts = 0 Then

Motor1_spule1a = 1
Motor1_spule1b = 0
Motor1_spule2a = 0
Motor1_spule2b = 1
Waitms 500

Motor1_spule1a = 1
Motor1_spule1b = 0
Motor1_spule2a = 1
Motor1_spule2b = 0
Waitms 500


Motor1_spule1a = 0
Motor1_spule1b = 1
Motor1_spule2a = 1
Motor1_spule2b = 0
Waitms 500

Motor1_spule1a = 0
Motor1_spule1b = 1
Motor1_spule2a = 0
Motor1_spule2b = 1
Waitms 500


End If
Loop
End

Asuro91
04.08.2010, 11:54
hey
gibts da niemand der ne ahnung hat warum des sooo ist ??????

Asuro91
04.08.2010, 15:16
hey
habs jetzt selbst raus gefunden ich hatte die bitreienfolge falsch ich hab se jetzt sotiert und dann noch die zeit verändert und der motor schnurrt heh
danke noch mal