Forum: PC-Programmierung Motor mit if-else von einem Sensor zum anderen drehen


von Hansi (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
von Hansi (Gast)


Lesenswert?

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.

von Mark B. (markbrandis)


Lesenswert?

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
von Hansi (Gast)


Lesenswert?

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.

von Mark B. (markbrandis)


Lesenswert?

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.

von Hansi (Gast)


Lesenswert?

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 ?

von Thorsten O. (Firma: mechapro GmbH) (ostermann) Benutzerseite


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
von Mark B. (markbrandis)


Lesenswert?

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

von Hansi (Gast)


Lesenswert?

Die Beschreibung von Karl-Heinz ist richtig.

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.