úterý 18. července 2017

Nová tiskárna

18.7.2017
Nadešel čas postavit druhou generaci naší domácí 3D tiskárny. Ta půodní, dnes již historický Prusa i2 z roku 2012, stále věrně slouží, ale technika dost pokročila a rádi bychom tedy i my vylepšili naše možnosti.

 Ostatně, během posledních pár let se k nějakému vylepšení postupně schylovalo, a čas od času jsem nakoupil nové komponenty - tu lineární ložiska tu nové řemeny a řemenice, původně s tím, že pomocí nových komponent vylepším stávající tiskárnu. Zároveň mi bylo líto starou tiskárnu rozebírat, takže jsem se nakonec rozhodl, že postavím novou sakumprásk od začátku. Jde o to aby to byl stroj s tochu lepšími komponenty a tedy přesností a snad i rychlostí tisku. Zatímco stará tiskárna má Wade extruder na 3mm vlákno, nová bude používat 1.75 mm vlákno, protože třímilimetrový standard je doslova na vymření.  Myšlenka je ta, že na staré tiskárně dovypotřebujeme zásobu 3mm plastu a potom ji asi také upgradujeme na 1.75mm extruder. Ale mezi tím by již nová tiskárna měla být v provozu.

    Od minula se svět 3D tisku HODNĚ  změnil. Zatímco před pěti lety skoro nikdo o 3D tisku neslyšel, a i na internetu musel člověk informace pracně dohledávat, dnes je jimi doslova zavalen. Vše co je ke stavbě potřeba se dá snadno koupit na e-bay (ostatně včetně nepřeberného množství kompletních kitů pro stavbu tiskárny).

Mnoho velmi dobře podaných informací o 3D tisku lze najít na stránkách

https://toms3d.org/

a v souvisejícím youtube kanálu. Tom tam má seriál o stavbě levného klonu Prusa i3 mk2 s dřevěným domorobo rámem, včetně zdrojů a cen použitých komponent (vesměs z AliExpres).  

V tuto chvíli je plán pro novou tiskárnu zhruba následující:

- Bude to v podstatě Průša i3 rework, s profesionálně vyřezaným kovovým rámem. Rám jsme koupil na e-bay od jakési litevské firmy: 3dforced. Ten materiál, který používají je jakýsi sendvič ve kterém jsou dva duralové plechy a mezi nimi plast. Tak doufám, že jsem nenaletěl...
- Na e-bay jsem též koupil jsem Ramps elektroniku, to je taková klasika, pro začátek určitě dostačující.
- A dále tamtéž kompletní extruder: Geeetech MK8 extruder Updated Print Heat, řemeny a řemenice GT2 a lineární ložiska LM8UU.  Až budu měnit extruder u staré tiskárny tak si ho vytisknu, k ní by se moderní celokovový extruder asi moc nehodil.

-Pro posun Z-osy pro začátek použiji standartní nerezové závitové M5 tyče, možná časem vyměním za speciální trapezoidální závitové tyče, které se používají na moderních tiskárnách a jsou za nějaké ty stokoruny k dispozici. 
- Hladké 8mm tyče jsem opět objednal u Akrosu (akros.cz) ostatní hutní materiál opět u http://sroubysoukup.cz/. 
-Krokové motory jsem opět objednal u mikronix.cz. Vycházejí v podstatě stejně draho jako na e-bay a je to česká fima. Mimochodem už v současnosti nabízejí kompletní sady motorů pro 3D tisk se slevou. Vůbec komponenty jsou vesměs výrazně levnější než při minulé stavbě.
-Tištěné díly si ovšem vytisknu sám.

Něco již dorazilo, na jiné věci ještě čekám. Zatím se pustím do tištění plastových dílů a až budu mít základní hardware pohromadě, můžeme se s Kryštofem pustit do stavby hrubé konstrukce.

