Schrittmotoransteuerung mit PB und Bausatz von Pollin

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Schrittmotoransteuerung mit PB und Bausatz von Pollin

Beitrag von DarkDragon »

Hallo,

Ich habe mich jetzt auch mal an die Schrittmotoren gewagt und erstmal den 12Euro Bausatz von Pollin und den HOWARD Motor zusammengewerkelt. Das funktionierte auch ganz gut, außer dass das Loch vom Kühlkörper eine ganze Lochlänge zu weit oben war.

Heute habe ich mich dran gemacht eine eigene Software dafür zu entwickeln. Nach einer viertel Stunde die Inpout32.dll zu Studieren mittels den Beispielcodes vom CodeArchiv(Vielen Dank NicTheQuick und lefaje) gelang es mir schon den Schrittmotor im Vollschritt laufen zu lassen. Das ganze habe ich dann weiter ausgebaut und das hier ist daraus entstanden:

Code: Alles auswählen

; Schrittmotoransteuerung mit dem Bausatz für 12Euro von Pollin und dem HOWARD 325704 Motor
; Autor: Daniel Brall (DarkDragon) (überglücklich, dass es funktioniert :-) )
; Benutzung auf eigene Gefahr!
; Dank geht an NicTheQuick und lefaje für die Beispielcodes

#HALF_STEP = 0  ; Halb Schritt Modus
#COUNT = 200  ; Schritte insgesamt
#DELAY = 15 ; Verzögerung
#PORT = $378 ; LPT Port

Structure SStep
  bValue.b
EndStructure

NewList Steps.SStep()

; Es kann auch etwas eigenes sein:
CompilerIf #HALF_STEP = 1
  AddElement(Steps()) : Steps()\bValue = %1000
  AddElement(Steps()) : Steps()\bValue = %1010
  AddElement(Steps()) : Steps()\bValue = %0010
  AddElement(Steps()) : Steps()\bValue = %0110
  AddElement(Steps()) : Steps()\bValue = %0100
  AddElement(Steps()) : Steps()\bValue = %0101
  AddElement(Steps()) : Steps()\bValue = %0001
  AddElement(Steps()) : Steps()\bValue = %1001
CompilerElse
  AddElement(Steps()) : Steps()\bValue = %1000
  AddElement(Steps()) : Steps()\bValue = %0010
  AddElement(Steps()) : Steps()\bValue = %0100
  AddElement(Steps()) : Steps()\bValue = %0001
CompilerEndIf

; Inpout32.dll öffnen und vorbereiten:
If OpenLibrary(0, "inpout32.dll")
  *out = GetFunction (0,"Out32")
  *in   = GetFunction (0,"Inp32")
  If  *out And *in
    
    ; Datenregister ist für uns am wichtigsten, trotzdem definiere ich die anderen 2 Register,
    ; weil von PIN 10/11 auch noch eine Leitung zum Bausatz geht(Vermutlich aktueller Status).
    d_reg = #PORT
    s_reg = #PORT+1
    c_reg = #PORT+2
    
    If CountList(Steps()) > 0
      For k=1 To #COUNT
        SelectElement(Steps(), k%CountList(Steps()))
        CallFunctionFast(*out, d_reg, Steps()\bValue)
        Delay(#DELAY)
      Next k
    EndIf
    
  Else
    MessageRequester("ERROR", "Library functions of inpout32.dll not found!", #PB_MessageRequester_Ok)
  EndIf
  CloseLibrary(0)
Else
  MessageRequester("ERROR","Library inpout32.dll not found",#PB_MessageRequester_Ok)
EndIf
Was ich alles bestellt habe(Für Neueinsteiger mit Interesse an so einem Bausatz):
pollin hat geschrieben:Menge Best.Nr. Artikelbezeichnung Einzelpreis Gesamtpreis
--------------------------------------------------------------------------------------
1 94-350139 Netzgerät PL152, 0...15V/2A 39,95 EUR 39,95 EUR
1 94-810027 Schrittmotorplatine, Bausatz 12,95 EUR 12,95 EUR
1 94-830143 Messleitungen mit Krokodilklemmen, 0,95 EUR 0,95 EUR
1 94-310335 Schrittmotor Howard Ind. 1-19-4203 2,95 EUR 2,95 EUR
1 94-720115 Sub-D-Verbindungskabel, 25-polig, 1,60 EUR 1,60 EUR
--------------------------------------------------------------------------------------
Verpackungspauschale (0,85% von 58,40 EUR) 0,50 EUR
Versandkostenpauschale 7,00 EUR
Die Gesamtsumme exkl. MwSt. beträgt 56,81 EUR
Die Gesamtsumme inkl. MwSt. beträgt 65,90 EUR
Wer schon etwas passendes Zuhause hat, wie z.B. das Netzteil oder das Sub-D Verbindungskabel braucht es nicht nochmal bestellen. Die Platine kann maximal 24V/2A und minimal 0,5A an den Schrittmotor weitergeben.

[EDIT]
Da war ein kleiner Bug drin, sollte jetzt behoben sein ;-) .
Zuletzt geändert von DarkDragon am 02.11.2006 09:53, insgesamt 1-mal geändert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag von stbi »

:allright:

danke auch für den Tipp mit dem Pollin-Bausatz! Und wenn ich mir die Schaltung so anschaue, dann müsste ich ja mit den übrigen Bits 4-7 eine weitere Platine ansteuern können ... <) ... ich suchte gerade ohnehin eine Steuerung für 2 Achsen ... <)

Eine Frage noch, denn das geht aus der Platinendoku nicht hervor: auf welche Pins laufen denn die beiden Schaltkontakte, die man noch anschliessen kann?
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

