Category / Elektronika

Precizinių įtampų generatorius 2025.08.08 at 14:52

Nežinau, ar generatorius čia tinkamas žodis, bet tiek to. Mintis kilo paprastai – kad jau įsigijau supertikslų matavimo prietaisą Fluke 8846A, reikia jam ir kokios schemos, kuri generuotų supertikslias įtampas ir pamatavus patikrinti, ar gerai prietaisas rodo. Prie to pačio galima bus tikrinti ir kitus voltmetrus. Ypač jeigu šitą prietaisiuką patikrinti metrologiškai. Įtampų formavimui (va, gal geresnis žodis, nei generavimui) pasirinkau naują produktą iš Texas Instruments – REF50E mikroschemas.

Pasirinkau REF50XXE seriją, nes jos tikslumas maksimalus, 2,048 V ir 10,0 V E serijos mikroschemų nėra, todėl pakeičiau į REF50XXI seriją. REF50 serija gali būti patobulintos tikslumo klasės (REF50xxEI), aukštos tikslumo klasės (REF50xxI) ir standartinės tikslumo klasės (REF50xxAI). Man pasirodė pliusas, kad mikroschemas galima jungti lygiagrečiai (yra niuansų, reikia sureguliuoti srovę) ir galima gauti dar daugiau įvairių supertikslių įtampų. Jungimo pavyzdys iš aprašymo:

Bet kol kas darysiu paprastą, nelygiagretintą variantą. Yra niuansų su ESR ir/arba jo nebuvimu išėjimo kondensatoriuose, bet, kaip ir visas minties įgyvendinimas, schemos kūrimas remiasi mikroschemos aprašymu. Mikroschemos galėtų būti maitinamos iki 18 V nuolatine įtampa, norėtųsi, kad įėjimo įtampa bent pora voltų viršytų išėjimo įtampą. Maksimali formuojama įtampa bus 10 V, todėl galima sakyti, kad tiktų maitinimo įtampos nuo 12 V iki 18 V. Čia pagalvojau – darau supertikslių įtampų generatorių/formavimo prietaisą, o jos šiek tiek, nors ir nedaug, priklausys nuo įėjimo įtampos stabilumo. Todėl, kad jau galutinai uždaužyti tikslumu ir stabilumu, vietoje kokio nors nežinomos kilmės laboratorinio arba paprasto maitinimo bloko, schema maitinsis nuo superstabilaus linijinio DC/DC keitiklio UA78M12CKVURG3 irgi iš Texas Instruments. Chm, gal TI galėtų jam man pamokėti už reklamą 😋 ? Jis generuos labai gerus, stabilius 12 V ir 500 mA srovę, kurios mums pakaks su didele atsarga, o įėjimą galima užmaitinti panašiai nuo 14,5 V iki 30 V. Va, dabar jau galima viską sudėlioti į schemą.

Va taip vat ir susidėliojo viskas. Viršuje maitinimo schemos dalis, jungimas tipinis linijiniams (o ir impulsiniams) DC/DC keitikliais. Linijiniai keitikliai labai nedaug triukšmauja, bet užtai labai kaista – kadangi prietaisas nebus skirtas būti įjungtu ilgą laiką, kaitimas mums netrukdys. Jeigu perkais – UA78M12 tiesiog atsijungs. Maitinimas toliau patenka į daugiakontaktį perjungėją SW1 ir, priklausomai nuo jo padėties, įjungia kažkurią vieną įtampų formavimo schemą. Žemiau yra 7 įtampų formavimo schemos. Jos praktiškai vienodos, skirtumas tik tame, kad High Grade mikroschemoms reikalingas apie 1 Ω ESR įėjimo kondensatoriuje, o Enhanced Grade mažas ESR yra geriau. Todėl visur pridėjau 0 Ω varžos SMD rezistorius. Jeigu kuri nors mikroschema dirbs nestabiliai, galima bus įlituoti precizinius 1 Ω ar panašios varžos rezistorius, taip dirbtinai padidinant kondensatorių ESR. CN1-CN8 – lituojami bananiniai lizdai. Jų litavimo aikštelės yra viršutinėje PCB dalyje, bet norėjau lituoti apatinėje, todėl ant PCB 3D vaizdu lizdai yra aukštyn kojomis, kai jau surinkinėsiu tikrą schemą – lizdus sudėsiu teisinga kryptimi.

Viskas gražiai telpa 100 x 60 mm plokštėje:

Plokštės spalva bus juoda, „silkscreen’as” baltas. Tie stačiakampiai po įtampomis skirti ranka užrašyti tikslią įtampą jeigu skiriasi, po matavimo kalibruotu ir dar tikslesniu prietaisu. Šiek tiek 3D vaizdų:

Turėjau minčių dar dengti schemos dalis RF filtruojančiais ekranais, bet paskui persigalvojau, nes gamintojas kaip ir nesako, kad rekomenduoja, o ir vietos ne per daugiausiai tam. Tai visą PCB viršų ir beveik visą apačia padariau vienu dideliu GND poligonu ir užteks. Dabar beliko sulaukti PCB, surinkti ir pradėti bandymus.

PCB atvažiavo, atrodo taip pat, kaip ir 3D vaizde, tik juodos spalvos:

Kiek turiu detalių surinkau ir bus galima daryti bandymus:

Pradžiai pažiūrim, kaip veikia tas linijinis DC/DC keitiklis. Pradžiai trys matavimai, prie 14,7 V, prie 20 V ir prie 25 V maitinimo. Išėjimo įtampa stabili, pasikeitimas tik trečiame skaičiuje po kablelio, tai pasikeitus įėjimo įtampai 10 V, išėjimas padidėja tik 1,94 mV:

Matuoju, žinoma, savo supertiksliu Fluke 8846A. Čia tokia istorija – restauruoju tokį Fisher RS-1060 stiprintuvą (ir straipsnį rašau tuo pačiu), tam stiprintuvui reikia labai tikslaus, jautraus ir didelės varžos voltmetro, tranzistorių ramybės srovės sureguliavimui, todėl pirkau šitą Fliuką. Sekanti logiška mintis – reikia precizinio įtampos šaltinio, gal net kalibruoto metrologiškai, kad patikrinti, ar tiksliai Fliukas matuoja, taigi, teko sukurti precizinių įtampų formavimo prietaisą, kuris duos tikslias įtampas įsitikinimui, kad Fliukas matuoja gerai ir po to jau bus galima matuoti stiprintuvo parametrus. Beje, žiauriai keista rašyti apie matavimus milivoltų vienetų eilėje, negalvojau, kad kada turėsiu tokį prietaisą ar netgi, kad man reiks, tokio tikslumo. Grįžtam prie DC/DC keitiklio:

Kad jau išėjimo įtampa stabili, tai pabandžiau pažiūrėti ant kiek stabili. Oscilogramose tik AC dedamoji. Sakyčiau tikrai geras rezultatas – pulsacijos, arba gal geriau vadinti nestabilumas, arba nukrypimas nuo idealios nuolatinės įtampos tik 9,6 mV, Vp-p 17,8 mV.

\[ 17,8 \,\text{mV} = 0,0178 \,\text{V} \] \[ \text{Pulsacijos %} = \frac{0,0178}{11,93528} \times 100\% \] \[ \text{Pulsacijos %} \approx 0,149\% \]

Am… Jeigu čia nepridariau klaidų, tai pulsacijos tik 0,149 %, tokius mažus procentukus jau galima matuoti promilėmis:

\[ 0,149\% \times 10 = 1,49 \,\text{‰} \] \[ \therefore \; 0,149\% \approx 1,49 \,\text{‰} \]

Net nekyla mintis galvoti apie papildomą filtravimą. Tai su maitinimo dalimi manau galima užbaigti. Patestuokime dabar tas precizines įtampas.

Pradžiai 2,048 V įtampa:

Fluke rodo 2,04793 V – 2,04794 V.

2,500 V įtampa:

Fluke rodo 2,49940 V – 2,49942 V.

5,000 V įtampa:

Fluke rodo 4,99927 V – 4,99930 V.

10,000 V įtampa:

Fluke rodo 9,99867 V – 9,99868 V.

Kitų įtampų kol kas nėra, todėl nematavau. Įtarimą sukėlė tai, kad visos įtampos turi tokius pat trukdžius, sutampa ir forma ir specifika (tas periodiškai išlendantis trikampis), todėl manyčiau, kad čia labiau iš išorės pagautas signalas, nei išėjęs iš precizinių įtampų generatorių. Tikrasis signalas, manyčiau yra ta stora geltona linija. Bandyme su 2,048 V tai paveiksliukas su užrašu „truputį iš arčiau”, spėju ten Vp-p apie 5 mV.

Reguliuojamo uždelsimo signalas 2025.06.27 at 15:56

Idėja tokia – reikia, kad padavus signalą į „juodos dėžės” įėjimą, išėjime signalas atsirastų po norimo laiko. Reiks man tokios schemos integravimui į didesnė schemą. Taigi, pabandome apsirašyti tikslus:

  • Atsiradus signalui įėjime, išėjime signalas turi atsirasti po norimo laiko (0-5 sekundės, be didelio tikslumo, nes mano schemai jo nereikės.);
  • Aktualus, t. y. reikalingas yra kylantis frontas, valdančio impulso trukmė apie 6 s.
  • Išėjimo ir įėjimo signalų įtampa turi būti vienoda ir lygi maitinimo įtampai (13,6 V);
  • Išėjimo signalas turi sugebėti uždegti LEDą.

Tokio tipo taimeriams labiausiai tinka 555 šeimos mikroschemos, jie ir daryti kaip reguliuojamo laiko taimeriai. Bet su 555 jau žaidžiau, tai norisi pabandyti kažką naujo. Ir čia į galvą ateina kiek primirštos mintys apie filtrus, jeigu tiksliau – RC filtrus, apie operacinukus, komparatorius ir visus kitus protingus žodžius. Tuo pačiu noriu pasižaisti su Analog Devices LTspice grandinių simuliatoriumi, patikrinti, kiek simuliavimas atitinka tikrovę. Pagrindinis darbinis arkliukas bus koks nors operacinis stiprintuvas, dirbantis kaip komparatorius. Komparatorius – nes „compare” (angl. palyginti), palygina signalus savo įėjimuose ir pagal tai įjungia arba išjungia savo išėjimą. Ir nereikia čia įsivaizduoti didelio, tai yra mažo, kompiuteriuko mikroschemoje, sukančio galvą kaip čia tą išėjimą sureguliuoti, nes veikimas maksimaliai paprastas:

  • Kai įtampa neinvertuojamame įėjime didesnė nei įtampa invertuojamame įėjime – išėjime loginis 1.
  • kai įtampa neinvertuojamame įėjime mažesnė nei įtampa invertuojamame įėjime – išėjime loginis 0.

Jeigu trumpai, tai galima būtų parašyti va taip:

  • U+ > U = 1;
  • U+ < U = 0.

Čia U+ – įtampa neinvertuojančiame įėjime, U – įtampa invertuojančiame įėjime, atsakymas – loginis lygis išėjime. Taigi, tarkime, kad turime paprastutį operacinuką:

Pradžiai galima būtų nustatyti V2 arba, mūsų formulėje, tai būtų U. Įprastai invertuojančiame įėjime nustatoma stabili įtampa, kurią galime vadinti slenkstine. Ją galima nustatyti įvairiais būdais – stabilitronu, atskiru maitinimo šaltiniu arba, jeigu nereikia didelio tikslumo ir atrišimo nuo maitinimo įtampos svyravimo – varžiniu dalikliu. Tą pastovaus slenksčio lygį galima pasirinkti savo nuožiūra (beveik). Riboja tik operacinuko įėjimo įtampos maksimali vertė. Kadangi noriu simuliacijai naudoti LTspice programą, joje yra tikrai daug operacinukų modelių pasirinkimų. Pasiėmiau vos ne pirmą pasitaikiusį, mokantį maitintis ir nuo dvipolio, ir nuo vienpolio maitinimo, svarbiausia rail-to-rail išėjimas, t. y. išėjimo įtampa gali būti tokia pati, kaip maitinimo įtampa – ADA4620. Vienpolio maitinimo maksimali įtampa 36 V – OK, precizinis – sueis, mažai triukšmaujantis – nelabai aktualu, 16 MHz – stipriai per daug, tiek tikrai nereiks, dažnis bus Hz vienetų eilės, bet sueis, o įdomus pasirodė dėl to, kad panaudoti JFET tranzistoriai. FET tranzistoriai nėra labai mėgstami audio stiprintuvuose, bet mūsų poreikiams bus net labiau tinkami nei paprasti BJT. Ir plius, kad naujas produktas, tai dar ne greitai bus „obsolete” ar „discontinued”. Taigi, invertuojantis išėjimas turėtų atrodyti va taip:

