DC-Motor Drehzahl steuern

Guten Morgen Leute,

und zwar geht es um die Drehzahlsteuerung eines DC-Motors mit Encoder.

https://www.exp-tech.de/motoren/dc-getriebemotoren/6850/19-1-getriebemotor-37dx68l-mm-mit-64-cpr-encoder

Die momentane Drehzahl zu messen, sollte kein Problem sein, aufgrund des Encoders. Ich möchte mir die Drehzahl auf einem Display anzeigen lassen.

Das sollte alles kein Problem sein. Ich möchte nun die Drehzahl auch steuern, indem ich die Spannung mittels Potentiometers ändere. Welchen Potentiometer nehme ich denn da am besten? Es gibt ja 10k Potis und 100k potis und natürlich viele weitere.

Kann ich den Potentiometer irgendwie berechnen? Der müsste doch am besten den Widerstand haben, der meinen Motor quasi "ausschaltet".

Zusammgefasst:

  • Ich habe einen DC-Motor mit Encoder
  • Die Drehzahl des Motors lasse ich mir digital ausgeben
  • Ich möchte nun die Drehzahl mittels Poti steuern

Frage: Wie lege ich den Poti aus? Welchen nehme ich da genau?

Lg Red

Ich finde lineare 10k Potis total klasse!

Suchtipp: PID Regler

Hi danke dir für deine Antwort. Ich möchte ja nicht Regeln. Sondern einfach nur steuern. Wollte da nur wissen, ob ich da einen x-beliebigen Poti nehmen kann, also z.B. den 10k oder muss ich genau wissen, bei welchem Widerstand, die Spannung vom Motor ca. 0 wird, damit ich eine genau Skala von 0-100% habe vom Poti der dann meiner Spannung des Motors dann entspricht.

RedOne1990:
... Ich möchte ja nicht Regeln. Sondern einfach nur steuern. ...

Könntest Du mir den Unterschied erklären? Danke!

Gruß

Gregor

RedOne1990:
Hi danke dir für deine Antwort. Ich möchte ja nicht Regeln. Sondern einfach nur steuern. Wollte da nur wissen, ob ich da einen x-beliebigen Poti nehmen kann, also z.B. den 10k oder muss ich genau wissen, bei welchem Widerstand, die Spannung vom Motor ca. 0 wird, damit ich eine genau Skala von 0-100% habe vom Poti der dann meiner Spannung des Motors dann entspricht.

trenne die zwei Hardwarebestandteile auf:

zunächst ermittelst du den Stand des Potis analogRead. da hast deinen 0..1023 bereich. und das rechnest dann in deinen PWM Ausgang (?) für digitalRead 0..255 linear um.

Zum Anfangen kannst du das ja mit map machen map() - Arduino Reference

vermutlich wirst du den poti aber deutlich "über 0" drehen müssen bevor der Motor anläuft. Wenn dir das nicht gefällt, dann musst du halt einen entsprechenden Offset in deiner Umrechnung berücksichtigen.

Ich möchte ja nicht Regeln. Sondern einfach nur steuern.

Ich glaube dir, dass du das glaubst.
Und: Ich glaube, dass du dich irrst!

Denn sonst würdest du nicht sowas sagen müssen:

, also z.B. den 10k oder muss ich genau wissen, bei welchem Widerstand, die Spannung vom Motor ca. 0 wird, damit ich eine genau Skala von 0-100% habe vom Poti der dann meiner Spannung des Motors dann entspricht.

Wollte da nur wissen, ob ich da einen x-beliebigen Poti nehmen kann, also z.B. den 10k

Das Datenblatt der AVR ist in dem Punkt eindeutig!
Es sagt: Der Innenwiderstand der Analogquelle soll höchstens 10k betragen.
Glaub es, oder lies selber nach.
Ansonsten interessiert der Widerstand des Potis nicht, da du da dieses sowieso ratiometrisch auswerten wirst.

Ich gebe hier, in der Sache, jetzt erstmal auf....

gregorss:
Könntest Du mir den Unterschied erklären? Danke!

Die Frage ist nicht dein Ernst, oder?

Steuern vs. Regeln

Und hier haben wir genau solche Komponenten und eine Anforderung welche nach einer Regelstrecke schreien!

