Klon USB logického analyzátoru

Protože jsem při brouzdání po MCU a Pandatronu narazil na zajímavý logický analyzátor rozhodl jsem se, že si jej zkusmo postavím, protože se čas od času hodí při práci s mikrokontroléry a navíc jsem člověk zvídavý a v elektronice snad pro každou špatnost. Protože to byla konstrukce jednoduchá, a poměr cena výkon se zdál být více než příznivý, tak jsem se inspiroval na obou stránkách a vyšla z toho jednoduchá aplikace na jednovrstvý tištěný spoj (varianta 1), situovaný do krabičky KM-57, která je snad pro tuto hračku dělaná. Po osazení a fyzickém rozběhání jsem se trápil 5 dní, než se mi podařilo najít cestu ke zdárnému cíli a dokázal jsem logický analyzátor (LA) rozběhat na více než 500Ksps. V vsoučasné době jsem postavil již druhou variantu, ktará je osazena AD převodníkem pro realizaci USB osciloskopu (do cca 3MHz) a obousměrným tokem signálů pro využití všech možností, které poskytuje obslužný SW.


Řešením se nakonec stalo použití SW USBee AX Pro a navíc se otevřely další možnosti konstrukce, protože USBee je mnohem univerzálnější než Logic od Saleae. Tou univerzálností myslím hlavně možnost použití 2x anaologového vstupu, na kterém je podporován jednokanálový osciloskop s možností výběru kanálu a vzorkováním 12 Msps. Dále je možné využít obou analogových vstupů jako digitálních voltmetrů s rozsahem ±10V (tyto hodnoty platí i pro osciloskop). Navíc je zde komponenta, která umožní vzorkovat jak anologový vstup, tak i 8 logických vstupů (občas se to hodí při ladění, ale i při výuce jako názorná ukázka). Mezi další komponenty patří i DataLogger, Remote Controller, Signal Generator, PWM generator, Frequency Generator, Frequency Counter, Pulse/Edge Counter a I2C Controller.

Po ověření funkčnosti LA popsaných na serverech MCU a Pandatron (prakticky se liší pouze v drobnostech) jsem se rozhodl zkonstruovat zařízení, které bude moci využít všech možností SW USBee AX Pro a proto jsem se poměrně značnou dobu protloukal ruskými servery a hlavně blogy, kde jsem našel několik zapojení anologové části. Tato zapojení se opět lišila jen konečným řešením AD převodníku a jeho obslužných obvodů. Nakonec jsem zvolil variantu se dvouvstupým AD převodníkem Analog Devices AD9281, protože je relativně levný a jednoduchý. Tím, že má převodník 2 vstupy, nebylo potřeba řešit problém analogového multiplexoru. Konečné schéma, které doznalo po první variantě jednu funkční a pár drobných kosmetických úprav je na následujícím obrázku.

 

Schéma logického analyzátoru s implementovaným AD převodníkem

 

Z obrázku je patrný hlavní rozdíl v digitální části, a to je ten, že jsem po vzoru originálního HW ostranil linkový oddělovač 74LVC245 případně 74LVC8T245 (podle typu konstrukce) a jako ochranu proti přetížení jsem použil kombinaci odporu 100Ω a schotkyho diody BAS70-05(CC) a BAS70-06 (CA) připojené do napájení. Je to sice možná hazard, ale zařízení je určeno pro práci se signály do 5V takže při dodržení těchto hodnot by mělo být jeho použití bezpečné. Navíc i originální HW jak USBee tak i LOGIC mají tuto ochranu řešenu obdobně a CY7C68013A má vstupy 5V tolerant. Důvod pro toto řešení byl velice jednoduchý a to proto, že jsem chtěl využít funkcí generátoru signálů, PWM modulátoru a především I2C kontroléru, kde z důvodu obousměrné komunikace po SDA nešlo použít řešení s přepínáním toku dat pomocí propojky. Další drobnou změnou je vyvedení vstupu TRIGGER pro možnost spouštění analyzátoru bez nezávisle na sledovaných signálech, ochrana tohoto vstupu je shodná jako ochrana logických vstupů analyzátoru.

Toliko k části logického analyzátoru a můžeme přejít k popisu části analogové. Ta je řešena pomocí rychlého paralelního 8-mi bitového AD převodníku AD9281, který má dva nezávislé vstupy přepínaná signálem CH_SEL. Jak jsem již předeslal šlo by v případě nouze použít i jiný AD převodník s jedním vstupem, ale bylo by nutné použít analogový multiplexor, ale i nepatrné přidání dalších součástek by znesnadnilo návrh plošného spoje. Vstupní obvod je tvořen děličem napětí sestaveným z odporů 100k, 91k a 10k, a má dělící poměr přibližně 10:200, odpor 10k však není uzemněn, nýbrž je postaven do 50% Uref, což zabezpečuje možnost zpracování záporných napětí do -10V. Za všechno se platí a zde je cenou za vyšší rozsah, nižší citlivost analogových vstupů, kdy na jeden krok AD převodníku odpovídá přibližně 78mV, ale od zařízení tohoto typu je to více než přijatelné. Obvod je vybaven vnitřní napěťovou refenncí 1V a je zapojen v doporučeném zapojení dle katalogového listu výrobce. Pokud si pozorně prohlédnete schéma zapojení je jasné, že již dále není co popisovat, snad jen drobnost a to že AD9281 je v pouzdře SSOP-28 a ve Farnell jej prodává při kusovém odběru přibližně za 225,- Kč vč. DPH.