Varžiniu dalikliu R1, R2 nustatysime įtampą, žemiau kurios operacinuko išėjime bus 0, o įtampai neinvertuojamame įėjime pakilus virš to nustatyto lygio – išėjime bus 1. Kokia tą įtampą nustatyti ? Mano logika paprasta – kuo aukštesnė įtampa bus, tuo ilgiau krausis kondensatorius prie neinvertuojamo įėjimo, tai galima bus naudoti mažesnės talpos kondensatorių. Žiūrim mikroschemos aprašymą:

Kadangi maitinimas vienpolis, tai V- yra 0V, o V+ mano atveju bus 13,6 V, tai minimali galima įtampa -0,1 V, maksimali įtampa 13,6-4,4=9,2 V. Kad nebūtų jau visai arti ribinės, maksimalią įtampą bandysiu pataikyti kokia puse volto mažesnę, bet naudosiu standartinius 5 % tikslumo rezistorius (nes tokių užteks, o stipriai pigiau nei 1% ar 0,5%), tai vertės bus kažkokios irgi standartinės.

\[V_{\text{out}} = V_{\text{in}} \cdot \frac{R_2}{R_1 + R_2}\]

Pasirenku R2 = 22 kΩ, standartinė, niekuo neypatinga varža. O kokia turi būti R1 ? Iš tos pačios formulės:

\[R_1 = R_2 \cdot \frac{V_{\text{in}} – V_{\text{out}}}{V_{\text{out}}}\]

Jau turime – R2 = 22 kΩ, Vin = 13,6 V, Vout = 8,5 V (nes maksimali galima 9,2 V, paėmiau dar puse volto mažiau ir suapvalinau iki 8,5 V). Dabar jau galima suskaičiuoti.

\[ R_1 = 22000 \cdot \frac{13,6 – 8,5}{8,5} \] \[ R_1 = 22000 \cdot \frac{5,1}{8,5} \] \[ R_1 =22000 \cdot 0,6 = 13200\,\Omega \] \[ \boxed{R_1 =13,2\,\text{k}\Omega} \]

Standartinė vertė yra 13 kΩ, taigi, perskaičiuojam Vout su Vin = 13,6 V, R1 = 13 kΩ ir R2 = 22 kΩ.

\[ V_{\text{out}} = 13{,}6 \cdot \frac{22}{13 + 22} \] \[ V_{\text{out}} = 13{,}6 \cdot \frac{22}{35} \] \[ \frac{22}{35} \approx 0{,}6286 \] \[ V_{\text{out}} = 13{,}6 \cdot 0{,}6286 \approx 8{,}54 \, \text{V} \] \[ \boxed{V_{\text{out}} \approx 8{,}54 \, \text{V}} \]

Taigi, mūsų slenkstinė įtampa bus 8,54 V. Papildome schemą:

Dar kartelį, kad užsifiksuoti – kai įėjime su pliuso ženklu įtampa bus mažesnė nei 8,54 V – išėjime bus 0, kai įėjime su pliuso ženklu įtampa bus didesnė nei 8,54 V – išėjime bus 1 (maitinimo įtampa). Dabar reikia sugalvoti schemą tam įėjimui su pliuso ženklu. Kadangi reikia išėjimo atidėjimo, tai logiška būtų per rezistorių užkraudinėti kondensatorių, parenkant rezistorių ir/arba kondensatorių tokius, kad įtampa ant kondensatoriaus perliptų mūsų slenkstinę po mums reikiamo laiko. Papildome schemą kondensatoriaus įsikrovimo greitį ribojančiu rezistoriumi, aišku, kondensatoriumi ir prijungiam kondensatorių prie įėjimo su pliuso ženklu (neinvertuojantis įėjimas):

Dar pridėjau iš 13,6 V stačiakampio impulso generatorių, kurio signalą vėlinsim. Kai atsiranda 13,6 V impulsas, kondensatorius C1 pradeda įsikraudinėti, bet rezistorius R3 tam procesui trukdo, todėl įsikrovimas vyksta lėtai/lėčiau. O komparatoriaus neinvertuojantis įėjimas pastoviai čiupinėja kondensatoriaus įtampą ir vis tikrina, ar jau pasiektas slenkstinis lygis. Šitą vietą galima panaudoti vėlinimo laiko reguliavimui, tereikia keisti arba varžą arba talpą. Rezistoriaus varžą keisti žymiai lengviau, negu kondensatoriaus talpą, todėl kondensatorių pasirenkame nekintamą, tarkim 10 µF, o rezistorių bandysime skaičiuoti, kai maksimalus uždelsimo laikas, tarkim, 5 s.

Kondensatoriaus įkrovimo formulė: \[ V(t) = V_{\text{in}} \cdot \left(1 – e^{-\frac{t}{RC}}\right) \] Kadangi reikia suskaičiuoti rezistorių \(R\): \[ \frac{V(t)}{V_{\text{in}}} = 1 – e^{-\frac{t}{RC}} \quad \Rightarrow \quad e^{-\frac{t}{RC}} = 1 – \frac{V(t)}{V_{\text{in}}} \] \[ -\frac{t}{RC} = \ln\left(1 – \frac{V(t)}{V_{\text{in}}}\right) \quad \Rightarrow \quad \frac{t}{RC} = -\ln\left(1 – \frac{V(t)}{V_{\text{in}}}\right) \] \[ R = \frac{t}{C \cdot \left[-\ln\left(1 – \frac{V(t)}{V_{\text{in}}}\right)\right]} = \frac{t}{C \cdot \ln\left(\frac{1}{1 – \frac{V(t)}{V_{\text{in}}}}\right)} \] Duota: \[ t = 5 \, \text{s}, \quad C = 10 \times 10^{-6} \, \text{F}, \quad V(t) = 8{,}54 \, \text{V}, \quad V_{\text{in}} = 13{,}6 \, \text{V} \] Įstatome reikšmes: \[ R = \frac{5}{10 \times 10^{-6} \cdot \ln\left(\frac{1}{1 – \frac{8{,}54}{13{,}6}}\right)} = \frac{5}{10 \times 10^{-6} \cdot \ln\left(\frac{1}{1 – 0{,}6279}\right)} \] \[ R = \frac{5}{10 \times 10^{-6} \cdot \ln\left(\frac{1}{0{,}3721}\right)} = \frac{5}{10 \times 10^{-6} \cdot \ln(2{,}688)} \] \[ \ln(2{,}688) \approx 0{,}9886 \] \[ R = \frac{5}{10 \times 10^{-6} \times 0{,}9886} = \frac{5}{9{,}886 \times 10^{-6}} \approx 505\,900 \, \Omega \] Rezistoriaus reikšmė, kad įkrovimo laikas iki 8,54 V būtų 5 sekundės, yra apie \[ \boxed{R \approx 506 \, \text{k}\Omega} \]

Standartinė rezistoriaus vertė būtų 510 kΩ. O kokia varža turėtų būti, norint turėti 1s vėlinimą?

Duota: \[ t = 1 \, \text{s}, \quad C = 10 \times 10^{-6} \, \text{F}, \quad V(t) = 8.54 \, \text{V}, \quad V_{\text{in}} = 13.6 \, \text{V} \] Įstatome reikšmes: \[ R = -\frac{1}{10 \times 10^{-6} \cdot \ln\left(1 – \frac{8.54}{13.6}\right)} = -\frac{1}{10 \times 10^{-6} \cdot \ln(1 – 0.628)} \] \[ = -\frac{1}{10 \times 10^{-6} \cdot \ln(0.372)} = -\frac{1}{10 \times 10^{-6} \times (-0.989)} = \frac{1}{9.89 \times 10^{-6}} \approx 101{,}1\,k\Omega \] Rezistoriaus reikšmė, kad kondensatorius įsikrautų iki 8,54 V per 1 sekundę, yra: \[ \boxed{R \approx 101{,}1\, \text{k}\Omega} \]

Suma summarum, norint turėti reguliuojamą nuo 1 s iki 5 s reikia varžą keisti nuo 100 kΩ iki 510 kΩ. Papildome kuriamą schemą, kai vėlinimas 5 s:

Tokią schemą jau būtų galima surinkti LTspice programoje ir paanalizuoti:

Pasimatuokime įtampas svarbiuose schemos taškuose ir atvaizduokime grafiškai:

Grafikas pasididina. Čia:

Raudona – įtampa, formuojama rezistoriniu dalikliu į invertuojantį operacinuko įėjimą. Simuliacijoje apskaičiuota vertė 8,4931338V.
Mėlyna – stačiakampis impulsas, kuris vėlinamas operacinuku ir išlenda jo išėjime po nustatyto laiko. Impulso trukmė 6 s.
Šviesiai mėlyna – įtampa ant kondensatoriaus ir neinvertuojamame operacinuko įėjime. Matome, kaip atsiradus impulsui, ši įtampa didėja ir, kai pasiekia mūsų nustatytą slenkstinę įtampą atsiranda…:
Žalia linija – mūsų panašiai 6 sekundes užvėlavęs išėjimas, kuris pradingsta, kai dingus impulsui kondensatorius išsikrauna iki slenkstinės įtampos.

Ir iš karto grafike matosi didelis minusas – kondensatorius labai ilgai išsikraudinėja. O blogai tai dėl to, kad jeigu impulsas ateis, kol kondensatorius neišsikrovęs – jis pradės įsikraudinėti ne nuo 0 V, o nuo kažkiek daugiau, tai ir slenkstinės ribos pasiekimo laikas atitinkamas sutrumpės. Reikia tą kondensatorių kažkaip priverstinai iškrauti, kai jo paslaugų mums nebereikia. Tam yra gudras sprendimas – diodas. Schema dabar atrodytų taip:

O grafikas taip:

Viskas atrodo panašiai, bet dabar vos tik atsijungia valdantis impulsas – dingsta įtampa ant kondensatoriaus ir tuo pačiu operacinuko išėjime. Idealu 😁. Taip galvotum, bet iš tikro – ne. Pasižiūrėkim kaip atrodytų, kai valdantys impulsai yra bent du.

Ir ką čia matome ? Ogi kondensatorius realiai nėra iškrautas, todėl atėjus naujam impulsui jis kraunasi ne nuo 0 V, o nuo tos įtampos, kuri liko iš praėjusio impulso. O mums taip netinka, kiekvieną kartą reikia kondensatorių krauti nuo 0 V, kad būtų reikiamas vėlinimas. Panašus vaizdas būtų ir pašalinus diodą:

Principe mano schemai tiktų ir toks veikimas, kai sekantys impulsai turi mažesnį vėlinimą, bet dar paeksperimentuokime su LTspice. Ir dar pastebėjau, kad tokiu vis papildomų įkrovimų atveju, kondensatoriaus įtampa gali pakilti iki maitinimo įtampos, 13,6 V, o tai yra daugiau nei gali atlaikyti operacinuko įėjimas (9,2 V maks.). Pamažinkime mūsų slenkstinę įtampą iki, tarkim 5 V:

\[R_1 = R_2 \cdot \frac{V_{\text{in}} – V_{\text{out}}}{V_{\text{out}}}\]

Turime – R2 = 22 kΩ, Vin = 13,6 V, Vout = 5,0 V.

\[ R_1 = 22000 \cdot \frac{13,6 – 5,0}{5,0} \] \[ R_1 = 22000 \cdot \frac{8,6}{5,0} \] \[ R_1 = 22000 \cdot 1,72 = 37840\,\Omega \] \[ \boxed{R_1 = 37,84\,\text{k}\Omega} \]

Standartinės varžos būtų 36 kΩ arba 39 kΩ. Pasirenkame 39 kΩ, įtampa bus truputį mažesnė (geriau, nei truputį didesnė). Perskaičiuojam Vout su Vin = 13,6 V, R1 = 39 kΩ ir R2 = 22 kΩ.

\[ V_{\text{out}} = 13{,}6 \cdot \frac{22}{39 + 22} \] \[ V_{\text{out}} = 13{,}6 \cdot \frac{22}{61} \] \[ \frac{22}{61} \approx 0{,}3607 \] \[ V_{\text{out}} = 13{,}6 \cdot 0{,}3607 \approx 4{,}906 \, \text{V} \] \[ \boxed{V_{\text{out}} \approx 4{,}91 \, \text{V}} \]

