Willkommen! Anmelden Ein neues Profil erzeugen

Erweiterte Suche

Black Corner

geschrieben von Uebe 
Re: Black Corner
17. January 2019 14:00
Hi UEBE,

wenn ich mich recht entsinne, gibts die noch als 128x128 und 256x128 bei ExpTech.

Klasse arbeit!

Grüße,
Sven
Re: Black Corner
18. January 2019 05:22
Hi UEBE,

hast du dir mal die Dispalays von Digole ansgeschaut ,das TFT 2,4 Zoll hat UART/I2C/SPI und ein Auflösung von 320xRGBx240, 262K colors, Power Supply: 3.0V to 7.0V, Power consumption: 0.5mA to 135mA (at 5V when backlight full on), Receiving buffer: 2048 bytes, Communication signal can work on 3.3V and 5.0V TTL, 7 preloaded fonts, font’s data structure full compatible with U8Glib.
Commands Backward compatible with mono Digole serial display, replace other Digole serial display seamless.

DS320240CIPS-61TF2 -> 320xRGBx240
DS400240CTFT-61TFCN -> 400xRGBx240

Die haben Display von 2.0, 2.4 und 2.6 mit 320x240 & 400x240 im Program die 2.4 und 2.6 kosten ca. 18$

die kleineren 1.8 haben nur eine Auflösung von 160x128 und gibt es als TFT LCD für knapp 12 $ oder als Farb OLED für knapp 20 €.

Es gibt auch einen Online Display Emulator -> Digole Display Emulator. Dieser erzeugt einem auch die Set Commands die man benötigt oder auch das C-File, oder Bin File man kann alle uneterschiedlichen Displays testen, Egal ob Mono OLED oder auch die diversen TFT-LCD inklusive der verschiedenen Diplaygößen.

Die haben auch ein Universal Interface zur Ansteuerung DS12864LCD-UNA-V2 -> Serial Adapter V2, ist epfehlenswert bei diversen µ-Controllern die Probleme bereiten, oder auch um das Backlight 0-100% dimmen zu können.

Ich habe mir ein 2.6 Zoll geholt, weil ich mal eine Idee hatte dies als 2. Display über den I2C für das RADDS 1.6 zu verwenden.

Vielleicht ist etwas brauchbares für dich dabei

Grüße

Josef

3-mal bearbeitet. Zuletzt am 18.01.19 05:30.
Re: Black Corner
23. January 2019 09:41
So hier mal einen neuer Trace den ich euch zeigen wollte. Bei dem man schön sieht wie die Befehle ausgeführt werden.



Ich habe via UART den Befehl G1 X0.1 an die CPU gesendet.
Der UART taktet mit einer Baudrate von 115200 . Man kann schön sehen wie ca. alle 90us ein Byte eintrifft. Danach setzt der G-Code_Reader das Byte in eine Befehl Struktur ein .



Mit dem letzten Byte welches kommt wird der Befehl vervollständigt und ein Event wird ausgelöst . ( Neuer Befehl im FIFO )

Danach schaltet sich der Commander ein und bearbeitet den Befehl . Er führt die Konfiguration aus und startet den Bresenham Timer.

MFG UEBE
Re: Black Corner
30. January 2019 07:08
Seit letzter Woche Freitag , steuert der STM auch Drucker Achsen an. Zu Anfang zwar so das der Drucker eher einer Rüttelplatte glich und ich sich mir das Gefühl aufdrängte RTOS + 3DDrucker Firmware lassen sich nicht vereinigen .
Aber nachdem ich ein paar Bugs finden konnte ging es wieder Bergauf. Am Montag hab ich den Beschleunigungsplanner implementiert .
Für mich ist das der Schwierigste Part einer Firmware und auch das was eine gute Firmware ausmacht.
Das Fahrverhalten sieht im Moment nicht schlecht aus . Aber das wird sich erst im Druckbild genau zeigen.