27.7.2017
Dnes dorazil rám a musím říct, že mě trochu zklamal. Materiál je velmi tenký, a obávám se, že tuhost není zdaleka dostatečná. Celková tloušťka sendwiche je pouhé 4mm, což by bylo asi v pořádku, kdyby se jednalo o solidní dural, ale pro senvichovouu strukturu dural-plast-dural to je prostě málo. Podložka pod tiskovou plochu asi bude fungovat, ale rám samotný spíš ne. Uvažuji, že ho rovnou nalepím epoxidem na tlustší překližku, vyříznu kolem přímočarou pilou a následně dobrousím. výhodou stále zůstává přesná poloha předvrtaých děr pro uchycení Z-posunu, která zůstane zachována. 

Extruder a hot end:
Jak již bylo řečeno mám koupený kompletní Geeetech MK8 celokovový extruder a hot-end.  Jedná se o konstrukci typu "direct drive", kdy je hnací rýhované kolečko přímo na ose krokového motoru. V tom se liší od extruderu, který mi věrně slouží na současné tiskárně (Wade extruder), kde je krokový motor převodován do pomala pomocí dvou ozubených kol. Výhodou přímého uspořádání je jednoduchost a kompaktnost a absence vůlí a nepřesností v převodech. Potenciální nevýhody jsou dvě - jednak nižší točivý moment a jednak potenciálně menší rozlišení posunu plastu. Druhý bod zřejmě bude zcela zanedbatelný, při použití 16-ti mikrostepů krokového motoru se snadno dostaneme na více než 100 kroků/mm což je naprosto dostatečné rozlišení.  Potřebný točivý moment bude záležet na seřízení extrudéru a bude se muset otestovat.
Nový extruder má aktivní chlazení horní (studené) části pomocí 12V větráčku. Nicméně na rozdíl od populárního V3D V6 hot endu nemá zvlášť dobře vyřešené tepelné oddělení spodní  horké a vrchní studené části (heat-brake). Vnitřek vodicí trubičky má však teflonovou vložku a ta by podle všeho měla do značné míry fungovat jako tepelná izolace samotného vlákna, takže plast by se měl tavit až ve spodní kovové části těsně nad tryskou. Řešení s použitím teflonu však funguje pouze do cca 250°C, protože při vyšších teplotách se začíná teflon rozkládat. Pro plasty s vyšší tavicí teplotou (například Nylon či polykarbonát) to není dostatečné (pro nylon by to možná mohlo fungovat, uvádí se pracovní teplota hot-endu 240-260°C). Pro tyto účely jsem objednal čínskou napodobeninu celokovového hot-endu V3D V6, který bych rád vyzkoušel pro tyto materiály. Nejspíš pro novou tiskárnu nejdřív použiji hotový MK8 extruder pro otestování (s PLA či ABS plasty) a poté provedu upgrade na celokovový V3D hot end (bude potřebovat i jiný extruder) a MK8 bych výhledově přesunul na starého Průšu 2, až bude přecházet na 1.75mm plast.  

14. 8. 2017
Po několikerém rozhodování jsem se nakonec rozhodl pro stavbu Prusa i3 rework, verzi 1.5. Hlavní důvod je ten, že tento model je postaven na rámu pro Prusa i3 mk1, který mám koupený, takže daleko méně riskuji, že nám něco nebde pasovat. Trochu oříšek byl najít odkazy na .stl soubory pro tištěné části, protože jejich stránka na Thingiverse je zablokovaná. Nakonec jsem je našel na stránce:

https://www.reprap-france.com/support

mají tam též detailní návod na sestavení a oživení tiskárny, což je užitečné.  V tuto chvíli jsme v procesu tištění plastových dílů.  



středa 18. listopadu 2015

ArduinoISP s NANO - levný USB programátor pro Atmel AVR mikrokontroléry

Úvod

Naprogramovat mikrokontrolér je v podstatě jednoduchá věc. Potřebujete vlastně jen programátor, tedy kus hardware, který dokáže komunikovat s daným mikrokontrolérem a nahrát do něj program. Programátor komunikuje s počítačem prostřednictvím programovacího softwaru, který umí přečíst soubor s skompilovaným programem a přez vhodné rozhraní ho poslat programátoru, který ho potažmo nastrká do mikrokontroléru.

   V případě dnes tolik rozšířeného Arduina je hardwarový programátor vlastně integrován přímo do samotného Ardunia a nahrávání programu probíhá přímo z arduinovského vývojového prostředí, většinou přes USB rozhraní.