Slenkstinė įtampa perskaičiuota, pakoreguojam schemą. Grafiškas atitinka skaičiavimą (raudona linija). Lygiagrečiai kondensatoriui pridedame stabilitroną arba, kitaip, Zenerio diodą su 5,6V pramušimo įtampa (STZ5.6NT146). Tai turėtų apriboti maksimalią kondensatoriaus įtampą (melsva linija) iki tikrai saugių 5,6 V. Grafiškai tai atrodo taip:

Pliusas ir tas, kad mažiau įkrautas kondensatorius = mažiau reiks iškrauti po impulso pabaigos. O schema atrodo va taip:

Dabar turime saugius įtampų lygius, kaip ir teisingą veikimą, tuo atveju, jeigu impulsas yra tik vienas arba sekantis impulsas ateina po ilgesnio laiko (kai kondensatorius jau išsikrovęs). Liko tik sugalvoti, kaip iškrauti kondensatorių. Paprasčiausias, bet tuo pačiu ir mažiausiai elegantiškas, netgi brutalus būdas – panaudoti relytę, kuri reikiamu momentu užtrumpins kondensatorių į minusą, taip jį iškraunant iki nulio voltų.

Atnaujinta schema. Nekreipkite dėmesio į DPDT relės tipą, pasirodo LTspice ir labai kūdai su relėmis, tai ką turiu tą ir naudoju. Kai nėra valdančio impulso, relės kontaktai laiko kondensatoriaus teigiamą polių prijungtą prie minuso. R4 (1 kΩ) skirtas apriboti srovę, kuri tekės per relės kontaktus, kai vyks kondensatoriaus iškrovimas. Kodėl 1 kΩ ? A, šiaip. Čia svarbu neviršyti relės kontaktų maksimalios srovės. Nors netgi be rezistoriaus, manyčiau, impulsas bus per trumpas ir per silpnas, kad prideginti kontaktus arba šauti žiežirbą. Bet darom taip, kad būtų tikrai tikrai. O prie 1 kΩ, kai kondensatorius įsikrovęs iki maksimalios 5,6 V įtampos, srovė bus (taip taip, gerbiamieji, Omo dėsnis):

\[ I = \frac{V}{R} \] \[ I = \frac{5.6 \, \text{V}}{1000 \, \Omega} = 0.0056 \, \text{A} = 5.6 \, \text{mA} \]

Tai jau bet kokia, net ir silpna relė laisvai atlaikys 5,6 mA trumpalaikę srovę. Jeigu reiktų iškrauti kondensatorių, kurio įtampa aukštesnė, galima būtų skaičiuoti 1 A išrovimo srovę. Tiek laiko netgi paprastos signalinės mikrorelės. Grafikas atrodo va taip (spalvos pasikeitė, nes iš naujo sudėliojau „daviklius”, bet ir taip jau aišku kas čia kur):

Dabar jau abiejų impulsų trukmė vienoda, įsikrovimas vyksta nuo 0 V, nebeaktualus laikas tarp impulsų, nes nereikia laukti, kol išsikraus kondensatorius. Prie esamų nominalų vėlinimas 4,4 s. Jeigu R1 pakeisti iš 750 kΩ į 900 kΩ – vėlinimas bus 5,07 s.

Ties šita vieta schemos kūrimas kaip ir galėtų sustoti, bent jau maketą rinksiu iš to, ką turime dabar. Bet norintiems galima dar patobulinti schemą. Iš grafiko akivaizdu, kad pavėlintas impulsas baigiasi kartu su valdančiuoju impulsu, taigi, jeigu vėlinimas bus toks pat ar ilgesnis nei valdančio impulso trukmė – išėjime neturėsime pavėlinto signalo. Galima būtų sugalvoti, kaip pailginti išėjimo impulsą, kad vėlinimas galėtų būti didesnis nei valdančio impulso trukmė. Failai simuliacijai LTspice programoje yra čia.

Realiam bandymui surinkau viską ant maketinės plokštės. Taip, negražu, grubu ir gal ne visada tiksliai veikiantis variantas, bet pabandymui užteks.

Raudone LED lemputė – apkrova. Kažko galingo nejungsiu, nes operacinukas gali neatlaikyti. Juodas pailgas daiktas su neryškiu užrašu – relė, o operacinukas gyvena ZIF lizde. Pabandžiau ir supratau, kad relė netinka – reikia su NC kontaktu, o čia su NO. Be relės sistema veikia, uždelsimas yra, bet vis tiek noriu pakeisti relę į teisingą. Radau stalčiuje Relpol RM699BV-3011-85-1012, turi ir NC ir NO kontaktus. Galutinė schema beveik tokia pat, kaip simuliacijoje, pridėjau tik relei diodą – kad aukšta įtampa nepramuštų ko nors operacinukui. Oscilograma:

Geltona linija – signalas ant operacinuko 3 kontakto (neinvertuojantis įėjimas, tas, kuriame įtampa kinta), mėlyna linija – 6 kontaktas, operacinuko išėjimas. Paanalizuokime, atsiranda tie patys 14V trečiame kontakte (vadinkime – valdymo impulsas), pradeda krautis kondensatorius, todėl grafikas gražiai kyla į viršų. 1 langelis yra 1 sekundė, taigi, grafikas kyla 5 sekundes, kol pasiekia, panašiai, 5 V, tada suveikia operacinukas ir išėjime atsiranda irgi 14V. Nors valdymo impulsas ateina 14 V, įtampa nekyla aukščiau 5,6 V – pradeda veikti stabilitronas, apriboja įtampą iki saugios. Paskui valdymo impulsas dingsta, tuo pačiu dingsta ir išėjimo įtampa. Po beveik 1,5 sekundės vėl prijungiu valdymo impulsą ir vėl kondensatorius kraunamas nuo 0 V – ko ir reikėjo, kad išėjimo uždelsimas visada būtų vienodas. Schema, panašu, veikia taip, kaip norėjau, todėl pridedame ją į projektuojamą schemą 😁.

Ryšys tarp dviejų kompiuterių per USB 2025.05.20 at 14:51

Kartais reikia tokio dalyko, sujungtu du kompiuterius per USB. Arba bet kokius kitokius du prietaisus per USB, pavyzdžiui, kompiuterį ir kokių nors gudrių staklių valdymo bloką su USB jungtimi. Taigi, tiesioginio USB – USB ryšio nėra, nes tam reiktų rašyti specialias tvarkykles ir dar knistis su visokiais papildomais programavimo/komunikacijos reikalais. O daroma viskas paprasčiau – USB iš abiejų pusių paverčiamas RS-232, o tie jau komunikuoja tarpusavyje. Kompiuteriai puikiausiai moka dirbti su RS-232, tvarkyklės dažniausiai jau būna įdiegtos arba automatiškai įsidiegia, taigi, labai supaprastėja ryšys netgi tarp dviejų normalių kompiuterių. Taigi, techninė užduotis:

  • Reikalingas laidas / adapteris / sujungimas, kuriuo būtų galima sujungti du kompiuterius arba kitus įrenginius, kurie neturi specialių tvarkyklių, bet dirba per USB;
  • Jeigu reikia – maitinimas nuo USB jungties;
  • Tvarkyklės turi būti diegiamos automatiškai arba lengvai randamos Internete;
  • Turi būti paprastas naudoti;
  • Turi būti saugus naudoti.

Kol kas tiek, jeigu darbo eigoje atsiras naujų užduočių – papildysiu. Šitoje vietoje reikia prisiminti senovę, nes jau viskas yra išrastą, o tai kas nauja – gerai pamiršta sena. Šiuo atveju pamiršta – tai senoviškas kabelis, kuris vadinosi NULL-MODEM. Jo esmė – dviejų kompiuterių ar kitokių prietaisų sujungimas per gryną RS-232, sukryžminant (nors man, pagal prasmę, aiškesnis žodis – krosinant) TX ir RX laidus, tai yra, vieno prietaiso TX jungiasi į kito RX, o kito prietaiso TX jungiasi į to pirmojo RX. Va ir visas stebuklas, taip padarius ryšys tarp RS-232 prietaisų jau yra. Dabar tik reikia tą RS-232 paversti į USB abiejuose galuose. Ai, ir iš karto pasakau, kad nesigilinam į įtampų lygius, ar tai bus TTL ar tikras RS-232. Ir dar, kad suprastumėte – kompiuterio viduje RS-232 jungiamas į UART (Universal Asynchronous Receiver Transmitter), taigi galima iš karto imti USB-UART konverterį ir nekonvertuoti UART į RS-232. Daugiau papildomai aiškinti kuo skiriasi ir kada kas naudojama tingiu, bet turėkime galvoje, kad RS-232 ir UART įtampų lygiai skiriasi. Dabar reikia parinkti šiuolaikinį USB – UART konverterį. Tie dalykai nėra nei labai naujiena, nei labai sudėtingi, pilna prikepta visokio lygio USB – UART arba RS-232 kabeliukų. Tik iš patirties žinau, kad FTDI mikroschemos dirba geriausiai, plius žinomas gamintojas, todėl tvarkyklių ieškoti nereiks. Atsidarius FTDI Internetinį katalogą peržiūrėjau visų galimų kandidatų informaciją ir išsirinkau FT230XS-R mikroschemą. Šalia ir VCP (Virtual COM Port) tvarkyklės. Pagal parametrus – visko čia net per daug arba lygiai tiek, kiek reikia. Plius yra galimybė programuoti mikroschemą, konfigūruoti ją pagal save, bet svarbiausia, ji daro tai ką reikia, konvertuoja USB į UART ir atgal. Iš minusų – mikroschema „valgo” 3,3V, o iš USB išeina 5V. Nors mikroschema tą minusą pati ir sutvarko, tai net ir jo nebelieka. Žiūrim mikroschemos aprašymą:

Štai ir schema, kaip mikroschemą užmaitinti nuo USB prievado. Matome, kad mikroschema suvalgo 5V, o paskui pati konvertuoja juos į reikiamus 3,3V ir išleidžia juos į laisvę per 3V3OUT kontaktą. Bet maksimaliai 50 mA. Toliau skaitant mikroschemos aprašymą randame ir visą USB į RS-232 konverterio schemą:

Ką mes čia matome ? USB lizdas prijungtas prie FT230X, kuris USB duomenų srautą iš savo UART prievado su TTL įtampų lygiais perduoda į „RS232 LEVEL CONVERTER” mikroschemą, kuri savo ruožtu pagaminą tą tikrąjį RS-232. Principe, sujungus tokias pat dvi schemas NULL MODEM pavyzdžiu, tai yra 1 schemos TXDATA į 2 schemos RXDATA ir 2 schemos TXDATA į 1 schemos RXDATA jau būtų galimas ryšys. Taip pat sukryžminus galima būtų sujungti ir RTS/CTS, nors savo schemoje šitų dviejų hardwarinio duomenų perdavimo valdymo kontaktų nenaudosiu. Bet jau girdžiu skaitančių komentarus – pala pala, o tai kam dar TTL keisti į RS-232, jeigu galima sujungti du TTL ? Teisingai, tas RS232 LEVEL CONVERTER mūsų reikmėm visiškai nereikalingas, metam lauk ir schema dar labiau supaprastėja. Bet, galvoju, paliekam LED indikatorius TX ir RX perdavimui iš kontaktų CBUS1 ir CBUS2. CBUS kontaktų funkcijos konfigūruojamos programuojant mikroschemą, bet CBUS1 ir CBUS2 pagal nutylėjimą jau sukonfigūruoti TX ir RX indikatorių valdymui. Jau schemos bazė kaip ir yra, bet mes inžinieriai, pramąstom ar tikrai jau viskas. O tolimesnė minčių eiga tokia – o jeigu reiks prijungti laptopą, maitinamą nuo vidinės baterijos prie stacionaraus kompiuterio, arba kokį specifinį įrenginį, su savo maitinimo prie laptopo irgi su savu maitinimu… Ir kaip tada jausis ir bendraus mikroschemos, užmaitintos nuo skirtingų USB lizdų ? Galima būtų USB lizdų pliusus ir minusus sujungti… Gal ir galima, bet kai nežinome, ką galutinis vartotojas jungs prie mūsų konverterio/adapterio – būtų per daug drąsu tvirtinti, kad neatsiras koks nors įtampų lygių neatitikimas, koks nors „ground loop’as”, ar dar koks monas, dėl kurio gali supleškėti kuris nors iš sujungtų prietaisų. Įprastai, kai duomenų perdavimui sujungiami du prietaisai su nuosavu maitinimu, norisi, kad jie būtų galvaniškai izoliuoti, tai yra, neturėtų elektrinio ryšio. Kaip pavyzdys – du kompiuteriai sujungti tarpusavyje optiniu kabeliu, jokio elektrinio ryšio, o duomenys vis tiek perduodami. Mūsų atveju naudoti optinį kabelį yra prabanga, todėl pradžiai pažiūrėsiu, tarkim, Digio kataloge kokių yra variantų. Duomenų perdavime, t. y. ten, kur nereikia didelių galingumų, bet reikia didelio greičio, dažniausiai naudojami kondensatoriniai izoliatoriai. Pagal mūsų FT230X matome, kad sujungti galima būtų 4 kanalus (TX, RX, CTS ir RTS), todėl pasirenku 4 kanalų skaitmeninį izoliatorių, dirbantį mums tinkamame maitinimo įtampų diapazone Texas Instruments ISO7742FQDWRQ1. Supaprastinta vieno kanalo schema:

