Jedním z požadavků našich zákazníků je, aby naše 3D tiskárny Original Prusa byly co nejtišší. Jenže přístroj je složen ze součástek, které při tisku (a dokonce i v klidu) vydávají zvuky. Asi lze očekávat, že velkým zdrojem hluku jsou motory či pohyblivá mechanika (ložiska), případně chladicí ventilátory. Mezi komponenty, které umí vydávat zvuky, ale patří i napájecí zdroj a dokonce i vyhřívaná podložka neboli heatbed.

A právě na tyto dvě komponenty jsme se zaměřili v poslední revizi firmware.

Heatbed

Heatbed se akusticky projevoval jakýmsi cvrčením, které korespondovalo s blikáním jeho LED. Analýzou tohoto chování jsme dospěli k závěru, že heatbed se chová jako reproduktor – tedy reaguje na náhlé sepnutí a rozepnutí procházejícího proudu (topení) mechanickým vlněním, tedy zvukem. Úplně stejně se chovají třeba sluchátka, když dostanou stejný pulz.

Záznam zvuku sepnutí/rozepnutí topení studiovým mikrofonem:

Zdroj

Spínané zdroje používané v našich tiskárnách pracují ve dvou režimech – vysoký a nízký odběr. Interně se přepínají, aby maximálně šetřily energií. Toto přepnutí generuje tiché, ale přesto slyšitelné cvaknutí.

Analýza problému

Zadáním tedy bylo navrhnout algoritmus řízení spínání topení heatbedu tak, aby se eliminovaly (nebo aspoň maximálně potlačily) náhlé prudké změny. Zároveň by se měl udržet zdroj během tisku pokud možno v režimu vysokého odběru.

Jednou z možností je zvýšit frekvenci spínání topení tak vysoko, že už heatbed nebude mechanicky schopen reagovat – tím pádem přestane cvrčet.

Technická omezení tohoto přístupu jsou v podstatě dvě:

1. frekvenci musí „přežít“ MOSFET, který výkonové spínání zajišťuje. A výkon spínání heatbedu není malý, řádově 80 W.

2. frekvence musí být generovatelná hardwarově, aby se zbytečně neplýtvalo výkonem 8-bitového procesoru.

Náš procesor ATmega2560 disponuje obvody pro generování pulzně-šířkové modulace (PWM) přímo odvozené od hodin procesoru. Hodiny lze dělit předdefinovanými děliči (prescaler): clk/1, clk/8, clk/64 atd. Hardwarově generovaná PWM má vždy 256 kroků, tedy 16 MHz/256 = 62.5 kHz.

Pokusy na jaře 2019 se spínací frekvencí 62.5 kHz ukázaly, že podložka je sice zcela tichá (při své mechanické konstrukci není schopen 62 kHz emitovat jako mechanické vlnění), ale MOSFET se značně přehřívá.

Naopak snižování frekvence spínání pod 16 Hz mělo za následek, že se zdroj stihl přepínat mezi režimem nízkého a vysokého odběru – začal cvakat a to zejména při napájení 110V/60Hz.

První varianta řešení

První varianta řešení spočívala v obelstění lidského vnímání. Pravidelného cvrčení si mozek samozřejmě všimne a začne se na něj zaměřovat. Čím více se člověk na zvuk soustředí, tím více ho to znervózňuje.

Pokud by se podařilo udělat zcela nepravidelné cvrčení, mohl by tento hluk mozek vyhodnotit jako bílý šum (byť stále relativně silný). Tím pádem by zvuk nemusel ve svém okolí zvyšovat nervozitu.

Pokusy začaly s nepravidelnou PWM při základní frekvenci 30 Hz. Ukázalo se, že tato frekvence sice skoro bezvadně udrží zdroj v režimu vysokého odběru, cvrčení heatbedu je však stále slyšitelné a v podstatě stejně znervózňující.

Druhá varianta řešení