Když jsem před lety začínal s programováním  mikrokontrolérů Atmel AVR, nebylo to tak jednoduché a úspěšné prošlapání cestičky od programovacího software přes hardwarový programátor a náležitou konfiguraci obojího, až po úspěšné nahrání prvního programu byla zásadní překážka, kterou musel každý adept tohoto umění na počátku své kariéry překonat.  Ta moje cestička, kterou jsem od té doby až dosud používal  byla založena na velmi pěkném a intuitivním programovacím prográmku PonyProg a hardwarovém programátoru založeném na paralelním portu (LPT), běžně tehdy rozšířeném na většině stolních počítačů a i na některých laptopech.

Jenže pokrok jde nezadržitelně dopředu. Paralelní porty jsou doslova na vymření i na stolních počítačích, na noteboocích je už prostě nenajdete.  Kromě toho, můj oblíbený PonyProg také nestíhá krok s dobou a v současnosti nepodporuje jednak modernější programátory komunikující pomocí USB, a dále celou řadu novějších mikrokontrolérů. Takže ač nerad byl jsem přinucen prošlapat si cestičku novou. A vzhledem k tomu, že jsou moje mikrokontrolérové aktivity stále veskrze nekomerční, snažil jsem se to udělat zalevno.

Nová Varianta:  AVRDUDE + Arduino NANO + ArduinoISP

Malé a laciné Aruduino NANO se stalo základem celé řady mých nedávných projektů. Umí takřka to samé co větší UNO včetně USB komunikace (formou virtuálního COM portu) takže v malém balení je doslova vše co je zapotřebí pro menší mikrokontrolerové projekty. Přiznám se, že kupuji levné čínské klony, které se dají pořídit pod 100 korun.  Aby byla věc ještě trochu jednodušší, přímo v arduinovském vývojovém prostředí je k dispozici příklad programu pro využítí arduina jakožto harwarového programátoru pro AVR mikrokontroléry. Lze ho najít pod: File>Examples>ArduinoISP.  V poznámkách v tomto prgramu je popsané i zapojení jednotlivých pinů pro připojení Arduina k mikrokontroléru. To celkem výrazně zjednodušuje situaci. Jedinou drobnou komplikací je, že PonyProg se s takovýmto programátorem neumí dohodnout. Tedy přinejmenším jsem zatím nenašel způsob jak by spolu komunikovali. Takže bylo zapořebí také použít jiný programovací software.  A zde přichází na scénu AVRDUDE. Je to trošku ironie. AVRDUDE je totiž na jednu stranu velmi pokročilý software, který komunikuje s velkým množstvím různých programátorů (včetně toho vyrobeného z Arduina) a umí naprogramovat asi všechny dostupné AVR mikrokontroléry (včetně XMega řady), na druhou stranu je to doslova dinosaurus, který se spouští a ovládá přez příkazovou řádku.  Já sice ledacos pamatuji, včetně dob, kdy PC měla POUZE  příkazovou řádku a mám i dlouhou zkušenost s unixem takže mě v tomto směru jen tak něco nerozhodí, ale na druhou stranu nejsem skalní programátor ani systémový administrátor abych se na příkazové řádce vyskytoval příliš často.  AVRDUDE má docela spoustu různých nastavení, kterými se člověk musí prokousat aby ta věc skutečně fungovala. Trvalo mi to jedno celé odpoledne a tak tyto řádky píšu s nadějí, že a) mi osvěží paměť až to budu dělat příště b) případně poslouží někomu dalšímu pokud se  s podobným problémem bude potýkat.

NUTS and BOLTS aneb jak na to:

A) Zapojení Arduina a propojení s mikrokontrolérem:
AVR mikro se programuje pomocí SPI seriové komunikace.  Potřebuje následující vodiče pro komunikaci mezi prográmátorem a mikrokontrolérem:
Vcc ... napájecí napětí (+5V)
GND ... zem
SCK ... hodinové synchronizační pulzy
MOSI ... Master Out Slave In signál
MISO ... Master In Slave Out signál
RESET ... uzemněním tohoto vodiče přejde mikrokontrolér do programovacího módu.