Veikimas, paprastai, toks – paduodamas skaitmeninis signalas pakeičiamas moduliuotu signalu, kuris praeina per kondensatorius, tuo pačiu nusifiltruoja nuolatinė dedamoji, tada signalas dekoduojamas atgal į skaitmeną ir išleidžiamas laukan. Paprasčiau suprasti tiesiog žiūrint į blokinę schemą:

O signalas atrodo va taip:

Ateinantis meandras pakeičiamas kažkokio dažnio moduliuoti signalu, kuris lengvai pereina per kondensatorius ir patenka į priimančią dalį, kuri signalą demoduliuoja ir pagamina teisingą signalą išėjime. Ir abu tie signalai yra teisingi savo maitinimų atžvilgiu. Izoliuojančios mikroschemos vidinė schema:

Turim du kanalus į vieną pusę ir du kanalus į kitą pusę, būtent tai, ko reikia. Toks dalykas padėtų ir jeigu reiktų, pavyzdžiui, bendrauti 5V ir 3.3V sistemoms, mikroschema ištransliuotų viską teisinguose įtampų lygiuose ir niekas nesudegtų. Šiaip mikroschemos naudojimas paprastas, tik yra niuansų su trasavimu ir PCB, bet viskas detaliai aprašyta mikroschemos aprašyme. Dabar viską, kas parašyta, plius mikroschemų aprašymus, plius šiek tiek teorijos apie TTL/UART/RS-232 sumetam į puodą, vadinamą galva, gerai suplakame ir gauname va tokia vat schemą:

Palikau ir savo užrašus anglų kalba. Čia dvi identiškos schemos dalys, konvertuojančios USB į TTL, o per vidurį mūsų skaitmeninis izoliatorius. Signalinius „laidus” paspalvinau, kad lengviau atsirinkti kas kur eina ir prijungta. Kai jau yra schema, reikia pasidaryti plokštę. Plokštei kažkokių rimtų reikalavimų nekėliau, neskaitant tų, kurių reikėjo teisingam mikroschemos veikimui, bet pasistengiau daryti plokštę kuo mažesnę ir siauresnę.

Vat tokia ir gavosi nedidelė plokštė, su komponentais. Abu USB tokio tipo, kad būtų galima lengvai prijungti prie dviejų USB prailgintuvų arba plokštę iš karto kišti į kompiuterio USB lizdą, o kitą galą su prailgintuvu į kitą prietaisą. Vienu žodžiu fantazijos reikalas, o ir pačius USB lizdus galima pakeisti į norimos formos, tik truputį pakeičiant PCB. O gyvai plokštelė atrodo va taip:

Surinkus reikia pabandyti kaip tas daiktas veikia. Tam galima pasinaudoti ir vienu kompiuteriu, kuris turi bent 2 USB lizdus. Prijungiau prie to paties kompiuterio per USB šakotuvą, prietaisą rado kaip COM4 ir COM5 prievadus, todėl atidariau terminalo emuliatorių Putty abiem prievadams ir pabandžiau parašyti tekstą. Mintis tokia, kad jeigu veikia, tai tekstas, t. y. duomenys, iš vieno terminalo lango bus perduoti į kitą terminalo langą ir atvirkščiai.

Čia tiems, kas mėgsta kalbėtis su savimi, labai patogu 😋. O adapteris tuo metu atrodo va taip:

LEDai mirksi, duomenys laksto, chm, tai turbūt užskaitom, kad veikia. Nors dar reiktų pabandyti tarp dviejų visai atskirų kompiuterių. Ir, kad nebūtų visai lengva, vienas kompiuteris bus mano darbinis Asus TUF Gaming A15 FA507NV su Windows 11 Home (jooo blyn, žiauriai prasileidau, kad ne PRO), o kitas laptopėlis su Windows 2000 Professional ! W11 aišku be klausimų pasigavo tvarkykles ir viskas su jais OK, o prijungus prie W2000PRO prasidėjo tvarkyklių diegimo vedlys. Lengvai susiradau tvarkykles FTDI puslapyje ir sušėriau vedliui, po to jam klausimų nebekilo. W2000PRO turi gimtąjį terminalą, tai pabandžiau su juo, bet ryšys buvo toks labiau vienpusis – iš senuko duomenys neateina, o į senuką iš Putty nueina. Tai dar parsiunčiau senesnę (0.61 berods) Putty versiją senukui ir viskas kuo puikiais veikia, abiem kryptimis duomenys vaikšto, tekstas pasirodo, tai bandymai baigti. Schemą ir plokšte dariau su EasyEDA, tai schemos ir plokštės failiukai šiai programai yra čia.

FT230X mikroschemos konfigūravimui naudojamas FT Prog įrankis, parsisiunčiamas iš FTDI puslapio. Nelabai turiu ką ten programuoti, bet prisijungti pabandysiu:

Kad bent kažką pakeisti, lendam į Hardware specific punktą, CBUS Signals:

Pabandymui C1 pasirenku Drive_1, turėtų tame išėjime visada būtų aukštas lygis. Iš tikrųjų, išjungus ir vėl prijungus adapterį, buvęs TX LEDas dabar šviečia pastoviai. Prie IO Pins > CBUS dar radau įdomų nustatymą:

Aprašyme lyg nemačiau, kad CBUS’ai mokėtų riboti srovę, bet gamyklinis nustatymas 4mA. O kam tada reikalingas LED rezistorius? Chm, o pabandom nustatyti 16 mA ir pažiūrėti, kas bus su tuo pastoviai šviečiančiu LED. Chm, nepasakyčiau, kad šviečia ryškiau. Tiesa kažkoks srovės ribojimas, matomai, visgi yra, nes prijungus prie USB sekundės daliai LED švystelna ryškiau, po to matyt apsiriboja srovė ir LED vėl tampa blankus. Bet yra visai įdomių galimybių nustatyti CBUS išvadų funkcijas:

Automobilinio grotuvo ekrano užtemdymas 2025.04.28 at 15:14

Labai trumpas, greitas projektukas, atsiradęs dėl paprasto poreikio. Mašinose be dienos šviesos lempų privaloma dienos metu važiuoti įjungus artimųjų šviesų lempas, todėl audio sistemos grotuvas galvoja, kad dabar naktis ir pritemdo savo displėjų. Saulėtą dieną jame beveik nieko ir nebesimato, plius įjungiamas naktinis režimas, pavyzdžiui, mygtukų apšvietimas. Tas ypač galioja pakeitus gamyklinė automobilio grotuvą į kitokį, pavyzdžiui, su Android OS ir papildomais funkcionalumais. Taigi, reikia prietaisiuko, kuris reaguotų į apšvietimą ir pagal tai paduotų signalą į atitinkamą grotuvo kontaktą. Turim tikslą, tik suformuluokime užduotį:

  • Prietaisas turi reaguoti į apšviestumą, pagal tai valdyti atitinkamą grotuvo kontaktą;
  • Maitinimas nuo 11 V iki 16 V;
  • Grotuvo valdymas turi būti universalus – nes nežinome visų įmanomų grotuvų variantų;
  • Apšviestumo jautrumas turi būti reguliuojamas;
  • Genialumas paprastume, tai gal nepradėkim programuoti mikrovaldiklių;
  • Prietaisas turi būti saugus naudoti.

Tiek kol kas užtenka, pradedame konstruoti schemą.

Ok, dabar kaip čia viskas padaryta ir veikia. Kaip visada, iš kairės į dešinę. Nedidelė keturių kontaktų jungtelė, maitinimo pliusas po degimo (KL15+), pastovus minusas (KL31), 12V išėjimas ir minuso išėjimas. Kodėl tiek daug ? Ogi universalumui, valdymas gali būti arba pliusiniu signalu arba minusu. Normalioje padėtyje šiuose išėjimuose nieko, laido galas kaba ore arba „float” 😁. Toliau saugumas, saugiklis F1, 1A turėtų būti per akis visose situacijose, tu pačiu ir pakankamai saugu. Įėjimo kondensatorius C1 – kodėl 1 uF ? Nes tokių daug turiu, principe gali būti ir kitoks. Truputį stabilizuoja įeinantį maitinimą, sugaudo trukdžius jei kokių yra. Toliau „aktyvusis elementas”, 1MΩ daugiasūkis potenciometras R2 ir fotorezistorius LDR1. Potenciometras daugiasūkis tikslesniam reguliavimui, o 1MΩ nes tokia maksimali varža leis prijungti praktiškai bet kurį fotorezistorių ir sureguliuoti teisingam veikimui. Šita schemos dalis veikia taip – kai šviesu, fotorezistoriaus varža maža, o potenciometras taip sureguliuotas, kad jo varža palyginus su fotorezistoriaus varža didelė, todėl ribiniu atveju schema tampa tokia:

Kai tamsu, fotorezistoriaus varža didelė, sakykim 100 kΩ, o potenciometro varža tampa palyginti maža:

Analizuoti tokias ribines padėtis lengviau, nors realiai ten nebus nei visai minusas, nei visai pliusas, nes bus tam tikros varžos tiek fotorezistoriuje, tiek ir potenciometre, todėl būtų geriau analizuoti šitą porą kaip varžinį daliklį, bet užtai taip paprasčiau suprasti kodėl šita pora apskritai veikia. Taigi, pirmu atveju R3 gauna pseudo gryną minusą, antru atveju gauna pseudo pliusą. Pasikartosiu, turėkime galvoje, kad ten bus kažkokia tarpinė įtampos vertė, tarp 0V ir VCC, tik suveikimas atsitiks, kai ta įtampa bus aukščiau arba žemiau tam tikros slenkstinės vertės, kuri priklauso nuo tranzistoriaus. Toliau, R3 su Zenerio diodu, dar vadinamu stabilitronu, sudaro silpnasrovį maitinimo šaltinį. Jo reikia tam, kad tranzistoriaus Q1 bazės – nes bazės maksimalį įtampa VEBO = 10V. Tranzistoriaus aprašymas yra čia. O mašinoje tikrai bus daugiau, net iki 15V. Taigi, stabilitronas apriboja maksimalią įtampą. Kokia ji turi būti ? Aprašyme parašyta, kad VBEsat = 1,5V, tai yra tranzistorius pilnai atidarytas, kai įtampa tarp bazės ir emiterio yra 1,5V arba daugiau, bet ne daugiau 10V, nes bus pššš ir pasimatys tai, iš ko padaryta visa elektronika – dūmai. Dėl stabilumo, garantuoto tranzistoriaus atidarymo ir toli nuo pavojingos maksimalios įtampos imame pusę maksimalios įtampos vertės, tarkim 5V. Tiktų, principe, bet kas nuo 1,5V iki kokių 9V… Ok, ok, dar plius, kad turėjau 5V stabilitronų, tai pasirinkimas dar supaprastėjo. Turėdami tiek duomenų, galime pabandyti paskaičiuoti stabilitrono ir jo balastinio rezistoriaus parametrus. Išeitiniai duomenys skaičiavimui:

  • Maksimali įtampa – 15V
  • Minimali įtampa – 8V (nes mūsų R2-LDR1 daliklis gali duoti ir mažiau nei 12V, tai paimu tokią įtampą, gali būti ir kita, bet jeigu daliklio įtampa bus didesnė už 1,4V, stabilitronas nieko neveiks, o tranzistorius įsijungs)
  • Reikiama įtampa išėjime – 5V
  • Apkrovos srovė – čia toks sudėtingesnis parametras, bet iš tranzistoriaus aprašymo pikinė bazės rovė IBM = 100 mA, plius kažkiek srovės kondensatoriaus C2 krovimui, bet tiek srovės neduosim, duokime, tarkim trečdalį – Imax = 30 mA. Iz_min panašiai 10% nuo visos srovės, tai 0,003 A.