Im Moment arbeite ich an den Analogen Eingängen . Zwar lösen die mit bis zu 12 Bit auf , jedoch schwanken die Werte um bis zu 20 Bit . Es wird sich zeigen ob sich damit gut regeln lässt.

Wenn ich Median und Mittelwert bilde kann ich Werte schon ziemlich gut Bügeln ... Wir werden sehen smiling smiley

MFG UEBE
Re: Black Corner
01. February 2019 07:36
So ich hab es jetzt folgendermaßen gelöst .

Ich habe mit Median und arithmetischen Mittel etwa experimentiert und verschiedene Tests gemacht und mir Grafisch in Excel anzeigen lassen . Folgende Methode ergibt die stabilsten Messwerte:

Zuerst werden 5 Messwerte aufgenommen und in Temperaturwerte an Hand der Lookup Table errechnet. Aus den 5 Werten wird der Median ausgewählt . Das wird nochmal wiederholt und aus den beiden Werten wird das Mittel gebildet.
So ergibt sich aus 10Messwerten ein Messwert .

Heute hab ich noch den PID Regler programmiert und mal Hardware Trocken Tests gemacht :

Mit dem Ergebnis bin ich sehr zufrieden :




Ich bin guter Dinge diesen Wochenende zu drucken.

MFG UEBE
Re: Black Corner
03. February 2019 13:45
Er druckt !spinning smiley sticking its tongue out

Bin mit unüblich wenig Problemen gestartet. Die Firmware läuft soweit sauber. Ich konnte keine Aufhänger oder Fehlreaktionen bis jetzt beobachten. Natürlich fehlen noch ein paar wichtige Befehle ,wie das Warten auf die Target Temperatur und das Drucken von der SD Karte. Aber soweit bin ich erstmal zufrieden.

Ich werd den I2C Treiber für den Display nochmal überarbeiten müssen. Die Display Kommunikation ist das tatsächlich das Einzige was die CPU überhaupt auslastet . Im Normalfall liegt die Auslastung bei ca. 4% . Weiterhin werd ich mir mal den IP-Stack anschauen und gucken was man damit so alles machen kann.

Natürlich hab ich nicht nur die Firmware neu aufgesetzt sondern auch der Drucker hat sich Hardwaremäßig verändert. In die Z-Achse hab ich eine Spindel verbaut . 2 Große Lüfter für die Bauteilkühlung. Die Hotend-Wasserkühlung ist komplett neu . Die stromfressenden Pelitierelemente hab ich raus geschmissen . Stattdessen hab ich den Wassertank so groß ausgelegt , das sich das Wasser von alleine wieder runterkühlt.

Das Hot-End + Extruder ist komplett aus China-Komponenten zusammen geschraubt. Ich war neugierig ob man daraus etwas Brauchbares machen kann. Und bin Positiv überrascht. Ich hab zwei Extruder verbaut um eine Zugentlastung des Filaments in den Druckkopf zu gewährleisten. Ich drucke mit einer 0.8mm Düse und kann dadurch natürlich recht flott fahren.

Morgen lad ich ein paar Bilder hoch .
Re: Black Corner
03. February 2019 15:58
Glückwunsch!
Ziemlich cool, dass du das hinbekommen hast.
Wie hast du das jetzt mit der beschleunigung gelöst?
Grüße
Max
Re: Black Corner
04. February 2019 02:18
Bitte entschuldigt die Bilder. (Handy Kamera im dunkeln )

Aber man sieht ganz gut was sich verändert hat.



Hier sieht man schön die beiden Extruder. Da beide Extruder baugleich sind ,also gleicher Extruder ,gleiche Motoren und gleiche Endstufen hab ich sie einfach das STEP, EN, DIR Signal parallel an das PCB angeschlossen . Eine Regelung hab ich erstmal so nicht vorgesehen .



Das China Hotend besteht aus einem "Volcano" Heizblock mit Messingdüse und einem VA-Heatbreak . Als Kühlblock hab ich einfach einen weiteren China Heizblock verwendet . Durch diesen dann ein weiches 6mm Kupferrohr geschoben und 8mm Schläuche draufgesteckt. Der Kühlbock wird im Betrieb ca. 35-40°C heiß.




