LinuxCNC na OrangePi
Napsal: 5. 7. 2020, 1:31
Hraju si s provozem LinuxCNC (resp. Machinekit) na malé desce OrangePi PC s procesorem ARM.
Konkrétně mám tuhle desku: https://www.aliexpress.com/item/32448079125.html
Hrál jsem si s tím už kdysi, skoro přesně před 2 roky, viz viewtopic.php?p=288663#p288663
Mezitím se udály dvě dost podstatné změny.
Jednak došlo ke sjednocení větví Linuxu pro tyhle různé malé krabičky. Dřív byla jiná větev pro OrangePi a jiná třeba pro RaspberryPi. S tím, že to RPi bylo podporované výrazně líp, protože to používá víc lidí. Teď se ale tyhle větve sjednotily a tím pádem je i podpora pro OPi lepší.
Hlavní změna ale je, že jeden šikovný Rus napsal podporu LinuxCNC pro embedded procesor OpenRISC, který na téhle desce je.
https://cnc32.ru/orangecnc/
Trocha teorie: všechny tyhle malé desky (RPi, Opi atd.) nepoužívají holý procesor, ale vždy SoC, tedy System on Chip. Součástí je vždy několikajádrový procesor ARM, grafický procesor, nějaké linky GPIO, čítače, sériové porty a další věci.
No a SoC na deskách OPi (značky Allwinner) má kromě toho ještě integrovaný další pomocný procesor OpenRISC 1000.
Původní předpoklad výrobce asi byl, že bude řešit nějaké pomocné věci kolem řízení napájení. Tak to i dřív bylo. Ale nakonec to řízení přebralo samotné jádro Linuxu, takže se tenhle procesor v praxi k ničemu nepoužíval.
No a ten šikovný Rus se opravdu pochlapil a napsal stepgeny pro řízení DIR/STEP právě pro tento procesor. Pokud znáte třeba desky BeagleBoard od Texas Instruments, kde na tohle mají integrované procesory PRU, tak to je něco podobného.
Ten OpenRISC není na vlastním Linuxu nijak závislý, takže nějaké latence, které na Linuxu zákonitě jsou, u něho nehrají roli. No a protože styk mezi hlavním procesorem a tímhle OpenRISC je přes sdílenou paměť, tak vazba LinuxCNC na stepgeny je maximálně rychlá.
Před těmi 2 roky jsem si říkal, že pokud LinuxCNC na něčem malém, tak asi správná cesta bude spíš RaspberryPi. A to OPi jsem uložil do šuplíku.
Ale teď už si to nemyslím. Po těch výše zmíněných změnách si myslím, že OPi je lepší cesta. A cesta opravdu použitelná.
Co je slabší stránka toho ruského vývojáře, to je dokumentace. Možná i proto, že přece jen angličtina není jeho mateřský jazyk.
Takže křivka učení je (aspoň u mě) dost plochá. Trvalo mi celou včerejší noc (začal jsem ve 20:00, skončil v 05:30), než jsem konečně pronikl do toho jak případně upravit a vygenerovat firmware pro ten speciální procesor. A ještě stále tam mám jednu nejasnost, jak případně ten firmware měnit za chodu systému. Zatím vždy po nějaké programové změně musím přebootovat systém. To se samozřejmě při běžném používání neděje, ale při programování to docela zdržuje.
Navíc je to okořeněno tím, že on třeba nadělal do zdrojáku nějaké změny, ale ty nikde nepopsal, a zbytek systému s tím zatím nepočítá. Pokud už to má člověk v ruce, tak na to rychle přijde. Ale když na to poprvé čumí jak tele na nová vrata, tak je docela slušná komplikace.
Ke spotřebě a teplotě:
Tahle deska, navíc s připojenou klávesnicí a myší, bere v klidu mezi 2-2.5W, při maximální zátěži 2.5-3W. Něco z toho si vezmou periferie (ta kláveska a myš), něco měniče, a trochu i paměť. Na vlastní SoC připadá při plné zátěži tak kolem 2W, řekl bych. Takže to je výkon, který je třeba uchladit.
Je to obecný problém podobných malých desek. Ty 2W jsou sice prd, ale je to na jednom chipu, takže ho to celkem zahřeje.
Aby se ten procesor nepřehřál, tak o to se stará jádro Linuxu. Je tam governor, který hlídá teplotu. Pokud by narostla moc vysoko, tak zasáhne a sníží rychlost procesoru a případně i napájecí napětí. Je možné použít různé strategie toho governoru, od těch nejúspornějších třeba jen pro nějaké monitorování, až po ten nejvýkonnější, který se používá i pro CNC.
Je dobré ten governor nenechat do toho moc kecat, protože to přepnutí frekvence něco trvá (kolem 2ms), a v té chvíli LinuxCNC vyhlásí chybu real-time. Ta sice asi nic moc nezpůsobí a obrábění jede dál, nicméně je dobré se toho vyvarovat.
Já jsem zatím nalepil na procesor maličký chladič 14x14x5mm. Měl jsem ho v šuplíku, koupil jsem ho v nějaké sadě pro RPi. Je to ta nejmenší velikost chladiče, která ještě vůbec má nějaký smysl. Ten chladič sice sníží tepelný odpor, ale zase naopak ta samolepka, kterou je přilepený, ho zvýší. Takže přínos takového chlazení je minimální. Odhadem to vychází na tepelný odpor někde kolem 22-25K/W.
Objednal jsem si z Číny už trochu větší chladiče 20x20x15mm, ty už by mohly trochu něco uchladit. Tam už by mohl tepelný odpor vyjít někde na 10-15K/W.
S tímto malým chladičem je teplota chipu v plné zátěži mezi 70-75C. V klidu má kolem 55C. Procesor snese 110C, takže je to v bezpečné oblasti. Měří se přímo teplota křemíku, nikoli teplota pouzdra. Takže měření je přesné.
Defaultně ta deska byla nastavená na rychlost 1386MHz. Pak už teplota při obrábění lezla nad 75C, a na této teplotě vždy zasáhl governor a stáhl rychlost na 1296MHz. Teplota spadla, on to zase zvýšil na těch 1386MHz.
Ale to se mi nelíbilo, a tak jsem nastavil maximum na 1296MHz. Výsledkem je, že od té chvíle governor už nikdy nezasáhl.
Zkusil jsem provozovat LinuxCNC pokusně i na nejnižší možné rychlosti 480MHz, a jede i tak.
Pokusně jsem nad desku přidal i ventilátor. Použil jsem z procesoru nějakého starého PC, ty jsou na 12V. Pustil jsem ho na 5V, takže se jenom tak líně točil. Teplota spadla na nějakých 55C.
S tou teplotou souvisí ještě jedna věc. Nastavuje se nezávisle rychlost hlavního procesoru (to je těch 1296MHz) a toho pomocného procesoru, který dělá stepgeny. Tam je maximálka 450MHz. No a při testech (hodně náročných) se mi občas stalo (tak jednou za půl hodiny), že se rozpadla komunikace se stepgeny. Musel se shodit a nahodit LinuxCNC. Zjistil jsem, že při nižší teplotě se to nestává (s tím ventilátorem).
Tak jsem využil toho, že už umím upravit firmware pro ten speciální procesor a nastavil jsem mu rychlost 400MHz. Je to stále mnohem víc, než je nezbytně třeba. Ale už je to v oblasti, kde teplota nehraje roli a tak už systém nepadá. Fajn.
Testuju to jen na stole, nemám k tomu připojenou reálnou frézku. Tím pádem si můžu dovolit tam nastavit docela drsné podmínky. Takže tam spouštím několikahodinové 3D frézování při rychlosti F12000. Generuje to STEP o frekvenci kolem 200kHz. A ty průběhy vypadají opravdu pěkně, kroky mají tvar 1:1.
Chystám teď na to tester, který připojím na signály DIR/STEP, abych ověřil, že to generuje správné průběhy. Ale ještě to nemám hotové.
Takže tolik k současnému stavu. Objednám si ještě jednu desku na pokusy.
Protože mě to zaujalo, tak pro to časem udělám malou oddělovací desku, která se nacvakne pod to OPi (nikoli nad, ale pod, aby to nebránilo případnému chladiči nad deskou). Rád bych na ni dal výstupy na 4 krokáče, 2xPWM pro nějaké vřeteno nebo laser, 2 silové výstupy, 8 galvanicky oddělaných vstupů a RS485 pro připojení měniče.
Největší problém bude na tak malou desku dostat tolik konektorů, řekl bych.
Konkrétně mám tuhle desku: https://www.aliexpress.com/item/32448079125.html
Hrál jsem si s tím už kdysi, skoro přesně před 2 roky, viz viewtopic.php?p=288663#p288663
Mezitím se udály dvě dost podstatné změny.
Jednak došlo ke sjednocení větví Linuxu pro tyhle různé malé krabičky. Dřív byla jiná větev pro OrangePi a jiná třeba pro RaspberryPi. S tím, že to RPi bylo podporované výrazně líp, protože to používá víc lidí. Teď se ale tyhle větve sjednotily a tím pádem je i podpora pro OPi lepší.
Hlavní změna ale je, že jeden šikovný Rus napsal podporu LinuxCNC pro embedded procesor OpenRISC, který na téhle desce je.
https://cnc32.ru/orangecnc/
Trocha teorie: všechny tyhle malé desky (RPi, Opi atd.) nepoužívají holý procesor, ale vždy SoC, tedy System on Chip. Součástí je vždy několikajádrový procesor ARM, grafický procesor, nějaké linky GPIO, čítače, sériové porty a další věci.
No a SoC na deskách OPi (značky Allwinner) má kromě toho ještě integrovaný další pomocný procesor OpenRISC 1000.
Původní předpoklad výrobce asi byl, že bude řešit nějaké pomocné věci kolem řízení napájení. Tak to i dřív bylo. Ale nakonec to řízení přebralo samotné jádro Linuxu, takže se tenhle procesor v praxi k ničemu nepoužíval.
No a ten šikovný Rus se opravdu pochlapil a napsal stepgeny pro řízení DIR/STEP právě pro tento procesor. Pokud znáte třeba desky BeagleBoard od Texas Instruments, kde na tohle mají integrované procesory PRU, tak to je něco podobného.
Ten OpenRISC není na vlastním Linuxu nijak závislý, takže nějaké latence, které na Linuxu zákonitě jsou, u něho nehrají roli. No a protože styk mezi hlavním procesorem a tímhle OpenRISC je přes sdílenou paměť, tak vazba LinuxCNC na stepgeny je maximálně rychlá.
Před těmi 2 roky jsem si říkal, že pokud LinuxCNC na něčem malém, tak asi správná cesta bude spíš RaspberryPi. A to OPi jsem uložil do šuplíku.
Ale teď už si to nemyslím. Po těch výše zmíněných změnách si myslím, že OPi je lepší cesta. A cesta opravdu použitelná.
Co je slabší stránka toho ruského vývojáře, to je dokumentace. Možná i proto, že přece jen angličtina není jeho mateřský jazyk.
Takže křivka učení je (aspoň u mě) dost plochá. Trvalo mi celou včerejší noc (začal jsem ve 20:00, skončil v 05:30), než jsem konečně pronikl do toho jak případně upravit a vygenerovat firmware pro ten speciální procesor. A ještě stále tam mám jednu nejasnost, jak případně ten firmware měnit za chodu systému. Zatím vždy po nějaké programové změně musím přebootovat systém. To se samozřejmě při běžném používání neděje, ale při programování to docela zdržuje.
Navíc je to okořeněno tím, že on třeba nadělal do zdrojáku nějaké změny, ale ty nikde nepopsal, a zbytek systému s tím zatím nepočítá. Pokud už to má člověk v ruce, tak na to rychle přijde. Ale když na to poprvé čumí jak tele na nová vrata, tak je docela slušná komplikace.
Ke spotřebě a teplotě:
Tahle deska, navíc s připojenou klávesnicí a myší, bere v klidu mezi 2-2.5W, při maximální zátěži 2.5-3W. Něco z toho si vezmou periferie (ta kláveska a myš), něco měniče, a trochu i paměť. Na vlastní SoC připadá při plné zátěži tak kolem 2W, řekl bych. Takže to je výkon, který je třeba uchladit.
Je to obecný problém podobných malých desek. Ty 2W jsou sice prd, ale je to na jednom chipu, takže ho to celkem zahřeje.
Aby se ten procesor nepřehřál, tak o to se stará jádro Linuxu. Je tam governor, který hlídá teplotu. Pokud by narostla moc vysoko, tak zasáhne a sníží rychlost procesoru a případně i napájecí napětí. Je možné použít různé strategie toho governoru, od těch nejúspornějších třeba jen pro nějaké monitorování, až po ten nejvýkonnější, který se používá i pro CNC.
Je dobré ten governor nenechat do toho moc kecat, protože to přepnutí frekvence něco trvá (kolem 2ms), a v té chvíli LinuxCNC vyhlásí chybu real-time. Ta sice asi nic moc nezpůsobí a obrábění jede dál, nicméně je dobré se toho vyvarovat.
Já jsem zatím nalepil na procesor maličký chladič 14x14x5mm. Měl jsem ho v šuplíku, koupil jsem ho v nějaké sadě pro RPi. Je to ta nejmenší velikost chladiče, která ještě vůbec má nějaký smysl. Ten chladič sice sníží tepelný odpor, ale zase naopak ta samolepka, kterou je přilepený, ho zvýší. Takže přínos takového chlazení je minimální. Odhadem to vychází na tepelný odpor někde kolem 22-25K/W.
Objednal jsem si z Číny už trochu větší chladiče 20x20x15mm, ty už by mohly trochu něco uchladit. Tam už by mohl tepelný odpor vyjít někde na 10-15K/W.
S tímto malým chladičem je teplota chipu v plné zátěži mezi 70-75C. V klidu má kolem 55C. Procesor snese 110C, takže je to v bezpečné oblasti. Měří se přímo teplota křemíku, nikoli teplota pouzdra. Takže měření je přesné.
Defaultně ta deska byla nastavená na rychlost 1386MHz. Pak už teplota při obrábění lezla nad 75C, a na této teplotě vždy zasáhl governor a stáhl rychlost na 1296MHz. Teplota spadla, on to zase zvýšil na těch 1386MHz.
Ale to se mi nelíbilo, a tak jsem nastavil maximum na 1296MHz. Výsledkem je, že od té chvíle governor už nikdy nezasáhl.
Zkusil jsem provozovat LinuxCNC pokusně i na nejnižší možné rychlosti 480MHz, a jede i tak.
Pokusně jsem nad desku přidal i ventilátor. Použil jsem z procesoru nějakého starého PC, ty jsou na 12V. Pustil jsem ho na 5V, takže se jenom tak líně točil. Teplota spadla na nějakých 55C.
S tou teplotou souvisí ještě jedna věc. Nastavuje se nezávisle rychlost hlavního procesoru (to je těch 1296MHz) a toho pomocného procesoru, který dělá stepgeny. Tam je maximálka 450MHz. No a při testech (hodně náročných) se mi občas stalo (tak jednou za půl hodiny), že se rozpadla komunikace se stepgeny. Musel se shodit a nahodit LinuxCNC. Zjistil jsem, že při nižší teplotě se to nestává (s tím ventilátorem).
Tak jsem využil toho, že už umím upravit firmware pro ten speciální procesor a nastavil jsem mu rychlost 400MHz. Je to stále mnohem víc, než je nezbytně třeba. Ale už je to v oblasti, kde teplota nehraje roli a tak už systém nepadá. Fajn.
Testuju to jen na stole, nemám k tomu připojenou reálnou frézku. Tím pádem si můžu dovolit tam nastavit docela drsné podmínky. Takže tam spouštím několikahodinové 3D frézování při rychlosti F12000. Generuje to STEP o frekvenci kolem 200kHz. A ty průběhy vypadají opravdu pěkně, kroky mají tvar 1:1.
Chystám teď na to tester, který připojím na signály DIR/STEP, abych ověřil, že to generuje správné průběhy. Ale ještě to nemám hotové.
Takže tolik k současnému stavu. Objednám si ještě jednu desku na pokusy.
Protože mě to zaujalo, tak pro to časem udělám malou oddělovací desku, která se nacvakne pod to OPi (nikoli nad, ale pod, aby to nebránilo případnému chladiči nad deskou). Rád bych na ni dal výstupy na 4 krokáče, 2xPWM pro nějaké vřeteno nebo laser, 2 silové výstupy, 8 galvanicky oddělaných vstupů a RS485 pro připojení měniče.
Největší problém bude na tak malou desku dostat tolik konektorů, řekl bych.