\[ I_{total} = I_{Zmin} + I_{L} \]
\[ I_{total} = 0,003 + 0,03 = 0,033 A\]
\[ R = \frac{U_{Supl} – U_{Z}}{I_{total}}\]
\[ R = \frac{15 – 5}{0,033}=303,03Ω\]

Paimkime, kad rezistorius bus 300 Ω.

\[ P_{R} = (U_{Supl} – U_{Z}) \cdot I_{total}\]
\[ P_{R} = (15 – 5) \cdot 0,033 = 0,33W = 330 mW\]

Rezistoriaus galingumas apie 330 mW.

\[ P_{D} = U_{Z} \cdot \left( I_{max} – I_{min} + I_{D} \right)\]
\[ P_{D} = 5 \cdot \left( 0,03 – 0,03 + 0,003 \right)=0,015W = 15 mW\]

Stabilitrono galingumo skaičiavimui Imax ir Imin imu vienodus, nors gal apkrovos srovė ir nebus visada vienoda ir stabili, bet turint tokį didelį atsargos koeficientą, manyčiau taip ganėtinai saugu. O skaičiavimas gerokai supaprastėja.

Toliau, rezistorius R4, ribojantis kondensatoriaus įsikrovimo greitį ir bazės srovę. Rezistoriaus skaičiavimas toks pusiau šamanizmas, su visokiom Betom ir panašiai, o bet tačiau, štai:

  • Valdymo įtampa Uctrl = 5V
  • Kolektoriaus maksimali srovė IC = 0,5A
  • Koeficientas β = 10000
  • Įtampos kritimas PN sandūroje Upnp_drop = 0,7V
  • Maksimali bazės srovė Ib_max = 100mA = 0,1A
\[I_{c} = \beta \cdot I_{b}\]

Iš čia:

\[I_{b} = \frac{I_{c}}{\beta} =\frac{0,5}{10000} = 0,00005A = 0,05 mA\]

Taigi, leidžiant per bazę bent 0,05 mA, kolektoriaus-emiterio srovė turėtų būti galima maksimali, pusė ampero.

\[U_{ctrl} = I \cdot R\]
\[R_{max} = \frac{U_{ctrl} – U_{p-n\_drop}}{I_{b}}\]
\[R_{max} = \frac{5 – 0,7}{0,00005}= 86000Ω = 86 kΩ\]

Turime, kad maksimali bazės rezistoriaus varža yra 86 kΩ, bet patikimam ir greitam tranzistoriaus atidarymui, galime didinti srovę, nes turime 20 mA limitą. Sumažinus varžą 20 kartų, srovė padidės 20 kartų, tai bus 1 mA. Turėtų pakakti tranzistoriaus atidarymui, kad jis dirbtų rakto režimu, o ne linijiniu. Būtų galima dar mažinti varžą, tarkim, sumažinus 200 kartų, iki 430Ω, srovė būtų 10 mA. Bet laimėjo 4700 Ω rezistorius, nes tokį turėjau po ranka, srovė turėtų būti apie 1 mA. Tas pats rezistorius dar ir stabdo kondensatorius C2 įsikrovimą. Kondensatorius pasikraus per laiką τ (Tau):

\[ \tau = R \cdot C\]
\[ \tau = 4700 \cdot 0,000001 = 0,0047s = 4,7 ms\]

Laikas super trumpas, kondensatorius pasikraus, tuomet rezistorius tiesiog ribos bazės srovę.

Toliau tranzistorius Q1, geras, smagus Darlingtonas mažame korpuse, atsidaro ir prijungia minusą prie relės K1 ir indikatoriaus LED1 su jo rezistoriumi R1. Relės srovė 9,1 mA, plius ~15 mA LEDukui, tranziukas tikrai išlaikys. Relės kontaktai laiko 1A srovę, todėl saugiklis F1 irgi 1A. relės kontaktų sujungimas toks, kad būtų toks kaip ir pseudo galvaninis atrišimas nuo prietaiso, nes relė perduoda grynai maitinimo pliusą arba maitinimo minusą, o ne, tarkim, minusą po tranzistoriaus. Taip išvengiame kokių nors dar nežinomų niuansų valdomo prietaiso schemoje.

Schemos vaizdelis 2D ir 3D:

EsayEDA failiukai (SCH ir PCB) yra čia.

Toliau veikimo bandymai ir šiek tiek matavimų.

Iš LED matosi, kad tranzistorius kažkiek dirba ir linijiniame režime, bet srovės mažos, trukmė nedidelė, tai bėdos su tuo nebus. Galima būtų pridėti Šmito trigerį, tuomet linijinio režimo nebebūtų.

Eigoje fotorezistorius pakeistas į PGM5506-MP – nes korpusas 5,5 mm, vietoje 12 mm.

Senoviški mokykliniai voltmetrai 2025.02.21 at 09:31

Ok, su tuo „senoviški” gal biškį perlenkiau, nes rusijoje manyčiau jie vis dar naudojami, pavadinimas Учебный-2. Gavau juos tokios būklės:

Sureguliavus nulius prijungiau prie laboratorinio maitinimo šaltinio veikimo bandymams.

Taigi, dar pora voltmetrų į kolekciją. Ne tai, kad naudočiau, bet pažaisti visai faina.

Garmin PIN kodo nulaužimas 2025.01.29 at 13:44

Kažkada labai seniai, realiai seniai, prieš kokia 10 metų, nusipirkau eBay Garmin navigaciją Nuvi 660 Euro. Net ir tuo metu Garmin, Mio ir kiti navigacijos prietaisai jau buvo išstumti navigacijų, esančių protinguose telefonuose, todėl pirkau pigiai. Pats prietaisas lyg ir veikiantis, bet pilnai įjungti nepavyko – uždėtas PIN kodas, be kurio prietaisas nieko nerodo, tik PIN kodo įvedimo meniu. O turėtų būti va toks vaizdelis:

Jau neprisimenu, ar kreipiausi į pardavėją, kad grąžintų pinigus, bet PINo tikrai negavau. Gal dėl to, kad navigaciją įsijungiau gerokai po visų eBay terminų (nes ir pats jau naudojau telefoninę navigaciją). Tuo metu buvau pradėjęs žaisti su Arduino, todėl sugalvojau pasidaryti hardware’inį bruteforcer’į. Kaip čia tas daiktas vadintųsi lietuviškai..? Mechaninis kodo spėliotojas arba parinkiklis, arba rinkiklis ? Turbūt. Su tuo PIN kodu viskas veikia taip – surenki 4 (gal) skaičiukus, Garmin’as pyptelna garsiuką ir parašo, kad kodas blogas. Alternatyvūs variantai, kuriuos pamenu iš anų laikų:

  • Laikyti Reset mygtuką 2 valandas 30 minučių, tas lyg ir pilnai perkrauna prietaisą į gamyklinius nustatymus. Gal, nebandžiau – lengvi keliai ne mums.
  • Susisiekti su gamintoju, pateikti pirkimo dokumentus ir gauti kažkokį atrakinimo būdą, PIN kodą ar kažką. Irgi ne variantas, nes pirkimo dokumentų neturiu.

Pats PINas gyvena iš išorės neprieinamoje atmintyje (per USB jungtį), ta atmintis nepriklausoma nuo maitinimo, todėl atjungus akumuliatorių neišsitrina. Greičiausiai galima būtų pasijungti atminties mikroschemą prie programatoriaus ir, nuskaičius duomenis, rasti/pakeisti PINą. Bet irgi, lengvi keliai ne mums 😋. Ir todėl pradėjau tokio mechaninio PIN rinkiklio projektą. Anuomet Internete mačiau tokį prietaisą, gal gremėzdišką, kuris mechaniškai rinko PIN kodą, spaudė OK ir su kažkokiu šviesos davikliu tikrino, ar ekrano šviesumas pasikeitė iš PIN kodo meniu aplinkos (tamsi) į žemėlapį, kuris yra šviesesnis. Toks būdas kaip ir tinkamas, kai žinai tą tašką, kuriame ekranas pasikeičia iš tamsaus į šviesų ir tik tuo atveju, jei PIN teisingas. Dar buvo kažkoks pusiau CNC aparatas, kuris mygtuko „spaudiklį” judindavo link reikiamo mygtuko, dar mačiau ir tokį, kur buvo prisijungia prie touchpad’o, ekrano prilietimus apdorojančios mikroschemos, ir paspaudimus šėrė kaip jau gatavus duomenis į procesorių.

Aš sugalvojau kitą būdą – spaudinėti ekraną mechaniškai, o PIN kodo teisingumą detektuoti pagal garsą. Reikalas tame, kad surinkus PIN kodą, prietaisas sugroja tam tikrą toną ar tonus. Tuo metu tikėjausi, kad blogo PIN kodo garsas skiriasi nuo gero PIN kodo garso. Kol kas dar nežinau kaip iš tikrųjų, bet su laiku paaiškės. Bet blogo PIN kodo garsą girdėjau ne vieną kartą, bandydamas rankutėmis surinkti populiariausius PIN (0000, 1234 ir t. t.). Taigi, pradėjau kurti schemą ir gavosi va tokia vat:

Kaip visada, paanalizuokime, kaip čia kas su ta schema. Blemba, dabar kai žiūriu į schemą – kiek visko daryčiau kitaip, geriau, patogiau, paprasčiau 🙂, taip, kaip sakoma, „gyveni ir mokaisi”. Paveiksliukas didinasi į naują kortelę (į naują tab’ą, jeigu lietuviškai).

Kairėje pusėje DC/DC konverteris, kurio pagrindas LMZ23605TZ/NOPB mikroschema, konverteris. Efektyvumas, prie man reikiamų srovių apie 90 % arba daugiau, išėjimo srovė gerokai per didelį, net 5A, bet pamenu, pasirinkau būtent tokį konverteriuką, nes norėjau išbandyti tą mikroschemą, kaip ji veikia, konfigūruojasi, valdoma ir t. t., tai, kad nešvaistyti papildomai resursų, parinkau ją kuriamam prietaisiukui. Visas maitinimo šaltinis surinktas su keliomis išorinėmis detalėmis – įėjimo kondensatorius C1, išėjimo kondensatorius C2, R1-R2 daliklis, išėjimo įtampai nustatyti. Papildomų mikroschemos funkcijų, pavyzdžiui, minkšto paleidimo, nenaudojau, tai nėra ir papildomų detalių. Visų komponentų skaičiavimas ar parinkimas gerai aprašytas mikroschemos aprašyme, tai labai nepasakosiu, tik išėjimo daliklio skaičiavimas 5V išėjimo įtampai (VO):

\[ V_O = 0,796\,\text{V} \times \left( 1 + \frac{R_{FBT}}{R_{FBB}} \right)\]
\[ 5V = 0,796\,\text{V} \times \left( 1 + \frac{R_{FBT}}{R_{FBB}} \right)\]
\[ \frac{5V}{0,796V} = 1 + \frac{R_{FBT}}{R_{FBB}} \]

Ir dar supaprastinam:

\[ \frac{R_{FBT}}{R_{FBB}} = \frac{5V}{0,796V} – 1 \]
\[ \frac{R_{FBT}}{R_{FBB}} = 6,2814 – 1 = 5,2814 \]

Taigi, rezistorių varžos santykis yra:

\[ \frac{R_{FBT}}{R_{FBB}} =5,2814 \]

Pasirenkam bet kurią varžą savo nuožiūra ir pagal gamintojo nustatytas varžos ribas, ir randame antrą varžą pagal formules:

\[ R_{FBT} = R_{FBB} \times 5,2814 \]
\[ R_{FBB} = \frac{R_{FBT}}{5,2814} \]

Jau nepamenu, kurį pasirinkau savo nuožiūra, bet tarkim RFBT paėmiau 5K62, tuomet:

\[ R_{FBB} = \frac{5620Ω}{5,2814} = 1 064,1117Ω \]

Artimiausias varžos nominalas – 1070 Ω. Dabar galima sudėlioti varžas į pirmąją formulę ir patikrinti kokią bus įtampa:

\[ V_O = 0,796\,\text{V} \times \left( 1 + \frac{5620Ω}{1070Ω} \right) = 4,9769 V\]

Beveik tiksliai 5V. Primenu, kad čia reikia naudoti precizinius rezistorius. Realiai mano Mastech MS8265 rodo 4,971V prie 8,4V ir 0,3A maitinimo. Tiek apie maitinimo dalį.

