Schlagwort-Archiv: Arduino Mega

Arduino Mega 2560, AMS1117, ATMega CPU. Teil 2 – Firmware

Nachdem nun mechanisch alles in Ordnung gebracht wurde, kommt der zweite kniffelige Teil.

Mein Arduino Mega war noch über Seriell ansprechbar, daher wird hier nur die CPU selbst beschrieben, nicht der USB-Seriell-Wandler (Atmega18U2, CHG340 oder was eben so auf dem Board ist)

Es wird benötigt: Ein Programmer für Atmel 8-bit CPUs.
Software, Arduino IDE.

Ich habe folgende Tools:
UsbASP (fischl.de) als Programmer
AVR8-Burn-o-Mat als Frontend
Arduino-IDE 1.06 „classic“
Google 🙂

Neben der CPU sieht man einen ICSP-Anschluss aus einer 3×2 Pfostensteckerleiste. Das ist standartisiert, wer dazu noch keinen Adapter hat kann sich das googeln.

Die CPU ist nun noch komplett nackig, es fehlt der Arduino Bootloader und die passende Konfiguration in den Fuses-Registern.

Also ran an den ISCP-Anschluss, auf Pin1 aufpassen und UsbASP anschließen.
AVR8-Burn-o-Mat starten (Unter Linux: als Root, sonst hat das Programm keinen zugriff auf /usr/bin/avrdude, ggf. config anpassen um den korrekten Pfad zu ARVDUDE einzutragen. AVRDude wird dann auch als Root ausgeführt was wichtig ist für den Zugriff auf die USB-Hardware).

Zunächst müssen die FUSES gesetzt werden. Der Prozessor ist noch langsam und es ist zu empfehlen den Jumper für langsame Prozessoren am UsbASP zu stecken.
Google liefert dazu diesen Treffer:
http://www.codingwithcody.com/2011/04/arduino-default-fuse-settings/

Arduino Mega 2560
Low Fuse 0xFF
High Fuse 0xD8
Extended Fuse 0xFD

im AVR8-burn-o-Mat wählt man also den AVR-Type ATmega2560 aus, daneben ist der Button „Fuses“.
Der öffnet ein Dialogfeld mit vielen optionen.
Da wir schon wissen welche Hexwerte gebraucht werden wird der Reiter „Fuse HEX Editor“ gewählt und die 3 Werte eingetragen.

Apply anklicken, dann oben „write Fuses“.
Die Ausgabe von AVRDUDE im Programmfenster beobachten, ob es geklappt hat.

Nun alles einmal abstecken und wieder anstecken, damit der Prozessor neu startet, am UsbASP den Jumper 2 wieder entfernen, sonst dauert das schreiben des Bootloaders sehr lange.

Jetzt kann das AVR8DUDE wieder zugemacht werden.
Wir brauchen nun die Arduino-IDE. (unter Linux wieder als Root)

In der Arduino IDE nun im Menü Tools wieder das Board „Arduino Mega2560“ auswählen. Dann den Programmer UsbASP auswählen, und im Menü Tools „Bootloader installieren“ starten.
(Ausgabe in der Statusleiste beobachten)

Nun ist der Arduino Mega wieder einsatzbereit und kann ganz normal über die IDE per „upload“ programmiert werden.

Dual Extruder und gesteuerte Lüfter am Ramps 1.4 mit Repetier Firmware (2)

Nun kommt der zweite Teil: Woher weiß denn die Druckerelektronik von der Erweiterung?

Nun, das muss in die Firmware hineinkompiliert werden.
Das klingt schlimmer als es ist.
Da ich die Repetier-Firmware verwende, muss man also die Repetier-Firmware herunterladen.
Dabei durchläuft man auf der Internetseite das onlinetool zum erzeugen der Konfiguration, die man sich hinterher fertig herunterladen kann.

Es muss nur jeweils für die nun neu hinzugekommenen Funktionen (die in der Firmware bereits enhalten, aber deaktiviert waren) der benutzte Anschluß festgelegt werden.