Mehr Wasser anstatt aktiv Kühlen . Die Pelitierelemente haben bei 12V ca. 10A gezogen . Von daher konnte ich mit ihnen auch das 12V Netzteil rauswerfen . Die Pumpe hängt an einem Stepdown Regler. Bei dem ich die Spannung soweit runtergedreht habe , dass die Pumpe gerade noch so läuft . So ist sie schön leise .
Re: Black Corner
04. February 2019 03:14
Quote
NitroFreak
Glückwunsch!
Ziemlich cool, dass du das hinbekommen hast.
Wie hast du das jetzt mit der beschleunigung gelöst?
Grüße
Max

Ich hab eine Pre-Calculation Funktion. Diese Funktion rechnet den Befehl zu ca. 60% durch. Es werden alle Step-Deltas ausgerechnet die Achse mit dem größten Delta wird zur priorisierten Achse erklärt. Die Feedrate und die Acceleration wird vorgerechnet und je nachdem reduziert wenn eine Achse die Leistung (Ihre Grenzwerte überschreitet ) nicht schafft (Beispiel Z-Achse ).

In der Hauptfunktion (init_Motion) geht es dann weiter. Nehmen wir an die Priorisierte Achse wäre X. Dann suche ich nach allen verfügbaren G0 und G1 Befehlen im Buffer. Und schaue dann ab welchen Befehl die X-Achse ,steht oder die Richtung ändert.
Der Weg der bis dahin aufaddiert ist ,dient dann um die Endgeschwindigkeit zu bestimmen.


	// Wie schnell kann	ich	werden ? 

	uint8_t	find_blocks	= 0;
	uint32_t way =	0;
	uint32_t End_Feedrate =	0;
	if ( HOME == 0){



		while(1){
			COMMAND	* next_Motion;
			next_Motion	= next_G_Code_in_FIFO(find_blocks);
			if (next_Motion	!= 0){
				
				if (next_Motion->Pre_Calc == 0){
					Pre_Calculation(next_Motion);
				}

				if ( next_Motion->AXIS_Step_Relative[actual_Motion->Priority_Axis] == 0	){
					break;
				}

				if ( ( next_Motion->Direction &	(1 <<  actual_Motion->Priority_Axis	)) != (	actual_Motion->Direction & (1 <<  actual_Motion->Priority_Axis ))){
					break;
				}	
				way	+= next_Motion->AXIS_Step_Relative[actual_Motion->Priority_Axis] ;

				End_Feedrate +=	( next_Motion->AXIS_Step_Relative[actual_Motion->Priority_Axis]	 / next_Motion->Acceleration);
				find_blocks	++;
			}
			else{
				break;
			}
			


			if (find_blocks	> 8){
				break;
			}
		}
	}
	
	way	= way>>1;

	//End_Feedrate	=  (way	/ actual_Motion->Acceleration )	;
	
	End_Feedrate = End_Feedrate	>> 1;
	
	if (End_Feedrate  >	 actual_Motion->Feedrate){
		End_Feedrate  =	 actual_Motion->Feedrate;
	}
	actual_Motion->End_Feedrate	=  (uint16_t)End_Feedrate ;

Wichtig ist auch das ich nicht mit der normalen Beschleunigung arbeite. Also mein Drucker beschleunigt nicht linear. Das kommt daher das ich einfach einen Schwellwert (Acc_T) errechne ab dem die Geschwindigkeit um eins addiert oder subtrahiert wird.
Beispiel die Schwelle liegt bei 10. Entspricht ca. einer Beschleunigung von 1600mm^s² wenn die Achse mit 250Schritten/mm läuft.

das heißt wenn die Achse 10 schritte fährt wird sie um 1mm/s schneller oder langsamer. Der Vorteil dabei ist das sich der Bremspunkt (Deceleration_Point) viel leichter errechen lässt ( Weg = V-Delta * Acc_T ). Ich muss keine Wurzel ziehen oder der gleichen.
Re: Black Corner
04. February 2019 06:49
Quote

