Category Archives: Analogue

ARM47 ir PID dalis #4

O dabar pašnekėsim apie STM32F4 serijos variantą ir source code. Pirmiausia- kodėl 4 serija? Todėl, kad tokia PCB pasitaikė po ranka. Ir tikrai ne dėl kažkokio mistinio FPU ar net DSP. Ir dar neaišku, ar mano turimas MCU yra originalas, o ne koks nors permarkiruotas šlamštas. Šaltinis solidus, bet kodėl jie juos išmetė? Reikia surasti kur nors panaudotą procesorių ir palyginti.

Source code yra sugeneruotas su CubeMX programa, kompiliuota su gcc. Ryšiai su kubiko paprogramėm tik per callback. Ir tai tik naudojam USB biblioteką (virtualus COM portas) ir taimerių pertraukimus. ADC skaitom blokavimo režime.

Pats PID skaičiavimas, float variantas visiškai toks pats kaip ir teoriniam variante:

float pid_generic(float measured, float setpoint, float amplif)
{
float output;
float deritative;
float error;
float proportional;
 
error = (setpoint - measured)/10;
proportional = error;
 
integral=integral + error * pid_dt;
deritative = (error - old_error) / pid_dt;
old_error = error;
 
output = (PID_KP * proportional + PID_KI * integral + PID_KD * deritative) * amplif;
 
return output;
}

Atsirado papildomas parametras “amplif” – tai bendro rezultato daugiklis, kaip ir sustiprinimas (ar susilpninimas). Teoriškai tą patį galima atlikti su pagrindiniais parametrais (P, I, D), bet taip lengviau priderinti prie “krosnelės” galingumo: kaitinimas dirba su integer skaičiais, ir PID rezultatas apsiapvalina. Taip prarandam “jautrumą”. Ir dar temperatūros parodymus pasmulkinam- tik dėl koeficientų.

uint32_t CalcTemp(void)
{
uint32_t a;
a=median_filter(adc_read_blocking(ADC_CHANNEL_4));
a=median_filter(adc_read_blocking(ADC_CHANNEL_4));
//a=median_filter(adc_read_blocking(ADC_CHANNEL_4));
// 786 - max t, 0.62V ->1655
// 3529 - kambario t, 2.83V -> 283
return (4096-a)/2; //12 bitų max apverčiam ir pašalinam LSB.
}
 

Dėl ADC blogumo, matuojam kelis kartus, invertuojam (dėl schemotechnikos išėjimas mažėja didėjant temperatūrai) ir pašalinam mažiausią bitą, nes jis rodo kvailystes. Funkcija “median filter” vogta iš interneto. Tai funkcija, kuri teoriškai turi išfiltruoti sporadiškus nukrypimus: jei eina 5, 6, 4, 3, 100 – tai tas šimtas kaip ir ne į temą. Kiek veikia per daug netikrinau. Manau, reikia dar padidinti buferį.

  1. readtemp=CalcTemp();
  2. pwm=PID(readtemp, SETTEMP);
  3. SetPWM(pwm);

O čia pats pagrindinis ciklas, kuris kartojamas sistemingai: 1 – nuskaitom, 2 – paskaičiuojam. 3 – valdom kaitinimą.

Visas likęs source kodas aptarnauja kontrolerio valdymą per terminalą (galima keisti parametrus) ir duomenų išmetimą analizei. Tai tik eksperimentinis variantas- darbiniam trūksta dar visokių apsaugų, normalaus valdymo ir indikacijos. Ir aišku, išėjimas čia PWM, kad tinkama mažam rezistoriui, bet ne tikram šildytuvui. Dar nesugalvojau, kaip padaryti korektiškai proporcinį valdymą realiai rėlei ar 50Hz simistoriniam reguliatoriui. Jei užteks kantrybės, tema bus vystoma.

Pats pilnas STM32F446 PID controller source code skirtas gcc ir kartu CubeMX projekto failas (versija užrakinta posto datai, galimi patobulinimai). Prie papildų- median filter, ftoa ir usb paprogramės. Visa mano kūryba “USER” aplanke.

Pt100 nuskaitymas

