Probleme mit Taktgenerator [STEP7]

openminded23

Level-1
Beiträge
49
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.
Ich benötige für eine Schrittmotorsteuerung einen Taktgenerator, der eine Taktzeit zwischen 100µs und 500µs liefern kann. In der Fachschule haben wir einen Taktgenerator programmiert, der allerdings nur mit einer S7-Zeit arbeitet, dessen kleinste Zeiteinheit 10ms ist - für unsere Schrittmotorsteuerung leider viel zu wenig.

Vielleicht habt ihr eine Idee, wie ich diesen Taktgenerator realisieren könnte.

Zur eingesetzten Technik:
Siemens Kompakt CPU 313C, Firmwarestand v2.6


Über Antworten würde ich mich freuen.

-------------------------------------------------------------------------

Mit freundlichen Grüßen
OpenMinded23
 

Anhänge

Zuletzt bearbeitet:
Hallo zusammen.
Ich benötige für eine Schrittmotorsteuerung einen Taktgenerator, der eine Taktzeit zwischen 100µs und 500µs liefern kann. In der Fachschule haben wir einen Taktgenerator programmiert, der allerdings nur mit einer S7-Zeit arbeitet, dessen kleinste Zeiteinheit 10ms ist - für unsere Schrittmotorsteuerung leider viel zu wenig.

Vielleicht habt ihr eine Idee, wie ich diesen Taktgenerator realisieren könnte.

Zur eingesetzten Technik:
Siemens Kompakt CPU 313C, Firmwarestand v2.6


Über Antworten würde ich mich freuen.

-------------------------------------------------------------------------

Mit freundlichen Grüßen
OpenMinded23
Bei 100uS ist softwaremäßig nichts zu machen.
Wenn es eine Schulaufgabe, für dich privat oder für eine große Serie kleiner Geräte ist, nimm einen Mikrocontroller wie Atmel AVR oder PIC, der kriegt das locker hin.
Wenn es Siemens sein muß, schau dich nach Schrittmotorsteuerkarten um.
Wenn der Motor auch noch punktgenau starten/stoppen, Geschwindigkeiten einhalten oder mehrere Motoren sychronisiert werden sollen, um vorgebenen Bahnen abzufahren (Kurve zeichnen, Kontour fräsen etc.) gibt es spezielle Mehrachssteuerungen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.
Ich benötige für eine Schrittmotorsteuerung einen Taktgenerator, der eine Taktzeit zwischen 100µs und 500µs liefern kann. In der Fachschule haben wir einen Taktgenerator programmiert, der allerdings nur mit einer S7-Zeit arbeitet, dessen kleinste Zeiteinheit 10ms ist - für unsere Schrittmotorsteuerung leider viel zu wenig.

Vielleicht habt ihr eine Idee, wie ich diesen Taktgenerator realisieren könnte.

Zur eingesetzten Technik:
Siemens Kompakt CPU 313C, Firmwarestand v2.6


Über Antworten würde ich mich freuen.

-------------------------------------------------------------------------

Mit freundlichen Grüßen
OpenMinded23

Hallo,

die 313C kann soviel ich weiss nur maximal 400µs Impulse bei ohmischer Last schalten. Für Schrittmotore gibt es Psoitionierbaugruppen FM.

Grüsse
 
Vielen Dank für eure Antworten.

Jede Taktzeit kleiner als 10ms ist für mich akzeptabel.

@Zottel:
Ich benötige den Taktgenerator für eine Projektarbeit (ähnlich der Meisterarbeit), diese wird dann sozusagen unsere praktische Prüfung. Um jetzt noch eine Schaltung per Mikrocontroller zu programmieren fehlt uns einfach die Zeit. Leider.

@Maxi:
Wenn ich einen Takt von 400µs erzeugen könnte, wäre das auch schon sehr hilfreich. dann würde ich für eine 360° Umdrehung nicht so lange brauchen wie jetzt :D. Wie kann ich bzw. wie könnte ich denn den Takt noch erzeugen, außer mit meiner Funktion? Denn wie bereits gesagt, bei der S7 - Zeit ist bei 10ms einfach Schluss.
 
Wie hoch ist denn die Zykluszeit deiner Steuerung ...?
Eine Alternative wäre noch der OB35-Aufruf. Hier köntest du ggf. auf ein 2ms-Intervall als Zyklus kommen und damit auf ein Impuls-Intervall von 4ms (m.E.). Das setzt aber voraus, dass du direkt mit den Perepherie-Adressen arbeitest ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie hoch ist denn die Zykluszeit deiner Steuerung ...?
Eine Alternative wäre noch der OB35-Aufruf. Hier köntest du ggf. auf ein 2ms-Intervall als Zyklus kommen und damit auf ein Impuls-Intervall von 4ms (m.E.). Das setzt aber voraus, dass du direkt mit den Perepherie-Adressen arbeitest ...

