PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schrittmotoransteuerung über IC und Arduino uno in Bascom (ein bisschen Dringen)



Balu18
17.12.2013, 20:15
Hey leute hoffe ihr könnt mir helfen.
Ich muss für ein Projekt in der Schule eine Motordrehzahlregelung basteln wir haben dazu diese Teile zur Verfügung gestellt bekommen:
- Arduino Uno mit Atmega 328P
- Step Motor 28byj-4
- das Dazugehörige IC Board mit einem ULN2003 http://www.amazon.de/28BYJ-48-28BYJ48-4-Phase-Arduino-Stepper/dp/B00ATA5MFE

Angeschlossen habe ich das IC board an die Pinb 0-3 des Atmega
Jetzt ist mein Porblem das Mein code nicht funzt und das unser lehrer uns ziehmlich alleine lässt mit unseren Problemen. Das Problem dabei ist außerdem, dass ich nur Beispiele in c oder dieser komischen Arduino Sprache finde, da ich aber in der Schule mit Bassic arbeiten muss habe ich mich mit den anderen nie beschäftigt und gelernt :(

Das Programm an sich ist ziehmlich simpel. Es werden einfach die vier Phasen hoch und runter gespielt und der Waitms befehl mit der Varriablen x diehnt später zur regelung.


$regfile "m328pdef.dat"
$crystal = 16000000

'Schrittmotorpins
Config Pinb.0 = Output 'Motorpin1
Config Pinb.1 = Output 'Motorpin2
Config Pinb.2 = Output 'Motorpin3
Config Pinb.3 = Output 'Motorpin4

Dim X As Word 'X soll zur Geschwindigkeitsregelung dienen

X = 100


Do

'Phase 1
Pinb.0 = 1
Pinb.1 = 0
Pinb.2 = 0
Pinb.3 = 0
Waitms X
'Phase 2
Pinb.0 = 1
Pinb.1 = 1
Pinb.2 = 0
Pinb.3 = 0
Waitms X
'Phase 3
Pinb.0 = 0
Pinb.1 = 1
Pinb.2 = 0
Pinb.3 = 0
Waitms X
'Phase 4
Pinb.0 = 0
Pinb.1 = 1
Pinb.2 = 1
Pinb.3 = 0
Waitms X
'Phase 5
Pinb.0 = 0
Pinb.1 = 0
Pinb.2 = 1
Pinb.3 = 0
Waitms X
'Phase 6
Pinb.0 = 0
Pinb.1 = 0
Pinb.2 = 1
Pinb.3 = 1
Waitms X
'Phase 7
Pinb.0 = 0
Pinb.1 = 0
Pinb.2 = 0
Pinb.3 = 1
Waitms X
'Phase 8
Pinb.0 = 1
Pinb.1 = 0
Pinb.2 = 0
Pinb.3 = 1
Waitms X
'################################################# ###########################
'Phase 1
Pinb.3 = 1
Pinb.2 = 0
Pinb.1 = 0
Pinb.0 = 0
Waitms X
'Phase 2
Pinb.3 = 1
Pinb.2 = 1
Pinb.1 = 0
Pinb.0 = 0
Waitms X
'Phase 3
Pinb.3 = 0
Pinb.2 = 1
Pinb.1 = 0
Pinb.0 = 0
Waitms X
'Phase 4
Pinb.3 = 0
Pinb.2 = 1
Pinb.1 = 1
Pinb.0 = 0
Waitms X
'Phase 5
Pinb.3 = 0
Pinb.2 = 0
Pinb.1 = 1
Pinb.0 = 0
Waitms X
'Phase 6
Pinb.3 = 0
Pinb.2 = 0
Pinb.1 = 1
Pinb.0 = 1
Waitms X
'Phase 7
Pinb.3 = 0
Pinb.2 = 0
Pinb.1 = 0
Pinb.0 = 1
Waitms X
'Phase 8
Pinb.3 = 1
Pinb.2 = 0
Pinb.1 = 0
Pinb.0 = 1
Waitms X

Loop

End 'end program




Ich bedanke mich schonmal im Vorraus!!!!
Lg Balu18

robin
17.12.2013, 20:35
Hab mal kurz gegoogelt, da ich bascom schon länger nicht mehr verwendet habe. Aber es scheint so, dass du dein Pinb.x gegen Portb.x austauschen musst.

Macht auch sin, da beim ATMEGA die Input-Register Pin genannt werden, Output heißt Port.

Da ich wie gesagt länger nicht mit gearbeitet hab, alle angaben ohne Gewähr ;)

Balu18
17.12.2013, 21:12
Super sonen einf<chen ersten fehler hab ich glatt übersehen:D
aber jetzt funzt das immer noch nicht da der letzte ausgang PINB.3 auf dem board nur kurz bzw ein ganz schwaches signal bekommt, der led zu folge :/.
aber das Grundprinziep der schrittmotoren ist doch, dass mann eine position nach der anderen durchschaltet ??

Geistesblitz
18.12.2013, 01:13
Oha, mit Phasen einzeln ansteuern, das ist ja eklig...ein Glück, das nehmen einem die Schrittmotorcontroller normalerweise ab. Wie ist denn eigentlich der Schrittmotor an den AVR angeschlossen? Über Tranistoren oder H-Brücken?
Am Einfachsten wäre es wohl, am Anfang einfach nur Config Portb=Output anzugeben, da kannst nix falsch machen.
Hast zwar Spaghetticode vom Feinsten, aber an sich sollte es eigentlich funktionieren (jedenfalls, wenn du immer schön Portb schreibst). Du kannst das auch ein wenig abkürzen, indem du das in einen Befehl packst:


Portb=&B0001100

würde beispielsweise Portb.2 und Portb.3 auf High schalten, den Rest von Portb auf Low.

Warum steht die Schrittsequenz eigentlich doppelt da? Wird doch eh wiederholt...
Ich seh gerade, dass da die Pins vertauscht wurden. Der Motor macht also immer 4 Schritte vor und wieder 4 Schritte zurück...

Ansonsten les dich mal ein wenig hier ein, da gibts viele gute Tipps zu Bascom (guck ich auch oft nochmal rein):
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/