Mehr Wasser anstatt aktiv Kühlen .
Yo, genauso habe ich es auch gemacht.
Als das Titan Aqua kam, habe ich eine kleine Messreihe gemacht und es zeigte sich, dass die (Mini-)Schläuche die Kühlleistung limitieren. Bei 7V war bereits max. Kühlung erreicht. Eine Steigerung auf 12V vergrößerte nur den elektrischen Verbrauch ohne dass ein Nutzen entstand.


Ansonsten: Respekt! Du bist schon sehr weit gekommen. Sehr schön.

Wie hast Du denn die Temperatur-Regelung gemacht? Ist das ein Interrupt, der zu fixen Zeiten ausgeführt wird, oder hängt die Frequenz der PID-Regelung von den ADC-Werten ab?
Re: Black Corner
04. February 2019 08:11
Quote
Brummie
Quote

Mehr Wasser anstatt aktiv Kühlen .
Yo, genauso habe ich es auch gemacht.
Als das Titan Aqua kam, habe ich eine kleine Messreihe gemacht und es zeigte sich, dass die (Mini-)Schläuche die Kühlleistung limitieren. Bei 7V war bereits max. Kühlung erreicht. Eine Steigerung auf 12V vergrößerte nur den elektrischen Verbrauch ohne dass ein Nutzen entstand.

Ich denke das ist bei mir auch der Fall. Vorher hat ich ja auch 4mm Schläuche jetzt bin ich auf 8mm da kann schon ein vielfaches an Wasser durch.

Quote
Brummie
Ansonsten: Respekt! Du bist schon sehr weit gekommen. Sehr schön.

Wie hast Du denn die Temperatur-Regelung gemacht? Ist das ein Interrupt, der zu fixen Zeiten ausgeführt wird, oder hängt die Frequenz der PID-Regelung von den ADC-Werten ab?

Jein . Es weder das eine noch das Andere. Die Firmware sitzt ja auf dem RTOS daher hab ich hier die Vorzüge des RTOS benutzt.

void JET_PID_Task(void){
	uint8_t	i;
	while(1){

		i++;

		OS_TASK_Delay(6);

		if(OS_EVENT_GetTimed(&New_Jet_Temp_Event,100) == 0){
		
		} else {
			HARD_FAULT();
		}

		IST_JET_Temperature	= get_JET_Temperature();

		if(PID_WAIT_EVENT){
			if (  ( IST_JET_Temperature - SOLL_JET_Temperature ) > 10 ){
				PID_WAIT_EVENT |= 0b0010;
				
				if (PID_WAIT_EVENT ==  0b0111) {
					PID_WAIT_EVENT = 0;
					quit_Command();
				}
			}
		}

		OUT_JET_P =	(( SOLL_JET_Temperature	- IST_JET_Temperature )	* JET_PID_Kp	) /10.0;

		if (OUT_JET_P >	255.0){		OUT_JET_P =	255.0; }
		if (OUT_JET_P <	-255.0){	OUT_JET_P =	-255.0;}

		if (i%2){
			if ( abs ( ( SOLL_JET_Temperature -	IST_JET_Temperature	) )	< 300 ){	
				OUT_JET_I +=	(( SOLL_JET_Temperature	- IST_JET_Temperature )	* JET_PID_Ki /1000.0);
				OUT_JET_D =	(IST_JET_Temperature	- OLD_IST_JET_Temperature )	* JET_PID_Kd /10.0;
			}
			OLD_IST_JET_Temperature	= IST_JET_Temperature;	
		}
		
		if (OUT_JET_I >	200.0){		OUT_JET_I =	200.0; }
		if (OUT_JET_I <	-200.0){	OUT_JET_I =	-200.0;}

		if ( abs ( ( SOLL_JET_Temperature -	IST_JET_Temperature	) )	< 300 ){	
			OUT_JET	= OUT_JET_P	+ OUT_JET_I	+	OUT_JET_D; 
		}
		else {
			OUT_JET	= OUT_JET_P;
		}

		if (OUT_JET	> 255.0	){	OUT_JET	= 255.0;}
		if (OUT_JET	< 0	) {		OUT_JET	= 0;}

		set_Jet_PWM( (uint8_t)OUT_JET);
		
	}
}