Gruß
LL

Wie im ersten Beitrag bereits geschrieben müsste ich eine Zykluszeit von 100µs bis 500µs erreichen - das wäre dann optimal.

Wie würde denn ein Aufruf im OB35 aussehen (inkl. den direkten Adressen)?
 
Zuletzt bearbeitet:
Jetzt kann ich deiner Berechnung nicht ganz folgen. Du hast einen Schrittmotor mit Schrittwinkel 1.8°?
Das heisst im Halbschrittbetrieb sind das 400 Schritte für 360°. Wenn du jetzt einen Takt von 4ms hast dauert eine Umdrehung des Motors 1.6 Sekunden, bei 100us dauert eine Umdrehung "nur" 40ms...

Wäre das nicht schon bei deinen Wünschen entsprechend?

Hast du den Motor schon gedreht um zu sehen wie schnell du ihn zum drehen bringst?
 
Jetzt kann ich deiner Berechnung nicht ganz folgen. Du hast einen Schrittmotor mit Schrittwinkel 1.8°?
Das heisst im Halbschrittbetrieb sind das 400 Schritte für 360°. Wenn du jetzt einen Takt von 4ms hast dauert eine Umdrehung des Motors 1.6 Sekunden, bei 100us dauert eine Umdrehung "nur" 40ms...

Wäre das nicht schon bei deinen Wünschen entsprechend?

Hast du den Motor schon gedreht um zu sehen wie schnell du ihn zum drehen bringst?

Mist, kleiner Denkfehler :neutral:. 400 Schritte pro 360° ist so schon richtig. Dann würde auch ein Takt von 4ms schon bei weitem ausreichen. Aktuell habe ich eine Zykluszeit von 20ms - das wären dann also 8 Sekunden pro Umdrehung. Könnte mir jemand erklären, wie ich denn nun einen Aufruf im OB35 gestalten würde?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
die Benutzung des OB35 sieht genauso aus, wie die des OB1 ...
In der HW-Konfig der CPU gibst du das gewünschte Intervall für den OB35 an (Standard ist glaube ich 100ms - es geht aber auch mit 1ms). Entscheidend ist hier, dass das Programmteil, das du hier verwendest nicht mehr Zeit benötigt, als das Intervall des OB beträgt - sonst geht deine CPU in den Stop.
Um dir konkret weiterhelfen zu können wäre es hilfreich, wenn du deinen bisherigen Code hier mal veröffnetlichen könntest (für den Fall, dass du nicht weiterkommst).

Woher weißt du, dass die Zykluszeit deines Programms im Mikrosekundenbereich liegt ?

Gruß
LL
 
Hallo,
die Benutzung des OB35 sieht genauso aus, wie die des OB1 ...
In der HW-Konfig der CPU gibst du das gewünschte Intervall für den OB35 an (Standard ist glaube ich 100ms - es geht aber auch mit 1ms). Entscheidend ist hier, dass das Programmteil, das du hier verwendest nicht mehr Zeit benötigt, als das Intervall des OB beträgt - sonst geht deine CPU in den Stop.
Um dir konkret weiterhelfen zu können wäre es hilfreich, wenn du deinen bisherigen Code hier mal veröffnetlichen könntest (für den Fall, dass du nicht weiterkommst).

Woher weißt du, dass die Zykluszeit deines Programms im Mikrosekundenbereich liegt ?

Gruß
LL

Das Programm, welches ich aktuell verwende, findest du in meinem ersten Beitrag hier auf der Seite als PDF-Datei. Da wir allerdings bisher nur in FUP programmiert haben, liegt eben dieses auch nur in FUP vor. Ich gehe bei der Benutzung schwer davon aus, dass beide Zeiten, also "S5T#10S", eine Zykluszeit von insgesamt 20ms ergeben. Das wäre jetzt für mich logisch. Und mein Problem ist ja, dass ich bei Verwendung der S5-Zeit keinen Zeitwert kleiner 10ms eingeben kann. Daher kann ich das Programm, welches ich verwende, eigentlich ja nicht benutzen, und benötige ein komplett neues. Oder?
 
