Category Archives: Betkas

PID, dalis #2, o kodėl FLOAT?

Jei norėčiau perkelti seniau aprašytus algoritmus į kokį mikrokontrolerį, viskas lengvai nusikopijuotu. Juk šiuolaikinis gcc puikiausiai palaiko slankiojo kablelio matematiką (float). Tačiau float yra lėtai ir užima daug vietos. Ypač dalyba. Net naudojant integer matematiką, dalyba yra toks nerekomenduojamas reikalas.

Ar tikrai reikia dalybos? Prisimenam formulę:

PID

Čia dalyba yra tik pačioje dešinėje, kur dalinasi iš dt. O jei pas mumi dt = 1? Kas sako, kad reikia skaičiuoti realiom sekundėm? Kas draudžia skaičiuoti kokiais nors išgalvotais, santykiniais vienetais. O jei tikrai reikia, kas draudžia funkciją skaičiuoti kitokiu dažniu. Išpaprastinam dt.

O dabar ar tikrai reikia float? Kas trugdo skaičiuoti viską integer? Gal koeficientai Kp, Ki, Kd? O kas trugdo juos padidinti šimtus kartų? Niekas. O kodėl šimtus? O kodėl ne 256 kartus? Ar 2^15 kartų? Svarbu, kad tik rezultatas tilptu į procesoriuko integer talpą. Viską skaičiuojam dideliais skaičiais ir jau galutinį rezultatą vėl sumažinam kažkiek kartų. Svarbu tik atburti koeficientus.

Čia visiškai ta pati programa, tik pats PID kontroleris veikia su 64 bitų integer matematika. O delta T yra vienetas. (Šildymo modelis tebeveikia su float matematika). Aišku čia kiek nepataikiau su koeficientais ir sunkiai susistabilizavo. Bet veikia!

    Private Sub DoPID()
        Dim P_error As Int64
        Dim P_proportional As Int64
        Dim P_deritative As Int64
 
        Dim sp As Int64 = CInt(setpoint) << 16
        Dim m As Int64 = CInt(measured) << 16
 
        P_error = sp - m
        P_proportional = P_error
        P_integral = P_integral + P_error * pid_dt
        P_deritative = (P_error - P_previous_error) / pid_dt
        output = (pid_kp * P_proportional + pid_ki * P_integral + pid_kd * P_deritative) >> 28
        If output > outmax Then output = outmax
        If output < 0 Then output = 0
        P_previous_error = P_error
    End Sub

Dar kiek pažaisiu su bitais ir koeficientais. Bus daugiau.

PID, dalis #1

Teorija aišku. Kaip ir visi “interneto puslapiai” turiu įdėti šią formulę vogta iš vikipedijos…

PID

Tačiau tai paprasti puslapiai- mano “brain dump” t.y. čia bus neteisingas paaiškinimas kaip aš supratau.

Formulę susideda iš trijų dalių: prie Kp, Ki ir Kd.

Kp, tai proporcingas skaičius nuo klaidos. Išmatuojam sakysim temperatūrą, palyginam su reikiama, gaunam skirtumą ir jį naudojam rezultatui. Pats koeficientas Kp tai tik ant kiek jautriai reaguojam. Gaunasi- per šaltas, dar padidinam liepsną po puodu. Kuo skirtumas (klaida) mažesnė, tuo mažiau įtakoja. Gaunasi matematinis paradoksas, kad niekada nesigaus tiksli temperatūra. Aišku realiam pasaulyje dėl apvalinimo ir matavimo tikslumo, rezultatas pasiekiamas. Tačiau galimas didelis overšotas (per didelė temperatūra) arba labai lėtai pasiekiamas reikiamas rezultatas.

Ki, tai integralinė dalis. Čia kaupiasi klaida. Klaida turi ženklą (per karštá, per šaltá), o kai viskas gerai, tai klaida turi nusinulinti. Jei dėl kažkokių nors priežasčių tai nepavyksta, tai “likutinė” susikaupusi klaida priveda rezultatą prie teisybės. Įtariu, kad šita dalis “amortizuoja” reakciją.
Mano matematiniam modelyje, kai sistema stabilizuojasi, “integralo” reikšmė rodo mano teorinio šildytuvo išskirta energiją: (0.98 naudingumas, o integralas – 102. Čia 10.2W išskiriama energija, o 10W atšalimas). Čia kaip ir sistemos nuostoliai. Tuo tarpu Kp dalis jau nulinė, nes nebėra temperatūros skirtumo.

Kd, pati mistiškiausia, išvestinė dalis. Paprastai šnekant, tai kokiu greičiu kažkas keičiasi ir pagal tai bandom spėti kas bus ateityje. Kadangi formulė paprasta, tai spėjimas gali ir nepataikyti.