Celkem tedy 6 vodičů.  Ty jsou v Arduinu NANO připojeny k následujícím digitálním pinům:

NANO                      Atmel AVR*
----------------------------------------------
+5V                            Vcc
GND                           GND
D10                             RESET
D11                             MOSI
D12                             MISO
D13                             SCK
-----------------------------------------------

*pozice jednotlivých pinů na konkrétním AVR mikrokontroléru je třeba dohledat v katalogovém listu.



Mimochodem stejné piny jsou použity i pro Arduino UNO. 

Kromě toho se doporučuje připojit tři LED diody s předřadnými odpory (cca 200 - 1000 Ohm) na piny D7, D8, D9.  Ty sice nejsou nezbytně nutné pro funkci programátoru, dávají však jistou vizuální zpětnou vazbu o jeho stavu:
D7 se rozsvítí, když programátor zrovna komunikuje s mikrokontrolérem.
D8 se rozsvítí když dojde k chybě.
D9 rytmicky poblikává jako indikace, že program běží (tzv. heartbeat, neboli tlukot srdce).



Program běží i bez těchto diod, ale není vidět zda něco opravdu dělá. Můžete je vynechat, když budete mít komunikaci bezpečně vyzkoušenou.   

DÁLE PŘIPOJTE KONDENZÁTOR 10uF ČI VÍCE MEZI RESET (PIN28) ARDUINA A ZEM. TO ZABRÁNÍ RESETOVÁNÍ ARDUINA BĚHEM ZAHÁJENÍ KOMUNIKACE S AVRDUDE. TENTO KONDENZÁTOR JE VŠAK TŘEBA PŘIPOJIT AŽ POTÉ, CO JSTE NAHRÁLI ArduinoISP SKETCH DO ARDUINA. Tedy přinejmenším buďte připraveni tam tento kondenzátor dát v případě problémů s resetováním Arduina při komunikaci mezi AVRDUDE a Arduinem, viz. chybové hlášky níže. Údajně některá NANO se resetují, jiná nikoli. To moje se resetovalo, přidal jsem kondenzátor a problém zmizel. 
 
B) ArduinoISP sketch a AVRDUDE konfigurace.
Program (sketch) ArduinoISP jsem do Arduina NANO nahrál bez větších problémů, použitá verze Arduino IDE je 1.6.6 (11/2015).

AVRDUDE jsem do Windows (W7) musel nahrát ačkoli Arduino někde vnitřne AVRDUDE také používá.  Nejjednodušší je instalovat kompletní balík utilit pod názvem WinAVR, který lze stáhnout na sourceforge. AVRDUDE se spouští z příkazové řádky, je tedy zapotřebí spustit terminálové okno napsáním příkazu CMD do okénka start v levém dolním rohu Windows.
Abyste zjistili, zda je program nainstalovaný, stačí na příkazový řádek napsat: avrdude (bez jakýchkoli parametrů) program by měl vrátit stručný help s výpisem nastavitepných parametrů programu. Pro úspěšnou komunikaci mezi AVRDUDE a programátorem (+ mikrokontrolérem) jsem potřeboval nastavit následující parametry:

-p ... označení programované součástky. Např. pro Atmel Mega8 je hodnota m8
-c ... označení programátoru: pro Arduino s ArduinoISP sketchem je hodnota arduino
-P ... označení portu na kterém programátor komunikuje. Je třeba vložit správnou hodnotu portu,
         na kterém máte rozpoznané vaše NANO. Např. lze zjistit v tools v Arduino IDE.
-b ... baudrate pro komunikaci mezi PC a Arduinem. Pro ArduinoISP je standartně 19200.
-U ... specifikace operace <memtype>:r|w|v:<filename>:format. Zde <memtype> je typ paměti která se
         má číst/zapisovat (např. programová paměť je "flash"). Druhý parametr znamená:
          r...read, w...write, v...verify.
         <filename> je  jméno souboru, ze kterého se čte, případně kam se zapisuje.
          format specifikuje formát tohoto souboru, zatím jsem tesoval pouze s hodnotou i což
          znamená binární .hex formát.

