Posouzení jednotky TC420
Jelikož nebylo zapotřebí jednotku vracet, rozhodl jsem se do ní podívat. Po otevření jsem zjistil, že jednotka je řízena pomocí MCU Nuvoton NUC120LE3AN. Na internetu jsem našel informaci, že se jedná o součástku s jádrem ARM Cortex M0. Bohužel, ARM jádra jsou v dnešní době součástí mnoha procesorů. Instrukční sada ARM Cortex M0 není nic převratného.
Předpokládal jsem, že MCU jednotky zastává následující funkce: generace pěti PWM, ovládání displeje, čtení tlačítek, komunikace s PC přes USB a udržování data a času. NUC120LE3AN je v pouzdře LQFP48, které má pouze čtyři kanály PWM. Pro pátý kanál je možno použít timer. Na ovládání displeje je třeba asi 10 pinů a na čtení stavu tlačítek je třeba 4 pinů. Pro udržení času, je možno použít modul RTC (real-time clock). Malý reproduktor mi připadá jako nadbytečnost.
Avšak tvůrce jednotky měl jiný názor. Když jsem jednotku analyzoval, nestačil jsem se divit. První záhada byla, jak se generují PWM. Našel jsem signál pouze čtvrtého kanálu (pin 25), který je generován pomocí PWM 3. Na výstupních pinech PWM 0, 1, 2 žádné PWM signály nebyly. Potom jsem našel signál pátého kanálu PWM (pin 48), který je generován pomocí timeru (TM0). Avšak na MOSFETech bylo všech 5 PWM signálů. Hledal jsem dále a zjistil jsem, že z pinu 9 (TXD1), který funguje jako sériový port s rychlostí 9600 baud, cyklicky posílá 6 bytů do nějakého čipu na desce. Tento čip má svůj vlastní krystal přibližně 11 MHz. Z těch 6 bytů je první vždy nula a pak následuje 5 PWM hodnot, které jednotka posílá čipu. Čip generuje 5 signálů PWM. Jinými slovy, místo toho, aby autor použil periferie NUC120LE3AN pro generaci 5 PWM, posílá přes sériovou komunikaci 5 bytů s hodnotou PWM jinému čipu, které generuje PWM.
Hodnoty jsou posílány do druhého čipu následně: 0 % koresponduje s 0, 100 % se posílá jako 250. Při této hodnotě můžeme na výstupu naměřit PWM asi 98 %. Takže 100 % není 100 %. Proč? Čip generující PWM je pravděpodobně naprogramován, aby generoval PWM 100 % při hodnotě 255 (max. hodnota 8bitového čísla). Důkaz: 250 / 255 x 100 = 98. Otázka je: Proč autor nepoužil 255 jako maximum? Pravděpodobně pouze použil hodnotu z tabulky, 1krát shift doleva a k tomu přičetl hodnotu z tabulky odshiftovanou jednou doprava. Tzn. vynásobil 2,5krát. V jazyku C by ten řádek vypadal následně:
u8PWM = (u8TableValue << 1) + (u8TableValue >> 1);
kde u8PWM je výsledná hodnota PWM (0 – 250, typu uint8_t) a u8TableValue je vstupní hodnota z tabulky (0 – 100, typu uint8_t).
Přitom by stačilo použít násobení 2,55krát způsobem, že číslo 2,55 se posune do horních 8 bitů uvnitř 16bitové proměnné. Vypadalo by to následně:
u8PWM = (uint8_t)(((uint16_t)u8TableValue * (uint16_t)655) >> 8);
Konstanta 655 vychází z maximálního 16bitového čísla (65535) poděleného 100 (maximum PWM). Jednoduše si to můžeme ověřit pro hodnotu 100: 100 x 655 = 65500. Toto číslo se posune 8krát doprava, tzn. děleno 256 (neboli 28): 65500 / 256 = 255. Je fakt, že dva shifty a sčítání je na některých procesorech mnohem rychlejší než násobení, ale to není případ Cortex M0. Zvláště pokud se PWM aktualizuje max. jednou za minutu. Cortex M0 použije pro násobní jednu instrukci MULS a pro shift ASRS. Kdežto v prvním případě budou dvě instrukce pro shift ASRS a jedna pro součet ADDS.
Nicméně, při současném řešení (za použití 8 bitů pro hodnotu PWM) by bylo možno dosáhnout rozlišení 0,5 %, nikoliv 1 %. Ale k tomu by bylo třeba upravit trochu aplikaci na straně PC.
Kdyby autor využil periferií NUC120LE3AN: PWM nebo timer, mohl by dosáhnout mnohem vyššího rozlišení PWM. K tomu je třeba znalosti frakční aritmetiky: PWM frekvence jednotky TC420 je 540 Hz. Pokud je vstupní frekvenci periferie 22,1184 MHz (jak uvádí NUC100/120 Technical Reference Manual), výsledná perioda PWM bude 22118400 / 540 = 40960 inkrementů. Periferie má 16bitový čítač, tzn. počítá do 65535. Tudíž, výsledná perioda je dosažitelná. Pokud podělíme základ 100 % touto periodou, dostaneme rozlišení PWM v procentech, tzn. 100 % / 40960 = 0,0024 %. Řekl bych, že je to hodně daleko od rozlišení 1 %, není?
Další věc, co mě překvapila, je existence součástky Maxim DS1302Z. Má za úkol udržet datum a čas. Jak jsem uvedl výše, NUC120LE3AN má modul RTC, který je pro datum a čas možno využít. Je možné také MCU uspat, aby se snížila spotřeba, a probudit jej pomocí RTC na okamžik, provést operaci a znovu uspat. Proč asi autor použil DS1302Z, které vyžaduje sériovou komunikaci s NUC120LE3AN? Navíc potřebuje další krystal.
Změřil jsem komunikaci mezi MCU a DS1302Z. Musím se přiznat, že jsem nemohl uvěřit tomu, co jsem viděl. Autor chtěl nejspíš použít periferii I2C, protože MCU využívá právě piny periferie I2C pro komunikaci s DS1302Z. Jenže komunikace, kterou DS1302Z používá, jen I2C připomíná. Ve skutečnosti to I2C není. Autor mohl použít periferii SPI s vykrácenými piny MOSI (master out, slave in) a MISO (master in, slave out) . V případě čtení z DS1302Z by se pin MOSI přepnul do stavu vysoké impedance po odeslání 8 bitů (komand), aby pin MISO mohl přečíst informaci.
Autor však zvolit softwarové ovládání pinů pro clock a data ovládáním pinů přes GPIO (general purpose input output). Na obrázku je možné vidět vyšší frekvenci clock signálu a nějaké kolísání během prvních 8 bitů. V tomto místě šlo o komand 0x81 – přečtení sekund. Následuje úplně jiná frekvence clocku s kolísáním. V tomto okamžiku DS1302Z odpovídá a posílá sekundy v BCD soustavě. Autor nebyl schopen ani vytvořit smyčku s konstantní periodou pro tak primitivní komunikaci.
Výstupy PWM jsou připojeny na MOSFETy v pouzdru DPAK. Neviděl jsem na nich žádné filtry. Takže LED pásky mohou rušit. To jsem však netestoval. USB používá třídu HID (human interface device) pro komunikaci s PC, proto není nutno instalovat ovladač do Windows. HID je základní třída, která již v systému Windows existuje. Toto nejspíš okopíroval z nějakého příkladu použití USB HID device.
Jednotka by mohla být menší, levnější, s nižší spotřebou, a hlavně rozlišení PWM by bylo mnohonásobně větší. Jinými slovy, pokud by se rozlišení PWM rozšířilo, přechody mezi intensitami LED by byly mnohem jemnější. Pro vylepší jednotky by nestačilo pouhé přeprogramování, znamenalo by to i změny na desce. Myslím, že by autor měl zvážit spíše kariéru v politice.
Komentáře
Přehled komentářů
Ta jednotka neumožňuje naprogramovat změny po sekundách. Přeprogramovat ji může autor. Já programuji svou, která bude umožňovat změny po sekundách. První testy s videem můžete najít na mých stránkách.
30a zatazenie
ivan, 11. 12. 2018 22:42dobrý deň zvládne tato jednotka povedzme ledky z celkovým odberom 30a ?
TC 420
Jan Daněk, 27. 6. 2018 7:41
Smekám Vaší odbornosti a i když jsem technik. Rád bych se zeptal, zda je možné něco podobného udělat aby na výstupu byla regulace proudu do LED bez nutnosti používat seriový odpor. Tedy aby se každý výstup choval jako zdroj proudu a zachoval si vlastnosti regulace.
Děkuji za odpověď můj email je Danekj.bk@gmail.com
Re: TC 420
Jarek, 28. 6. 2018 8:41
Tady je třeba si uvědomit, že LED je nelineární prvek. Zapojují se na pásku 3 LED a jeden odpor na 12 V a tím se při 12 V nastaví optimální proud. Při použití PWM 100 % tam bud určitý proud, který při PWM 50 % bude ve střední hodnotě také 50 %. Avšak zapojení 6 V na pásek LED nebude znamenat poloviční proud.
Aby se to dalo řídit proudově, bylo by třeba vyhodit ten sériový odpor. A bylo by třeba zapojit do série tlumivku. V takovém případě by bylo nutno zároveň zavést zpětnou vazbu měření proudu a počítat PI regulátor pro žádaný proud. Parametry tlumivky budou záviset od výkonu a frekvence PWM. Aby mohla být malá, bude třeba vysoké frekvence, čímž se zase sníží její rozlišení.
Dále je třeba si uvědomit, že pásek LED se skládá s kousků např. po 5 cm, která jsou připojeny paralelně na 12 V. Pokud budete chtít zavést zpětnou vazbu, budete je muset rozpojit a každý kousek regulovat zvlášť. Na každý kousek tedy budete potřebovat pin s PWM a pin pro měření s ADC. Dále procesor bude muset stihnout spočítat regulátor pro každý kousek.
Toto by se dalo vyřešit tím, že se nezapojí do série 3 LED ale více, např. tak aby jich bylo na 240 V. Pak by byla na takový kus jedna regulace. Dáte si ale do akvária 240 V?
Také je zde věc nelinearity LED, která se otevírá od určitého napětí. Tudíž může dojít k situaci, že LED začnou svítit třeba až od 50 % PWM, ale se zvyšující PWM se proud nemusí zvyšovat lineárně. Tím si opět sníží rozsah využití rozlišení PWM.
Ještě může dojí k nespojitému proudu při malých hodnotách PWM. Proud naroste trochu při sepnutí a pak spadne do nuly při vypnutí a tam zůstane do nového otevření. V takovém případě regulátor nebude fungovat dobře. Musel by se použít sofistikovanější způsob samplování proudu.
Možné to asi je, ale otázkou je, zda to má smysl.
prosím o radu
Ondřej, 4. 6. 2018 13:32
Dobrý den,
chtěl bych Vás požádat o radu.
Minulý týden mi přišlo zařízení a při zapojování mi došel zásadní problém.
TC420 má spojený výstup na plusu zatím co mínusy jsou ovládané.
Já mám modul s ledkovými pásky se společným mínusovým vstupem a třemi oddělenými plusovými pro každý pásek.
Měl by jste radu, jak to k tomu připojit? kdybych nepotřeboval stmívací efekt, tak to připojím klasicky pomocí magnetického relé, ale vzhledm k tomu, že jak jsem pochopil, tak TC420 stmívá ledky tak, že tam pouští proud při nějaké frekvenci, tak to by klasická relátka asi nedala.
Díky
Re: prosím o radu
Jarek, 4. 6. 2018 14:20
Jednotka používá zapojení MOSFETů jako spodních spínačů. Je jednodušší spínat k zemi, než k plusu. Tady je ukázka obou zapojení: https://i.stack.imgur.com/a0yBQ.jpg
Předělat jednotku na obrácené spínání, by znamenalo přeškřábání spojů na desce. Potom, pokud byste chtěl ponechat N-MOSFETy, tak by se musely budiče izolovat od společné země (otázka, zda to jednoduše půjde). Pokud byste chtěl použít P-MOSFETy (tzn. vyhodit ty, co tam jsou a dát tam druhé), tak by se musel budící obvod vyměnit za invertující. Nejmenší zásah do jednotky bude si vytáhnout signály na ovládání MOSFETů ven a napojit si je na modul, který bude fungovat jako horní spínač - něco jak toto: https://www.ebay.com/itm/RGB-LED-Signal-Amplifier-For-5050-3528-RGB-Color-LED-Strip-12V-9A-Common-Cathode/142760912227?hash=item213d36a563:g:hJUAAMXQpwFRaVXl
Ale ještě není jisté, že tam prodejce uvedl správné parametry.
Nejjednodušší však bude sehnat si jiné pásky LED.
Výroba lepšího?
Milan, 25. 2. 2018 23:04
Dobrý den,
smekám před podrobnou analýzou! A hned připojím otázku - nemáte v plánu vyrobit nějakou vylepšenou verzi?
Myslím, že zájem by byl...
Díky za odpověď,
Milan
Re: Výroba lepšího?
Jarek, 4. 3. 2018 16:20
Dobrý den,
oceňuji váš komentář. Měl jsem v plánu vzít tu jednotku, jak je, a pouze přeprogramovat. To by byla nejjednodušší možnost a zachovala by se nízká cena. Bohužel vzhledem k tomu, jak je hw proveden, to možné není. Rozlišení by se nezlepšilo.
Pokud budu jednotku vyrábět v kusovém množství, nemyslím si, že se dostanu na cenovou úroveň Číňanů na eBay. Můj velice hrubý odhad je, že to bude tak 2000 Kč. Další problém je nedostatek času, takže to může zabrat dlouhou dobu, než se k něčemu dostanu.
Pokud se do něčeho pustím, tak o tom budu informovat.
Re: Re: Výroba lepšího?
Jaromír, 29. 5. 2018 15:13
Dobrý den.
Mé nové TC420 nedrží čas a za jeden den se dokáže zpozdit i o 30 minut. Chci zařízení reklamovat, ale po přečtení Vašeho článku bych ho nejraději zahodil a koupil Vámi upravenou verzi:-) Cena 2.000 by za ten komfort byla více než přijatelná a myslím, že i další tisícovka k tomu za Váš čas je určitě také v pohodě! Neuvažujete již o výrobě?
Re: Re: Re: Výroba lepšího?
Jarek, 2. 6. 2018 20:40
Ujíždění času bude nejspíš způsobeno nepřesným krystalem u obvodu, který drží čas. Je to made in China! Mně také ujíždí, ale je to kolem minuty za měsíc. Oprava je jednoduchá, stačí vyletovat krystal a koupit tam druhý.
Co se týče výroby jednotky, Tento týden mi došla vývojová deska s procesorem, tak ji zkouším rozjíždět. Nejedná se o napsání softwaru jen pro řízení LED, je tam těch problémů k řešení více a také je nutno vytvořit nějakou aplikaci do Windows, ze které se to bude programovat. Až mi vše pojede na vývojové desce, tak bude třeba navrhnout desku a osadit a vyzkoušet. To je oproti softwaru časově náročnější a nákladnější, protože při chybě se musí předesignovat deska a nechat znovu vyrobit.
Podobný programátor
Poly, 22. 2. 2018 23:34
Dobrý den,
super článek. Bohužel ale podobný přístroj na trhu neexistuje
Re: Přeprogramování TC420
Jarek, 10. 7. 2019 18:30