Der Regler wird in einem Task aufgerufen . Man sieht ja das der Code sich in einer While Schleife befindet . Daher wird er unendlich aufgerufen . Das OS_TASK_DELAY(6); führt dazu das der Task 6ms Sekunden geblockt wird. Das heißt er läuft mit einer Frequenz von 166Hz. Danach sieht man das er auf ein Event wartet . Das Event wird von dem Thermistor Task immer dann generiert wenn einer neuer Analogwert in Celcius umgerechnet wird. Der Thermistor Task läuft hochfrequenter . Sollte das Event nicht kommen wird nach 100ms ein Hard_Fault ausgelöst . Ist im Grunde ein Watchdog. Danach wird der Regler durchgerechnet und die PWM gesetzt .
Re: Black Corner
04. February 2019 09:52
Quote

Vorher hat ich ja auch 4mm Schläuche jetzt bin ich auf 8mm da kann schon ein vielfaches an Wasser durch.
Yepp - und das Titan Aqua hat nur 2mm Schläuche sad smiley
Bei einem anderen Wasserkühler aus Fernost gehen zumindest 6mm Schläuche drauf - den Unterschied merkt man schon.

Quote

Das OS_TASK_DELAY(6); führt dazu das der Task 6ms Sekunden geblockt wird.
Das klingt doch sehr vielversprechend.

Ich hatte mal bezüglich der Hotend-Regelung eine Frage an den Duet3D-Entwickler gestellt. Keine Ahnung, ob ich die Antworten alle richtig verstanden habe. Falls doch, rechnet das Duet3D mit 11s delay. Ich vermute, dass Dein Delay der deadtime vom Duet entspricht.
Somit wäre Deine Firmware viel reaktiver auf Temperaturschwankungen.
Gefällt mir sehr gut smiling smiley

Hast Du vor, mal einen Vergleichstest zwischen unterschiedlichen Firmwares zu machen?
Re: Black Corner
06. February 2019 06:37
Mein neuer Display ist gestern gekommen . Es ist der gleiche Treiber (SSD1306 ) verbaut. Nur das Panel hat die doppelte Pixelgröße. Und es wurde SPI nach außen geführt anstatt I²C. Das ist der größte Vorteil. I²C ist ein Flaschenhals .Daher hat die Übertragung des gesamten Bildes (1024Bytes ) knapp 20ms gedauert . Dadurch lag die Prozessor Auslastung auf fast 30% . Mit SPI lassen sich die Daten innerhalb von 800us übertragen . Die Prozessorauslastung liegt jetzt bei 2% . Dafür nehme ich auch gerne die paar Leitungen mehr in Kauf.smiling bouncing smiley





Bei meinem Druck gestern hab ich festgestellt das ich ein Z-Wobble Problem habe. Da werd ich mir heute Abend mal ein Paar Gedanken zur Mechanik machen .
Re: Black Corner
12. February 2019 04:38
Hallo zusammen.

Mal eine kleine Rückmeldung . Allgemein bin ich mit meiner Firmware recht zufrieden . Es sind zwar noch Bugs vorhanden aber man kann gut mit arbeiten. Den Drucker muss ich jedoch mechanisch noch verbessern. Wie schon erwähnt muss ich den Wobble aus der Z-Achse bekommen. Weiterhin brauch ich noch eine gescheite Bauteilkühlung und den Frame muss ich auch noch stabilisieren.