PT100 tai termorezistorius, kuris gana tiksliai matuoja temperatūrą. Skaičius 100 sako, kad prie 0℃ rezistoriaus varža yra 100Ω. O raidelės Pt sako, kad pirmieji šio rezistoriaus variantai buvo padaryti iš platinos. Ar dabar ten yra tos platinos aš jau nežinau. Bet seni tarybiniai termorezistoriai viduje turi labai labai plonos platinos vielos. Keičiantis temperatūrai keičiasi ir tos vielos varža.

O kaip nuskaityti tuos varžos omus? Pirmi pasiguglinimai parodo:

schemos

Čia visdėlto blogos schemos… Schema kairėje, jungimas prie mano nemėgiamo arduino. Paduodam elektrą per rezistorių ir matuojam su ADC parodymus. Atrodo kad viskas paprasta? Bet neteisinga- pirmiausia, per Pt100 rekomenduojama srovė iki 1mA. Čia 5.5mA ir pats termistorius jau nuo srovės kaista. Antroje schemoje srovė jau pamažinta ir kad ADC kažką matytu, pastatytas operacinis stiprintuvas (su 31 karto stiprinimu). Kaip ir logiška, bet deja, ne. Pt100 termistoriaus varža kinta tik keliasdešimt omų: prie 100℃ jis 138.5. Matuojant nuo 0℃ iki 100℃ turim tik 38.5Ω pokytį.

Ir dar abi schemos turi kitą problemą:

Paskaičiuojam schemą kairėje: įtampos pokytis ADC kojoje nuo 2.75V iki 2.58V, apie 0.1658V visam šimtui laipsnių. Kad ir koks geras ADC, didžioji jo matavimo dalis bus nenaudojama, o ir rezoliucija nebus labai jau didelė.

Antra schema, atrodo kaip ir geresnė, bet čia ta pati bėda- net po sustiprinimo, darbinis diapazonas nuo 3.04V iki 4.18V, apie 1.14V šimtui laipsnių. Kodėl, o todėl, kad pastovioji dedamoji nuo didžiosios dalies varžos irgi “pasidaugina” su operacinius stiprintuvu.

Ką daryti? Ogi daryti naudojant daugiau rezistorių:

pt100 amplifier

Šis testinis chaosas tai instrumentinis operacinis stiprintuvas LT1167 ir “matavimo tiltas” (Wheatstone bridge) – viršuje, kairėje. Papildomi rezistoriai dar padaro taip, kad diferencinis signalas gautusi virš 2.5V nuo žemės- čia jau LT1167 veikimo specifika naudojant vienpoliarį maitinimą. Dar, išėjimo signalas žemiau 0.6V nenusileidžia- čia irgi specifika, nėra jis rail-to-rail. Naudojant dvipoliarį maitinimą, tokios nesąmonės visiškai nereikalingos.

Šis “tiltas” duoda vieną triuką- taip galima iš schemos magiškai pašalinti “nenaudojamus” omus. Mano tiltas buvo surinktas iš trijų 120Ω rezistorių ir Pt100 termorezistoriaus. Dabar operacinis (čia instrumentinis) stiprintuvas gali žymiai daugiau stiprinti signalą. Testinėje schemoje gavosi kažkur nuo 6V iki 0.6V keičiant temperatūrą nuo kambario (~23℃) iki kažko karšto, bet ne verdančio. Maitinimas rodos buvo nuo 15V vienpoliario, o srovė per Pt100 ribota kažkur 10kΩ varža. (Tai tik testinė plokštė, neskirta naudoti su tikru procesorium).

Dar reikia sukonstruoti tikrą stabilizuotą maitinimo šaltinį (gal su specialia mikroschema) ir galimą viską sumontuoti gražiai. Bet tikslas tikrai nėra toks, tai tik tarpinis straipsniukas prie PID kontrolerio eksperimento.

Uher report 4000 ir 4200

Tai grynas 1966 metų produktas. Tačiau jau gryni tranzistoriai. Tai Uher Report 4000 serijos reporterių magnetofonai. Blogos būklės tokie magiukai parduodami už metalo laužo kainą, geri- artėja prie 500€. Visi magnetofonai turi vieną nemalonų defektą- greičių perjungimas ir ryšis su capstan’ų atliekamas frikcionu. O per tiek metų guma suakmenėja ir nebėra gero kontakto. O dar papildomai atsiranda visokie ūžesiai ir braškėjimai. Kiti dirželiai perkami internetuose ir lengvai keičiami.