... genau so ...
Wenn du den OB35 verwendest, dann wird dieser (unabhängig von deinen ggf. vorhandenen restlichen Programm) im eingestellten Zeitraster aufgerufen. Timer einzubauen verbietet sich hier schon von selbst. Da du ja schnell sein möchtest, solltest du das Aufruf-Intervall deiner max. Wunsch-Geschwindigkeit anpassen. Falls su langsamer werden möchtest, so kannst du ja z.B. nur jeden 2. oder 3. OB35-Aufruf verwenden.

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nachsatz:
ich habe mir mal das PDF-File angesehen.
Ich finde dort nur einen Takt-Generator - nichts anderes. Den benötigst du beim OB35 gar nicht mehr.
Mich hätte es interessiert, wie du den Schrittmotor betreibst, um ggf. etwas zu der Geschichte mit den Perepherieworten sagen zu können ...
 
Nachsatz:
ich habe mir mal das PDF-File angesehen.
Ich finde dort nur einen Takt-Generator - nichts anderes. Den benötigst du beim OB35 gar nicht mehr.
Mich hätte es interessiert, wie du den Schrittmotor betreibst, um ggf. etwas zu der Geschichte mit den Perepherieworten sagen zu können ...


Ich benutze eine externe Schrittmotorsteuerung, die über 3 Steuereingänge funktioniert:

1. ENA (Enable - Eingang)
2. DIR (Direction - Eingang)
3. PUL (Takteingang)

Wenn ich nun per Software einen Takt auf den PUL-Eingang lege, so verfährt der Schrittmotor. Daher benötige ich ja auch lediglich den Taktgenerator, um die Geschwindigkeit des Motors zu erhöhen.

Ich denke nicht, dass dir das eigentliche Programm zur Steuerung des Schrittmotors weiterhilft, da ich den Takt ja von Extern an die Funktion anlege, und somit der Takt auch extern erzeugt werden soll, sozusagen mit einer anderen Funktion, damit ich den Takt evtl. noch einmal für eine andere Funktion verwenden kann.
 
Wenn die SPS bloß einen Takt bringen soll, ist das doch Käse.

Da würde ich doch einen Taktgeber, vielleicht mit Quarz aus der Ecke TTL-Bausteine 74YYxxx oder der 4000er-Reihe der CMOS-Digitalbausteine nehmen.
Hm.... sicher, daß auf der Schrittmotorsteuerplatine nicht irgendwo ein Taktgeber schlummert?

Bei MAXIM, einem Halbleiterhersteller, gibt es ganz grandiose Taktgeber und die bekommt man als Muster für lau.
 
Wenn die SPS bloß einen Takt bringen soll, ist das doch Käse.

Da würde ich doch einen Taktgeber, vielleicht mit Quarz aus der Ecke TTL-Bausteine 74YYxxx oder der 4000er-Reihe der CMOS-Digitalbausteine nehmen.
Hm.... sicher, daß auf der Schrittmotorsteuerplatine nicht irgendwo ein Taktgeber schlummert?

Bei MAXIM, einem Halbleiterhersteller, gibt es ganz grandiose Taktgeber und die bekommt man als Muster für lau.


Die SPS "soll" ja nicht nur den Takt liefern - sondern den Takt dann bereitstellen, wenn er auch wirklich benötigt wird, zum richtigen Zeitpunkt am richtigen Ort.

Außerdem ist das ganze Programm und die Verdrahtung dann einfacher und einheitlicher. Hat schon alles seinen Sinn ;).
 
aber die 313C ist eben keine eierlegende wollmilchsau ... also entweder takte von da aber dann nicht so schnell oder eben einen externen taktgenerator dem die anzahl der zu erzeugenden takte vorgegeben wird
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Die SPS "soll" ja nicht nur den Takt liefern - sondern den Takt dann bereitstellen, wenn er auch wirklich benötigt wird, zum richtigen Zeitpunkt am richtigen Ort.

Außerdem ist das ganze Programm und die Verdrahtung dann einfacher und einheitlicher. Hat schon alles seinen Sinn ;).

Dann mach das doch auch genau so ...
Du erzeugst den Takt im OB35 und die Freigabe dafür kommt aus deinem restlichen Programm. So in etwa hast du es doch sicherlich über den FC1-Taktgeber auch schon gemacht. Nun nimmst du halt den OB35. Z.B. so :
Code:
UN M10.0  // Taktgeber
= M10.0
 
U M10.0
U M10.1  // Freigabe Takt
= A0.0
 
L AB 0
T PAB 0
Gruß
LL
 
Eigene Lösung zur Problemstellung

Vielen Dank für eure zahlreichen Antworten. Ich habe mir jede durchgelesen und versucht, die Anregungen umzusetzen. Dabei bin ich auf meine eigene kleine Lösung gefunden, die von der Taktzeit her schon annähernd an die geführt wird, die ich benötige.

Die Lösung findet ihr als PDF-Datei im Anhang dieser E-Mail.
 

Anhänge

Zurück
Oben