Forum: Mikrocontroller und Digitale Elektronik Poti während der Fahrt auslesen gibt schwankenden Werte


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Kolja (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich bin etwas verwundert über das Ergebnis meiner ersten Messungen.

Aufbau:
altes Servo, ohne Elektronik wird vom µC angesteuert,
Positionsbestimmung über ein RDC80 (Poti)

alte Vorgehensweise:
der Motor wurde für 5ms an, dann für 10ms ausgeschaltet
und jetzt das Poti analog ausgelesen.
Die Messwerte waren auch voll plausibel, nämlich immer größer werdend.

Jetzt würde ich den Motor gerne mit einer echten PWM betreiben.

neue Vorgehensweise:
Auszug aus dem Code
1
String nachricht = "Zeit Position\n";
2
    while (1)
3
    {
4
      ist_position = analogRead(adc);
5
      
6
      nachricht += millis();
7
      nachricht += " ";
8
      nachricht += ist_position;
9
      nachricht += "\n";
10
11
      if ( abs(soll_position - ist_position) > 5)
12
      {
13
         analogWrite(servo, PWM1);
14
         yield();
15
      }
16
      else
17
      {
18
        analogWrite(servo, 0);
19
        Serial.print(" Soll Position: "); Serial.print(soll_position);
20
        Serial.print(" Ist Position: ");  Serial.println(ist_position);
21
        return;
22
      }
23
    }

Somit wird das Poti jetzt während der Fahrt ausgelesen und es gibt sehr 
unschöne Messergebnisse:

-3  230
-5  225
10  235
2  237
1  238
3  241
-4  237
-4  233
0  233
8  241
1  242
0  242
2  244
-4  240
-5  235
11  246
0  246
0  246
4  250


Wobei die erste Spalte die Zeit (millis) ist.

Warum ist das so?
Und vor allem, wie kann ich dem entgegen wirken?

Danke und Gruß Kolja

von c r (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Bring doch erstmal deine Debugging-Ausgabe in Ordnung. millis() sollte 
eigentlich keine negativen Werte annehmen können, also stimmt da 
schonmal was nicht.

Und wenn es um Arduinos geht, solltest du das vll. erwähnen.

von Kolja (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Sorry für die Verwirrung:

Es handelt sich um einen ESP8266,
welcher mit der Arduino IDE programmiert wird.

Die negativen Werte kann ich nicht erklären.
Es sollten immer die Zeiten zwischen den Messungen sein.

Hier nochmal ein Ausschnitt:

Messung  Zeit  millis()  Position
900  4  28782534  263
901  4  28782538  264
902  4  28782542  263
903  5  28782547  257
904  4  28782551  252
905  4  28782555  267
906  4  28782559  267
907  4  28782563  269
908  4  28782567  270
909  4  28782571  267
910  5  28782576  263
911  4  28782580  256
912  4  28782584  273
913  4  28782588  274
914  4  28782592  274
915  4  28782596  273
916  5  28782601  269
917  4  28782605  264
918  4  28782609  277
919  4  28782613  278
920  4  28782617  278

Danke für den Hinweis!

von Kolja (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal eine grafische Auswertung.

von ui (Gast)


Bewertung
0 lesenswert
nicht lesenswert
wo ist jetzt das problem?

von Kolja (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Das die ausgelesenen Werte so schwanken.

von Anon Y. (avion23)


Bewertung
0 lesenswert
nicht lesenswert
Kolja schrieb:
> Jetzt würde ich den Motor gerne mit einer echten PWM betreiben.

Einstrahlung? Schwankende Masse? Probier mal 1uF über das Poti.

von Kolja (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mache ich heute Abend, danke!

Kann es generell mit der PWM zusammenhängen?

von c r (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Kolja schrieb:
> Kann es generell mit der PWM zusammenhängen?

Ja, und da es laut deiner Aussage die einzige Veränderung ist schon 2 
mal Ja.

von dunno.. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Kolja schrieb:
> Mache ich heute Abend, danke!
>
> Kann es generell mit der PWM zusammenhängen?

Auch. Wir kennen ja weder die schaltung noch den aufbau. Aber so ein 
drahtverhau auf dem steckbrett, da kann man sich schon ne menge dreck 
eifangen, und die pwm sowie der rf teil des esps sind schöne quellen für 
sowas..

von Kolja (Gast)


Bewertung
0 lesenswert
nicht lesenswert
dunno.. schrieb:
> der rf teil des esps

Was ist der RF?

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
RF = Radio-Frequency

Also der Teil, der die Antenne beim Senden ansteuert.

von Kolja (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Danke

Hier mal ein Bild von den alten Messungen.

Der Code war in etwa so:
1
    while (1)
2
    {
3
      ist_position = analogRead(adc);
4
      if ( abs(soll_position - ist_position) > 5)
5
      {
6
                digitalWrite(servo, HIGH);
7
                delay(5);   
8
                digitalWrite(servo, LOW);
9
                delay(15);
10
        yield();
11
        Serial.print(" Soll Position: "); Serial.print(soll_position);
12
        Serial.print(" Ist Position: ");  Serial.println(ist_position);
13
14
      }

von Nop (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wenn man sich im ersten Plot mal die Stellen der blauen Kurve ansieht, 
wo die PWM eng ist, dann ist da auch das Gezitter der orangen Kurve eng 
beisammen (zeitlich). Und wo die blaue Kurve mit niedrigerer Frequenz 
taktet, sind die Wackler der orangen auch weiter auseinander (zeitlich). 
Das sieht nach einem Zusammenhang aus.

von Michael U. (amiga)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,
1
      if ( abs(soll_position - ist_position) > 5)
2
      {
3
         analogWrite(servo, PWM1);
4
         yield();
5
      }

Du initialisiert hier jedesmal die PWM neu, die läuft aber nach 
analogWrite() alleine weiter bis analogWrite(servo, 0);

Ich glaube nicht, daß das vom Laufzeitverhalten so günstig ist.
Das yield() ist hier meiner Meinung nach überflüssig, es ist keine 
blockierende Funktion im Spiel, die die ESP-internen Routinen nicht zum 
Zuge kommen lassen.

Gruß aus Berlin
Michael

von Kolja (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
dunno.. schrieb:
> Wir kennen ja weder die schaltung noch den aufbau.

Ist auf einer Lochrasterplatine aufgelötet
und war es auch bei den ersten Versuchen.

Anon Y. schrieb:
> Einstrahlung? Schwankende Masse? Probier mal 1uF über das Poti.

Einen 1µF Kondensator habe ich gefunden.
Elko oder Keramik ?
Und dann zwischen A0 und GND?

Nop schrieb:
> Das sieht nach einem Zusammenhang aus.

Hab mal einen Ausschnitt vergrößert.
Irgendwie ist da schon eine Regelmäßigkeit zu erkennen.
Aber die blaue Kurve ist ja nicht die PWM,
sondern die Zeit zwischen den Messungen (rechte Y-Achse)

Michael U. schrieb:
> Ich glaube nicht, daß das vom Laufzeitverhalten so günstig ist.

Kannst du das genauer beschreiben?


Danke und Gruß Kolja

von Kolja L. (kolja82)


Bewertung
0 lesenswert
nicht lesenswert
Keiner?

von Eric B. (beric)


Bewertung
0 lesenswert
nicht lesenswert
Kolja schrieb:
> Irgendwie ist da schon eine Regelmäßigkeit zu erkennen.
> Aber die blaue Kurve ist ja nicht die PWM,
> sondern die Zeit zwischen den Messungen (rechte Y-Achse)

Dann mach doch die Zeit zwischen den Messungen konstant:
Timer benutzen statt delay()

von Kolja (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Es gibt kein delay in dem Code,
die Messungen werden bei jedem Durchlauf der Schleife durchgeführt.

Und die Zeit dazwischen ist entweder 4 oder 5 ms.
Viel genauer geht es doch nicht.

Wenn ich einen Timer mit millis() benutzen würde,
kann die Zeit doch auch um eine Millisekunde schwanken.

Wobei das in beiden Fällen ja gerundete Werte sind.
Die 4ms können ja z.B 4,49ms sein und die 5ms 4,51ms.

von Kurt B. (kurt-b)


Bewertung
0 lesenswert
nicht lesenswert
Kolja schrieb:

>
> Somit wird das Poti jetzt während der Fahrt ausgelesen und es gibt sehr
> unschöne Messergebnisse:

Leg entweder eine eigene Masseleitung zum Motor oder versuche die 
Auslesezeit dahin zu bekommen wo der Motor keinen Strom zieht/liefert.

 Kurt

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Kolja schrieb:
> dunno.. schrieb:
>> Wir kennen ja weder die schaltung noch den aufbau.
>
> Ist auf einer Lochrasterplatine aufgelötet

Meister!

Du hältst geheim, wo du das Poti angeschlossen hast.
Zappelt die Spannung am Poti, zappeln auch deine Messwerte.

von Kolja (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Schon längst überfällig, hier der Schaltplan.

Kurt B. schrieb:
> Leg entweder eine eigene Masseleitung zum Motor oder versuche die
> Auslesezeit dahin zu bekommen wo der Motor keinen Strom zieht/liefert.

Eigene Masseleitung hat der Motor.
Aber wie bekomme ich die Messung des ADC mit der PWM gekoppelt?

Arduino F. schrieb:
> Du hältst geheim, wo du das Poti angeschlossen hast.

Ja, hat Recht.

von Kolja (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Edit:

Ein Unterschied zum Schaltplan:
Die Spannung kommt nicht aus zwei Akkus,
sondern aus einem 5V Netzteil,
welches an den USB Port der NodeMCU angeschlossen ist.
Der Motor wird dann über Vin gespeist.

von Anon Y. (avion23)


Bewertung
0 lesenswert
nicht lesenswert
Kolja schrieb:
> Einen 1µF Kondensator habe ich gefunden.
> Elko oder Keramik ?
> Und dann zwischen A0 und GND?

Egal und direkt am ESP.

Es ist sehr schwierig dir die Konzepte in einem Forenbeitrag zu 
erklären. Ganz allgemein: Deine Spannungsquelle darf keinen 
Innenwiderstand haben weil du sonst Schwankungen hast die sich bei 
schwankenden Lasten auf deine Messung durch schlagen.
Meßschaltung und Leistungsschaltung dürfen nicht den selben Massepfad 
haben.

von Kolja (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Edit 2:

Es fehlt auch der Transistor zwischen Vin und A0.

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Ich sehe weiterhin kein Poti.
Und, was da alles an A0 angeschlossen ist, ist mir ein Rätsel!

: Bearbeitet durch User
von Kolja (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Der RDC80 ist ein doppeltes Poti.
An 1 und 2 sind die Ausgänge angeschlossen.
An 3 und 4 die Spannungsversorgung.

Hier mal die Beschreibung vom VK: 
http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&item=291763838070

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Kolja schrieb:
> Der RDC80 ist ein doppeltes Poti.

Ah, ja...
Dann sollen 2 der Transistoren  analog Multiplexer spielen....
Von mir aus, wenn es das so tut....

Aber was ich da wirklich vermisse, sind Stabilisierungsmaßnahmen 
jeglicher Art. Mich wundert nicht, dass alle Schwankungen da voll durch 
schlagen.

: Bearbeitet durch User
von Kolja (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ja, ein mini-Multiplexer sozusagen :-)
Durch den dritten Transistor (nicht eingezeichnet),
würde sich wahrscheinlich schon ein richtiger kleiner Multiplexer 
lohnen.

Es ist aber noch ein Prototyp, sobald ich davon mehr als drei brauche,
muss der Schaltplan wohl erweitert werden.

Arduino F. schrieb:
> Aber was ich da wirklich vermisse, sind Stabilisierungsmaßnahmen
> jeglicher Art.

D.h. 1µF zwischen A0 und GND,
oder noch mehr?

Die NodeMCU hat schon alles zum Stabilisieren des ESP auf dem Board,
wurde hier mal gesagt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.