| 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 |
| Cam Cycloid-Dokumentation Makros Rezepte Wie man Makros installiert Symbolleisten anpassen |
| Macro-Version |
| 0.0.1 |
| Datum der letzten Änderung |
| 2026-06-01 |
| FreeCAD-Version(s) |
| Alle |
| Standardverknüpfung |
| None |
| Siehe auch |
| None |
Man beachte, dass die folgenden Schritte nur einmal ausgeführt werden müssen:
Weitere Informationen zur manuellen Installation von Makros findet man hier.
Die folgenden Beispiele veranschaulichen die Verwendung dieses Skripts.
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.
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:
yOfCycloid die Verschiebung des Nockenfolgers (in mm) ist, wenn sich die Nocke um thetaAngleInRad gedreht hat (siehe Abbildung unten).Hub des 1. Übergangsintervalls ist die Differenz zwischen dem Radius des zweiten Halteintervalls und dem Radius des ersten Halteintervalls.WinkelbereichInRad des 1. Übergangsintervalls ist die Differenz zwischen dem Startwinkel des zweiten Halteintervalls und dem Endwinkel des ersten Halteintervalls.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.
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.
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.
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.
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.
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.
Die Diskussion im Forum: Presenting CamCycloid macro
Die Dokumentation zu diesem Skript im PDF-Format: Cam Cycloid-Dokumentation