Vše dohromady - následující příkaz byl schopen přečíst obsah programové (flash) paměti u AVR Mega8 mikrokontroléru a zapsat ji do souboru dudetest.hex:

avrdude -p m8 -c arduino -P com10 -b 19200 -U flash:r:dudetest.hex:i

Podobně zapsání programu ze souboru filename.hex do programové paměti kontroléru provedeme příkazem :
avrdude -p m8 -c arduino -P com10 -b 19200 -U flash:w:filename.hex:i

C) Nastavení kontrolních bitů mikrokontroleru:
Kontrolní bity, takzvané "fuses" umožňují nastavení některých parametrů procesoru, jako kupříkladu typ a rychlost systémových hodin. Pro jejich nastavení pro konkrétní procesor je potřeba prostudovat důkladně katalogový list daného chipu. Konkrétnní AVR kontrolér může mít až tři kontrolní byty.označené v AVRDUDE jako hfuse, lfuse a efuse. V příkladu který tu uvádím jsem v přenastavoval lfuse pro ATtiny26 procesor pro změnu rychlosti vnitřních systémových hodin. Spodní 4 bity určují rychlost vnitřních hodin (1...1MHz, 2 ... 2MHz, 3 ... 4MHz, 4 ... 8MHz) Horní 4 bity přitom musí být zachovány na hexadecimální hodnotě E (1110 binárně). AVRDUDE příkaz, který tyto bitty nastaví pro 4MHz vnitřní hodiny pak bude:


avrdude -p t26 -c arduino -P com10 -b 19200 -U lfuse:r:0xe3:m

parametr m na konci příkazu je z immediate. Místo aby AVRDUDE četl data ze specifikovaného souboeru, přečte si přímo hodnotu specifikovanou místo jména souboru na příkazové řádce (v tomto příkladu hexadecimální hodnotu 0xe3). To je velmi praktické právě pro zapisování do fuses, kde se zapisuje jediný byte a bylo by zbytečné kvůli tomu tvořit soubor s jedinou hodnotou.
   Nakonec slovo varování: ke kontrolním bitům je třeba přistupovat s patřičným respektem. Jejich neuvážené přepsání na jinou hodnotu může způsobit, že mikrokontrolér přestane fungovat jak má. Například, když změníme nastavení z vnitřích hodin na vnější oscilátor, tak procesor nepoběží pokud nebude oscilátor s patřičnou frekvencí vskutku připojen. Takže si opravdu dobře přečtěte ty katalogové listy, než začnete měnit kontrolní bity.

D) chybové hlášky AVRDUDE
Napoprvé to samozřejmě nefungovalo a celkem dlouho mi AVRDUDE vracel chybovou hlášku:

stk500_getsync(): not in sync: resp=0x15 .

Zjistil jsem, že to je způsobené tím, že komunikace mezi AVRDUDE a Arduinem někdy způsobuje reset Arduina. Problém se dá vyřešit alespoň provizorně tím že se mezi pin RESET Arduina (pin28 u NANO) a zem (GND, pin29) připojí kondenzátor 10uF (či více, měl jsem v šuplíku 100uF elektrolyt tak jsem vyzkoušel ten a problém zmizel). Pozor pouze na to, že s tímto kondenzátorem nelze Arduino jednoduše naprogramovat, protože pak ho ani IDE není schopné zresetovat. Pokud chcete tedy v Arduinu změnit program, musíte kondenzátor opět dočasně odstranit.

další obvyklou chybou je:

stk500_getsync(): not in sync: resp=0x00 ,

která znamená, že programátor není schopen komunikovat s mikrokontrolérem. Většinou v důsledku špatného zapojení propojovacího kabelu. Zkontrolujte správnost zapojení.

Odkazy:
inspiraci a radu jsem nalezl v následujících zdrojích, autorům děkuji.

http://www.martyncurrey.com/arduino-nano-as-an-isp-programmer/

http://www.ladyada.net/learn/avr/avrdude.html

https://learn.adafruit.com/arduino-tips-tricks-and-techniques/arduinoisp