Uher report 4200
Čia “stereo” versija. Tačiau tai ne tas stereo kur visi naudoja, o “vienpusis”, nes magiukas turi galvą tik su dviem takeliais per visą juostą.
“Rankinė greičių dėžė” dešinėje aparato iš tikro ir yra rankinė greičių dėžė, čia persijungia juostos traukimo greitis ir įsijungia motoriukas.

They had four speeds: 7½ inches per second (i.p.s. or in/s), 3¾ i.p.s., 1⅞ i.p.s., and 15/16 i.p.s. [19 cm per second (cm/s), 9.5 cm/s, 4.75 cm/s, and 2.38 cm/s].

Continue reading →

Švilpiko dienos radija

Nu gal ne visai, originale tai Panasonic RC-6025, o pas mane Sanyo Sterocast RM5320, tikriausiai 1972 metų gamybos (gali būti ir su kitu brendu, kad ir Siemens alpha). Tikrai japoniška, nes visur tik “made in Japan”, ant garsiakalbio Sanyo ir panašiai.
Sanyo sterocast
Kodėl žinau, kad yra kitu brendų? Ogi todėl, kad pirmoji radija kur pirkau buvo Siemens. Bet ji ne tik su sugadintu motoriuku (plastikinis dantratis be dantų), bet ją man dar ir stiprokai sudaužė- 70-tųjų plastikas labai trapus.
Continue reading →

UP2NV – bandom remontuoti

Nutariau kiek paremontuoti jau žinomą transyverį UP2NV. Sukonstravau kiek geresnę anteną, netgi su nauja antena pagavau kelias radijo stotis dienos metu. Pradėjau nagrinėtis kaip veikia siuntimas. Pas telegrafą ateina du valdymo laidai- “siuntimas” ir “raktas”. Siuntimas eina tiesiai į rėlę, o “raktas” eina į kelis mazgus- siuntimo modulį ir monitorinimo generatorių kuris daro “pyyp” kai sujungiami kontaktai. Netgi ir nesiuntimo režime. Tačiau jis to nedarė. Tiek to. Siuntimo režime kita radija CW režime užfiksavo ne tik siuntimą, bet kad tas CW užmoduliuotas 50/100Hz. Vadinasi vėl negyvi kondensatoriai. Dar buvo pastebėta, kad relės kai kada nesuveikia. Ko pasekoje CW duoda nuspaustą “raktą” kai jis nenuspaustas- siųstuvas spjauna pilną galią.

Pradėjau lupti modulį su monitorinimo generatorium, nes pamačiau vieną palaidą laidą. Ir iškarto supratau, kad tai ne pramoninis aparatas- remontuoti labai sunku, nes laidai per trumpi. Negalima ištraukti modulį remontui. Reikia numontuoti šoninę sienelę, kad išlituoti patį moduliuką. Dar bėda- ant laidų pynės beveik neliko numeracijos. Tai dabar bus pisliavos surenkant. Ir iškarto buvo pastebėta, kad schema PCB kažkokia supaprastinta (neatitinka literatūrai). Ir dar iškarto buvo pastebėta, kad vienas tranzistorius pramuštas kiaurai per E-C:
Rusiskas tranzistorius
Continue reading →

FM trukd… stotis

Labai labai senai rašiau apie FM generatorių. Tada dar nebuvo visokių Kinų su jų aliekspresais ir šiaip buvo kitaip. Dabar galima nusipirkti moduliukus ir padaryti tą patį kompaktiškiau ir gal geriau (bent jau taip atrodo).
Istorija tokia- buvo lempinis generatorius, poto kažkoks kastruotas stiprintuvas, poto prie lempinio prisukom kinišką stiprintuvą. O poto paprašė manęs padaryti “campus radio”. Ilgai negalvojau, ir sudėjau kiniškus modulius į vieną dėžutę:
FM moduliatorius ir stiprintuvas
Papildomai stabilizatorius (5V, 7805) moduliatoriui ir reguliuojamas (LM317) galios stiprintuvui. Metalinis korpusas, biški kondensatorių ir feritinių elementų… (grynas analogas, dėl trukdžių).

