Hallo Zusammen, ich habe eine Frage zur Programmierung eines Motors. Dieser hat zwei Sensoren und soll sich in einer Richtung drehen, bis er den Sensor 1 erreicht und soll dann die Drehrichtung wechseln und bis zum anderen Sensor drehen, dann wieder Drehrichtung wechseln und zurück bis zum ersten Sensaor. Dass der Motor überhaupt dreht, habe ich mit einer if-else Bedinung gelöst. Beispiel: if SchalterEIN = True && DrehrichtungPositiv = TRUE { ->Dann Motor drehen; -> DrehrichtungPositiv == FALSE; else if SchalterEIN = True && DrehrichtungPositiv = FALSE -> Dann Motor negativ drehen; } Leider habe ich das Gefühl, dass der Motor am Sensor stehen bleibt und dort ein Millimeter hin dreht und ein Millimeter zurück, kommt vom Sensor nicht mehr weg. Wähjre es sinnvoll eine Dealy zeit einzustellen? Komme da nicht weiter ...
Hansi schrieb: > Dieser hat zwei > Sensoren und soll sich in einer Richtung drehen, bis er den Sensor 1 > erreicht und soll dann die Drehrichtung wechseln und bis zum anderen > Sensor drehen, dann wieder Drehrichtung wechseln und zurück bis zum > ersten Sensaor. DAs bedeutet aber auch, dass in deinem 'Code' beide Sensoren in irgend einer Art und Weise vorkommen müssen. Schau ich mir aber deinen 'Code' an, dann sehe ich nichts davon. In beiden Fällen kommt der gleiche Sensor vor > if SchalterEIN = True && DrehrichtungPositiv = TRUE > { > ->Dann Motor drehen; > -> DrehrichtungPositiv == FALSE; > > else if SchalterEIN = True && DrehrichtungPositiv = FALSE > -> Dann Motor negativ drehen; > } Die grundsätzliche Überlegung ist schon korrekt. Nur implementieren musst du es richtig. Tip: Man kann sich mit überlegten Bezeichnungen das Leben sehr viel einfacher machen. SchalterEIN sagt dir gar nichts. SensorLinks bzw. SensorRechts würde dir sehr viel mehr erzählen. Denn die Überlegung ist ja: Der Motor kann (den SChlitten oder was auch immer) so lange nach links verfahren, bis der linke Sensor anzeigt, dass das Ende erreicht wurde.
1 | if( Drehrichtung == Links && SensorLinks == TRUE ) { // fahren wir nach links |
2 | // und schlägt der linke Sensor an
|
3 | ... Umschalten auf 'Fahrt nach Rechts' // dann ist der linke Rand erreicht |
4 | Drehrichtung = Rechts; |
5 | }
|
6 | |
7 | if( Drehrichtung == Rechts && SensorRechts == TRUE ) { // fahren wir nach rechts |
8 | // und schlägt der rechte Sensor an
|
9 | ... Umschalten auf 'Fahrt nach Links' // dann ist der rechte Rand erreicht |
10 | Drehrichtung = Links; |
11 | }
|
:
Bearbeitet durch User
Vielen Dank. Das klappt soweit auch. Jetzt habe ich aber eine andere Frage zum selben Theme. Mit MotorControl=InkrementControl kann ich per INkrementalgeber bzw. Drehgeber den Motor steuern. Nur ist diese art von Steuerung sehr ungenau. Das ganze sollte doch auch mit numerischer Integration gehen. Leider komme ich über diesen Ansatz nicht weiter. Im Endeffekt möchte ich den Drehgeber in eine Richtung drehen, der Motor soll sich auch in diese Richtung drehen, dann per Taster und Hilfsvariable den Punkt speichern, dann den Motor per Drehgeber erneut bewegen und einen zweiten Punkt festlegen. Dann soll der Motor zwischen diesen beiden Punkten hin und her fahren. Das geht aber nur über Winkelbestimmung des Rotors und numerische Integratioin.
Hansi schrieb: > Nur ist diese art von Steuerung sehr > ungenau. Das ganze sollte doch auch mit numerischer Integration gehen. > [...] > Das geht aber nur über Winkelbestimmung des Rotors und numerische > Integratioin. Beschreibe nicht den vermeintlich einzig richtigen Lösungsansatz, sondern beschreibe das Problem. Was genau soll gemacht werden? Nicht wie. Das wie kommt später. Ob man für eine simple links/rechts Motorsteuerung tatsächlich Integrale mittels numerischer Mathematik näherungsweise lösen muss, wage ich zunächst mal zu bezweifeln. Vielleicht ist die Steuerung aber auch nicht so simpel, nur wissen wir das nicht weil Deine Beschreibung ehrlich gesagt etwas konfus ist. > Mit MotorControl=InkrementControl kann ich per INkrementalgeber bzw. > Drehgeber den Motor steuern. Was soll das sein, C Code?
:
Bearbeitet durch User
Hallo, ja, es ist eine Art C-Code, nur das die Syntax etwas anders ist. Mit dem Drehgeber kann ich direkt den Motor ansteuern. Nun will ich aber, dass ich mit dem Drehgebere den Motor in eine Richtung drehe, dann per Tastendruck diese Position speicher und das ganze dann in die andere Richtung drehe und wieder per Tastendruck speicher. Dann soll der Motor zwischen den beiden gespeicherten Koordinaten hin und her fahren. Daher dachte ich, dass ich über Integralrechnung das ganze lösen könnte.
Warum nicht eine Variable anlegen und in dieser die Anzahl der Schritte speichern, die der Drehgeber zwischen A und B liefert? A = Ausgangsposition B = per Tastendruck markierte Position Dabei natürlich die Richtung beachten.
Die Frage ist jedoch, wie ich dem Rotor sage, dass er sich bewegen soll und wie die Posotion festgelegt wird. Ich drehe ab Drehgeber. Doch wie sage ich dem Motor bzw Rotor, dass er sich in die gleiche Richtung wegene soll und wie berechne ich dann den Winkel wzsichen den markierten Punkten A und B ?
Der Drehgeber sitzt doch auf der Motorwelle, oder nicht? Also musst du eine Positionsregelung aufbauen. Die gespeicherten Werte sind dann die Sollwerte, die der Regler anfahren muss. In der Regel dürfen die Sollwerte nicht einfach von einem Punkt zum nächsten springen, d.h. um eine neue Position anfahren zu können musst du eine Sollwertrampe erzeugen. Das ist letztlich eine Tabelle mit Stützpunkten zwischen den beiden Zielkoordinaten, wodurch die Geschwindigkeit und ggf. die Beschleunigung begrenzt werden. Mit den genannten Stichworten solltest du bei Google fündig werden. Mit freundlichen Grüßen Thorsten Ostermann
Thorsten Ostermann schrieb: > Der Drehgeber sitzt doch auf der Motorwelle, oder nicht? Dachte ich zuerst auch. Aber mitlerweile bin ich mir da nicht mehr sicher. Tatsächlich denke ich, dass der Drehgeber ein Element der Benutzersteuerung ist. Quasi so
1 | Benutzer |
2 | | |
3 | | |
4 | v |
5 | Drehgeber ------> Motorsteuerung -----------> Motor (Schrittmotor?) |
6 | | |
7 | v |
8 | Mechanik |
9 | | | |
10 | | Endschalter rechts |
11 | | |
12 | Endschalter links |
Aber was weiß man schon. Aus dem Kauderwelsch werde zumindest ich nicht schlau.
:
Bearbeitet durch User
Karl Heinz schrieb: > Aber was weiß man schon. Aus dem Kauderwelsch werde zumindest ich nicht > schlau. Genau das meinte ich mit "weil Deine Beschreibung ehrlich gesagt etwas konfus ist" ...
Die Beschreibung von Karl-Heinz ist richtig.
Und an welcher Stelle sitzt da jetzt das 'programmierbare Bauteil'?
Gehört diese seltsame Progammiersprache zu der Baugruppe
'Motorsteuerung', sprich: Verfügt diese Motorsteuerung selbst über eine
Prgorammiersprache?
Oder muss man da noch einen extra Computer anschliessen, der dann der
Motorsteuerung Befehle gibt?
Aber ich vermute mal ersteres. D.h. auf der Motorsteuerung selbst sitzt
bereits ein kleiner Computer, der so etwas wie eine Programmiersprache
hat.
Tja. in dem Fall wirst du dann eben mal Handbuchstudium betreiben
müssen, was diese Sprache alles kann, was sie nicht kann und wie dort
die Hardware (unter anderem der Benutzer-Drehgeber) ausgewertet werden
kann. Das muss ja irgendwo dokumentiert sein, wie das geht.
Was ist das überhaupt für ein Motor?
Schrittmotor?
Oder gibt es eine Rückmeldung vom Motor, aus der man ablesen kann, wo
sich das bewegte Bauteil gerade befindet?
Denn letzten Endes läuft es ja darauf hinaus
> .... den Punkt speichern ....
das du diesen 'Punkt' irgendwie beschreiben können musst. Zb als
Zahlenwert. Aber was stellt dieser Zahlenwert dar? Sind das Millimeter?
Ist das die Anzahl der Schritte, die der Motor von zb der linken
Sensorposition weg gezählt rausgefahren ist. Oder was?
Hier weiß keiner was dir deine Steuerung zur Verfügung stellt um dir die
Hilfsmittel zur Verfügung zu stellen, die du brauchst. Das alles ist
nicht portabel und einzig und allein von deiner Steuerung bzw. von der
konkreten Hardware abhängig.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.