Seite 2 von 3

Re: Verfahrgeschwindigkeit mittels Poti einstellen

Verfasst: Di 9. Feb 2016, 21:26
von RAU
cool, ein Zufallsgenerator! :)

ich muss gestehen, dass ich selbst keine praktischen Erfahrungen damit habe. Ich lese nur öfters in der Arduino-Doku. Was mir jetzt noch einfällt ist dies hier:
https://www.arduino.cc/en/Reference/AnalogReference
Hier wird festgelegt, mit welcher Refernz die Analogeingänge arbeiten. Ich kann jetzt nur vermuten, dass die verschiedenen Routinen, die irgendwo Analogwerte abrufen, die Referenz hin und her wechseln. Vielleicht musst du den Befehl zuerst ausführen, um die Referenz festzumachen....?

Re: Verfahrgeschwindigkeit mittels Poti einstellen

Verfasst: Mi 10. Feb 2016, 12:23
von RFrank
Leichte Schwankungen im Wert sind möglich, kann durch Mittelwertbildung geglättet werden.
Der Eingang muss sich erst einschwingen auf den zu messenden Wert, würde bei uns aber zu einer ungewollten Verzögerung führen.
Wie RAU schon schrieb muss etwas Grundsätzliches noch nicht stimmen, da die Schwankung zu groß ist.

Gruß

Re: Verfahrgeschwindigkeit mittels Poti einstellen

Verfasst: Mi 10. Feb 2016, 13:22
von X4r3
Ich habe die Verdrahtung durchgeklingelt und tatsächlich ging die Spannung auf den falschen Pin. Jetzt ists aber richtig und die werte sind schon relativ konstant, es gibt allerdings immer wieder ausreiser.
Ja eine Mittelwertbildung wäre ned Schlecht, da muss ich mich mal nach nem Code Schnipsel umsehen.

Auch ein häufigeres aufrufen von analogread() verringert die ausreiser:

Code: Alles auswählen

	int blaWert = analogRead(3);
	blaWert = analogRead(3);
	int aWert = analogRead(3);
	Com::printFLN( PSTR( "aWert = "), aWert );
	int bWert = analogRead(4);
	Com::printFLN( PSTR( "bWert = "), bWert );

Re: Verfahrgeschwindigkeit mittels Poti einstellen

Verfasst: Do 11. Feb 2016, 01:28
von X4r3
Ich habe verschiedene Formeln zur Glättung und Mittelwertbildung ausprobiert, aber kein Erfolg. Wenn z.b. momentan der Analogwert ständig mit den Wert 1 gelesen wird und ein Ausreißer kommt (Wert von 900-1000), dann erhöht er den Mittelwert erheblich.

Den Analogwert einzulesen wie die Temperatursensoren komme ich auch nicht weiter.

Die Analoggeschichte werde ich erstmal begraben und nach einem digitalen Poti, Inkrementalpoti umsehen.

Re: Verfahrgeschwindigkeit mittels Poti einstellen

Verfasst: Do 11. Feb 2016, 09:15
von RFrank
Dann müßtest du einen Pulse/Pause erzeugenden Poti benutzen, sonst würde der dir noch mehr Eingänge verbrauchen.

Re: Verfahrgeschwindigkeit mittels Poti einstellen

Verfasst: Do 11. Feb 2016, 21:53
von RAU
X4r3 hat geschrieben:Ich habe verschiedene Formeln zur Glättung und Mittelwertbildung ausprobiert, aber kein Erfolg. Wenn z.b. momentan der Analogwert ständig mit den Wert 1 gelesen wird und ein Ausreißer kommt (Wert von 900-1000), dann erhöht er den Mittelwert erheblich.

Den Analogwert einzulesen wie die Temperatursensoren komme ich auch nicht weiter.

Die Analoggeschichte werde ich erstmal begraben und nach einem digitalen Poti, Inkrementalpoti umsehen.
Vielleicht kann man die Ausreißer noch wegkriegen.

Ist das Kabel zum Poti geschirmt? Ideal wäre ein geschirmtes zweipoliges Kabel mit Masse auf dem Schirm, +5V auf dem einen Leiter und das regelbare Signal auf dem anderen Leiter.

Kann es sein, dass das Poti beim Bewegen kratzt? Löte einen kleinen Kondensator direkt am Poti zwischen Abgriff und Masse.

Eine Mittelwertbildung hat den Nachteil, dass sie um so träger wird, je besser sie filtert. Wenn es nur darum geht, Ausreißer wegzugriegen, wäre es besser einen nichtlinearen aber sehr pragmatischen Ansatz zu wählen, z.B. den Median Filter. Du sammelst die letzten 3, 5 oder 7 Messwerte, und berücksichtigst nur der Größe nach sortiert (!) den Mittleren. Der Ausreißer wird niemals in der Mitte der sortierten Liste landen.
Um auch leichtes Rauschen noch herauszufiltern, müsste man den Mittelwertfilter noch oben draufsetzen.

