PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RN-Control und Schrittmotor



FHarry
21.12.2004, 21:20
Hallo miteinander,

ich habe leider beim Browsen durch's Forum keine Antwort auf meine Frage gefunden. Ich bräuchte ein Code-Schnipsel oder auch nur ein Gerüst in BASCOM um einen Schrittmotor mit dem RN-Control, also L293D anzusteuern.

Ich hab seit 1 Woche ein RN-Control. Ist jetzt fertig aufgebaut und funzt einwandfrei. Desweiteren hab ich einen bipolaren Saia Schrittmotor vor mir liegen.

Ich bin zwar Softwareentwickler, bin mit Atmel aber bisher nicht in Berührung gekommen. Habe mich auch etwas in die Materie mit Schrittmotoren eingelesen. Aber jetzt setzt es aus.

Kann mir jemand weiter helfen? Ich weiß, daß die Frage nach RN-Control und Schrittmotor schon einige male gestellt wurde. Leider bisher noch unbeantwortet.

Grüße,

Harry

Dino Dieter
21.12.2004, 22:01
Hallo

Wo klemmt es denn genau ?

Grundsätzlich brauchst du ja nur ein bestimmtes Bit muster auf den Port zu legen und gut ist.

Ich lege mit das Bitmuster gerne in ein Array an. Dann brauchst du nur eine Variable hoch oder runter zählen lassen und schon hast du immer das richtige Bitmuster auf dem Port.

Hinzu kommt dann noch, das die 4 Leitungen auf 2 Port verteilt sind. Spielt aber auch keine Rolle.

Sag mal wo es klemmt, dann schauen wir weiter.

MFG
Dieter

Andree-HB
21.12.2004, 22:15
Hey Harry, stehe gerade vor dem EXAKT gleichen "Problem". Lerne auch gerade hauptsächlich durch Codeschnipsel, habe aber leider ebenfalls noch nix Passendes für unser gemeinsames Anliegen gefunden.

Könnte nicht vielleicht bitte mal Jemand eine kurze Routine für `nen bipolaren SM an den Motoranschlüssen des rn-control schreiben. ?

Wäre super - THX !!!

Gruss aus Bremen
Andree

RCO
21.12.2004, 22:23
Also das Bitmuster lässt sich einfach so erstellen, aber frag mich nciht, was mit den Eingängen/Ausgängen Enable A/B und Sen A/B passiert.


Config Portb = Output

A Alias Portb.0
B Alias Portb.1
C Alias Portb.2
D Alias Portb.3

Portb = 0

Dim Zeit As Byte

Zeit = 10

Do
A = 1 : C = 0 'A und D (nach erstem Durchlauf)
Waitms Zeit
D = 0 : B = 1 'A und B
Waitms Zeit
A = 0 : C = 1 'B und C
Waitms Zeit
B = 0 : D = 1 'C und D
Waitms Zeit

Loop

Andree-HB
21.12.2004, 23:14
...danke Dir, so kann ich es nachvollziehen - per output der LED`s am Port C funktioniert es einwandfrei und nun nachvollziehbar. Muss mir gleich mal die entsprechenden Pins der Ports b,c,d richtig zurechtpflücken um den Motor am Treiber-IC anzusteuern. (Frage mich nun allerdings, warum nicht nur lediglich ein kompletter Port für die Ansteuerung der Motoren genommen wurde, sondern die Kombination von Pins aus drei Ports)

Hast mir aber schon mal sehr geholfen !!!

Frank
22.12.2004, 00:27
Du kannst es alternativ auch recht übersichtlich mit einer Funktion machen. Hab leider kein komplettes Beispiel zur Hand, aber so in etwa könnte es aussehen:



Sub Motorstep( )

Incr Ilinksschritt
If Ilinksschritt > 4 Then
Ilinksschritt = 1
End If