aus der Angebotsseite:
No-load speed at 12V: 500 rpm
No-load current at 12V: 300 mA
Stall current at 12V: 5000 mA

No-load speed at 6V: 256 rpm
No-load current at 6V: 250 mA
Stall current at 6V: 2500 mA

Du kannst natürlich ein Potentiometer als Vorwiderstand zum Motor verwenden. Dann brauchst Du aber kein 0,5 bis 1W Potentiometer wie die üblichen, sondern eines mit ca 10W.

Da ist es einfacher ein Potentiometer mit dem Arduino auslesen und den Motor mittels Logic Level N-MOSFET in PWM zu regeln.

Ergibt weniger Verlustleistung und es besteht auch die Möglichkeit mittels Rückkopplung eine genaue Drehzahl einzustellen.

Grüße Uwe

Die Motor-Spannung direkt per Poti einzustellen ist eine so schlechte Idee, dass sie vor Uwes Antwort keinem hier in den Sinn kam. Vor allem wenn sowieso ein Arduino im Spiel ist.

Dann ist die Frage nach dem Poti ziemlich nebensächlich, das Haupt-Problem ist der Zusammenhang zwischen PWM-Wert und Motor-Drehzahl.

Wenn du bei halber Poti-Stellung halbe Nenn-Drehzahl haben willst (und gar bei 5% Poti Stellung 5% der Nenndrehzahl), hast du eine anspruchsvolle Regelungsaufgabe vor dir.

Hi

Eine Steuerung ist aber hier ebenfalls möglich.
Poti einlesen, den Wert ummappen (Du willst nicht wirklich bei Null anfangen) und Das per PWM zum Motor jagen.
Sinnvoll ist der PWM-Wert 0 (oder bei negierter Logik 255), um den Motor stromlos zu machen und sobald Du auch nur einen 'Muckensack' am Poti drehst, bekommt der Motor so viel Strom, daß Er langsam dreht.
Einlesen der Drehfrequenz per Encoder sollte möglich sein, wenn sich hier auch der Teufel im Detail verstecken wird :wink: - Du wirst Ihn schon finden!

1x analogRead
1x IF Wert < untereGrenze -> Ausgabe=0 (0der 255)
sonst Ausgabe=map(Messwert,untereGrenze,obereGrenze,0,255); (oder 255,0)
1x analogWrite

... fertsch ...

Auch, wenn Das eigentlich nach einer REGELUNG schreit, wie combie bereits anmerkte.

MfG

PS: Das muß man nicht Regeln, Steuern kann dafür ja durchaus reichen - man kann auch per Array eine Art Kurve vorgeben, nach Der die Werte verschoben werden - Alles ist möglich.

Die Motor-Spannung direkt per Poti einzustellen ist eine so schlechte Idee, dass sie vor Uwes Antwort keinem hier in den Sinn kam.

Doch schon!
Aber sofort, wg. völlig irrational, wieder verworfen.
Habe das also noch nicht einmal ignoriert.

postmaster-ino:
Hi

Eine Steuerung ist aber hier ebenfalls möglich.
Poti einlesen, den Wert ummappen (Du willst nicht wirklich bei Null anfangen) und Das per PWM zum Motor jagen.
Sinnvoll ist der PWM-Wert 0 (oder bei negierter Logik 255), um den Motor stromlos zu machen und sobald Du auch nur einen 'Muckensack' am Poti drehst, bekommt der Motor so viel Strom, daß Er langsam dreht.
Einlesen der Drehfrequenz per Encoder sollte möglich sein, wenn sich hier auch der Teufel im Detail verstecken wird :wink: - Du wirst Ihn schon finden!

1x analogRead
1x IF Wert < untereGrenze -> Ausgabe=0 (0der 255)
sonst Ausgabe=map(Messwert,untereGrenze,obereGrenze,0,255); (oder 255,0)
1x analogWrite

... fertsch ...

Auch, wenn Das eigentlich nach einer REGELUNG schreit, wie combie bereits anmerkte.

MfG

PS: Das muß man nicht Regeln, Steuern kann dafür ja durchaus reichen - man kann auch per Array eine Art Kurve vorgeben, nach Der die Werte verschoben werden - Alles ist möglich.

Aber nur, wenn die Last sich nicht ändert. Luftschraube mag gehen, Kran eher nicht.