Re: Verfahrgeschwindigkeit mittels Poti einstellen

Verfasst: So 21. Feb 2016, 15:45
von X4r3
Ich habe jetzt eine andere Lösung mit einem Drehpoti / Encoder hinbekommen.

https://www.conrad.de/de/encoder-10-v-0 ... 94450.html
Datenblatt: http://www.produktinfo.conrad.com/daten ... 2B_S_Z.pdf

Es werden 2 Digital-Eingänge benötigt für die Spur A (CH. A) und Spur B (CH. B). Diese habe ich an PD2 und PD3 angeschlossen.

Zuerst hatte ich die Abfrage der Eingänge und entsprechende Auswertung mit Zähler und Richtungserkennung in der loopRF( ) funktion in der RF.cpp. Das wollte aber nicht einwandfrei klappen, der Zähler zählte nicht genau. Dann habe ich eine simple Wechselschaltung in die Funktion eingebaut, beim Aufruf der Funktion wird ein Augang eingeschalten, beim nächsten Aufruf wieder ausgeschalten.

Code: Alles auswählen

		if ( g_testLEDOutput == LOW )
		{
			g_testLEDOutput = HIGH;	
		}
		else
		{
			g_testLEDOutput = LOW;	
		}
		
		WRITE(35, g_testLEDOutput);
So konnte ich die Frequenz messen und die Zykluszeit der Funktion ermitteln. Frequenz von loopRF() bzw. deren Elternfunktion Commands::checkForPeriodicalActions() = 5 Hz , d.h. alle 100ms wird die Funktion aufgerufen. Damit lässt sich kein Encoder auswerten der eine Frequenz von 30HZ erreicht wenn man ihn so schnell dreht wie es geht.

Also habe ich eine Funktion gesucht die eine höhere Frequenz hat und bin fündig geworden: Commands::commandLoop() in der Commands.cpp, die Elternfunktion ist die loop() Funktion der Arduino-Routine. Diese sollte eigentlich die höchste Frequenz im ganzen Programm haben.
Die Frequenz der Commands::commandLoop() im Idle Zustand: etwa 8 kHz
Damit lässt sich was Anfangen.

Auswertung des Encoders in Commands::commandLoop() in der Commands.cpp:

Code: Alles auswählen

		int valA = READ(SPURA);
		int valB = READ(SPURB);
		if (valA != g_extSpeedMult_lastValA)
		{
			if (valA == valB) Printer::feedrateMultiply++;
			else Printer::feedrateMultiply--;
			g_extSpeedMult_lastValA = valA;
		}
Hier fehlen noch Begrenzungen etc., aber es funktioniert, den Speedmultipler im Qicksettingsmenü lässt sich genau in 1er Schritten einstellen und auch sehr schnell auf höhere Werte wie 400% einstellen.

Die Pin-nr. werden in der pins.h definiert. Da diese Eingänge sind sollten sie auch in die SENSITIVE_PINS Tabelle (ganz unten) mit eingefügt werden. Per G-code können Pins als Ausgänge definiert und ein-/ausschalten werden. Pins die in der SENSITIVE_PINS Tabelle sind werden da ausgeschlossen.


Der oben genantte Encoder hat zusätzlich neben dem Drehrad in der Mitte noch einen Taster und Aussen 4 weitere Richtungstaster (Oben, Links, Rechts, Unten). Damit könnte man das bisherige Richtungstastenfeld ersetzen und die Temperaturen, etc. viel schneller auf den gewünschten Sollwert einstellen.

Re: Verfahrgeschwindigkeit mittels Poti einstellen

Verfasst: So 21. Feb 2016, 16:46
von X4r3
Jetzt müsste das ganze noch vernünftig verbaut werden.
Auf jeden Fall bräuchte ich eine Platine auf der die Stiftleiste: https://www.conrad.de/de/stiftleiste-ge ... %20Details fest draufgelötet wird.

So wie es aktuell mit einzelnen Adern ist das Mist, die Stifte in der Stifleiste rutschen hin und her und geben keinen guten Kontakt:
IMG_0682.jpg

Besser eine Platine, aber da habe ich keine Möglichkeit sie selbst herzustellen.

Von RM 2 mm der 14 pol. Stiftleiste auf RM 2,54 für 2x 8 pol. Schraubklemmen und 4 Bohrungen zum irgendwo festspaxen, Skizze:
platine.png
Keine Ahnung woher ich so eine Platine bekommen kann.

Re: Verfahrgeschwindigkeit mittels Poti einstellen

Verfasst: Mi 24. Feb 2016, 12:47
von Zaldo
Ich muss in zwei, drei Wochen ohnehin was ätzen, wenns so lange Zeit hat kann ich Dir eine mitätzen.

Re: Verfahrgeschwindigkeit mittels Poti einstellen

Verfasst: Mi 24. Feb 2016, 12:58
von JoBo
PCB Pool wäre auch eine Möglichkeit. Kostet aber entsprechend.