ArmJee — JeeNode ant STM32

Posted: 2018-08-09 in Darbeliai
Žymos:, ,

Atsirado poreikis gaivinti kelerių metų senumo projektą su radijo ryšiu. Tik kad aš jau apleidau terliojimąsi su AVR/Arduino, prisikūriau visokių gerų ir nelabai bibliotekų STM32F10x mikrovaldikliams ir panorau su kažkuriuo iš jų tą darbelį pasidaryt. Archyvuose dar mėtosi RFM12B moduliukų, dalis jų prilituoti prie senų devboardų, bus galima nusiimt norint. Tai kažkiek pasiknisęs pabandžiau perrašyti JeeNode RFM12 biblioteką, kad ji tiktų STM32F10x.

Kai yra kažkas gatavo, persidaryt nesunku. Tiesa, kartais būna tokio kodo, kuris pernelyg smarkiai pritemptas prie konkretaus procesoriaus. JeeLabs kodas toks maždaug ir yra, ten nėra skaidymo į kelis sluoksnius. Aš irgi to nesiruošiau keisti, pasiėmiau JeeLabs kodą ir pradėjau laužyti.

Kas seniau mane skaitote, galbūt prisimenate, kaip džynaudą dariau. Dariau ir atstumo testą, bandydamas išsiaiškinti, ar poreikį patenkins. Paskui aptingau ir  projektą apleidau. Užpernai tas rinkinys pravertė, kai dariau vyno šildymą su nuotoliniu stebėjimu. Be abejo, dauguma atvejų tas pats ESP8266 ar ESP32 yra paprasčiau, nes prisijungia prie WiFi ir viskas. Bet vėlgi: WiFi ne visur pasiekiamas, atstumas vis dar yra šiek tiek prabanga.

Kaime turim siurblinę, kurioje kartais įvyksta gedimų ir juos pastebim per vėlai. Kartais, kai vanduo dingsta tiesiog. O kartais, kai mėnesio pabaigoj didelė sąskaita už elektrą pareina, nes kažkas užstringa ir nustoja siurbliai išsijunginėt. Į būdelę pažiūrėt ne taip jau dažnai užeinam. Tad aš apsiėmiau suklijuoti kažkokį aparatėlį, kuris stebėtų, kur ir kada atsiranda įtampa, užmest kokią akį į temperatūrą, o žiemą gal ir pečiuką kiek išmaniau įjungt/išjungt.

Visą įgyvendinimą aš maždaug įsivaizduoju, o štai radijo ryšys — abejotina dalis. Kai turi gatavų devboardų ir veikiančias bibliotekas — viskas paprasta. O štai ar pavyks JeeLabs biblioteką nuportinti — neįsivaizdavau. Todėl nusprendžiau ir pradėti nuo šitos, nežinomiausios ir sunkiausios dalies. Visada taip reikia daryti, nors vidinis pasipriešinimas tikrai didelis: norisi daryt tai, ką žinai gerai ir esi užtikrintas. Nope.

Šiaip šiais laikais RFM12B laikomas mirusiu daiktu ir žmonės naudoja visokias RFM69 atmainas. Na, bet aš nenoriu tiesiog pirkti papildomų daikčiukų, kai turiu jau veikiančių iš seniau. Plius, atstumas jau išbandytas, turėtų RFM12B ištempt.

Prie vienos senos plokštės prilitavau laisvą moduliuką ir laideliais prijungiau prie STM32F103 „Blue Pill“. Nu ir pradėjau kodyt. Radau keletą bibliotekų internetuose RFM12B pritaikytų, bet vienos pusiau nedakeptos, kitos kažkokios iš viso tik kelias RFM12B komandas paleidžiančios. Radau ir vieną neužbaigtą JeeLabs portą su Maple bibliotekomis — artimiausia tam, ko man reikia. Bet ten vaikinui akivaizdžiai nepaėjo: biblioteka neužbaigta ir netgi dar su sintaksės klaidom. Plius, apkrauta kitų bibliotekų gargarais.

Prasimėžiau, susidėjau viską su CMSIS, išsiaiškinau tos bibliotekos steitmašiną (buvo nelengva, turiu prisipažinti) ir ką — užkūriau imtuvą ir pabandžiau paleist siųstuvą.

Aišku, kad nepavyko. Na, pradžiai, pagalvojau, pasidebuginsiu SPI. Ar iš viso modulis atsiliepia?

Pasidebuginau — viskas veikia, modulis atsakinėja. Gerai, reiškia, SPI dalį kodydamas neprikrepinau — iš pirmo karto tas tikrai retai pavyksta, o ypač, kad SPI ant STM32F10x nebuvau bandęs.

Tada AVR prisidėliojau debugų. Viskas daugmaž atitinka. Na, dar SPI magistralės dažnį pareguliavau, surankiojau skirtumus. Heh, staiga lyg ir suveikė! Bet kažkaip nepatikimai. Pradėjau visokius nustatymus kaitaliot, dar kažką. JeeLabs komentaruose yra: į RFM12B modulį galima siųsti duomenis per SPI net 8 MHz dažniu, bet nuskaityt reikia mažesniu už 2,5 MHz. Na, ant STM32F103 SPI1 ir 32 prescaleriu gaunasi 2,25. Ale kažkaip nelabai gerai. Sumažinau iki 1,125 — pradėjo veikt „patikimiau“, kas dešimtas paketas nusisiunčia.