Abych nevynechal napájení a komunikaci s PC, resetovací obvod procesoru, EEPROM apod., zevrubně popíšu i tyto části. Nejprve se vrhnu do popisu napájecího zdroje. V první verzi (pouze LA) jsem použil low drop stabilizátor 3.3V TC1015-3.3 v pouzdře SOT23-5 od firmy MICROCHIP, ale zdůvodu zvýšeného odběru, způsobeného AD převodníkem (cca 75mA), jsem musel použít jinou variantu low drop stabilizátoru, neboť 100mA neskrývá dostatečnou rezervu pro napájení všech obvodů. Proto jsem použil TLV1117-33 v pouzdru SOT223, který svými parametry (Io≤800mA) a minimální potřebou okolních součástek splňuje požadavek výkonové rezervy a jednoduchosti zapojení. Jako drobnou náplast v ochraně USB portu jsem se rozhodl použít vratnou pojistku 350mA, která je zařazena přímo mezi stabilizátor a napájecí vývod USB konektoru.

Pro ochranu procesoru (případně i USB rozhraní) jsem použil vysokorychlostní ESD protection TPD4S009DBVR v pouzdře SOT23-6, který ale není nezbytný pro funkci a pokud jej budete mít problém sehnat, nemusí být nutně osazen a dále jsem doplnil signálové cesty mezi USB konektorem a mikroprocesorem o ochranné odpory 22Ω.
Jako resetovací obvod jsem viděl používat různé obvody hlídající napětí, nicméně při korektním použití mám ověřeno, že jako resetovací obvod stačí keramický kondenzátor 100n a odpor 100k, nicméně pokud by měl někdo eminentní zájem je použít, je ještě na DPS kousek místa pro implementaci .

Mezi nejtvrdší oříšky bude jistě patřit paměť EEPROM a nemyslím tím z hlediska obstarání si paměti, ale spíše jejího obsahu. Oproti jiným analyzérům, které jsem na internetu viděl, jsem provedl drobnou úpravu signálu WP paměti, a to proto, že ovládací SW má takovou vlastnost, že přepíše obsah prvních 8-mi byte náhodnými hodnotami a znemožní tak použití LA. Aby prostě k tomuto neblahému faktu nedocházelo, prostě jsem aktivoval ochranu proti přepisu EEPROM a tím byl problém vyřešen. Pro snadnější práci jsem k WP připojil odpor 10k z Vcc a proti zemi je na spoji připravena propojovací propojka SJ1 (Solder Junction). Tato propojka se před napálením korektních údajů do EEPROM proletuje a po úspěšném napálení EEPROM se opět rozpojí (v poslední době je hojně používám v místech, kde je potřeba provést, občas servisní zásah, a nebo kde se provádí pouze prvotní inicializace).
Obsah EEPROM mě potrápil nejvíce, a navíc s novou verzí ovládacího SW nestačilo mít naprogramováno pouze korektní VID a PID, neboť po jeho spuštění je vyčten obsah dalších paměťových míst EEPROM a pokud neobsahuje korektní údaje, tak se ovládací SW zablokuje a vypíše výzvu ke kontaktování výrobce což bych raději nedělal.

 

Předloha varianty 2.a - strana spojů

Předloha varianty 2.a - strana součástek
 
Osazovací plán - strana spojů
 
Osazovací plán - strana součástek
 
Na dvou fotkách je vyfocena prototypová verze 2 

 

Plošný spoj je navržen jako oboustranný, s přihlédnutím k faktu, že si spoje vyrábím svépomocí a proto je zohledněno množství a umístění propojek. Pokud si spoj děláte doma sami je celkem nemyslitelné vyrobit "prokov" pod integrovaným obvodem v pouzdře SMD, a tak jsou všechny prokovy umístěny do míst kde je možné je propájet tenkým drátem na obě strany. Je to sice spartanská metoda, ale pro 2-3 ověřovací kusy, nejsem ochoten zadávat zakázku, nicméně tato koncepce umožní výrobu i jednotlivcům, kteří by měli zájem a jsou schopni si oboustranný spoj vyrobit.
Co se týče komponent tak integrované obvody jsou dány pouzdry SSOP-28, SSOP-56, SO-08, SOT23-6, SOT223 a pasivní součástky, až na malé výjimky, jsou v pouzdrech o velikosti 0603. Vratná pojistka může být nahrazena malým odporem, propojkou nebo ještě lépe tlumivkou do rozměru 1206 (mnou použitá pojistka je v rozměru 0805, ale je zde raději místo pro větší komponent).V celé konstrukci jsou použity pouze dva tantalové kondenzátory a to ve zdrojové části, tyto kondenzátory o hodnotě 10μ a 22μ jsou v pouzdrech velikosti SMC-B, ale je možno osadit i velikost SMC-A (mají poloviční šířku). Další součástkou, která není v rozměru 0603 jsou keramické kondenzátory 10μ v obvodu reference AD převodníku. Jelikož se jedná o aplikaci ve které se v obvodu nevyskytuje napětí vyšší než 5V, vyhoví jakýkoliv kondenzátor s pracovním napětím od 6,3V SS. Pozor při objednávání diod, protože ty jsou v pouzdrech SOT323, které jsou menší než běžné pouzdra SOT23, které z rozměrových důvodů neosadíte na místo SOT323, navíc je dbát pozornosti při jejich osazování na záměnu BAS70-05W a BAS70-06W (tato poznámka je spíše pro začínajicí a ne pro zkušené harcovníky ).