Druhá varianta byla podstatně náročnější na implementaci. Princip je opět velice jednoduchý a kombinuje dvě myšlenky: udržet základní frekvenci spínání tak, aby zdroj necvakal, a postarat se, aby sepnutí bylo pozvolné. Pozvolné sepnutí se v digitální technice nerealizuje úplně snadno a jako aproximace se využívá právě PWM.

A to je právě princip utišení heatbedu – základní pomalá PWM 30 Hz má náběžné hrany hrany „rozbité“ 62.5 kHz PWM se zvyšující se střídou. Tím se simuluje pozvolný nárůst napětí v bedu. U sestupných hran je to přesně naopak – simuluje se pokles napětí. Těmto sekvencím s rychlou PWM říkáme měkké hrany.

Detail náběžné a sestupné měkké hrany:

Celý pulz s měkkými hranami:

Celý algoritmus musí samozřejmě co možná nejvíce využívat hardwarových obvodů procesoru, aby se nesnižoval jeho výpočetní výkon.

Měkké hrany trvají 230μs, přičemž měření teploty MOSFETu potvrdila, že se tranzistor nijak nepřehřívá – teplota je stejná, jako u původní „nerozbité“ 30 Hz PWM.

Implementace a výsledky testů

První implementace se objevila ve firmware 3.8.0-RC1. Využívala jednoduchý princip konečného automatu běžícího na základní frekvenci 62.5 kHz. Automat zajišťoval generování měkkých hran i dlouhé sekvence sepnutého a vypnutého topení.

Při testech jsme narazili na 2 problémy:

1. ve výpočtech byla chyba, tedy základní spínání probíhalo na 15 Hz, čehož si všimli naši aktivní beta testeři provozující tiskárny na 110 V/60 Hz – jejich zdroj začal cvakat.

2. závažnějším problémem byla výpočetní náročnost – přerušení volané s frekvencí 62.5 kHz se bohužel projevilo v extrémních případech rychlého tisku nižší propustností sériové linky. A to přesto, že obslužná rutina byla řádně optimalizována.

Nezbylo než algoritmus revidovat a využít dalšího triku, který procesor ATmega20 nabízí – přepnutí prescaleru hodin časovače. Myšlenka je tedy taková, že dlouhé sekvence, kdy je topení buď sepnuté nebo vypnuté, lze řešit s pomalejším během časovače (nyní clk/8), tedy s 8× méně častým voláním obsluhy přerušení. Výhledově lze využít i clk/64, ovšem za cenu mírného snížení přesnosti PID regulace teploty heatbedu.

Hlavní výzva tohoto řešení spočívala v tom, že sice lze provést přepnutí prescaleru i „za běhu“ časovače, je potřeba ovšem velmi pečlivě vyladit posloupnost nastavení jeho řídicích registrů. Pro některé změny je potřeba nechat časovač vyvolat obslužné přerušení ještě jednou, protože jinak se na výstupním pinu objeví pulz, který tam samozřejmě nechceme (způsobil by slyšitelné cvaknutí heatbedu). Nový konečný automat se objevil ve firmware 3.8.0-RC2 a z výše uvedeného důvodu je výrazně složitější. Jeho ladění probíhalo přímo na osciloskopu.

Tento druhý algoritmus se ukázal jako dostatečně robustní: jednak nezatěžoval procesor zbytečným voláním obsluhy přerušení a zároveň udržel heatbed i zdroj zticha. Naši aktivní beta testeři ihned po publikaci algoritmu a jeho začlenění do zdrojových kódů na Githubu hlásili, že heatbed i zdroj jsou zticha a po týdnu přišlo i potvrzení, že se datová propustnost vrátila na úroveň firmware 3.7.2.

Závěr

Závěrem bychom chtěli poděkovat zejména našim aktivním beta testerům a přispěvatelům na Githubu, jmenovitě: wavexx, leptun,  vintagepc MakeSomeGood, vertigo235. Věříme, že celý proces ztišení vyhřívané podložky i zdroje se pozitivně promítnou do dalšího zvýšení uživatelského komfortu.

Nezapomeňte své tiskárny pravidelně updatovat. Poslední verze firmwaru pro MK3/S a MK2.5/S je vždy k dispozici na našich stránkách.