Šalia yra USB jungtis J2 Garmin’o krovimui, šeriam tiesiai tuos 5V ir tiek.

IC2 ir IC4 padeda mygtukams S1, S2, S3. Padeda tuo, kad atlieka debounce funkciją, taip sakant padaro mygtukų signalą gražų, su vienu įjungimu/išjungimu, antraip būtų matomas kontaktų „drebėjimas”, kai sujungimo metu kontaktas atsiranda ne iš karto, pradžioje mygtukas junginėjasi ir tik po keliu ar keliolikos mikrosekundžių stabilizuojasi.

Be debounce funkcijos procesoriukas fiksuotų kelis paspaudimus vietoje vieno, bet visą darbą padaro tam, skirta MAX6817 mikroschema.

Šalia matosi aktyvus pjezo-pypsiukas. Aktyvus – todėl jam užtenka paduoti maitinimą iš valdiklio, o ne kažkokį dažnį, kad išgirsti garsą. Jeigu nebūtų aktyvus – reiktų su valdikliu norimu dažniu junginėti išėjimą.

D1, R3 ir C3 skirti Reset grandinei ir programavimui. Kai viskas gerai, R3 laiko Reset kontaktą aukštame lygyje (pull-up), o įrašius naują programą į valdiklį jis, per C3 iš atitinkamo programavimo jungties kontakto, automatiškai perkraunamas. JP2 – trumpiklis, kad perjungti valdiklio kontaktus programavimui arba solenoidų valdymui.

Visko centre – AtMega328P valdiklis, šalia 16 Mhz kvarciukas.

Dešiniau nuo valdiklio visas būrys BSP76 smartFETų, tranzistoriukų ir jungtelės solenoidams.

Viršuje LCD displėjaus blokas, valdomas dviem laidais per 74LS164D registrą ir loginio IR mikroschemos NC7S08M5X. Apie tai rašiau seniai, 2015 metais, kai šios schemos dalies pagrindu pasidariau LCD skydą Arduinui – Arduino 2 laidų LCD skydas. Veikimas paprastas, šeriam reikiamus duomenis nuosekliai į 74LS164D, pasirenkam reikiamą bitą (1 arba 0) QC išėjime, pagal tai, ar siunčiama komanda ar duomenys, paskutinį bitą QH padarom loginiu 1, tuo pačiu duomenų kontaktą irgi padarom loginiu 1, tada IR elemento išėjimas irgi tampa loginiu 1, tuo pačiu loginis 1 atsiranda LCD displėjaus E kontakte, tuo sukomanduoja LCD displėjui nuskaityti duomenis iš duomenų šynos DB4-DB7 (naudojamas 4 bitų duomenų perdavimas).

Ir beliko schemos apačioje esantis garso apdorojimo blokas. Jo pagrindas – labai populiarus audio stiprintuvėlis LM386M ir 74LVC1G17DCK buferio. Audio signalas iš jungties, per DC blokuojantį kondensatorių C4 patenka į stiprintuvą. Jo paskirtis yra sustiprinti signalą, jeigu kartais Garmino signalas būtų per silpnas arba nebūtų galimybės pasigarsinti Garmino garsą. Būtent toks stiprintuvas pasirinktas nes atitinka jo maitinimo įtampa, 5V ir vienpolis, plius beveik nereikia išorinių elementų, nes vidinis stiprinimas jau sureguliuotas ties 20, bet prireikus, papildomo potenciometro pagalba galima reguliuoti nuo tų 20 iki 200. Principe panaudota schema iš aprašymo:

Tik truputį patobulinta, kad būtų galimybė keisti stiprinimą. Toliau seka dar vienas filtruojantis kondensatorius C6. Tuomet testavimo taškas TP1, skirtas prijungti oscilografą, pažiūrėti, koks signalas yra tarp stiprintuvo ir buferio. Tuomet buferis, dirbantis kaip Šmito trigeris. Šiek tiek iš Wikipedios:

Šmito trigeris – vieną analoginį įėjimą, vieną loginį (1/0) išėjimą ir dvi būsenas turinti schema, pasižyminti histereze. Šmito trigeris turi du įėjimo slenksčius. Esant įėjimo signalui žemiau pirmojo slenksčio, schema pereina į loginio nulio būsena ir lieka joje tol, kol signalas neviršija antrojo (aukštesnio) perjungimo į loginio vieneto būseną slenksčio. Loginio vieneto būsenoje schema lieka tol, kol įėjimo įtampa nenukrinta žemiau pirmojo (į nulinę būseną perjungiančio) slenksčio.

Jeigu paprastai, kai įtampa įėjime viršija, tarkim 1V trigerio išėjime yra loginis 1, kai įtampa žemiau 1V, išėjime loginis 0. Taip labai paprastai iš sinusoidės padarome meadnro formos signalą, plius dar su histereze. O meandro formos signalas visada bus arba 0V arba 5V, todėl jį labai lengva detektuoti ir apskaičiuoti dažnį su valdikliu – nebus jokių sinuso formos signalų, kur dar trukdžiai ir visi kiti blogi dalykai, galintys iškreipti dažnio matavimą. Mūsų atveju viskas atrodo va taip:

Panašiai 1 kHz sinusoidė įėjime (geltona linija) po stiprintuvo ir buferio tampa stabiliu meandru (mėlyna linija). Nebelieka ir neigiamo poliarumo įtampų, kas valdikliui būtų ankstyva mirtis dar nepradėjus kaip reikiant dirbti. Tačiau matosi kažkokie šuoliai persijungimų metu, juos būtų gerai irgi panaikinti, gal užtektų kokio nedidelio keraminio kondensatoriuko išėjime.

Štai ir visa schema. Paprasta kaip du kart du.

Antra klausimo pusė yra programa. Per tuos 10 metų vis prišokdavau kažką parašyti, tai dabar ten toks zooparkas, kad pats jau turiu pagalvoti apie ką ten rašiau 😁. Bet prisimenu, kad buvo tikslas kažkaip pasidaryti meniu. Tam sugalvojau naudoti meniu „flag’ą”, žymę, kuri keičiasi sulig kiekvienu meniu ir pagal ją atitinkamai valdomas tekstas ekrane ir funkcijos. Meniu struktūra:

  • Pagrindinis vaizdas, tiesiog parašyta
    PIN bruteforcer
    Menu – press UP
  • Paspaudus į viršų galima mygtukais aukštyn ir žemyn valdyti meniu:
  • Start cracking
    OK to start !
  • Crack from XXXX?
    Enter start PIN
  • Solenoid test
    OK to run test
  • Check sound frequency
    PIN BAD frequ.
  • Enter desired
    sound frequency?
  • Exit

Ties šita vieta pagalvojau, o gal perrašyti viską nuo nulio, tuo pačiu pasikartoti programavimą ir gal pavyks optimizuoti kodą, plius nebus toks kratinys.

2025.01.13

Perrašiau kodą, kažkiek paotimizavau, kažką palikau kaip buvo, kad nepersikrauti smegenų 🙂. Reikia susilipdyti bandymų stendą. Tiesiogine prasme susilipdyti. Tam reikia Garmin prietaiso ir medinių pagaliukų:

Tiks tiltas laikys visą PIN rinkiklį. Pagaliukai tarpusavyje suklijuoti ciano akrilatu (aka Super Glue), tiltas priklijuotas prie Garmin’o dvipuse lipnia juostele ir išcentruotas:

Kad šoninių skaičių nesimato – nieko tokio, toje vietoje paspaudus vis dar suveikia teisingas skaičius. Dar truputis dvipusės lipnios ant PIN rinkiklio ir klijuojam visą konstrukciją į krūvą:

Užklijavus patikrinam, ar lengvai paspaudžiami visi skaičiai, niekas nekliūna. Apie teisingą paspaudimą žinome pagal garsą.

Čia dar pirmoji softo versija, turinti dažnio įsiminimo funkciją, bet po to ją išmečiau kaip nepraktišką ir sunkiai pagaunamą. Dabar tiesiog galima pamatyti koks kada dažnis groja. paprastų mygtukų paspaudimai ~630 Hz, paspaudus OK sugroja ~630 Hz ir ~1600 Hz. Taip sužinome, kokio panašiai dažnio reikia ir, pasinaudojus atitinkamu meniu punktu įvedame rankiniu būdu. Įsimenamos dažnių reikšmės ±200 Hz, tai įvedus 1600 Hz dažnio paieškai naudos nuo 1400 Hz iki 1800 Hz.

Perrašius programą truputį pasikeitė meniu struktūra, naujoji:

  • Pagrindinis ekranas – PIN Bruteforcer / Menu – UP/DOWN
  • Start Cracking / OK to start !
  • Crack from XXXX? / Enter start PIN
  • Solenoid test / OK to run test
  • Check sound / frequency
  • Enter desired / sound frequency
  • EXIT

Veikimo logika tokia. Įjungus prietaisą reikia nustatyti detektuojamą dažnį. Net jeigu iš karto eiti į Start Cracking, vis tiek bus nukreipimas dažnio įvedimui:

Įvedus dažnį parodoma informacija apie detektuojamų dažnių ribas, pasirinkus Start Cracking tos ribos dar kartelį parodomos. Jeigu nežinomas dažnis, kurio reikia, tuomet pirma pasirenkame punktą „Check sound frequency” ir pasimatuojame koks ten dažnis (video aukščiau). Dabar tik įdėsiu kaip atrodo naujas meniu matavimui ir iš dažnių generatoriaus pašeriu apie 1500 Hz, dažnis pačiam generatoriuje plaukioja, tai parodymai irgi plaukioja iš paskos. Matavimo tikslumas gal nėra didelis, bet tokiai paskirčiai tikrai pakankamas.

Ir tuomet, kai jau turime suvestą dažnį, galima pradėti parinkinėti PIN kodą. Iš niuansų – dažnio matavimui galima pareguliuoti jo stiprumą daugiasūkiu paderinimo potenciometriuku, idealiausia matuoti signalą oscilografu TP1 ir TP2 taškuose, bet nebūtina.

Ar teisingai pataikyta į Garmino mygtukus patikrai ir tuo pačiu ar visi solenoidai veikia/nestringa/pasiekia ekraną galima įjungti solenoidų testavimo programėlę:

Bemaigydamas mygtukus pagalvojau, kad visai gal norėčiau turėti galimybę užtildyti pypsiką, nes labai daug pypsi, tai meniu papildytas „MUTE” funkcija. Tuo pačiu kaip ir pabaigiau PIN rinkimo procedūrą, nieko ten labai mandro – surenka PINą, 3 sekundes detektuoja dažnius, jeigu per tą laiką užfiksuoja nustatytą dažnį, kuris reiškia „PIN neteisingas” – palaukia šiek tiek, kol Garminas persijungs iš „PIN neteisingas” lango į PIN įvedimo langą ir renka sekantį kodą. Jeigu nustatyto dažnio neaptinka – parašo, kad PINas yra toks koks buvo suvestas.

Paskubėjau kuo greičiau sužinoti koks gi tas PIN kodas, todėl be didelių kodo optimizavimų ir papildomo funkcionalumo palikau atkodatorių/bruteforcerį maigyti Garminą, o Garminą pypsėti. Atėjau po kiek laiko ir matau, kad PIN kodas surastas – 0324. O bet tačiau – jis neteisingas. Nors mano prietaisas nesuklydo – garso, reiškiančio, kad PIN blogas iš tiesų nebuvo, nes, pasirodo, Garminas pakibo. Taip taip, ateinu, o jis ore kaba 😆. O jei rimtai, pakibo ties ekranu, kur rodoma informacija ką daryti, jeigu PIN blogas. Perkrovus vėl viskas įsijungė į PIN įvedimo ekraną. Bet tai blyyyyn, negi dabar vėl nuo 0000 reiks koduoti 😅? Nesąmonė, paėmiau ir parašiau trūkstamą programos dalį, kur galima įvesti nuo kurio PIN pradėti. Ties ta vieta irgi dar pasvarsčiau ar neperrašius man visko dar kartelį iš naujo, apsisprendžiant kaip geriau saugoti piną, masyve ar kaip paprastą skaičių. Bet kūrybinė krizė buvo praėjus, tai tik parašiau PIN įvedimo dalį, prakonvertuojant PIN kintamąjį, kad tiktų likusiai programai ir sušėriau Atmegai. Procesas užsisuko, nors protarpiais Garminas vis dar pakibdavo, bet po perkrovimo tereikėjo įvesti detektuojamą dažnį ir nuo kurio PIN važiuojam toliau, nesudėtinga. Ir po kiek laiko, jeigu kas patikės, kad sėkmingai pataikiau nufilmuoti būtent tada, kai tikrasis PINas atrastas:

Ir bandymas rankiniu būdu įvesti PINą 1948:

Gaunamas startinis konfigūravimo ekranas, kadangi buvo spaustas Reset mygtukas. Šiaip būtų įsijungęs neresetuotas Garminas, su buvusio vartotojo nustatymais, istorija ir t.t.

Štai ir viskas, baigėsi šita epopėja, užtrukusi 10 metų 😂. Dar iš įdomesnių niuansų – jeigu Garminą prijungti prie maitinimo šaltinio naudojant standartinį mini USB kabeliuką – jis persijungia į PC režimą ir rodo tik kompiuteriuką ekrane. Norint, kad taip nebūtų, reikia arba specialaus kabeliuko, arba standartiniam kabeliukui sujungti kartu 4 (ID) ir 5 (GND) kontaktus, paveiksliukas iš Interneto:

Programa neoptimizuota, kažkiek vis dar padrika, Eagle schema ir PCB berods teisingos, viskas yra čia.

HK1 MAX Android TV priedėlio remontas 2024.10.24 at 09:14

Taip, kiniečiai prikepė visokių tų TV priedėlių, kaip karštų bandelių mokykloje, net nesuprantu, kodėl tas pats modelis turi skirtingas specifikacijas. Į remontą papuolė HK1MAX, gamintojas „Made in China”. Ant prietaiso parašyta 4G RAM ir 32g ROM, Internete randu 4GB RAM 64GB ROM Android 10.0. Vienu žodžiu zooparkas. Bet šiandien ne apie tai. TV žiūrėtojas vietoje 5V maitinimo pašėrė 12V ir po to priedėlis nustojo veikti.

Ardymas nesudėtingas, tai nėra ką parašyti. Bet pajungus prie maitinimo šaltinio priedėlis valgo kažkiek ne logiškai daug amperų, maitinimo šaltinį apribojau ties 2A, ko turėtų tikrai užtekti normaliam veikimui, bet maitinimo šaltinis šoko į apsaugą, nes srovė viršijo 2A. Ardome.

Nebaisiai daug detalių, matomos RAM/ROM mikroschemos nevalgo 5V, taigi, viskas maitinasi per DC/DC konverterius. Gal ir geras ženklas, jeigu konverterio nepramušė – veiks. Kairėje foto matosi 4 didesni droseliukai, paprastai droseliukai būna DC/DC konverterio schemos dalis. Dešinėje pusėje yra tik vienas AMS1117, toks tradicinis pas kiniečius Texas Instruments LM1117 klonas. Jo maksimali įtampa 15V, taigi, 12V prijungimą jis turėjo išgyventi, o vat šalia droselių esantys AS20B5 pažymėtos mikroschemos (realiai MT3520B) greičiausiai neišgyveno, maksimali įtampa tik 6,5V.

Tipinė jungimo schema:

Visas mikroschemos aprašymas yra čia.

Tikrinam DC/DC konverterius – geras ženklas, įėjimas nepramuštas į išėjimą, atsiranda tikimybė, kad už konverterio mikroschemos išgyveno. Teks pakeisti ir pabandyti. Bėda tame, kad tos mikroschemos niekas iš patikimų tiekėjų neturi, teko užsakyti iš AliEkspress – o to labai nemėgstu, nes 90% mikroschemų iš ten – padirbtos arba iš viso neveikiančios.

Praėjo kiek laiko, mikroschemos atvažiavo ir buvo įlituotos. Stebuklas įvyko:

Išvada – 12V sudegino visas keturias mikroschemas, bet viskas, kas liko už jų išgyveno. kadangi testas sėkmingas, priedėlis veikia, tai šiek tiek diagnostinių duomenų:

Kitoje pusėje esantis AMS1117 gamina 1,837 V.

Lazerinė technika 2024.09.22 at 15:38

Ne baisia sudėtingas remontas, bet kad jau prašė pažiūrėti… Kalba eina apie tokius pigučius lazerinius projektorius😀

Nei jis čia labai galingas, nei kažkuo geras, projektoriuoja visokius taškus ir tiek. Pradžiai kaip visada, diagnostika. Neveikia. Nu tai negi atsiųs remontui veikiantį… Teks ardyti, gerai, kad nesudėtinga. Va jau ir krūvelė pabertų:

Taip, iš viso keturi aparačiukai. Gedimas pas visus vienodas, nuo perdėto jėgos panaudojimo jungiant maitinimo šaltinį – nulaužtos visos jungtys. Betikrinant radau dar ir vieną trijų padėčių jungiklį stringantį. Išėmus matosi, kad jis toks lyg padegęs, lyg kaitęs… Visos blogos detalės išmontuotos:

Prasideda „lengvoji” dalis – surasti kuo juos pakeisti. Paieška užtruko kokia 15 minučių, bet rezultatas:

Lizdas: PJ-013D Same Sky (Formerly CUI Devices) | Connectors, Interconnects | DigiKey

Jungiklis: EG2301B E-Switch | Switches | DigiKey

Pabumbėsiu… Maitinimo šaltinis 5V 1,5A, kiek tas aparatas „valgo” dar nežinau, bet tas jungiklis atlaiko tik kokius 200 mA, t. y. 7,5 karto mažiau. Ar nebus čia to kaitimo priežastis, kai per jungiklį prasibėgo didesnė srovė nei galima ? Reiks pamatuoti sroves, gal koks varikliukas pastrigęs ir dėl to vartoja didesnė srovę, ir degina jungiklį.

Patys aparačiukai padaryti labai kreivai šleivai, tokia Kinija, kad matyt pačio nuošaliausio Kinijos kaimo rūsyje gaminti…

Trumpai apie tai, kas viduje.

Du lazeriniai spinduoliai, po vienu prispaustas pavalkėlis, nežinau, ar kad kreiviau būtų ar atsitiktinai 😋. Abu lazeriai šviečia į pusiau veidrodinį stikliuką, kuris turėtų viršuje esančio lazerio spindulį atspindėti 90° kampu ir tiesiai praleisti dešinėje esančio lazerio spindulį. Pabandome.

Taip, viršutinis lazeris raudonas, atsispindi reikiamu kampu ir išlenda per balto plastiko konstrukciją. Ji su varikliuku, matomai ten dar kokį veidrodį sukioja, kad spindulys judėtų. Dešinys lazeris tuomet turėtų būti žalias, bet prijungus maitinimą neveikia, tai kol kas ne žalias 😁.

Dar keletas foto su montažinėmis plokštėmis:

LM317T, matomai surinktas įtampos stabilizatorius, reiks pamatuoti kiek Voltų gamina. Raudonu laidu padarytas trumpiklis, nuo jam yra vieta ant PCB… Toliau visokia smulkmė, DBL358V operacinukas, turbūt prie mikrofono grandinės, keletas 2SD882 tranzistorių, NE555 taimeriukas, laiko impulsų generavimui.

Remontuojam.

Aparačiukai nenumeruoti, bet tarkim pirmasis pasitaikęs po ranka – maitinimo lizdas pakeistas, jungiam. Ok, toks įspūdis, kad šalia namo kyla Eurofighter’is pilnu forsažu. Burzgia aušinimo ventiliatorius, reiks pakeisti. Laikinai atjungia ir bandom toliau. Lazeriai šviečia, o vat varikliukas, vartantis poliarizuotą stikliuką – ne. Pajungiam varikliuką prie maitinimo šaltinio, prie 5V šiaip ne taip, labai nenoriai, pradėjo suktis – viskas aišku, sunkiai sukasi, valgo daugiau srovės, srovė degina jungiklį ir gal dar kažką pakeliui, nes jungiklis tai veikia. Greita diagnostika, tiesiog atsekant takelius, kaltininkas rastas ir pašalintas. Raskite 1 skirtumą 😋

Taip taip, 10 Ω rezistorius negyvas, matomai neatlaikė srovės. O gal čia tas pats aparačiukas, kuriam ir jungiklis neatlaikė. Vienu žodžiu teks pakeisti rezistorių. Ir tas sunkiai besisukantis varikliukas:

Paprastas šepetėlinis variklis, apie guolius čia nėra kalbos. Bet užsakiau naujus ir laukiam gavimo :).

Ventiliatoriai pakeisti, nors teko prie to padirbėti – visų pirma tvarkingas sulituoti ventiliatorių laidukus prie nukirptų senųjų ventiliatorių jungčių, užtraukiant termokembriką, po to dar pasirodė, kad ventiliatorių skylės varžtams per didelės, gerai, kad turiu ne mažą dėžę visokių kompiuterinių varžtelių, tame tarpe ir ventiliatorių tvirtinimo varžtų, tie puikiausiai tiko.

Laukiam lazerio spindulius vartančių varikliukų gavimo…

2024.12.03

Varikliukai gauti ir sumontuoti. Patys varikliukai tai tiko idealiai, bet niekada nebūna viskas lengva – dviejų varikliukų dantračiai trūkę, uždėjus teko įtvirtinti specialia, UV šviesoje kietėjančia derva. Laikosi tvirtai. Naujas varikliukas laisva eina vartoja apie 5 mA.

Naujasis varikliukas su klijuotu dantračiu kairėje, o dešinėje jau sumontuotas. Kadangi nauji varikliukai atvažiavo be jungčių, teko senąsias jungtis prilituoti prie laidų, viską užtraukti tinkamos spalvos termokembriku. Prietaisiukai patikrinti ir veikia kaip numatyta gamintojo. Apie remonto kainą nesakysiu, nes gaunasi daugiau nei nauji prietaisiukai 🙂.

Pjovimo diskų galandinimo staklių automatikos bloko remontas 2024.07.25 at 11:33

Toks skubus remontukas pasitaikė, gavau „SCE904AN-002-01 Pacific Scientific High Performance Digital Servo Drive” valdymo bloką, kuris, taip supratau, valdo pjovimo diskų galandinimo stakles. Daiktas brangus (eBay apie 2000€), o ir darbai stovi, kalnai negaląstų diskų, todėl reikėjo skubaus remonto. Atidėjau visus projektukus į šalį, ir porą dienų, arba labiau naktų praleidau su šituo bloku. Pradžiai, kaip ir visada, teko pasiaiškinti schemotechniką, nes tam, kad sutaisyti bet kokį daiktą, būtina žinoti kaip jis turi veikti. Gedimas – neįsijungia, po to beliko tik diagnostika. Pradžiai teko išardyti bloką:

Priekinė panelė su 7 segmentų LED indikatoriumi, maitinimų ir komunikacinėmis jungtimis, gale – masyvus radiatorius.

Atidarius va toks va vaizdelis. Kairėje – jėginė dalis ir impulsinis maitinimo šaltinis, dešinėje – valdymo schemos. Pačią diagnostiką suskirsčiau į tris etapus – jėginės dalies diagnostika, valdymo grandinės diagnostika ir likusios schemos diagnostika. Kodėl taip ? Nes labiausiai tikėtina, kad nusprogo jėginė dalis, kuri dalyvauja didelių srovių komutavime, jei ne ji, tuomet labai tikėtina, kad nusprogo valdymas (neseniai žaibavo, tai gal, pavyzdžiui, nužaibavo kokį prociuką).

Jėginė dalis sudaryta, principe, iš vienos detalės, IGBT modulio Semikron SKM40GD123D:

Modulio struktūra:

Nieko labai blatno, šeši IGBT tranzistoriai viename dideliame korpuse. Pliusas, kad visi gerai aušinsis ir bus vienodos temperatūros ir greičiausiai vienodų parametrų, jeigu daryti tuo pačiu procesu. Šalia dar gyvena du trifaziai lygintuviniai tilteliai VS-36MT140:

Modulių sandara standartinė:

Tikrinam…

Čia visi jėginiai elementai geri, IGBT modulis, tilteliai, dideli raudoni kondensatoriai, filtravimo dalis – pareiname prie valdymo schemos tikrinimo.

Pradžiai bandome tikrinti mikroschemų maitinimo grandines. Trumpo jungimo nėra, viskas kaip ir gerai, reikštų, kad galima padaryti diagnostinį maitinimo įvedimą ir pažiūrėti iš kur rūks dūmai. Ant plokštės patogiai matosi 5 VDC stabilizatorius:

Štai jis, kairiame apatiniame kampe, prisuktas prie radiatoriaus, šalia ir jo kondensatorius. Čia standartinis LM7805, 5 V stabilizatorius. Pasitikrinam aplink jį, viskas gražu, trumpo nėra, bandome jungti. Stabilizatoriaus įėjimui paduodam 7V, minusą prie stabilizatoriaus minuso, ir jo išėjime turime gražius 5 V. Bet valdymo plokštė vis tiek neveikia. Net nėra tų gražių 5 Voltų ant mikroschemų maitinimo išvadų. Nu va, nusiminiau aš, net susinervinau truputį, galvoju takelis kur nors bus trūkęs, o plokštė turbūt trisluoksnė, nebeatkasiu kur trūko. Bet vis tiek pradėjau tikrinti. Tikrinu tikrinu, nu kas per monai, mikroschemų maitinimas tikrai ne iš to stabilizatoriaus važiuoja, pasirodo iš tų šleifų, plataus ir siauresnio, kurie matosi foto kairėje pusėje. O tai kam tada tas 5 V stabilizatorius ? Nežinau, bet imamės plano B – paduodu maitinimą į bet kurios patogios mikroschemos maitinimo išvadus. Kiek Voltų ? Pasižiūrėjau keleto mikroschemų aprašymus, vienos valgo nuo 3 V iki 5,5 V, kitos grynai 5 V, taigi, tiek ir paduodam. Ir – stebuklas, displėjus atsigavo, rodo kažkokius kodus ir skaičius. Reiškia procesoriukas protauja, gerai. Bet vis dar nėra maitinimo. Kadangi jis ateina per šleifą iš jėgos plokštės pusės, grįžtame prie jos. Jėginėje plokštėje gyvena tas impulsinis maitinimo šaltinis:

Pasitikrinu ar nėra trumpo (su mintim, kad jeigu nėra, bus sąlyginai saugu jungti į 230 VAC), kai kuriuos komponentus (nes matosi kaitimo žymių), prasiskambinu AC takelius iki pat pagrindinės mikroschemos UC3845A. UC3845A ir UC3845B versijų aprašymai visai pravertė. Mikroschemos blokinė schema:

Ir tipinė jungimo schema:

Ir gedimas buvo būtent šito maitinimo šaltinio schemoje, bet kadangi remontas buvo komercinis, nesu tikras, kad galiu apie jį papasakoti. Bet diagnostikai reikėjo ocsilografo ir testerio, o gedimo priežastis – karštis. Remontas pavyko, o pats blokas padarytas kokybiškai, plokštė gera, elementinė bazė irgi patiko, nustebino, kad net visi varžteliai su prabangiom graverinėm/pleištinėm/rifliuotom poveržlėm:

Nuotolinis valdymas, tęsinys – posūkiai, siųstuvas 2024.07.16 at 09:15

Tęsiam projektuką, kurio pradžia susijusi su straipsneliais:

HT12E – HT12D bandymų plokštė – nuotolinio valdymo pradžia

HT12E enkoderio duomenų srauto savybių tyrimas

HT12E enkoderio emuliatorius

Jau po truputį galima papsakoti apie viso šito reikalo tikslą – reikia be laidų valdyti posūkius, taip taip, mašinos posūkius. Kas per mašina ir kodėl reikia – vėliau, kad būtų intrigėlė 😁. Ir pagaliau pabaigta finalinė siųstuvo versija, išbandyta ir pasitvirtinom teisingą veikimą. Paskutine tapo trečioji versija, taigi, pabandykime paanalizuoti klaidų ir tobulinimo kelią.

Pati pirmoji, V1.0 versija, įkūnijanti pačią idėją. O idėja tokia – prie H1 prijungiama posūkių valdymo rankenėlė, kuri iš 2 kontakto permetą pliusą į 1 arba 3, priklausomai nuo to, į kurią pusę paspausta. R1 ir R3 – pull-down rezistoriai, kad valdikliukas Attiny85 neprisigaudytų trukdžių. Toliau visą „protingą” darbą daro valdikliukas. Pagal tai, į kurį kontaktą (PB1 ar PB2) ateina signalas, valdiklis suformuoja atitinkamą baitų paketą ir supučia jį iš PB3 kontakto į siųstuvo TXM433LR antrą kontaktą (duomenų įėjimas), o siųstuvas viską ištransliuoja per ANT-433-USP anteną. Prieš tai nepamirštame nustatyti loginį 1 PB4 kontakte ir tuo pačiu siųstuvo PDN kontakte, kad siųstuvas „prabustų”. Tas padaryta elektros energijos taupymo sumetimais, kad bent jau siųstuvas neveiktų visą laiką, o tik tada, kai reikia parodyti posūkio signalą, nes maitinimas nuo CR2450 3V baterijos, iš kurios galima tikėtis tik 600 mAh. Viršutinė schemos dalis, U4 su C1 ir C2 – aukštinantis DC/DC mikrokonverteris XCL101C301ER-G, sugebantis iš 0,7-5,5 V įėjimo padaryti stabilią nustatytą įtampą, nuo 1,8 V iki 5.0 V (±2.0%) su 0,1 V žingsniu. Maksimali srovė 100 mA, mums tikrai užtenka. Kam jo reikia ? Ogi tam, kad baterijai išsikraunant, schema vis dar gautų skaniai ir sočiai valgyti 🙂. Pabandžiau, veikia stabiliai iki 0,8 V, taigi, baterijoje esančią energiją išnaudos kuo pilniausiai. Toliau jungiklis H2 ir baterija U3 (nežinau, kodėl būtent U). J1 trumpiklis arba 0 Ω rezistorius skirtas atjungti likusią schemos dalį, kol vyksta Attiny85 programavimas per CN1 jungtį, nes programatorius šeria 5 V, o siųstuvas valgo maksimum 3,6 V. Schema, sakyčiau griozdiška, bet kažkaip veikia, toliau bandome optimizuoti. Skirtingai nuo visų elektronikos gamintojų, man žodis „optimizuoti” nereiškia „atpiginti”, todėl antroji schemos versija gavosi tokia:

Pagrindiniai komponentai liko tokie patys, todėl kalbėsime tik apie pasikeitimus. Pirmas dalykas – schema perbraižyta plačiau, lengviau suprasti, kas čia prie ko prijungta ir kodėl. Perprojektuota maitinimo šaltinio veikimo logika, kas leido pašalinti mechaninį įjungimo tumbleriuką. Mintis tokia – baterijos pliusas, kaip ir ankščiau, ateina į posūkių rankenėlės kontaktus ir daugiau nieko neužmaitina. Įjungus posūkį, pliusas nubėga į trijų diodų mikroschemą ir patenka į tranzistoriaus Q1 užtūrą, tranzistorius atsidaro ir prijungia minusą prie visos schemos. Kam trys diodai ? Čia toks, vadinamas, loginis ARBA elementas. Loginis ARBA – tai kai bent viename įėjime yra loginis 1, išėjime irgi yra loginis 1. Taigi, kai maitinimas ateina nuo kurio nors posūkio (į kairę arba į dešinę), jis per savo diodą užmaitina tranzistorių, pasileidžia visa schema, tada valdikliukas iš PB4 paduoda pliusą, kad laikyti tranzistorių atidarytą tiek, kiek jam reikia. O kiek reikia ? Čia mintis tokia – kad posūkis mirksėtų, valdiklis/siųstuvas turi periodiškai siųsti įjungimo ir išjungimo komandas, jeigu siuntimas išjungiamas, tarkim, po komandos uždegti posūkio indikatorių, tuomet jis ir lieka degti, nes nebelieka komandos jį išjungti. Todėl atjungus posūkių rankenėlę pats valdikliukas dar palaiko schemą veikiančią, kad spėtų pabaigti siųsti išjungimo komandą ir tada jau PB4 nustatomas į loginį 0 ir viskas atsijungia iki sekančio posūkių rankenėlės įjungimo. Truputį pakoreguota ir Attiny programa, kad veiktų pagal naująją schemą. Toliau smulkmenos – pridėti trumpikliai SJ2 ir SJ3, skirti tam pačiam reikalui, programavimo metu atjungti likusią schemos dalį. Pamiršau – pirmoje versijoje J2, o antroje SJ1 naudojami DC/DC apėjimui, užtrumpinus maitinimas eina tiesiogiai iš baterijos ir DC/DC keitiklis nedalyvauja parade. Bandymu metu maitinimo schema veikė keistai, matyt atjunginėti minusą tuo trazistoriumi nebuvo gera mintis, gal koks „ground loop’as” gaunasi, gal dar kažkas, bet DC/DC keitikliui nepatiko taip veikti, todėl pradėta projektuoti trečioji schemos versija.

Ir vėl, pagrindinė mintis liko ta pati – mažinti nereikalingų komponentų kiekį, mažinti elektros suvartojimą, viską optimizuoti. Čia pagrindinis pasikeitimas yra maitinimo grandinėje. Paanalizuokime. Baterijos U2 pliusas sujungtas su posūkių rankenėle ir mikroschema U5 (TCK106AF), čia toks „protingas” tranzistorius, arba skaitmeninis jungiklis arba… Vienu žodžiu padavus jam pliusą jis pats teisingai sujungia savo Vin su Vout ir užmaitina prie Vout prijungtą schemos dalį. Taigi, kol posūkių rankenėlė atjungta, niekas neveikia, nėra jokio srovės vartojimo – energetinio taupumo tikslas pasiektas, nes energija naudojama tik tada, kai reikia rodyti posūkį. Sujungus rankenėlę, pliusas nubėga pas vieną iš trijų diodų (tas pats loginis ARBA), pasileidžia DC/DC keitiklis ir užmaitina visą schemą (valdikliuką ir siųstuvą). Valdikliukas įsijungia, įmeta loginį 1 į PB4, tuo paleisdamas tą U5 jungiklį, pasitikrina kuris posūkis įjungtas (kontaktai PB1 arba PB2) ir atitinkamus duomenis supučią siųstuvui. Kai posūkis atjungiamas, valdiklis vis dar laiko PB4 išėjime aukštą lygį, kad veiktų jungiklis U5, per kurį maitinimas patenka į vieną iš diodų, tada į DC/DC keitiklį ir visa schema veikia, kol valdiklis išsiunčia paskutines komandas, o tada nustato loginį 0 į PB4, tuo išjungdamas jungiklį U5. Kadangi tuo metu tai būna vienintelis dalykas, laikantis schemą įjungtą – viskas išsijungia iki sekančio posūkio įjungimo. Šitoje vietoje dvejojau, nes posūkių rankenėlė perduoda tiesioginę baterijos įtampą ir kaip ji keisis baterijai išsikraunant ? Maitinimas po DC/DC vis dar būtų 3V, bet baterija tuo matu jau gal bus tik 2V. Čia teko paknisti Attiny85 aprašymą, ir radau tokį dalyką:

\[ U_{AukštasLygis}\geqslant0,6*U_{Maitinimo}\geqslant0,6*3 \geqslant 1,8V\]
\[ U_{ŽemasLygis}\leqslant0,3*U_{Maitinimo}\leqslant0,3*3 \leqslant 0,9V\]

Taigi, įtampos nuo 1,8 V ir daugiau bus tikrai fiksuojamos kaip loginis 1, įtampos žemiau 0,9 V bus tikrai fiksuojamos kaip loginis 0. Taigi, baterija gali išsikrauti net iki 1,8 V, vis tiek schema veiks teisingai, man tokie įtampų lygiai priimtini 🙂.

Schema ir montažinė plokštė braižyta EasyEDA programoje. Kodėl ? Paprastoms schemoms man ji visai patiko. Yra visokių niuansų ar nesklandumų, bet ne kritiški, todėl šalia Autodesk Eagle (gaila, kad ne Cadsoft) naudoju ir EasyEDA.

Plokštė daryta pagal posūkių rankenėlę, kad tilptų viduje. Keletas 3D vaizdelių:

Ir jau pagaminta plokštė:

Reiks dar įkelti EasyEDA projekto failiukus ir valdiklio programą.

O toliau – pabaigti ir aprašyti imtuvo projektą (prototipas irgi jau pagamintas ir išbandytas). Paskutinei, trečiajai, schemos versijai, dar įmanoma padaryti šiokį toki atpiginimą – kadangi per Attiny85 IO kontaktus gali tekėti 40 mA srovė, galima išmesti U5 ir valdyti viską vietoje jo, PB4 tikrai išveš tokias sroves – visa schema, siuntimo metu, vartoja 4,9 mA, t. y. ~8 kartus mažiau. Tam tereikia PB4 prijungti tiesiogiai prie D1 diodų 4 kontakto.