# Probleme mit Taktgenerator [STEP7]



## openminded23 (21 Mai 2008)

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


----------



## Zottel (21 Mai 2008)

openminded23 schrieb:


> 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.
> ...


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.


----------



## maxi (21 Mai 2008)

openminded23 schrieb:


> 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.
> ...


 
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


----------



## openminded23 (21 Mai 2008)

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 . 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.


----------



## Larry Laffer (21 Mai 2008)

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


----------



## openminded23 (21 Mai 2008)

Larry Laffer schrieb:


> 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)?


----------



## chrigu (21 Mai 2008)

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?


----------



## openminded23 (21 Mai 2008)

chrigu schrieb:


> 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?
> ...



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?


----------



## Larry Laffer (22 Mai 2008)

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


----------



## openminded23 (22 Mai 2008)

Larry Laffer schrieb:


> 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).
> ...



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?


----------



## Larry Laffer (22 Mai 2008)

... 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


----------



## Larry Laffer (22 Mai 2008)

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 ...


----------



## openminded23 (22 Mai 2008)

Larry Laffer schrieb:


> 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.


----------



## derwestermann (22 Mai 2008)

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.


----------



## derwestermann (22 Mai 2008)

So was zum Bleistift:

http://www.maxim-ic.com/quick_view2.cfm/qv_pk/4226


----------



## openminded23 (22 Mai 2008)

derwestermann schrieb:


> 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?
> ...




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 .


----------



## vierlagig (22 Mai 2008)

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


----------



## Larry Laffer (22 Mai 2008)

openminded23 schrieb:


> 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 :
	
	



```
UN M10.0  // Taktgeber
= M10.0
 
U M10.0
U M10.1  // Freigabe Takt
= A0.0
 
L AB 0
T PAB 0
```
Gruß
LL


----------



## vierlagig (22 Mai 2008)

Larry Laffer schrieb:


> ```
> UN M 10.0  // Taktgeber       1,9
> =  M 10.0                     2,2
> 
> ...



jopp, passt


----------



## openminded23 (22 Mai 2008)

*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.


----------



## kermit (22 Mai 2008)

nochn Taktgenerator, der allerdings vorraussetzt, dass sonst im SPS-Zyklus nicht viel läuft. Leider in AWL, da ich in FUP recht ungeübt bin (und ohne Symbolik mal einfach so in den OB1 reingeschrieben):

```
// Schrittmotortaktgenerator
      L     #OB1_PREV_CYCLE             // Zykluszeit der SPS in ms (Dauer letzter Zyklus)
      L     MW     0                    // Zeitzähler laden
      +I                                // weiterzählen um SPS Zyklusdauer
      T     MW     0                    // und für nächsten Zyklus merken
      L     2                           // Konstante bzw. Parameter weiterschaltzeit Schrittmotor in ms
      <I                                // ist nicht erreicht?
      SPB   M999                        // dann auf nächsten Programmzyklus warten
 
// zwei Milisekunden erreicht, Motorstränge weiterschalten und Zähler vermindern
      -I                                // genau diese zwei Millisekunden vom Zähler abziehen
      T     MW     0                    // und merken
 
      UN    A      0.0                  // beim ersten Anlauf der CPU
      UN    A      0.1                  // ist noch kein Ausgang
      UN    A      0.2                  // gesetzt, daher Initialisierung
      UN    A      0.3                  // nötig
      S     A      0.0
      SPB   M999                        // Schritt vollzogen, weitere Schritte überspringen
 
      U     A      0.0                  // Schritt 1 --> Schritt 2
      R     A      0.0
      S     A      0.1
      SPB   M999                        // Schritt vollzogen ...
 
      U     A      0.1                  // 2 --> 3
      R     A      0.1
      S     A      0.2
      SPB   M999
 
      U     A      0.2                  // 3 --> 4
      R     A      0.2
      S     A      0.3
      SPB   M999
 
      U     A      0.3                  // 4 --> 1
      R     A      0.3
      S     A      0.0
 