Die Anschlüsse sind alle Nummeriert, und der Schaltplan vom Ramps 1.4 zeigt die Zuordnung der Anschlüsse zu den Arduino- bzw. Atmega-Prozessorpins. Es gibt dazu eine einheitliche Nummerierung auf arduino.cc
https://www.arduino.cc/en/Hacking/PinMapping2560
Die Nummern in der Spalte „Digital Pins“ entsprechen den Dxx Nummern im Repetier-Firmware Onlinekonfigurator.
Den Schaltplan findet man im Reprap Wiki:
http://reprap.org/wiki/RAMPS_1.4

Wie man an den Skizzen im ersten Beitrag sehen konnte, habe ich mir den Anschluß AUX2 ausgesucht. Hier kommt noch eine Besonderheit: Der Anschluß hat zusätzlich noch „Axx“ Anschlüsse. Die gehen auf Pins am Atmega-Prozessor die auch als Analog-Eingang verwendet werden können. Ich habe mich an die D-Anschlüsse gehalten.
Will man die A-Anschlüsse auch verwenden, braucht man deren D-Nummern. Das die doppelt benamt sind war mir erst nicht klar, ich habe dann später aber festgestellt das der Anschlußplan von Ramps die erforderlichen zusätzlichen Nummern enthält.

Für die hier benutzen Erweiterungen sind keine weiteren Änderungen an der Firmware notwendig. Wer sich unsicher ist kann später in der pins.h bei der Hardware Nummer 33 nachsehen.

Wenn man nun die Firmware und die config.h heruntergeladen hat, braucht man die Arduino Classic IDE. Sie trägt die Versionsnummer 1.0.6
Das lädt man sich ebenfalls herunter und installiert es.
Dann wird die Firmware in einen Ordner entpackt, die config.h hineinkopiert und per doppelklick auf die repetier.ino Datei die IDE aufgerufen.

Nun Rechts oben im Menü den richtigen Arduino aussuchen, also den Arduino Mega 2560, und die richtige virtuelle serielle Schnittstelle.
Dann kann mit dem Button Upload (ganz links zu finden) die neue firmware automatisch kopiliert und in den Drucker geladen werden.
Danach stehen die gewünschten Funktionen zur Verfügung, wenn man alles richtig gemacht hat.
pins.h in arduino -> hardware „== 33“ – keine änderung nötig
features in firmware aktivieren.

Arduino Mega und die Hitze

Zur Zeit ist es sehr warm hier.
Und diese hohen Umgebungstemperaturen verschlechtern natürlich auch die Wärmeabfuhr aus unseren elektrischen und elektronischen Geräten. Davon bleibt auch der 3D Drucker nicht verschont.

Als Elektronik für meinen selbstgebauten Drucker habe ich auf RAMPS 1.4 gesetzt. Dabei kommt eine fertige Mikrocontrollerplatine mit einem ATMEGA 2560 zum Einsatz, die im Arduino-Projekt als offene Hardware entwickelt wurde. Es ist also alles nötige „drumherum“ fertig auf einer Leiterplatte, so daß man sich ganz auf die Projektbezogene Elektronik konzentrieren kann, wenn man ein Embedded-Projekt umsetzen möchte.
Über standartisierte Steckkontakte kann dann die weitere Elektronik angeschlossen werden.
An der Stelle kommt dann RAMPS ins Spiel, eine Erweiterungsplatine die alles enthält um die elektrische Peripherie eines 3D Druckers anzuschließen. Auf der RAMPS Platine befinden sich die Leistungsschalter für die Heizungen vom Druckbett und Heizdüse, und auch weitere Sockel für Motortreiber. Außerdem Anschlüsse für die Temperaturfühler und Endschalter.
Auch kann man ein Display anschließen. Und hier wird es interessant.