Visų šių parametrų suma ir yra reguliuojamas poveikis. Tačiau čia prasideda tiuninimas su koeficientais: Kp, Ki ir Kd. Visiškai nėra jokių universalių skaičių, kiekviena sistema turi savo skaičius. Žodis sistema reiškia ne tik matematinę formulę, bet ir visus fizinius parametrus ir bėdas: matavimo tikslumus, sistemos inerciją (tiek šildymo, tiek matavimo, tiek šildomo objekto). Yra net keli metodai, kaip koeficientus paskaičiuoti, bet geriausiai stebėti situaciją ir koeficientus pasitiuninti rankiniu metodu. Panaudojus neteisingus (dažniausiai per didelius) koeficientus, sistema gali “siubuoti” t.y. suptis kaip kokios supynės ir niekada nesusistabilizuotis. O per maži skaičiai labai pailgina sistemos reakcijos laiką. (nulinės reikšmės išjungia atitinkamas formulės dalis: taip gaunasi PI ir P kontroleriai.)

Formulė atrodo sudėtinga, bet čia tik dėl mandro užrašymo. Visual Basic kalboje tai viskas paprasčiau:

    Private Sub DoPID()
        P_error = setpoint - measured
        P_proportional = P_error
        P_integral = P_integral + P_error * pid_dt
        P_deritative = (P_error - P_previous_error) / pid_dt
        output = pid_kp * P_proportional + pid_ki * P_integral + pid_kd * P_deritative
        P_previous_error = P_error
    End Sub

Kaip ir viskas. Šią funkciją (paprogramę) reikia paleidinėti pastoviai, teoriškai kas “pid_dt” laiko tarpą. Tačiau tikslūs skaičiai reikalingi tik tada, kai skaičiuojam tikslius vatus ar džiaulius. Jei skaičiuojam santykiniais papūginiais vienetais, tai net “dt” galima išpaprastinti. Ir reikia išsaugoti dvi reikšmes sekančiam skaičiavimui: “P_previous_error” ir kaupiamąjį integralą “P_integral“.

Šiame matematiniam modelyje “output” gali būti ir neigiamas (čia gautusi kaip šaldymas), tačiau realiam pasaulyje šildymo elementas netik negali šaldyti, bet ir jo galingumas ribotas. Todėl programoje naikinam neigiamus skaičius ir ribojam maksimumą. Šie ribojimai visiškai neįtakoja funkcijos rezultato.

Pratesimas – 2 dalis.

Video testas arba mikroskopas

Tai tik video testas. Tai mano analoginis mikroskopas (HD!) kur per tris koaksalus ateina singnalas į dėžutę kuri konvertuoja į HDMI. Tada HDMI su kita dėžute konvertuojasi į USB…

Kiek vatos plaukų!

Tai Optilia W10x-HD.

Beja, viską litavau aš 🙂 .

Vamzdinė krosnis

Prireikė eksperimentui vamzdinės krosnelės- reikia konvertuoti iridžio oksidą į iridžio metalą. Viena bėda- iridžio oksidas lengvai garuoja. O kaitinti reikia vandenilio atmosferoje.

vamzdine krosnis

Todėl iš visokių atliekų (elektrotechninės dėžutės, poros sudaužytų lempų, plaukų feno ir seno stikliuko nuo Leco aparato) gimė toks agregatas.

Deja, termokontroleris nėra PID, o paprastas ON/OFF ir dėl sistemos innercijos žiauriai netiksliai veikia. Bet eksperimentams tinkamas. Vandenilis tiekiamas iš Generatoriaus – vienos iš archyvinių agregatų.

vamzdine krosnis

Gerai palaikius, viduriukas gerai kaista:

Ir oksidas i metala

Pagal miltelių pokyčius, reakcija veikia. Bet neaišku kiek medžiagos praradau.

UPGRADE

Tai UPGRADE versija…[1.5.2 upgrading 2.1, 2.2, 2.2.3 -parėjo kategorijos, parėjo Lietuvių kalba. Error!, 2.3 error – teko perkelinėti per export/import XML. UTF8 upgrade, 2.3.3, 2.5, 2.6.1, 2.6.5, 2.7.1, 2.9.1, 3.0.1, 3.2.1, striginėjo -dingo administravimo puslapiai, 3.4.2, 3.8.1, 3.8.41, 4.0.38, 4.4.31, išsidrąsinau, 4.9.24, 5.0.20, 5.1.17, php versijos keitimas, fizinis serverio keitimas, duombazės eksportas, 6.xx versija. Daugiau nėra]

Dabar reikia surasti kokią nors normalią temą.

Serveriai

Čia senas ir naujas serveris. Technologijos tobulėja.

SHUTDOWNAS!

DĖMĖSIO! KONTROLIUOJAMAS ŠUTDAUNAS.

