Gleichstrommotor mit Drehmomentabschaltung

Hallo und einen schönen Guten Abend,
Ich möchte mit dem Arduino UNO eine Drehmomentabschaltung an einem DC-Motor bauen. Bei dem aktuellen Setup geht es erstmal um die generelle Funktion und um das Verständnis. Mit den folgenden Bauteilen möchte ich das ganze realisieren:
-Arduino UNO R3 (Original)
-12V / 2A Netzteil
-12V DC- Getriebemotor
Das ganze sieht auf dem Breadboard so aus:

12V ----- Resistor ----- Motor --------- Ground(Netzteil)
| |
| |
A0 GND

11.37V gemessen am Motor
11.99V direkt am Netzteil
Widerstand 10,8 Ohm
Shunt 0,619V Spannungsabfall gemessen am Widerstand

Messe ich nun mit dem Multimeter am PIN A0 komme ich auch auf 0,619V.
Im Seriellen Monitor bekomme ich aber diese Werte angezeigt
0.33 0.96 0.95 0.68 0.43 0.80 0.37 0.47 0.87 0.42

void setup() {
    Serial.begin(9600);
}

void loop() {
  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (5.0 / 1023.0);
  delay(250);
  Serial.println(voltage);
}

Sobald ich den Motor per Hand versuche zu stoppen geht die Spannung auf über 1,5V hoch, was ich auf dem Multimeter aber auch am Monitor sehen kann. Nun zu meiner Frage :slight_smile:
Woher kommen diese springenden Werte?
Ich möchte den Motor am Ende mit einem Signal an ein L298 Modul anschalten und mit sowas wie if analogRead >100 das Modul wieder abschalten. Aber dafür müsste der Wert meiner Meinung nach etwas stabiler sein.
Ich hoffe ihr habt ein paar Ideen oder Anregungen im besten Fall sogar eine Lösung für mich.

Willkommen im Forum.

Weil der Strom nicht konstant ist und mit jeder Umdrehung schwankt. Du musst die Werte glätten, dein Multimeter macht nichts anderes.
Evtl. reicht ein kleiner Kondensator vor deinem Analogeingang oder du musst den Wert per Software glätten, such mal nach "gleitendem Mittelwert"

Ist dein Shunt für die Leistung ausgelegt?

Scherheinz:
Ist dein Shunt für die Leistung ausgelegt?

Der Shunt ist aktuell ein "normaler" Wiederstand mit gemessenen 10,8 Ohm. Korrigiere mich bitte falls ich falsch liege:
Ich dachte der Shunt wird so klein wie möglich gewählt um hier einen möglichst kleinen Spannungsabfall zu haben, was ja auch den Widerstand schont. Und gemessen an meinem Widerstand/ Shunt sind es 0,619V * 0,6A Motorstrom = 0,4W. Zu Viel?
Ich müsste hier irgendwo noch ein paar Kondensatoren rumliegen haben, damit werde ich es erstmal versuchen. Welche Größe empfiehlst du denn? Und vor allem wie herum? ich vermute mal Kondensator + an PIN A0 und Minus an Ground?

rattionline:
0,4W. Zu Viel?

Für wieviel ist denn das Teil ausgelegt?
nen knappes halbes Watt wäre schon etwas...

Laut Hersteller 0,25W. Ok Frage selbst beantwortet.. Spürbar warm wurde er bis jetzt noch nicht.

Hallo
spendier dir einen Stromsensor, damit bekommst du eine Entkopplung vom Strommeßkreis und Arduino realisiert.

Habe es schon mit einem ACS712 30Ampere versucht. Der Wert den der Arduino bekommt liegt stabil bei 2,5V(laut Datenblatt auch richtig so). Doch leider keine Veränderung sobald ich den Motor belaste. Morgen soll noch die 5A Variante kommen. Damit werde ich es auch mal versuchen.
1 Ohm max 5Watt Widerstände und ein Sortiment an Kondensatoren sind auch auf dem Weg.
Ich vermute mal das das Modul dafür nicht feinfühlig genug ist. Laut Forum kommen brauchbare Signale erst am 100mA Veränderung durch.
"ACS712 genauigkeit - Mikrocontroller.net"

Schon einmal Vielen Dank an alle die hier mithelfen 8)

Hallo
alternativ kannst du diesen Baustein verwenden.

rattionline:
Das ganze sieht auf dem Breadboard so aus:

12V ----- Resistor ----- Motor --------- Ground(Netzteil)
| |
| |
A0 GND

Mit 2 unterschiedlichen Gnd ist mir das etwas suspekt. Das kann es eigentlich nur bei galvanischer Trennung geben.
Zeigmal die komplette Verschaltung.