stbi hat geschrieben:Eine Frage noch, denn das geht aus der Platinendoku nicht hervor: auf welche Pins laufen denn die beiden Schaltkontakte, die man noch anschliessen kann?
Ich wundere mich auch darüber was "Schalter 1" und "Schalter 2" bedeuten soll. In der mitgelieferten Software sieht man auch 2 Knöpfe: Schalter 1/Schalter 2. Wenn ich auf diese Knöpfe klicke erscheint ein Popup-Window mit dem Titel "Eingang". Dort kann ich zwischen folgendem auswählen:

-"Start"
-"Stop"
-"Richtungswechsel"
-"Schneller"
-"Langsamer"
-"Voll-Schritt"
-"Halb-Schritt"
-"Speed+ Mode"

Vermutlich ist das einfach für eine manuelle Steuerung gedacht, sodass man nurnoch einen Schalter hinzufügen muss.

"Schalter 1" und "Schalter 2" sind mit den Pins 10/11 verbunden.

[EDIT]
Das mit den übrigen 4 Bits ginge wirklich, aber wenn du dir eine LPT Weiche baust kannst du diese universell nutzen, lässt die Schrittmotorplatine ganz und hast noch mehr Pins. Ich mache mich auch gerade an einen Schaltplan dafür, bin darin aber noch unerfahren und benutze desshalb AND Gatter:

http://85.214.72.24/schaltplan.png

Bisher sieht man nur eine 2er Weiche, bin noch am entwickeln. Die AND Gatter werden wohl 74AC08 sein.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Helmut
Beiträge: 162
Registriert: 20.09.2004 22:53

Beitrag von Helmut »

Da habe ich noch ein Link zu einem CNC-Projekt:
http://webs.ono.com/usr008/cucaracha/controladora.htm
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Helmut hat geschrieben:Da habe ich noch ein Link zu einem CNC-Projekt:
http://webs.ono.com/usr008/cucaracha/controladora.htm
Schade, kann ich nicht lesen(Ist zu sehr erweitertes fachsimpel-spanisch). :(
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag von stbi »

Pins 10 und 11 sind die Handshakeleitungen Ack und Busy, d.h. D4-D7 wären für den 2. Stepper noch frei, da bräuchte zumindest ich keinen Umschalter per Logik, weil ich mehr als 2 Achsen nicht bedienen muss. Dann kann ich mich ja mal an die Mechanik machen...

Zwei Schalter werde ich voraussichtlich auch benutzen, einen als Sensor für die Nullposition, den anderen als Startknopf.
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Beitrag von Falko »

Naja, mit den Schaltern, die über zwei Pins mit der LPT verbunden sind, sind doch sehr praktisch. einen wo du parallel 3 oder mehr Schalter anschliessen kannst, brauchst du später für die Nullpunktbestimmung der Achsen. Vorallem würde wohl dann die Steuerung den Schalter nach einem Kontakt freifahren, sodas einen nach dem anderen angefahren werden kann. Den anderen Kontakt würde man als Nothalt bentutzen, damit man noch von aussen reagieren kann ;).

Die Andschaltung sieht ja interessant aus. So kannst du über 2 Pins der LPT sagen, welche Schittstelle aktiv sein soll und diese dann seperat steuern. Ich muss mir das nochmal genau ansehen. Wenn man 3 unabhängig schalten möchte, muss man quasi das für 3 Schnittstellen machen.

Gruß Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Also ich hab hier mal ein Layout gemacht, mit dem man über einen LPT Port 3 solcher Schrittmotorkarten ansteuern kann(Danke an Falko und NicTheQuick):

http://85.214.72.24/layout.png

Hier ist der Schaltplan:

http://85.214.72.24/schaltplan2.png

Allerdings Fehlt noch etwas auf dem Layout: Die Pins 10/11 des LPTs sind nicht verbunden, das mach ich dann wenn der Rest fertig ist. Auf dem Schaltplan sieht man dafür leider auch nicht die Widerstände, geschweige denn die Stromversorgung(Der Schaltplaneditor kennt nur Widerstandsnetzwerke)

Nun meine Frage: Stimmt das so, oder wird das explodieren? Und kann ich die ICs 74AC08 auch durch einen 74HCT08 austauschen? In dem Datenblatt sehe ich auf den ersten Blick keinen Unterschied. Sonst müsste ich 2 mal Porto bezahlen.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
sharkpeter
Beiträge: 474
Registriert: 29.08.2004 16:18
Wohnort: Dresden
Kontaktdaten:

Beitrag von sharkpeter »

@DD,

Falko hat mich eben gebeten die Schaltpläne mal anzusehen. Also im Prinzip
denke ich, es sollte so gehen.

Wegen der Schaltkreise:

die ACT sind sicher ein wenig schneller als die HC. Du solltest dir im Datenblatt
mal ansehen, wie es mit der Treiberlast bestellt ist.

Und noch was:

Kannst du Sicherstellen, das von außen nichts zurückkommt?
Wenn nicht, dann würde ich im Zweifel 74xx03 benutzen, die haben einen
OpenKollektor-Ausgang. Du müßtest dann den Ausgang jeweils mit einem
Widerstand nach +U verbinden. Und du müßtest zwei Gatter verwenden,
da der xx03 kein AND sondern ein NAND ist.

Falls es auch AND mit OC gibt, kannst du auch die benutzen. Müßte ich sonst
nachsehen, weil weiß ich so nicht.

Gruß Jens
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.
gbalzarek
Beiträge: 38
Registriert: 06.07.2006 22:18
Wohnort: D-Südwest

Beitrag von gbalzarek »

Die beiden Schalter dienen i.d.R. als Endlagenschalter. Damit wird verhindert, daß eine Endlage überfahren wird. Außerdem kann die Mechanik damit referenziert werden, da die aktuelle Position nach dem Abschalten vergessen wurde.
Antworten