Die Arduino-Platine besitzt einen Linearregler um die 5V Spannung für die Elektronik zu erzeugen, und der setzt die Spannungsdifferenz zu den üblichen 12V in Wärme um. (Bei mir von einem Schaltregler aus der höhren Spannung von Heizbett und Motoren von ca. 30V erzeugt)
Da die Arduino-Leiterplatte mit SMD-Bauteilen bestückt ist, hat der Regler also nur die Kupferbahnen der Leiterplatte selbst zur verfügung, um seine Wärme loszuwerden. Das funktionierte ganz gut, so lange die Temperaturen angenehm waren.
Jetzt sitzt der da natürlich ziemlich eingeklemmt. Die RAMPS Erweiterung selbst wird ziemlich warm durch die Leistungstransistoren, und die Motortreiber heizen von oben und natürlich auch per Wärmeleitung über die Pfostenstecker zusätzlich ein. Dazu habe ich ein LC-Display angeschlossen welches für die Beleuchtung noch zusätzlich den Strombedarf auf der 5V Schiene erhöht.
Das war dann alles zu viel, der Spannungsregler erreichte seine Maximaltemperatur und der integrierte Übertemperaturschutz reduzierte den bereitgestellten Strom. Daher sank die Spannung. Sichtbar wurde das an der LCD Beleuchtung. Und natürlich stimmen dann auch die eingelesenen Werte der Temperaturfuhler nicht mehr.

Daher musste nun die Situation verbessert werden.
Bisher war nur ein kleiner 24V Lüfter mit 12V versorgt (wegen dem Lärm, da der immer mitläuft) auf der Rückseite mit einer Papierklammer „Foldback Clip“ so hingetüddelt. Das ist natürlich nicht so optimal, weil in dem Leiterplattenstapel die unterste Platine mit dem Spannungsregler so fast gar nichts davon hat.

Das sah so aus:
kleiner 24V Lüfter kühlt RAMPS Elektronik

Nun muss das also besser werden:
Dazu habe ich zwei Dinge verändert. Die auftretende Abwärme beim linearen Spannungsregler ist direkt abhängig von der zu überwindenden Spannungsdifferenz. Also ist es günstig, diese zu reduzieren. Das könnte man mit einem Widerstand tuen, der aber jedes mal geändert werden muss, wenn man etwas umbaut und der Strombedarf auf der 5V Schiene sich ändert. Zu wenig Spannung vor dem Regler ist auch schlecht, weil diese Regler je nach Typ etwa 2V höhere Spannung am Eingang brauchen, um die Ausgangsspannung ordentlich einzuhalten.
Besser gehts mit Halbleiterdioden. In Durchlassrichtung hat man über jeder Silizium-Diode etwa 0,7V Spannungsabfall. Ein paar davon in Reihe reduziert die Spannung ein Stück, und nimmt damit ein Teil der entstehenden Wärme vom Spannungsregler und verschiebt sie dafür in die Dioden. Die Dioden halten höhere Temperaturen aus und brauchen keine speziellen Maßnahmem zur Kühlung.
Also 4 Dioden zusammengelötet und in die Zuleitung zum Arduino Mega eingeschliffen. So werden aus 12V dann 9V, und der Linearregler hat statt 7V nur noch 4V zu verbraten. So wird seine Verlustleistung fast halbiert.

Da ich damit keinen Schönheitspreis gewinnen muss, hab ich das einfach mal so hingetüddelt.
Dioden am Prusa I3

Und nun zur zweiten Maßnahme:
Die Verbesserung der Luftkühlung.
Um den Luftstrom besser an der Elektronik zu halten, habe ich eine Plexiglasscheibe zugeschnitten und über die Elektronik geschraubt. Zusätzlich gibts einen leisen 12V Lüfter mit 60×60 mm, der einen deutlich höheren Luftstrom erzeugt als der kleine Lüfter vorher. Der wird nun auch noch mit einem kleinen gedruckten Haltewinkel so montiert, das er auch die untere Leiterplatte im Stapel mit anbläst.

Mini-Luefterhalter
Der Drucker fertigt also seine eigenen Teile zur Verbesserung der Konstruktion. 🙂

Fertig zusammengeschraubt sieht das dann so aus:

Mini-Luefterhalter

Die Instabilitäten der 5V Spannungsversorgung sind damit hachhaltig beseitigt.