Grundsätzlich ist die Schaltung gut, aber setze den Widerstand hinter den Motor, weil du nur einmal GND haben solltest. Sonst musst du die zwei Spannungsquellen getrennt halten für Elektronik und Motor. Unnötiger Aufwand. Drehmoment eines Motors ist direkt proportional dem Stromfluss und nicht der Spannung.

Daher musst du die Spannung in einen Strom umrechnen. Wenn also 0,6V misst dann ist dein Stromfluss bei 10,8Ohm wohl 0,055A. Bei 1,5V dann so ca 0,14A. Deswegen den Messwiderstand möglichst klein wählen. Nicht zu klein, damit das Messen zu aufwendig wird und nicht zu groß, weil sonst dieser Spannungsanteil am Motor fehlt und mit weniger Spannung fliest auch weniger Strom. Aber nicht linear weniger, weil wir einen Drehzahlabhängigen Scheinwiderstand haben bei Spulen

Mit sagen wir 1Ohm müsstest ganz gut liegen, das ist noch gut messbar am Arduino.

Mit 1 Ohm musst auch nicht viel Umrechnen. 1V wäre dann 1A. 0,5V wären 0,5A. Indem du den Motor blockierst wirkt nur noch der Drahtwiderstand R, nicht mehr der Scheinwiderstand der Spule während des Drehens. So kannst du dann den Innenwiderstand ermitteln...aber ist mehr fürn Spass, der Wert nutzt dir nicht viel. Induktivität zu wissen wäre eher was.

Den Widerstand vor den Motor, wie MicroBahner sagt, macht Probleme mit der Masse. Unter Umständen schrottest du sogar was, wenn beide Spannungsquellen massemässig zusammen kommen. Deswegen messen zwischen Motor und GND, dann passt alles.

Deswegen den Messwiderstand möglichst klein wählen. Nicht zu klein, damit das Messen zu aufwendig wird und nicht zu groß, weil sonst dieser Spannungsanteil am Motor fehlt und mit weniger Spannung fliest auch weniger Strom.

Wenn du einen 10,8 Ohm Widerstand hast und damit etwas messen kannst, hast du eventuell auch 2 davon. Einfach parallel schalten, das sind dann eff. 5,4 Ohm Du misst die halbe Spannung, das geht noch, bleibst aber im Rahmen der nom. Belastung.

Wobei das nicht ganz so kritisch ist, da der Widerstand ja nur kurzzeitig (vor dem Abschalten) voll belastet wird, wenn du bei Tests vorsichtig bist. Evtl. brennt ja auch eher der blockierte Motor durch. :slight_smile:

Und das Gezappel beim Messen am drehenden Motor musst du in jedem Fall glätten (am billigsten per Software).

@MicroBahner
Ich benutzte deine Bibliothek für ein anderes Projekt.. Auf diesem Weg ein Dankschön für die tolle Arbeit :grinning:

Ich habe das ganze nochmal mit dem Widerstand hinter dem Motor neu aufgebaut:

12V -------- Motor ----- Widerstand------ Ground Netzteil
|
|
A0
Also 12V gehen an den Motor; vom "Minuspol" des Motors geht es an den Widerstand; von dem Beinchen bevor der Widerstand kommt geht es an A0; Hinter dem Widerstand geht es an Ground vom Netzteil.
Mit dem Aufbau bekomme ich folgende Werte: 2.86 4.81 3.48 3.98 3.68 3.94 4.31 3.82 3.70 3.69 3.79

Mit einem Jumperkabel vom Arduino Ground aufs Breadboard auf die Ground Schiene vom Netzteil bekomme ich meine erwarteten, ungeglätteten Werte: 0.22 0.42 0.85 0.77 0.87 0.61 0.31 0.26 0.52 0.81 0.15 0.71

IMG-20210218-211859 hosted at ImgBB — ImgBB Hier ist der ganze Aufbau als Bild vefügbar.

Der Arduino hängt übrigens per USB AM PC.. Aber ich denke das war klar wegen dem Seriellen Monitor.
Das mit dem Glätten ist mir klar, ich warte noch auf die Kondensatoren. Ich wollte nur ein kurzes Update und den geänderten Aufbau mitteilen.

Die Glättung per Software dürfte effektiver sein. Du solltest dafür öfter messen, alle 20ms anstatt alle 250ms wie jetzt. Dann einen gleitenden Mittelwert über z.B. 10 Werte bilden. Die Zeiten etc. kannst du nich anpassen, um die gewünschte Reaktionsschnelligkeit zu bekommen.
Tip: Library RunningMedian, INTERVAL.h von combie

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.