M999: NOP   0                           // Ende des Schrittmotortaktgenerators
```


----------



## Larry Laffer (22 Mai 2008)

openminded23 schrieb:


> 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.


 
Ich will dich ja nicht kritisieren, aber für mich macht diese Lösung keinen wirklichen Unterschied zu der in deinem 1. Beitrag. Aber wenn du damit natürlich zufrieden bist ...
Was ich nur gern wissen würde ist ... wofür der ganze Aufwand und das ständige Hinterfragen nach einem Plan "B" ...? Ich bin da jetzt ein wenig enttäuscht ...


----------



## openminded23 (22 Mai 2008)

Larry Laffer schrieb:


> Ich will dich ja nicht kritisieren, aber für mich macht diese Lösung keinen wirklichen Unterschied zu der in deinem 1. Beitrag. Aber wenn du damit natürlich zufrieden bist ...
> Was ich nur gern wissen würde ist ... wofür der ganze Aufwand und das ständige Hinterfragen nach einem Plan "B" ...? Ich bin da jetzt ein wenig enttäuscht ...



Ich kann mit dieser Lösung zufrieden sein, stimmt. Da wir die Taktzeit jetzt immerhin halbiert haben, läuft unser Schrittmotor ebenfalls doppelt so schnell (so in etwa). Wir werden die Taktzeit noch ein weiteres Mal halbieren, da wir dann die optimale Geschwindigkeit erreicht haben.

Als Aufwand würde ich das hier noch nicht unbedingt bezeichnen - eher als ausgiebige Erkundung, welche Möglichkeiten es gibt, per SPS einen Takt zu erzeugen.

Dankbar bin ich allemal, da ich hier eine ganze Menge kreative und gute Lösungen gefunden habe, mit denen ich mich sicherlich noch ein weiteres Mal beschäftigen würde.


----------



## Ossi1 (18 Juni 2009)

Hallo zusammen. Ich muss einen Schrittmotor über SPS mit S7 von Siemens programmieren. Er soll die Funktionen START, STOP und RESET haben. Er soll wie eine Stopuhr laufen. Ich weis auch nicht genau, ob mein Stromlaufplan richtig ist. 200 Schritte bei 1,8°. Ich schaff es einfach nihct das Programm dafür zu schreiben. Kann mir bitte jemand helfen??? Im Anhang hab ich mal meine Doku hinterlegt, da ist alles drau.

Ich würde mich über eine schnelle Hilfe freuen.

Viele Grüße 

Sebastian


----------



## cleduy2004 (11 Juni 2011)

Hallo zusammen,

ich habe nun das gleiche Problem.
Ich habe die pdf Datei von Openmineded gelesen. aber ich komme nicht weiter.
Wo/Wie wird die FC101 aufgerufen?

MfG, Can


----------



## Larry Laffer (11 Juni 2011)

Hallo,
ich würde sagen, dass der FC im OB1 aufgerufen wird.
Was heißt denn genau "ich habe das gleiche Problem" ?
Ich würde mich jetzt nicht so an dem (unbefriedigenden) Beispiel aus diesem 3 Jahre alsten Thread festhalten.

Gruß
Larry


----------



## cleduy2004 (12 Juni 2011)

Larry Laffer schrieb:


> Hallo,
> ich würde sagen, dass der FC im OB1 aufgerufen wird.
> Was heißt denn genau "ich habe das gleiche Problem" ?
> Ich würde mich jetzt nicht so an dem (unbefriedigenden) Beispiel aus diesem 3 Jahre alsten Thread festhalten.
> ...


----------



## Son of Wodan (12 Juni 2011)

Lösungen bietet p.richard.keller@t-online.de
Kostenpflichtig!!!


----------



## cleduy2004 (12 Juni 2011)

Son of Wodan schrieb:


> Lösungen bietet p.richard.keller@t-online.de
> Kostenpflichtig!!!



hallo,

ich bin aber im moment nicht in Deutschland, ich mache gerade ein Praktikum in Singapore.
Wenn du mir kostenlos helfen koenntest, bin dir sehr dankbar.

MfG


----------



## bike (12 Juni 2011)

cleduy2004 schrieb:


> hallo,
> 
> ich bin aber im moment nicht in Deutschland, ich mache gerade ein Praktikum in Singapore.
> Wenn du mir kostenlos helfen koenntest, bin dir sehr dankbar.
> ...



Wenn es funktionieren soll, dann versuch hier dein Problem zu beschrieben und wie du an die Sache herangehst/ gegangen bist.

Mit mehr Informationen und etwas Code wird dir geholfen.

Es macht nicht immer Sinn neue Frage an einen alten Threat zu hängen.
Besser ist meist, einen neuen zu erstellen und ggF auf den alten zu verlinken.


bike


----------



## IBFS (12 Juni 2011)

Son of Wodan schrieb:


> Lösungen bietet p.richard.keller@t-online.de
> Kostenpflichtig!!!




Hier wird nur kostenlos und hoffentlich nicht umsonst geholfen!

Daher  * FALSCHE RUBRIK!!!*

Dafür gibt es  -> *Werbung und Produktneuheiten* <- http://www.sps-forum.de/forumdisplay.php?f=24

Wer lesen kann ist klar im Vorteil.

Frank


----------



## det (12 Juni 2011)

Moin Moin,
ich hätte auch noch ne Tube Senf zum Thema. Mit einem RC4151 (Spannungs - Frequenz - Spannungswandler) http://pdf1.alldatasheet.com/datasheet-pdf/view/87731/FAIRCHILD/RC4151.html
kann man dann per Analogkarte das ganze steuern. Sind ca. 10 ext. Bauteile die man zusätzlich benötigt. Der macht bis 100kHz.
Vielleicht ist das eine Option.

Grüße Detlef


----------

