Macro Cam Cycloid/de

Generisches Makro-Symbol Erstellen Sie Ihr persönliches Symbol mit demselben Namen des Makros Cam Cycloid

Beschreibung
Dieses Makro erstellt ein neues Bauteil mit einer Skizze des Profils einer mechanischen Nockenwelle. Als Eingabewerte dienen der Radius sowie der Start- und Endwinkel jedes Halteintervalls der Nockenwelle. Die Übergangsintervalle der Nockenwelle werden mithilfe der Zykloidenfunktion berechnet und durch B-Splines approximiert.

Versionsmakro : 0.0.1
Datum der letzten Änderung : 2026-06-01
FreeCAD version : Alle
Herunterladen : Text-x-python.png
Autor: Garlic
Autor
Garlic
Herunterladen
Text-x-python.png
Links
Macro-Version
0.0.1
Datum der letzten Änderung
2026-06-01
FreeCAD-Version(s)
Alle
Standardverknüpfung
None
Siehe auch
None

Installation

Man beachte, dass die folgenden Schritte nur einmal ausgeführt werden müssen:

  1. Im FreeCAD-Menü zu Makro → Makros gehen
  2. Herausfinden, welcher Pfad in das Feld Speicherort der Benutzermakros eingetragen wurde
  3. Diesen Ordner mit dem Datei-Explorer (oder einer anderen Dateiverwaltungsanwendung) öffnen.
  4. Die Datei CamCycloid.py von https://git.disroot.org/CrowdDiscussesAlternatives/ScriptsForFreeCAD/src/branch/master/CamCycloid herunterladen und in diesen Ordner einfügen.
  5. Mit der Schaltfläche Close (Schliessen) das Dialogfenster Makro ausführen schliessen.

Weitere Informationen zur manuellen Installation von Makros findet man hier.

Anwendung

Die folgenden Beispiele veranschaulichen die Verwendung dieses Skripts.

Beispiel 1

Das Skript ausführen

Damit der Algorithmus ausgeführt werden kann, muss die Python-Konsole in FreeCAD geöffnet werden und der folgenden Code ausgeführt werden (d. h. jede Zeile des folgenden Codes separat kopieren und einfügen und jedes Mal Enter drücken).

import CamCycloid
camCycloidObj = CamCycloid.CamCycloid()
camCycloidObj.createCamProfile()

Es muss beachtet werden: Sobald FreeCAD geöffnet ist, müssen die ersten beiden Zeilen dieses Codes nur einmal kopiert und eingefügt werden (die erste Zeile importiert das Skript und die zweite Zeile erstellt ein Objekt). Wenn man anschließend den Algorithmus des Skripts ausführen möchte (um ein neues Teil mit der Skizze des Nockenprofils zu erstellen), kopiert man einfach die dritte Zeile des obigen Codes, fügt sie ein und drückt dann Enter.

In der Python-Konsole erscheint folgende Meldung:

Please enter the number of knots (points) that the B-spline (which will approximate the cycloid curve) will have (i.e. number of steps in discretization). Number must be more than 2 (20 is a good choice):

Es kann 20 eingegeben werden und die Enter-Taste gedrückt werden.

Daraufhin erscheint folgende Meldung in der Python-Konsole:

Please enter the data of the cam in the format:
Radius_Of_1st_Dwell_Interval,Start_Angle_Of_1st_Dwell_Interval,End_Angle_Of_1st_Dwell_Interval,Radius_Of_2nd_Dwell_Interval,Start_Angle_Of_2nd_Dwell_Interval,End_Angle_Of_2nd_Dwell_Interval and so on, until you write as many dwell intervals the cam will have. Angles must be in degrees and radius in mm. Use dot for decimal separator. Positive angles are from X axis (x > 0) turning counterclockwise:

In diesem Beispiel geben wir die folgenden Eingabedaten ein:

60,20,70,80,200,250

Und wenn man dann die Enter-Taste drückt, wird ein neues Teil erstellt, dessen Körper eine Skizze enthält.

Wenn die Skizze geöffnet wird, wird das Profil der Nocke angezeigt.

Das erste Verweilintervall des Nockenprofils hat einen Radius von 60 mm. Es beginnt bei einem Winkel von 20° und endet bei einem Winkel von 70° (bezüglich der x-Achse). Während der Drehung des mechanischen Nockens ändert sich der Hub des Mechanismus nicht, wenn der Nockenfolger den Halteabschnitt des Nockens berührt (d. h., es findet keine Bewegung statt, solange dieser Teil des Nockenprofils den Nockenfolger berührt).

Das zweite Verweilintervall des Nockenprofils hat einen Radius von 80 mm. Es beginnt bei einem Winkel von 200° und endet bei einem Winkel von 250° (bezogen auf die positive Richtung der x-Achse, d. h. y = 0 und x > 0).

Es muss beachtet werden: Wenn sich zwei Verweilintervalle überschneiden, erscheint eine Fehlermeldung in der Python-Konsole:

Error: Dwell intervals are overlapping! Please check the angles of the dwell intervals.

Ebenso muss der Radius eines Verweilintervalls stets positiv sein, und sein Endwinkel muss stets größer sein als sein Startwinkel.

Zykloidenfunktion zur Berechnung der Übergangsintervalle

Der Übergang vom ersten Halteintervall zum zweiten Halteintervall und vom zweiten Halteintervall zum ersten Halteintervall wird mithilfe der Zykloidenfunktion berechnet:

yOfCycloid = stroke/math.pi * (math.pi*thetaAngleInRad/angleRangeInRad – 0.5*math.sin(2*math.pi*thetaAngleInRad/angleRangeInRad))

⇔

yOfCycloid = stroke*thetaAngleInRad/angleRangeInRad – stroke/(2*math.pi)*math.sin(2*math.pi*thetaAngleInRad/angleRangeInRad)