Prisipažinsiu, kiek galingesnės “radio” technikos nekonstravau. Bet šiokius tokius pagrindus turiu. Bet šis konkretus projektas kiek užkniso, pagrinde dėl kiniškų modulių ir nulio dokumentacijos. Ir aišku dėl … skaitmeninio amžiaus. Ne tik laboratorinis maitblokis, bet ir skaitmeninis multimetras pradeda durniuoti ir rodyti nesamones jei tik kiek padidini galią. Ir ten tikrai ne vatai, o vato dalys. O aš nebeatsimenu, kur turiu dar tarybini multimetrą… nežinau kiek srovės ir kiek įtampos ši dėžutė ima.
Kita bėda- fazendoje (ir kogero šiaip namuose) nėra kiek padoresnės FM radijukės. Kiniškos pigios taip pat, kaip ir skaitmeniniai multimetrai gauna insultą ir neveikia prie siuntiko. Kiek pagelbėjo senovinis sudaužytas JVC boomboxas, ten grynas analogas- tačiau arti stiprintuvo signalą pasigauna gal per penktadalį skalės.
Prie tokių trukdžių, net pats moduliatorius grybavo- nuotraukoje matosi kairėje trys juodi laidai- tai audio įėjimas. Per juos pasigaudavo gliukus- tik bandymų metodų radau poziciją kur netrukdė.

Po keletos valandų eksperimentų pradėjo “švariai” groti ir aš jau pradėjau džiaugtis- pasirodo per anksti. Matyt suknistas kiniškas moduliatorius svaidosi harmonikas į visas puses. Nėra jos tokios stiprios- aš tikrai nepagaunu mano transliacijos “kitoje vietoje” nei nustatyta, bet kažkodėl tikros radio stotys pradeda blogai groti. Per kur “muša” aš nežinau…

Nutariau kiek pristabdyti eksperimentus… kieme gražiai nulijo stiprus lietus, gražus ir gaivus oras… staiga namiškiai sako, vėjas ir lietus “nusuko” anteną- TV neveikia. ¿Qué? Ogi šis siųstuvas užmuša dar ir skaitmeninę televiziją. Nu čia tai tikrai harmonikos. Va dabar dar ir filtrą reikės konstruoti. Ir dar pertvarą tarp moduliatoriaus ir stiprintuvo.

Bandau pasigaminti vektorinį displėjų

Yra vienas porūšis displėjuose- vektoriniai. Tai labai reta egzotika, aš pats mačiau tik vieną kartą gyvai, netgi su šviesos plunksna. Tačiau neseniai sužinojau, kad buvo gaminamas buitinis žaidimų kompiuteris su vektoriniu displėju. Ir tai ne Atari Asteroids, o tikras mažas žaidimų kompiuteris su keičiamais kartridžais.
Kompiuteris vadinasi Vectrex. Deja jis kiek retesnis ir todėl stipriai brangesnis. Tačiau yra pagamintas konstruktorius- Scopetrex. Jei turi visas detales, tai PCB kainuoja kažkur 20€. Tačiau konstruktorius tai tik kompiuteriukas, o jungiasi tipo prie osciloskopo. Deja veikiančio su CRT nebeturiu, o ant skaitmeninio (bent jau mano) vaizdas tragiškas. Todėl kilo mintis pasigaminti kažką panašaus į vektorinį monitorių. Juolab, kad po kelių mėnesių laukimo į rankas papuolė du CRT “monitoriai”: vienas su žaliu ekranu, Japoniškas; o tuo tarpu kitas- tarybinio ūkio pasiekimas, monitorius БОСИ… Kodėl “BOSI”? Toks keistokas pavadinimas kaip tarybiniui produktui? Ogi nežinau. Nes visas “kompleksas” vadinosi 2Р22 (2R22), o BOSI išsišifruojasi kaip “блок отоброжения симбольной информаци” (simbolinės informacijos rodymo blokas). Kodėl ne “monitorius”? Todėl, kad priešas nesusigaudytu. Kito varianto nematau.
blokas bosi
Realiai tai CRT monitorius su keistoka skleistine- ji neturi autogeneracinio režimo. Kad veiktu skleistinė, BOSI turi gauti tikslius sinchroimpulsus. Tik tada pradeda viskas veikti ir užsižiebia monitorius.
Continue reading →