Blem, nu kažkas labai įdomiai ir negerai. Kažkaip, jeigu jau paketas išsisiunčia, tai mano kodas turėtų būt tvarkoj. Modulio pertraukimus ARM procesoriukas tikrai spėja apdorot — jei spėja AVR, tai šitas negali nespėt. Pasiprofailinau — tikrai spėja, viskas ten gerai, bet kažkaip gliučina.

Toptelėjo geniali mintis: jei softas veikia, gali neveikt aparatūra. O mano konkrečiu atveju — laidų raizgalynė, kuria prijungiau modulį. Jie dar ir netrumpi. SPI ilgis nėra labai mažas, metrus gali siekt, na, bet dideliais dažniais visko būna, o RFM12B modulis yra gan jautrus. Sulituotose plokštėse gi viskas vietoj.

Pabandžiau laidų raizgalynę kiek pataisyt, ištempt, kad būtų vienodo ilgio, nesikirstų:

STM32F103C8T6 mikrovaldiklis su RFM12B radijo moduliu | Elektronika | Darau, blė

Nu ir ką 🙂 Veikia. Palikau siuntinėt žinutes pusdieniui — nė viena nepasimetė. Tiek ir bėdos buvo. Bus galima ir SPI magistralės greitį padidint tvarkingai sulitavus, gal net ir 8 MHz komandų siuntimą pasidaryt pagal JeeLabs pavyzdį.

Be abejo, norisi ir RFM69HCW išbandyt. Tik nežinau, kokią biblioteką nuportint efektyviam naudojimui su STM32F103. Čia kitas projektas bus.

O prie šito projekto tai susidėliojau šiokią tokią pusiau universalią plokštę ir sulaukęs akcijos Easy EDA užsisakiau krūvelę:

Su JeeNode suderinama STM32F103 plokštė | Elektronika | Darau, blė

Šita plokštė tokia kaip ir pusiau universali pagal tai, ko man pačiam dažniausiai prireikia. Keli output’ai su 2N7000 mosfetukais (jei reikia, o jei nereikia — užtrumpint galima), USART1 išvestis, keli GPIO per rezistorių, jei reikia, I²C jungtis ir du radijo moduliai: RFM12B arba RFM69HCW. Vieną kurį įlitavus galima jį ir naudoti. Panašiu principu suprojektuotas ir Moteino.

Dar pasidariau galimybę įdėti galingesnį 3.3V stabilizatorių. Čia tam, jei sugalvočiau prie šitos plokštės prisriegti kokį ekraniuką ar kažką panašaus, ko Blue Pill reguliatorius gali nepatempti.

Tai dabar, aišku, reikia likusį RFM12B moduliuką įlituoti ir žiūrėti, ar viską gerai suprojektavau.

Nusprendžiau daugiau niekada nenaudoti varžtelinių terminalų — tik spyruoklinius. Jie tokie durnoki, su prasilenkiančiom kojom. Ir ką jūs manot… suprojektavau pagal savo turimus keturgubus ir dvigubus terminalus. O jie, kiaulės, su skirtingu prasilenkimu:

Spyruokliniai terminalai su prasilenkiančiomis kojytėmis | Elektronika | Darau, blė

Bet labai gerai, kad jie yra lengvai ardomi:

Išardyti spyruokliniai terminalai | Elektronika | Darau, blė

Paskui galima sudėti reikiama tvarka. Štai vienas „perorientuotas“:

Reikiama tvarka permontuotas spyruoklinis terminalas | Elektronika | Darau, blė

Bandomoji plokštė sulituota:

Sulituota STM32F103 plokštė su RFM12B radijo moduliu | Elektronika | Darau, blė

Va tik problema, kad spalvotieji laidukai iš AliExpress su savo kištukais į šituos terminalus nelenda, per trumpi elektrodai. Todėl reikia nuimti plastmasinius antgalius:

Nuo Dupont laidelių nuimti plastmasiniai antgaliai | Darau, blė

Plokštė paleista, veikia:

Paleista plokštė su STM32F103 ir RFM12B | Elektronika | Darau, blė

Nuportintos bibliotekos Githube.

Parašykite komentarą

Įveskite savo duomenis žemiau arba prisijunkite per socialinį tinklą:

WordPress.com Logo

Jūs komentuojate naudodamiesi savo WordPress.com paskyra. Atsijungti /  Pakeisti )

Google photo

Jūs komentuojate naudodamiesi savo Google paskyra. Atsijungti /  Pakeisti )

Twitter picture

Jūs komentuojate naudodamiesi savo Twitter paskyra. Atsijungti /  Pakeisti )

Facebook photo

Jūs komentuojate naudodamiesi savo Facebook paskyra. Atsijungti /  Pakeisti )

Connecting to %s

Brukalų kiekiui sumažinti šis tinklalapis naudoja Akismet. Sužinokite, kaip apdorojami Jūsų komentarų duomenys.