wobei:

In diesem Beispiel beträgt der Hub des 1. Übergangsintervalls 20 mm (d. h. 80 mm – 60 mm) und der Winkelbereich 130° (d. h. 200° – 70°), was 2,268928 rad entspricht.

Weitere Informationen zur Zykloidenfunktion bei einem mechanischen Nocken findet man unter folgendem Link:

https://mech.poriyaan.in/topic/cycloidal-follower-motion-31880

Die Kurve der Zykloidenfunktion wird durch eine B-Spline-Kurve approximiert. Je mehr Knoten für die B-Spline-Kurve ausgewählt werden, desto genauer ist die Approximation.

Beispiel 2

In der Python-Konsole Folgendes eingeben:

camCycloidObj.createCamProfile()

und die Enter-Taste drücken.

In der ersten Eingabeaufforderung 20 eingeben und Enter drücken.

In der zweiten Eingabeaufforderung Folgendes eingeben:

60,-30,20,80,150,200

und die Enter-Taste drücken.

Man kann sehen, dass in diesem Fall die x-Achse durch die Kurve des ersten Verweilintervalls verläuft (da der Startwinkel in Bezug auf die x-Achse -30° beträgt). Es muss beachtet werden, dass der Algorithmus alle Winkel in positive Winkel umwandelt und anschließend die Verweilintervalle (in aufsteigender Reihenfolge) neu anordnet; dies ist jedoch nur dann von Bedeutung, wenn man den Algorithmus ändert oder verbessern möchte.

Beispiel 3

In der Python-Konsole Folgendes eingeben:

camCycloidObj.createCamProfile()

und die Enter-Taste drücken.

In der ersten Eingabeaufforderung 20 eingeben und Enter drücken.

In der zweiten Eingabeaufforderung Folgendes eingeben:

60,20,50,80.5,110,140,60,220,240,80.5,310,340

und die Enter-Taste drücken.

Das Profil der Nockenwelle mit vier Totpunktphasen wurde erstellt.

Erstellung des 3D-Modells der mechanischen Nocke

Man kann die Skizze extrudieren und weitere Elemente hinzufügen, um das 3D-Modell der Nocke zu erstellen. Die Abbildung unten zeigt eine Nocke mit einer Bohrung, damit sie an einer Welle befestigt werden kann. Man kann weitere Details hinzufügen, indem man beispielsweise die Nocke in zwei Teile teilt und diese mit Schrauben miteinander verbindet, um die Nocke an der Welle zu befestigen.

Ändern der Standardparameter des Algorithmus

Bevor man das neue Teil mit der Funktion camCycloidObj.createCamProfile() in der Python-Konsole erstellt, kann man, falls gewünscht, einige Parameter des Algorithmus ändern.

Wenn in der Python-Konsole Folgendes eingegeben wurde:

camCycloidObj.useAngleOfDiscretization = True

und drück Enter. Der Algorithmus platziert dann etwa alle 10° einen Knotenpunkt in der B-Spline (Man wird nicht aufgefordert, die Anzahl der Knoten einzugeben).

Wenn in der Python-Konsole Folgendes eingegeben wurde:

import math

und dann:

camCycloidObj.angleOfDiscretization = math.radians(5)

Dann platziert der Algorithmus etwa alle 5° einen Knotenpunkt in der B-Spline (an jedem neuen Abschnitt, den man mit der Funktion camCycloidObj.createCamProfile() erstellt).

Wenn in der Python-Konsole Folgendes eingegeben wurde:

camCycloidObj.allowAuxPoints = True

Dann erzeugt der Algorithmus zwischen jeweils zwei benachbarten Knoten einen Konstruktionspunkt, der ein Punkt der berechneten Zykloidenkurve ist (d. h., diese Konstruktionspunkte sind exakte Lösungen der Zykloidenfunktion).

Anhand dieser Punkte lässt sich dann der Fehler bei der Annäherung der Zykloidenfunktion durch die B-Spline-Kurve bestimmen, indem man den Abstand zwischen einem dieser Hilfspunkte und der B-Spline-Kurve misst.

Wenn in der Python-Konsole Folgendes eingegeben wurde:

camCycloidObj.auxPointsAreConstructionGeom = False

Dann sind diese Hilfspunkte Geometriepunkte.

Wenn in der Python-Konsole Folgendes eingegeben wurde:

camCycloidObj.allowBsplineInternalAlignment = False

Dann werden die Knoten der B-Splines nicht auf die B-Splines beschränkt sein.

Wenn in der Python-Konsole Folgendes eingegeben wurde:

camCycloidObj.allowBsplineConstraints = False

Dann werden der Anfang und das Ende der B-Splines nicht an den Anfang und das Ende der Bögen gebunden, die die Verweilintervalle darstellen. Man kann diese Parameter auf false setzen, falls beim automatischen Setzen dieser Beschränkungen ein Fehler auftritt.

Skripte

Die Datei CamCycloid.py ist unter folgendem Link zu finden:

https://git.disroot.org/CrowdDiscussesAlternatives/ScriptsForFreeCAD/src/branch/master/CamCycloid

Die Version des Skripts wird in der ersten Zeile des Skripts angezeigt. Die Lizenz des Codes wird in den ersten Zeilen des Skripts angezeigt.

Verweise

Die Diskussion im Forum: Presenting CamCycloid macro

Die Dokumentation zu diesem Skript im PDF-Format: Cam Cycloid-Dokumentation

Referenzen

  1. https://mech.poriyaan.in/topic/cycloidal-follower-motion-31880
  2. https://de.wikipedia.org/wiki/Zykloide
  3. https://de.wikipedia.org/wiki/Kurvenscheibe