Außerdem macht der Slic3r Probleme . Anscheinend ist das Programm nicht für 0.8mm Düsen ausgelegt. CURA bekommt es besser hin aber ich verstehe die Settings in CURA nicht so wirklich daher ist mir Slic3r eigentlich lieber. Da muss ich nochmal schauen wie ich das in den Griff bekomme.

Ich hab mir auch nochmal einen neuen STM zugelegt . Den H743ZI eine absolutes Flaggschiff komplett überdimensioniert für 3D-Drucker aber er kostet das selbe wie der F767. Er taktet mit 400 Mhz und besitzt einige coole Hardware Features. Bei der CPU könnte ich mir echt vorstellen den SLICER in den Drucker zu packen.

MFG UEBE
Re: Black Corner
25. February 2019 02:40


So ich hab mir mal eine Bauteilkühlung gedruckt aus weißen ABS.

Links sieht man den den ersten Druck mit der Spindel in Z. Nicht verwundern ich hab den Druck auseinander gerissen um zu schauen wie die Layer haften.

In der Mitte der Druck mit Zahnriemen in Z. Schon eine deutliche Verbesserung.

Rechts , mit Zahnriemen und aktiver Bauteilkühlung. Was den Druck nochmal stark verbessert. Im Oberen Bereich wird der Druck etwas unschön . Das Liegt daran das der Drucker das zu schnell gefahren ist . Ich geh davon aus das dort noch ein Bug in der Firmware ist.



Hier noch ein weitere Druck . Eigentlich fast perfekt bis auf die Herzbögen. Hier sin kleine Wellen entstanden . Ich geh davon aus das es daher kommt das ich nur von einer Seite kühle , oder es lag an der Geschwindigkeit.

1-mal bearbeitet. Zuletzt am 25.02.19 02:42.
Re: Black Corner
27. February 2019 04:43
Quote
Uebe
[attachment 110236 IMG_20190223_095850.jpg]


[attachment 110237 IMG-20190223-WA0000.jpeg]

Hier noch ein weitere Druck . Eigentlich fast perfekt bis auf die Herzbögen. Hier sin kleine Wellen entstanden . Ich geh davon aus das es daher kommt das ich nur von einer Seite kühle , oder es lag an der Geschwindigkeit.
Als Laie in Firmwares hätte ich jetzt gesagt, der Jerk ist zu niedrig und er muss bei dem Polygonzug zu sehr abbremsen zwischen den Segmenten, was dann dazu führt, dass an dem Ort zu viel plastik rauskommt.
Die Ultimative Lösung ist natürlich ein G2/G3 arc move, das geht aber nur mit einem Slicer der .step oder andere native CAD formate nimmt. Das sage ich schon seit Jahren, da ist die Community noch sehr im Rückstand.
Stratasys hat schon seit jahren ihr "Advanced FDM" im GrabCAD Print, der nur noch native CAD formate annimmt. Vorteil ist, dass man kein Jerk braucht, auch wäre Linear Advance möglich.
Ein Slicer, der zumindest aus den STL Kurven mit einer tolerierbaren Genauigkeit, ähnlich wie alle modernen CAM Systeme, dann Kreissegmente interpoliert, wäre zumindest schonmal ein Anfang.
Wäre ja vielleicht was für dich?

Grüße
Max
Re: Black Corner
28. February 2019 11:42
Hallo,
Cooles Projekt winking smiley

2-mal bearbeitet. Zuletzt am 28.02.19 11:50.
Re: Black Corner
13. March 2019 14:42
Ich hab seit 2 Wochen nichts mehr an der Firmware verändert. Aktuell drucke ich Teile für ein neues Projekt. Soweit bin ich sowohl mit dem Drucker als auch mit der Firmware zufrieden.
Ich hab das Glück das ich beruflich jetzt die gleiche CPU programmiere . Und da ich die Treiber UART , SPI , I2C dafür schreibe kann ich diese dann auch in meine Firmware implementieren.



Ich halt euch auf dem Laufenden
In diesem Forum dürfen leider nur registrierte Teilnehmer schreiben.

Klicke hier, um Dich einzuloggen