Kontroliuojamas šutdaunas baigtas. Sunaudotas koks kilometras optinio kabelio (x12 rodos), visos tarppastatinės linijos upgreidintos iki 1Gb/s. Gyvas velnias keitiklių ir biški mąstymo.
Šie puslapiai guli dabar ant žemės laboratorijoje. Kitas panašus daiGtas persikraustė į tikrą serverinę. Dar bus sutrikimų, kai telekomas darys savo “voice”, nes “niekas neparašė paraiškos” ir panašiai.

Šios žiemos planas- pilnas puslapių serverio upgreidas. Tiek geležis, tiek programinė pusė. Bet žiauriai tingiu.

Įdomus momentas- transportavimo metu serveris atliko šuolį laike ir kuri laiką rodė rodos 5 metų senumo informaciją. 🙂

2023.11.14:
Pradėjom migruoti į naują softą ir SSL variantą (https://www.vabolis.lt). Galimi puslapių sutrikimai. Per dešimtmečius iš esmės pasikeitė wordpress. Iš paprasto blogų rašymo įrankio konvertavosi į pilną ultra uždizaineriuotą CMS. Baisu.

2023.11.16:
“Specifinis” softas kuris sukosi ant senojo serverio tiesiogiai nesikelia į naują. Dėl PHP versijų kardinalaus pasikeitimo. Kromelis jau veikia abiem variantais http://kromelis.savel.org ir https://kromelis.savel.org

Gali kilti klausimų, kodėl čia taip sunkiai gaunasi. Ogi pabandykit paprastais metodais paleisti 80 ir 443 versijas ant skirtingų fiziškai serverių, kur visas softas skiriasi iš esmės. O visokie LetsEncrypt nori, kad sertifikatai instaliuotusi per 80, o veiktu per 443.

Iš juokingų nuotykių- niekada nepagelbėkite statybininkams. Žmogus atsakingas už video stebėjimo kamerų perkėlimą paėmė ir nukirpo optinį kabelį (gerai, kad seną), bet kartu nusikirpo visas savo kameras ir internetą griauname pastate. Dar rytoj turės viską suvirinti, nors kabelis bus naikinamas po mėnesio. Kodėl nukirpo? Ogi kažkoks statybininkas paprašė… 🙂

Žaidimas su FPGA dev board

Kažkas įsigijau pačio pirmo ciklono (EP1C20F400c7) FPGA plokštę (Nios edition). Kiek žaidžiau su Nios, bet ten visokios licenzijavimo problemos. O kita problema- mažai dokumentacijos ir dar softą kažkur pamečiau. Beja, internete informacijos apie šią pirmąją plokštę mažokai- labai ji sena.
Tačiau senas dev boardas turi ir pliusų- dalis jungčių toleruoja 5V logiką. Kaip tik pajunginėti prie mano kolekcijinių kompiuterių.

Daug metų ji kažkur gulėjo ir nesenai ją radau. Nutariau pažaisti, nes FPGA tai kaip virtualus konstruktorius- nereikia nieko lituoti, o visokias schemas galima bandyti. Ir nutariau patikrinti savadarbio Z80 emuliatoriaus darbą- man kažko neveikia Altair Basic. Tiksliau veikia, bet bėdos su matematika. O ant FPGA galima paleisti Z80 ir palyginti rezultatus.

Altair Basic
Nu ir va, Basic vistiek blogai veikia. Kame bėda. Pabandžiau perjungti Veriloge Z80 į Intelio režimą, tačiau BASIC vistiek blogai veikia.
Neaišku kur bėda. Ant tikro hardwaro paleidinėti nenoriu.

Va kaip atrodo ta plokštė:
Cyclone 1 NIOS edition dev board

Pats Altair projektas Quartus archyvo formoje.

O kadangi aš nemėgstu visos schemos “sujunginėti” teksto formoje, va kokis yra “top level” failas- grafinė schema:Altair 8800 Basic UART FPGA top schema.

Hostinimo vietos keitimas ir pokyčiai

Visiems blogo skaitytojams pranešu, kad ryšium su tuo, kad pastatą kur yra šie puslapiai jau beveik nugriovė, galimas laikinas puslapių neveikimas. Pakeliui gal bus ir kokie atnaujinimai. Kol kas vyksta optinių kabelių tampymas ir virinimas, paslaptingų 19″ dėžių kalimas prie sienų ir derybos su telekomu.

Jei Stasiukas nepaves, pirmadienį jau bus pirmieji kabelių testavimai ir gal kaip nors perkomutuosiu srautą pirmyn-atgal be telekomo žinios. Reikia pagalvoti biški 🙂

Ir pagaliau gal pakeisiu aš serverio OS. Nes dabar net https negaliu padaryti.

Paveikslas riteris
Diedukas riteris stebi situaciją.