Select Case Ilinksschritt 'Schritt für Linken Motor
Case 1:
Links_a = 1
Links_b = 0
Links_c = 1
Links_d = 0
Case 2:
Links_a = 1
Links_b = 0
Links_c = 0
Links_d = 1
Case 3:
Links_a = 0
Links_b = 1
Links_c = 0
Links_d = 1
Case 4:
Links_a = 0
Links_b = 1
Links_c = 1
Links_d = 0
End Select

End Sub

Die Bezeichnungen Links_a , Links_b, Links_c, Links_d sind in diesem Fall die 4 Ports wo der L293D Motortreiber dran hängt.
Mit jedem Aufruf der Funktion macht der Motor einen Schritt!
Vielleicht schafft es mal jemand zeitlich bei Gegenheit ein kleines Demo dazu in Download Bereich zu posten.

Gruß Frank

FHarry
22.12.2004, 15:40
Danke an alle,

das mit dem Bitmuster hab ich auch geschnallt. Nur frag ich mich, ob Pwm1a etc. nicht auch noch was damit zu tun hat? Ich mach's folgendermaßen, aber es passiert rein gar nichts:

erstmal Originalcode aus RnControlTest.bas
Config Pinc.6 = Output 'Linker Motor Kanal 1
Config Pinc.7 = Output 'Linker Motor Kanal 2
Config Pind.4 = Output 'Linker Motor PWM
'Ports für rechten Motor
Config Pinb.0 = Output 'Rechter Motor Kanal 1
Config Pinb.1 = Output 'Rechter Motor Kanal 2
Config Pind.5 = Output 'Rechter Motor PWM

und dann:
Sub Motortest()
'Linker Motor ein

A Alias Pinc.6
B Alias Pinc.7
C Alias Pinb.0
D Alias Pinb.1

Dim Zeit As Byte
Zeit = 10

Portd.4 = 1
Portd.5 = 1

A = 1 : C = 0
Waitms Zeit
D = 0 : B = 1
Waitms Zeit
A = 0 : C = 1
Waitms Zeit
B = 0 : D = 1
Waitms Zeit
end sub

Wenn ich jetzt dazwischen (nach Portd.5=1) Pwm1a = 40 und Pwm1b=40 einbaue, dann summt der Motor wenigstens. Nützt zwar nix, aber wenigstens ein Lebenszeichen.

Wer hat jetzt noch nen Tip für mich?

Frank
22.12.2004, 16:18
PWM wird bei der einfachen Schrittmotorsteuerung nicht benutzt (wenn Schrittmotor Nennspannung in etwa der Betriebsspannung entspricht).
Du musst die Ports an Enable lediglich auf Output High schalten damit Motortreiber aktiviert wird.

z.B.
Portd.4 = 1
Portd.5 = 1

Wenn du die Ports als PWM Port definiert hast (siehe in einer Config-Anweisung, ganz am Anfang vermute ich), dann kannst du damit auch die Spannung regeln und auch Schrittmotoren mit kleiner Nennspannung anschließen.

Gruß Frank

FHarry
22.12.2004, 19:24
Hallo Frank,

also ich hab jetzt mal folgende Config für ports gemacht:
Config Portb = Output
Config Portc = Output
Config Portd = Output

schätze, damit werden diese Anweisungen wohl überflüssig:
Config Pinc.6 = Output

Nun rührt sich aber immer noch nix. Was macht diese Anweisung:
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Hab ich aus derm Original rncontroltest.bas einfach mal gelassen. Ist es das was du meinst mit "Port als PWM Port definieren"?

By the way: Mann kann doch mit nem Multimeter ausmessen, welches Adernpaar vom Schrittmotor zu einer Spule gehört, oder? Wie geht das? Nur für den Fall, daß ich meinen SAIA falsch angeschlossen hätte. Der hat nämlich Grau, Grün, Rot und Schwarz.

Vielen Dank für Eure Hilfe,

Harry

FHarry
22.12.2004, 19:32
Hmm,

wenn ich mit meinem Multimeter auf die vier ausgänge gehe (dort wo mein Motor angeschlossen ist), dann wird während meiner Loop nix angezeigt, sprich 0 Volt. Kommt also keine Spannung an.

Ja, ja, ich weiss schon, Anfängerfehler. Also ihr Cracks, helft mir mal auf die Sprünge.

Harry

Frank
22.12.2004, 19:39
Hi,

ja genau, diese Anweisung


config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

musst du rausnehmen WENN SCHRITTMOTOR NENNSPANNUNG DER BETRIEBSSPANNUNG ENTSPRICHT (zumindest in etwa).

Ich hab jetzt gerade nicht die Portbelegung der rn-control vorliegen, aber ich würde nicht pauschal ganze Ports auf Ausgang definieren. Oft sind dann auch Portleitungen darunter die man für RS232 oder I2C oder irgendwas anderes braucht. Lieber gezielt die einzelnen Ports auf Ausgang, so wie du es vorher gemacht hast.

Das Ausmessen der Schrittmotorleitungen sowie andere wichtige Dinge findest du hier:
https://www.roboternetz.de/schrittmotoren.html

Ich muss leider immer wieder auf die Seite verweisen, es bringt ja keinem was wenn man hier nochmals alles wiederholt was dort bebildert steht!

Frank
22.12.2004, 19:44
Wenn du es bis morgen immer noch nicht hin bekommst, dann poste mal den ganzen Source Code (lass nix weg).
Du musst auch darauf achten das im Bascom Compiler die Soft- und Hardware-Stack und Frame-Werte erhöht werden, ansonst gibt es mit Sub-Funktionen Stackprobleme die schwierig zu finden sind. Nimm z.B. überall 64 ! Glaub unter Optionen Chip stellt man das ein

FHarry
22.12.2004, 19:56
yo man,

ich krieg die Krise, es geht. Der Motor dreht. Genial, genial. Es lag an der "Config Timer...." - Kiste. Gut, das war jetzt mal der Vollschritt. Der Motor macht schon ordentlich Ruckel-Ruckel wenn er dreht. Würde sagen, im Normalfall nicht schlimm. Jedoch muß das Teil bei mir an's Teleskop um den Okularauszug zu motorisieren. Und genau deshalb motorisiert man die Dinger ja, weil die Hand beim fokussieren einfach zittert.

Denke, das ganze bekomme ich mit Halbscrhitt hin. Microschritt geht ja glaube ich nur bei unipolar.

Melde mich wieder wenn ich mein kleines sample komplett habe. Werd's dann hier posten.

Grüße,

Harry

Frank
22.12.2004, 20:15
Na fein, so soll es sein. Probier mal unterschiedliche Geschwindigkeiten aus (also unterschiedliche Pausenwerte zwischen den Schritten). Die Motoren vibrieren sehr unterschiedlich bei den einzelnen Geschwindigkeiten. Halbschritt ist natürlich noch ruhiger.
Das mit Microschritt klappt leider nicht so einfach, aber braucht man in der Regel auch nicht. Zudem kommt es ja auch noch drauf an wieviel Schritte dein Motor pro Umdrehung macht. Gute Motoren machen in der Regel 200 Schritte (400 Halbschritte). Lauter sind natürlich Motoren die weniger Schritte machen.
Zudem achte darauf das die Pausen zwischen den 4 Schritten gleichmäßig sind, ansonsten wird das ganze immer laut bleiben.

Dann mal viel Spaß beim perfektionieren deinen Programmes. Wenn du dann alles getestet hast, vielleicht kannst du dann für die anderen ein Beispielprogramm posten oder im Download-Bereich uploaden.

Gruß Frank

FHarry
22.12.2004, 21:48
Hallo Frank,

geht schon ganz gut. Eine hab ich noch: Was muß ich anstellen, um den Motor in die andere Richtung laufen zu lassen? Bisher läuft der bei mir ja immer nur in die eine Richtung. Einfach mit dem Bitmuster von hinten anfangen?

Grüße,

Harry

22.12.2004, 22:29
Genau, Du hast es selbst gesagt:


Einfach mit dem Bitmuster von hinten anfangen