Juotosuuni - buildlog

Projektista yleisesti

Tammikuussa Helsingin labille päätettiin rakentaa juotosuuni, ehkä vähän senkin takia että allekirjoittanut on semmoisen itselleen kyhännyt joku aika sitten hyvällä menestyksellä.

Uunin toimintaperiaate

Monet kaupalliset ja käytännössä kaikki itse modatut juotosuunit toimivat infrapunasäteilyn lämpövaikutuksella. Tällaisessa uunissa ei ole mitään hyvin määriteltyä sisälämpötilaa, vaan siellä olevat kappaleet lämpiävät imemänsä säteilyn energialla suoraan. Kuinka paljon säteilyä ne imevät ja kuinka paljon heijastavat riippuu kappaleen materiaalista ja väristä vaikeasti ennustettavalla tavalla. Toki tummat kappaleet kuumenevat vaaleita nopeammin ja säteilijöitä lähimpänä olevat pinnat saavat eniten lämmitystehoa per pinta-alayksikkö.
Itse tehty uunihan kuuluu siis rakentaa infrapunalla toimivan pizza- tai voileipäuunin runkoon mikä onkin lähtökohtaisesti hyvä ajatus. Sellaisia vaan on suuri valikoima joten ei ole itsestään selvää että tarkkaan ottaen millainen uuni otetaan muokkauksen kohteeksi. Hyvin tyypillistä on lämmitysvastusten sijoittaminen 2 ylös ja 2 alas, jolloin saavutetaan oletettavasti tasaisempi lämmitys pizzaläpän molemmille pinnoille. Tämä ei kuitenkaan välttämättä ole optimaalinen sijoittelu juottamista ajatellen.
Jos lähdetään siitä, että ollaan juottamassa piirilevyn yläpinnalle ladottuja komponentteja niin alapinnan ei edes haluta kuumenevan juotoslämpöön siellä jo mahdollisesti olevien komponenttien irtoamisen välttämiseksi. Toisaalta mikäli yläpuolen lämmityselementit ovat kovin harvassa, muodostuu piirilevylle varjoalueita korkeampien komponenttien katveisiin. Tärkeää siis olisi hallita uunin eri alueiden lämpiämistä ja varmistaa tasainen lämmönjako. Vasta kun nämä “termis-mekaaniset” alkuehdot toteutuvat riittävän hyvin, voidaan paneutua lämpötilan säätämisen haasteisiin.

Vaatimuksena uunin rungolle siis oli, että siinä pitää olla mahdollisuus valmiiseen lämmönjakoon tai että se voidaan modata sopivaksi. Valmiiksi aivan nappiin osuvia runkoja ei halpisuuneista löydy, ja kalliimmissa on juotoskäytön kannalta vääriä ominaisuuksia joista on turha maksaa. Niinpä valinta päätyi simppeliin infrapuna-kiertoilmauuniin josta on mahdollisuus muokata oikein sopiva juotoskäyttöön .
Valitun uunin hyvä puoli on sisään rakennettu kiertoilmapuhallin, jolla voidaan tasata eri kohtien välisiä lämpötilaeroja ilmaa kierrättämällä. Kokemuksen perusteella alkuperäiset 2 ylävastusta yhteisteholtaan ~700W tiedettiin liian kevyiksi. Kun alavastukset kuitenkin haluttiin säilyttää esilämmitystä varten, laitoin ylös hieman muotoillun 2,2 kW saunan kiuasvastuksen. Sen sormimuoto ja 8 lämpiävää sauvaa rinnakkain takaavat tasaisen varjottoman ylälämmön ja varmasti riittävän säteilytehon.

Koska uunin sisäilman lämpötila ei suoraan indikoi oikein mitään, tehdään lämpötilan mittaus kahdella K-tyypin termoparilla juotettavien levyjen ylä- ja alapinnasta. Tähän uuniin valittiin samat komponentit joista on jo hyvää kokemusta allekirjoittaneen omassa uunissa. Pointtina se, että elementit on kokonaan metallikuorisia ja probeosa on varsin ohut mutta silti tukevan oloinen.

Myös on tärkeää että koko elementti kestää uunin lämmön paistumatta korpuksi kuten kangaspintaiset johdot tuppaavat tekemään.

Lopullisessa uunissa uunipelti ja -ritilä korvataan kevyellä lämpöä hyvin johtavalla verkkohyllyllä siten, ettei piirilevyjen alle muodostu lämpökaivoja tukirankojen kohdalle. Sellaiset saattavat estää juottumisen paikallisesti kun lämpö johtuu levyn läpi ritilän rakenteeseen.

Uunin sähköistys ja ohjaus

Alkuperäisessä uunissa toimivin ohjauskomponentti on merkkivalo. Kaikki muut säätimet ovat täysin viitteellisiä eikä niillä ole mitään roolia kunnollisessa toteutuksessa. Tavoite on ohjata uunin lämpötilaa komponenttivalmistajien julkaisemien lämmityskäyrien mukaisesti ja siihen pääsemiseksi tarvitaan kohtuullisen tarkkatoiminen sekvensoiva säätäjä. Uunin tulee kyetä seuraamaan linkin kuvauksen mukaista lämpötilakäyrää: http://www.altera.com/literature/an/an353.pdf
Lämmitys tapahtuu siis alhaalta alkuperäisillä ~700 W vastuksilla jotka osallistuvat lähinnä esilämmitykseen, ja ylhäältä 2,2kW tehovastuksella joka hoitaa varsinaisen juotoslämpöön noston. Molempia ohjataan Sharpin optisesti erotetuilla, nollapistekytkevillä puolijohdereleillä. Samanlaisella ohjataan lisäksi kiertoilmapuhallinta jotta sen puhallustehoa on mahdollista säätää sopivaksi juotossyklin eri vaiheissa. Releet ja niiden tarvitsemat apukomponentit kuten snubberit jne on sijoitettu omalle piirilevylleen uunin vapaaseen päätytilaan.
Samaan pätytilaan sijoitetaan lisäksi toinen piirilevy jolle tulee apujännitteen verkkomuuntaja ja yksinkertainen lineaariregulaattori muodostamaan +9V apujännitteen. Kyseinen apujännite syöttää sekä puolijohdereleiden ohjauspiirit että alkuperäiseen ohjauspaneelitilaan tulevan Arduino Due:n jolla ajetaan varsinainen ohjausohjelma.

Uunin käyttöliittymänä toimii Mikroelektronikan TFT-proto LCD-kosketusnäyttö jota ohjaa juurikin edellämainittu Due. Näyttö on liitetty käyttäen Duen prosessorin (Atmelin ATSAM3X8E Cortex M3) natiivia SPI-väylää DMA-tuettuna. Näin näyttö on saatu varsin nopeaksi. Pääasiallinen syy Duen valintaan on kuitenkin, ettei 8-bittisissä Unoissa ja sen sukulaisissa yksinkertaisesti riitä flash-muisti tallentamaan sekä ohjausohjelmaa että näytön vaatimia juttuja, mm. fontteja.

1 Like

Tehonohjauksen työstöä

Lämmitys ja puhallin siis ohjataan puolijohderelein. Ohessa syylliset lähikuvassa, mukaan on päässyt myös turvamies, eli 15A lämpösuoja joka pistää pelin poikki jos alkaa mennä överiksi.

Tehonohjaukselle toteutettiin piirilevy jolle releet sijoitetaan pienen jäähdytyselementin alle. Elementti puristetaan levyn juotospuolelle tulevan palkin avulla läpiruuvein. Tarvittavat eristykset tehdään silikonipadien avulla. Puolijohdereleet ovat kyllä umpimuovisessa kotelossa, mutta harmillisesti nurkissa on näkyvissä paljaat metallinököt joista on galvaaninen yhteys verkkojännitepuolelle ja vähän turhan pieni ilmaväli jäähyelementtiin. Käytetään siis eristelevyä niin ei tule murheita. Jäähdytyselementti toki maadoitetaan omalla PE-johtimella piirilevyn reunamaadoitusfolioon, jotta vältytään kaikilta ylläreiltä.

Kolmannessa kuvassa kalustettu ja “tussipainettu” piirilevy malliksi paikoillaan. Kaikki verkkojännitteiset johdot juotetaan suoraan kortille ja köytetään paikoilleen nippusitein. Itse johtimet ovat silikonieristeisiä lämmönkeston takaamiseksi, ja ne vielä lisäsuojataan lasikuitusukalla joka antaa mekaanista suojaa koska silikoni on aika pehmeää eikä kestä viiltoja.
Ohjaukset tulevat sisään vasemmasta alanurkasta 10-napaisella lattakaapelilla jossa kulkee apujännitteitä ja releiden apufettien hilaohjaukset suoraan Arduinolta. Itse apufetit oheiskompoineen näkyvät liittimen yläpuolella.
Kuvassa keskellä näkyy kiertoilmapuhaltimen moottori ja oikealla ylempänä uunitilan lamppu.
Oikealla alhaalla takaseinässä näkyy vakio-IEC verkkoliitin jolla korvattiin alkuperäinen kiinteä verkkojohto ja epäilyttävät huppuliitinkytkennät. Myös alkuperäinen PE-johtimen liitos korvattanee vähän jämäkämmällä.

Tehonohjaus-piirilevyn työstöä

Kotiverstaan miljoonalaatikosta löytyi pätkä alumiinitikkaan rankaa, josta sirkkelöimällä siivun sai oivan taustakiskon jolla jakaa jäähdytyslevyn kiinnitysruuvien painetta tasaisemmin. Siispä jäähdytyselementtiin M3 kierrereiät sopiville kohdille, eristeet väliin ja ruuvit alapalkin läpi kiinni. Alapalkki on eristetty piirilevyn kuparista käyttäen puretusta printteristä sotasaaliina saatua tukevaa eristelevyä. Se on siellä toteuttanut samaa tehtävää virtalähteen piirilevyn ja peltirungon välissä.
Kuvassa näkyy levylle juotetut päävirran jakelujohdot joilla minimoidaan kuparihäviöt levyn ohuessa foliossa.

Lämmitysvastuksille menevät johdot suojattuna lasikuitusukalla ja tökitty malliksi vastusten ja tuulettimen liittimille. Lopuksi pitää verkkosähköpiirissä ratkaista johdotuksen haaroitus liitosjohdon liitimeltä pääkytkimelle, ylikuormasuojalle ja sieltä tehonohjaukselle, apujännitelähteen muuntajalle ja uunin lampulle.

Tähän päätytilaan täytyy siis mahduttaa vielä apujännitelähteen piirilevy, pieni 60x60 mm laitetuuletin ja yllämainittu johdotuksen haaroitusliitin.

Koodinvääntöä

Lievän kamppailun jälkeen Arduinon käännösympäristö on talttunut ja LCD-näytön koodaus etenee jälleen.
Nyt on kasassa keskeiset näyttöelementit kuten buttonit, koordinaatistot ja kuvaajien piirtely. Pari perusnäkymääkin on alustavasti kasassa.
Resistiivinen kosketuskalvo on lievästi ei-triviaali luettava. Signaalissa on huomattava määrä kohinaa minkä takia se vaatii siistimistä ja kosketuksen tunnistamisessa on omat konstinsa. Netistä löytyneet valmiit kirjastot ovat olleet avuttoman ja lievästi käyttökelpoisen välimailla. Tuntuu että kirjoittelen vielä oman kunnollisen toteutuksen tuohon. NXP:llä on aiheesta asiallisen oloinen appnote johon aiheesta kiinnostuneiden kannattaa hyvinkin tutustua: http://www.nxp.com/documents/application_note/AN10675.pdf
Pari piirilevyäkin pitää vielä syövytellä; helppo powerikortti ja hiukan hankalampi sovitin näytön ja Arduinon väliin. Jälkimmäiselle tulee siis vielä lämpömuuntimet ja ledien + piipparin ohjaus, luukun avausilmaisin ja tehojen ohjauslähdöt. Niistä lisää pikapuoliin.

LCD-näytön protoilua

Aikansa kesti mutta lopulta valkeni miten resistiivinen kosketuskalvo luetaan oikein. Idea on siis, että ensin havaitaan kosketus ja heti sen jälkeen luetaan ensin kosketuksen X-koordinaatti ja perään Y-koordinaatti. Nämä kumpikin omalla A/D-kanavallaan.
Ennenkuin tuohon päästään, pitää kuitenkin havaita kosketuksen tapahtuneen. Muuten koordinaatin luku tuottaa puuta heinää. A/D-kanavien lisäksi kosketuskalvoihin on kytketty vielä tavallinen GPIO-pinni kumpaankin. Kosketusmittauksessa A/D-kanavienkin pinnejä ajetaan normaalissa I/O-moodissa digitaalisina. Päällekkäisistä X- ja Y-kalvoista toiseen kalvoon kytketyt GPIO-signaalit konfataan lähdöiksi ja ohjataan aktiivisesti maihin. Toisen kalvon I/O-pinnit konfataan tuloiksi ja yhteen aktivoidaan sisäinen ylösveto eli pull-up. Näin pinni syöttää heikkoa jännitettä kosketuskalvolle. Nyt kosketus yhdistää kalvot jolloin heikko ylösveto maadoittuu toisen kalvon kautta ja signaali menee LOW-tilaan kun se alussa oli HIGH.
Heti kun kosketus on havaittu, konfataan pinnit lennossa uudelleen koordinaattien lukua varten. Kun koordinatit on luettu siirrytään takaisin kosketusmoodiin ja odotetaan, että kosketus päättyy. Näin vältetään sama ilmiö kuin kytkinvärähtelyssä, eli ettei saada “kosketuksia” ryöppynä kun haluttaisi vain yksi.

Ohessa muutama kuva protonäytöistä. Mikään näistä ei ole lopullinen ja kaikenlaiset kommentit ovat tervetulleita. Näyttö on muuten luonnossa huomattavasti paremman näköinen kuin näissä kuvissa. Kuvissa esiintyvää raitaisuutta ei luonnossa näy lainkaan ja värit ovat paljon paremmat.

Alotusnäytön hahmottelua. Tähän pitää lisätä vielä ainakin aktiivisena oleva profiili jotta tiedetään mitä lähdetään ajamaan START-napista.

Profiilin valintanäyttö. Uunissa tulee olemaan kiinteät profiilit lyijylliselle ja RoHS-tinalle. RoHSeja nyt on lukuisia, mutta laitetaan joku käyttökelpoinen profiili kiinteäksi tähän. Loppu näyttö on varattu käyttäjien omille profiileille, joita voi ohjelmoida Ardun flash-muistiin riitävän monta. Tallennettujen profiilien käsittely on vielä aloittamatta.

Tämä on yleinen parametrin syöttöruutu jolla tuupataan sisään kaikki säädettävät numeeriset arvot. “Caption” kertoo parametrin nimen ja sen alla on muokkauskenttä johon numeronäppäimillä syötetään arvo. Loput napit toimii juuri kuten kuvittelisikin.

Juotossyklin aikana näyttö piirtää kuvaajaa eikä uuni suostu tekemään mitään muuta. Kuvaajassa näkyy ohjearvokäyrä ja oloarvo sen mukaan kun aika etenee. Mahdollisesti kuvaajaan laitetaan mukaan säätäjän tiloja kuvaavia palkkeja tms. Niitä varten on oikeassa laidassa 0-100% suhteellinen asteikko.

Uunin sähköistys

Sähköistyskin etenee vääjäämättä. Nyt on tehopuolen piirilevyt tehty, johdotus viimeisiä detaljeja vaille valmis ja laite kytketty koeluontoisesti verkkoon ensimmäistä kertaa.

Tässä +9V apujännitelähde josta syöttönsä saa Arduino, ohjauspaneelin merkkiledit sekä puolijohdereleiden ohjauspiirit. Toision stabiloimattomasta raakajännitteestä syötetään myös sähkötilaan sijoitettava tuuletin.

Köyhän miehen “conformal coating” eli kuumaliimaa verkkojännitteisten kiskojen päälle. Ei tämä mikään virallinen menetelmä ole, mutta toimii kyllä hyvin ja on ylimääräinen varmistus.

Sitten vielä piirilevylakka suojaamaan korroosiolta ja satunnaisilta kosketuksilta.

Uunin alkuperäinen takanurkka oli sen verran reikäinen että päätin tehdä kokonaan uuden asennuslevyn verkkoliitintä ja lämpösuojaa varten. Kuvassa levy valmiina rasvanpoistoon ja maalaukseen.

Verkkoliitin johdot juotettuna ja sukitettuna, valmiina kiinniruuvaukseen. Olisi tuon voinut popniitatakin paikalleen, mutta ruuvit saa helpommin auki jos tulee tarvetta.

Apujännitelähteen mallailua paikalleen verkkoliitännän kaveriksi.

Kun sähköistys oli valmiiksi johdotettu niin mittasin laitteen eristysvastuksen virrallisista piireistä runkoon. 1 kV mittausjännitteellä saatiin putkivastuksille varsin tyypillinen 2,3 Mohm. Kaapeloinnin vastus on tietenkin ääretön, mutta nuo putkivastukset johtavat aina sen verran, että eristysvastusmittari sen näkee. Tältä osin kuitenkin kaikki kunnossa.

Ja sitten jännä kokeilla, mitä tapahtuu kun laitetaan sähköt päälle. No tässä vaiheessa ei vielä mitään, uunin lamppu vain syttyi merkiksi siitä, että kyllä siellä sähköä on. Mikä tärkeintä, puolijohdereleet toimivat kuten pitääkin, eli siis eivät vielä päästä mitään läpi.

Nyt harjoitus jatkuu koodauspuolella näytön loppuunsaattamisessa ja sen jälkeen alkaa säätäjän ja sekvenserin koodaus.
Elektroniikkapuolella siirrytään miettimään välipiirilevyä joka yhdistää näytön, Arduinon, releet ja termoparit ynnä muut kilkkeet. Niistä lisää pikapuoliin.

3 Likes

Skeduloinnista

Uuni on tyypillinen esimerkki sovelluksesta jossa tapahtuu asioita toisiinsa nähden asynkronisesti.
Menemättä sen syvemmälle kysymykseen koska (pseudo)rinnakkaisten toimintojen järkevä hallinta vaatii skeduleria, sellainen on nyt uuniin otettu käyttöön.
Tapetilla oli useitakin hyväksi todettuja tai tiedettyjä vaihtoehtoja.
Riot OS on uudempaa sarjaa, ChibiOS ja FreeRTOS jo jonkin aikaa maailmalla käytössä olleita, etenkin viimeksimainittu.
Lähinnä siitä syystä, että allekirjoittaneella on vankin kokemus FreeRTOS:in käytöstä, ja koska sille on valmis porttaus Arduino Dueen, valitsin sen alustaksi.
Varsin minimaalisen testailun ja debuggauksen jälkeen yksinkertainen neljän taskin testisysteemi lähti pyörimään. Yksi taskeista pyöritti tähän mennessä toteutettua käyttöliittymää ongelmattomasti. Sen lisäksi yksi taskeista oli vielä sidottu skedulerin kellotickiin jolloin se ajetiin keskeytyskontekstissa, ja pystyi sieltä hienosti kommunikoimaan sarjaliikennetaskille samoin kuin neljäs skedulerin normaalikontekstisa ajettava taski.
Iso ongelma on että läheskään kaikki Arduinon vakiokoodi ei ole vapaakäyntistä, mutta serialisoimalla asioita omiin taskeihinsa ongelman voi pitkälti kiertää. Kuten tässä testissä sarjaportin jatkuvan ylikuormalla tapahtuvan lähetyksen joka toimi toista vuorokautta putkeen ilman yhtään virhettä. Todisti siis, että skedulerin sanomajonojen vuonohjauskin toimi hienosti.

Vahtikoira

Jottei softassa mahdollisesti (väistämättä?) esiintyvä bugi aiheuta uunin jumiutumista täydelle teholle ja sitä kautta labin muuttumista hiilitabletiksi, on syytä rakentaa ohjaukseen riittävän uskottavia fail-safe -mekanismeja. Tällä hetkellä ajatuksena on hyödyntää prosessorin sisäänrakennettua vahtikoiraa sekä lisäksi vielä cnc-ohjaussysteemeissä joskus käytettyä varauspumpputekniikkaa.
Vahtikoira on siis piiri jossa on täysin ohjelman toiminnasta riippumaton ajastin. Kerran enabloituna ajastin on määrävälein kuitattava tietyllä operaatiosekvenssillä jotta voidaan uskottavasti katsoa ohjelman olevan järjissään. Paremmissa vahtikoirissa on vielä määriteltävissä ikkuna jonka puitteissa kuittaus pitää suorittaa. eli ei liian tiheään eikä liian harvoin. Mikäli kuitti ei osu ikkunaan, vahtikoira haukahtaa ja resetoi prosessorin.
Lisävarmistusta saadaan käyttämällä varauspumppua jolla enabloidaan lämmitysvastusten ohjaussignaalit.
Tällaisessa tarkoituksessa toteutetaan lievästi “vuotava” pumppupiiri, jonka lähtöjännite nousee pumpattaessa mutta jos pumppaus katkeaa niin jännite putoaa nopeasti alas purkuvastuksen kuormittamana. Jännitettä käytetään ohjaamaan esim. fetin avulla signalointijännite niille lähdöille joita pumpulla halutaan kontrolloida. Kun pumppusignaali nyt muodostetaan esim skedulerin kellokeskeytyksessä vaihtamalla pumppulähdön tilaa joka ajokerralla, niin ohjelman jumiutuessa pumppaus lakkaa ja lähdöt kytkeytyvät passiiviseen tilaan. Pumppaussignaali voidaan toki kytkeä johonkin muuhunkin jaksollisesti ajettavaan koodinpätkään.

Ohjauspiirilevyn hahmottelua

Tässä eilisillan satoa näytön ja Arduino Duen väliin tulevan sovitinpiirilevyn osalta.

Oranssi layeri on Kilpurin avustuksella 3D-tulostettu LCD-näytön kehys joka istutetaan uunin alkuperäiseen ohjauspaneeliin (ei näy tässä kuvassa).
Tarkkaavainen katsoja erottaa Ardukortin hahmon keskeltä kuvaa ympäri käännettynä peilikuvana. Tarkoitus on kiinnittää ardu piikkirimoihin jotka vastaavat sillä olevia naarasrimoja.

Viikonlopun aikana varmasti selviää komponenttien layout joka on lievästi haastava leveiden piikkirimojen ja vaakasuoran ahtauden takia. Mutta mahtuu kyllä kun laitetaan mahtumaan.

Turvatekniikan suunnittelua ja simulointia

Jottei softan kaatuminen tai joku muu lämmitysvastusten järkevän ohjauksen nujertava bugi siis aiheuttaisi kuumennuksen jumiutumista päälle, uuniin kyhätään turvajuttuja. Tämän postauksen aiheena on varauspumppu, sekä piirin toimintaperiaate yleisesti, että sitten alustava simulointi. Hyvä työnkulkuhan on sellainen, että ensin kehitetään loistava idea josta hahmotellaan piirikaavio. Kun mikään ei tietenkään takaa että piiri toimisi, niin se simuloidaan. Sitten kun simuloinnin tulos näyttää lupaavalta on aika nysvätä kasaan jonkinlainen koekytkentä, joka uskottavasti edustaa lopullista piiriä. Vasta kun tämä protokin toimii on suhteellisen turvallista sitoutua piiriin lopullisessa toteutuksessa.

Varauspumppu on yleisnimitys sellaiselle piirille, joka tuottaa pumppaussignaalista jännitettä välivarastoimalla energiaa jossain, yleensä kondensaattorissa. Tyypillisesti pumppuja käytetään nostamaan lähtöjännite korkeammaksi kuin tulojännite käyttämättä muuntajia tms jotka olisivat hankalia ja tilaavieviä. joissain tapauksissa.
Tämänkertaisessa toteutuksessa ei ole tarvetta tällaiseen jännitteenkorotukseen. Sen sijaan pumpun lähtöjännitteen halutaan seuraavan itse pumpaustapahtumaa niin, että jännite häviää jos pumppaus loppuu. Kun pumppaussignaali tuotetaan ohjelmallisesti, lähtöjännitteen olemassaolo ilmaisee, että softa tekee suunnilleen sitä mitä pitääkin.

Pumppupiiri

Oheinen piirikaavio on Multisim SPICE-simulaattorin piirikaavio. Myös LTSPICE4 olisi toiminut tässä, mutta Multisimin kuvat ovat ehkä tähän vähän havainnollisempia. Vihreän katkoviivalaatikon sisällä on varsinainen pumppu jonka signaleja tutkitaan virtuaaliskoopilla XSC1. Johtimien värit vastaavat skoopin trace-värejä. Signaali tuotetaan pulssigeneraattorilla V1, joka on asetettu tuottamaan 0 - 3,3V jännitepulsseja 2 ms jaksonajalla ja 1 ms pulssiajalla, eli 50% kanttiaaltoa 500 Hz taajuudella. Tämä vastaa tilannetta, missä Arduinon RTOS-skedulerin kello tikittää 1 kHz taajuudella ja sen apurutiinissa vaihdetaan pumppulähdön tilaa joka kierroksella. Varsinaisena pumppukondensaattorina toimii C2, jonka varausta "työnnetään" V1:n pulssin aikana diodin D1 läpi konkkaan C1. Vastus R3 mallintaa Ardun pinnin lähdeimpedanssia. Kun V1 menee nollaan, uusi varaus "vedetään" C1:een maista diodin D2 läpi. Diodit siis ohjaavat varausten kulkua haluttuja reittejä pitkin. Toistuvilla V1:n jaksoilla C2 pumppaa varaustaan C1:een, jolloin C1:n jännite kasvaa kohti pulssigeneraattorin pulssijännitettä. Konkan C1 rinnalle on kuitenkin kytketty purkuvastus R1 jonka ansiosta C1:n jännite "vuotaa" koko ajan - sitä nopeammin mitä korkeampi jännite on. Kun V1 on pulssittanut pumppupiiriä jonkin aikaa, systeemi saavuttaa jatkuvuustilan jossa konkan C1 navassa näkyy pieni rippeli mutta jännitetaso pysyy muuten vakiona. N-kanavafetin Q1 hila on kytketty C1:n kanssa samaan piirin solmuun. Kun C1:n jännite kasvaa yli fetin kynnysjännitteen VGSth, alkaa fetti johtaa ja sen nielujännite rupeaa laskenmaan. Mikäli C1:n jännite jatkaa nousemistaan niin ennen pitkkä Q1 ajautuu kyllästystilaan jolloin sen johtokanava on täysin auki ja se käytännössä maadoittaa nielulla olevan kuormansa. Tässä piirissä fetin Q1 kuormana on 1M vastus R2 ja fetin Q2 hila. Niistä kohta lisää, mutta sitä ennen eräs huomio: Transistorin kollektori/nieluvirta on vahvistuskertoimen ja kanta/hilasignaalin funktio. Kun kannan/hilan kynnysvirta tai -jännite ylitetään, transistori alkaa johtaa, mutta se ei kykene johtamaan kuinka tahansa isoa virtaa. Pääkanava vasta alkaa aueta kynnyksen kohdalla. Tutkitaanpa siis valitun fetin datalehteä vähän tarkemmin. Q1 on suosittua tyyppiä 2N7002F ja perinteikkään valmistajan NXP:n datalehdeltä löydämme tällaisen käyrän: Kuvaaja on fet-transistorin transkonduktanssi. Käyrä esittää nieluvirran suurinta mahdollista arvoa hilajännitteen funktiona kahdessa eri lämpötilassa. Käyrästä nähdään, että 25C lämpötilasa kynnysjännite on noin 2,5 V ja 3V hilajänniteeellä nieluvirta voi olla enintään n. 60-70 mA. Transistori siis ei kestä paljoakaan kuormaa näin pienellä ohjauksella jos sen halutaan toimivan kytkimenä ja menevän kyllästystilaan. Saman vahvistaa datalehdeltä löytyvä numeerinen luonnehdinta: Kynnysjännitteen VGS(th) tyypillinen arvo on 2 V ja datalehti lupaa, että jokainen yksilö johtaa kun hilajännite saavuttaa 2,5 V. Kun Arduino Due signaloi 3,3 V tasoilla ja tiedossa on, että vuotava pumppu ei saavuta pumppaussignaalin maksimitasoa, on varmistettava että valitun fetin kynnysjännite todella käytännössä saavutetaan luotettavasti. Muuten ei tapahdu mitään. Oletetaan että pumppaus onnistuu ja fetti Q1 alkaa johtaa. Tällöin se vetää vastuksen R2 alapään lähes maihin ja samalla fetin Q2 hilajännite seuraa perässä. Q2 on P-kanavafetti mikä tarkoittaa, että sen lähde on kytketty syöttöjännitteeseen ja lähteeseen referoidut hilajännitteet ovat siis negatiivisia. Kun hila vedetään maihin Q2 menee johtavaksi ja kuorma R4 saa jännitettä. Tämä on koko pumppupiirin tarkoitus. Lopullisessa piirissä kuormalle R4 tuleva jännite on lämmitysvastusten ohjauspiirien enable-jännite jota ilman vastusten ohjauspiirit eivät saa mitään aikaan. Jos siis pumppaus ei toimi niin vastuksetkaan eivät voi mennä päälle.

Simulaatio

Käynnistys

Piirin simulaatio suoritetaan aika-avaruudessa yksinkertaisena virtuaaliskooppimittauksena. Softabugia simuloidaan kytkimellä J1 joka voidaan avata simulaation aikana siten mallintaen pumppauksen häiriintymistä. Aluksi käyntiinlähtö kytkin suljettuna: **Virtuaaliskooppi XSC1:** timebase: 5 ms / div tracet: A pu: Ardun pinnin virta 10 mA / div B ke: pumppaussignaali 2 V / div C vi: pumppukonkan välijännite 2 V / div D si: varauspumpun lähtöjännite 2 V / div

Tracesta nähdään, että pumpun lähtöjännite (D) saavuttaa arvon n. 2,635 V alle 100 ms pumppauksen jälkeen minkä jälkeen lähtö pysyy suunnilleen siinä.

Virtuaaliskooppi XSC2:

timebase: 5 ms / div
tracet:
A si: Q1 nielujännite 5 V / div
B ke: Q2 nielujännite 5 V / div
C vi: pumppukonkan välijännite 2 V / div (sama kuin skoopilla XSC1)

Tracesta nähdään, että varsin tarkkaan ajanhetkellä 20 ms pumppauksen aloittamisesta transistorin Q1 kynnysjännite ylittyy ja se alkaa johtaa. Koska kuorma on niin suuriohminen ( 1M ) putoaa jännite saman tien lähelle maatasoa. (Näin ei kävisi jos kuorma olisi raskaampi). Transistorin Q2 hila näkee saman jännitteen joten Q2 menee myös välittömästi johtavaksi, ja tämä transistori menee nyt varmasti kyllästystilaan asti ja kestää kuormaa sen minkä koko komponentti ylipäänsä jaksaa.
Ajassa 20 ms siis varauspumpun enable-signaali kääntyy päälle.

Katkaisu

Tarkoitus on siis, että jos pumppaaminen katkeaa, niin enable-signaali poistuu ilman turhia viiveitä ja luotettavasti. Sitä simuloidaan ajamalla piiri ensin jatkuvuustilaan ja sitten avaamalla kytkin J1. **Virtuaaliskooppi XSC1:** timebase: **50 ms** / div

Virtuaaliskooppi XSC2:

timebase: 50 ms / div

Skoopin XSC1 trace D (si) näyttää kuinka pumpun konkan C1 jännite alkaa purkaantumaan vastuksen R1 kautta kun pumppaus loppuu. Skoopin time-markkeri T1 (si) on asetettu tähän kohtaan moilemmissa skoopeissa. Hetkellä T2 (ke) transistorit Q1 ja Q2 palaavat alkuarvoihinsa eli enable-signaali poistuu. Skoopista voidaan lukea aikaerotus T2-T1 = 91,924 ms eli enable-signaali katoaa alle 100 ms kuluttua pumppauksen häiriintymisestä.
Skoopin XSC1 tracesta D(si) voidaan myös nähdä, että Q1:n hilajännite oli varsin tarkkaan 2V kun se meni johtamattomaksi. Tämä on datalehden ilmoittama paras arvo, joten piirin toiminta on kyllä syytä varmistaa vielä prototyypin ja oikeiden komponenttien avulla. Siitä lisää lähiaikoina kunhan on keritty vähän protoilemaan.

Varauspumpun proto

SOT23-koteloiset piirit on hankalia protoiltavia. Kyllähän niitä voisi kolvata á la dead bug, mutta kun tässä protossa ainoa oikeasti kriittinen on fetin kynnysjännite, niin käytinpä pintaliitoskompojen jalallisia serkkuja joilla on aavistuksen korkeammat kynnysarvot. Tarkoittaa siis, että jos näillä toimii niin sitten toimii niillä “oikeillakin”.
Niinpä käytin 2N7002F:n sijalla BS170 joka on kelpo ja helppo TO92 kotelo moneen tarkoitukseen. P-fettejä oli hyllyssä vähän harvempi valikoima, joten pikkuisen IRLML5103:n tilalle oli pakko ottaa järeä TO-220 koteloinen IRF9540 joka nyt oikeasti on jo selkeä voimafetti, mutta eipä haittaa. Jännitettä senkin hila tottelee.
Risukytkennästä tuli tämän näköinen:

Käyttöjännite piirille oli +9V ja pumppusignaali suoraan geniksestä 3,3V pulssi 500 Hz 50% pulssisuhteella.

Ilman signaalia Q1 nielu nousi lähelle käyttöjännitettä - 8,19 volttiin. (volttimittari vähän kuormitti megan ylösvetoa). Tämä tarkoittaa, että P-fetille Q2 jää hilajännitettä 8,19 - 9V = -0,79 V mikä on ihan turvallinen arvo - sillä Q2 ei ala johtamaan vielä eikä ole lähelläkään.

Pumppusignaalin ollessa aktiivinen Q1 nielu putosi hyvin lähelle maatasoa joten homma pelaa kuten oli tarkoitus

Tässä skoopilla katsottuna pumpun käynnistys

timebase 5 ms / div
Ch1 ke: pumppusignaali 1 V / div
Ch2 si: enable 2 V / div
Enable siis aktivoituu noin 12 ms pumppauksen käynnistymisestä.

ja pumpun pysäytys

timebase 20 ms / div
Ch1 ke: pumppusignaali 1 V / div
Ch2 si: enable 2 V / div
Enable poistuu noin 200 ms kuluttua pumppauksen pysähtymisestä.

Näillä näkymillä piiri toimii tarkoitetulla tavalla, joten tämmöinen piiretään uunin ohjauskortille.
Ardun pitää muodostaa kuumennusvastusten ohjaus käyttäen enable-signaalia osana signaaliketjua. Enable ei siis saa kiertää ohjelmallisesti, vaan elektroniikan on ohjauduttava sen mukaan. Tämä mutkistaa signalointia hiukan. Siitä lisää seuraavassa postauksessa.

Varauspumpun fetin varmistelumittaus

Varmuuden välttämiseksi tässä vielä tuloksia varauspumpun varsinaisen Q1 fetin eli 2N7002F;n johtokäyristä hilajännitteen funktiona. Mittaus on tehty pienellä Peak Techin transistorianalysaattorilla joka kytkeytyy sitä tukevaan PC-sovellukseen. Oheisessa kuvassa jälkimmäisen näkymä.

Kuvasta nähdään, että fetti johtaa muutamia satoja mikroampeereita jo 1,8 V hilajännitteellä, joten kun pumppupiiri tuottaa selvästi yli 2 V, ollaan varmalla pohjalla.
Tiistaina koetetaan syövyttää ohjauspaneelin pohjapiirilevy johon LCD-näyttö ja Ardu kiinnittyvät.

Ohjauspaneelin sovitinkortin työstöä

Viime tiistaina taas syövyteltiin ja tuloksena syntyi uunin ohjauspaneelin sisään tuleva sovitinkortti. Tälle kortille siis ripustetaan paitsi ohjauksen hoitava Arduino Due, myös termoparien mittauspiirit, indikaattoriledit ja piippari sekä lattakaapeliliitännät tehonohjaukseen ja LCD-näytölle.

Tässä piirilevyn nimellinen yläpuoli

Kortin reunoilla näkyvät juotostäppärivit vastaavat naama alaspäin käännetyn Arduinon naarasrimoja. Laiskana en huolinut kalustaa kaikkia, vaan ainoastaan tarvittavat piikit mistä syystä rimat ovat tuollaisia harvahampaisia. Täytyy siis olla tarkkana ardun kohdistuksen kanssa. Keskialueella näkyvä 6-reikäinen naarasrimaliitin on tarkoitettu Duen ARM-prosessorin suoraa ohjelmointiliitintä vastaan. Sitä kautta saa ulos rautatuetun SPI-väylän jota voi siis ajaa DMA-moodissa jolloin se on nopea eikä häiritse muuta ohjelmaa. Nopeus on kipeästi tarpeen näytön ohjaukselle, ettei se ole epämiellyttävän verkkainen / pätki ikävästi.
Tarkkasilmäinen lukija huomaa valossa kiiltävällä alueella lievää kupruilua. Labin varastossa olevat esipinnoitetut levyaihiot eivät ole FR4:ää eli lasikuitua, vaan jotain vaatimattomampaa matskua, ilmeisesti pertinaxia. Sepä ei oikein tykkääkään juotosuunin lämmöstä vaan alkaa pullistelemaan. Tässä tuo nyt ei mitään haittaa, mutta mihinkään oikeasti tarkkaan paikkaan tuollainen ei käy. Siihen pitää jatkossa kiinnittää vähän huomiota.
Vasemman reunan riviliittimestä tuodaan sisään termoparien johdot, ja 10-piikkinen rima vie ohjaukset lattakaapelilla tehokortille. Sieltä tulee samaa lattaa pitkin +9V esistabiloitu syöttö tänne päin.

Piirilevyn nimellinen alapuoli

Kuvasssa näkyvät SOIC-8 piirit ovat Maximin MAX31855KASA+ K-termoparimittareita. Niissä on automaattinen kylmän pään kompensointi mikä tekee käyttämisen helpoksi, etenkin kun yhteys mikroprosessoriin tapahtuu SPI-väylällä hyvin simppelin protokollan avulla.
Näille piireille menevä SPI tehdään ihan ohjelmallisesti bit bangaamalla eikä sotketa sitä millään tavalla näytön ohjaukseen.
Rimaliittimen yläpuolella pinseteistä vasempaan on varauspumppu ja sen perässä pienillä feteillä toteutettu signaalitasojen muokkaus tehonohjausta varten.

Tämmöisiin kotikutoisiin 2-puoleisiin kortteihin on käytännössä toivotonta saada läpikuparoituja reikiä millään inhimillisellä prosessilla. Niinpä ne ovat siis kuparoimattomia. Se aiheuttaa, että kiskojen pitää tulla juotostäppin niin, että niihin pääsee kolvilla käsiksi kun komponentti on ladottu. Tarkoittaa käytännössä, että vedot lähtevät täpästä kortin vastakkaisella puolella. Tässä levyssä se onnistui kaikkialla muualla paitsi piipparin kohdalla. Halusin että piippari kiljuu eteenpäin jolloin se päätyy olemaan pintakompojen kanssa samalla puolella. Nyt sen ohjauskiskot siis jäävät piipparin rungon alle eikä sitä voi juottaa toimivaksi paikalleen. Ratkaisu näkyy tässä kuvassa: porataan kompon jalkojen reiät 0,1 mm ylikokoon ja holkitetaan reitä tähän tarkoitukseen tehdyillä kupariholkkiniiteillä. Niitit näkyvät paikallaan pinsettien kärkien kohdalla. Holkit ovat hiukan ylipitkiä ja mikäli käytettäisi niille tarkoitettua (sikahintaista) prässiä, ylimääräinen putki muodostaisi toiselle puolelle nätin kauluksen ja homma olisi valmis. No, minä en muutenkaan luota puristusliitokseen tässä joten kiinnitän holkit ensin komponentin puolelta varovasti juottamalla, jottei reikä mene umpeen.

Ja siinä piippari sekä ohjauspaneelin indikaattoriledit paikallaan.

Mallailua josko kaikki menee mekaanisesti paikoilleen ja osuu kohdilleen…

Levy tuntuu istuvan kivasti sille tehtyihin loveuksiin alkuperäisessä kehyksessä.

Näytön lattakaapelirimakin osuu aika uskottavasti kohdilleen. Eiköhän tuohon jotenkin saa sullottua 90 asteen käännöksen näyttömodulin rimaan…

Lopuksi ennenkuin aletaan kiinnittelemään ardua, vielä pikainen testi josko varauspumppu mahtaisi oikeasti toimia. Sitä varten tuodaan labrapowerista +9V liittimen piikkiin ja ardun pumppauslähtöön simuloitu 3,3 V 500 Hz/50% digitaalilähtösignaali.

Jess. Pumpun indikaattoriledi syttyy iloisesti, (ja sammuu kun pumppaus lopetetaan), joten homma taas tältä osin hanskassa.
Seuraavaksi tsekataan vielä ettei syöttöjännitteitä karkaile vääriin paikkoihin ja sitten ardu kiinni ja kohti seuraavia haasteita.

1 Like

The Todellisuus strikes back

Kaikki näyttikin jo menevän jopa liiankin hyvin. No, Ardua kiinni ja jatkamaan voittokulkua. Mutta ei.

  1. Näyttö on täysin mykkä kun se kytketään lopullisella lattakaapelilla
  2. Pumppuledi ei syty
  3. Tilaindikaattoriledit sen sijaan syttyy (tai ainakin kiiluu) vaikka ei ole ohjausta.
  4. Piippari kiljuu vimmalla vaikka ei ole ohjausta

Koska kohta 4 oli kaikkein sietämättömin, niin aloitin fiksaamalla sen. Sudenkuoppa johon taas kerran langettiin on FETin hilan jättäminen ilmaan roikkumaan kun ei ole ohjausta. Arduhan kyllä vetää lähdöllään ohjauksen aktiivisesti maihin, mutta vain jos se on käynnissä ja toimii oikein. Muulloin lähtö heiluu jossain maan ja taivaan välillä ja FET voi tehdä mitä sattuu. Siispä pieni 10k pintaliitosvastus hilakiskosta maihin ja homma oli korjattu.

Hämmentävästi sama keino ei auttanut tilaledien kohdalla. Vaikka hilat on maadoitettu niin ledit kiiluvat silti havaittavasti, itse asiassa jopa varsin selvästi. FETin (2N7002F) vuotovirta pitäisi olla niin pieni ettei havaittavaa valoilmiötä synny, mutta syntyypä vaan. Kun ei tuolla ole suoraa vaikutusta toimintaan niin jätetään myöhemmäksi.

Mutta sitten ihmettelemään miksi näyttö ei toimi. Aiemmassa risukytkennässä taustavalon syöttö oli otettu suoraan käyttösähköstä, vaikka lopullisessa kytkennässä se on Ardun ohjauksessa. Yllättäen ohjaus ei kytkenytkään taustavaloa päälle mikä oli hieman huolestuttavaa.

Moka!

Ardu istutetaan sovitinkortille naama alaspäin. Tällöin kaikki liittimet tietenkin näyttäytyvät sovittimella originaalien peilikuvina. Näytölle menevät signaalit kootaan 40-pinniseen lattakaapeliliittimeen, joka on tietenkin eri puolella sovitinta kuin Ardu, eihän se muuten mahdu. Joten se näkyy Ardun puolelta katsottuna peilikuvana. No, ei se mitään, piirilevyn layout-ohjelma (tässä tapauksessa DipTrace) kyllä hoitaa että signaalit löytävät oikean nastan. Niinkuin löytävätkin. Mutta tuossa peilikuvan peilikuvan pyörityksessä pääsi lipeämään kokonaan mielestä, että myös se kirottu LCD-näytön 40-pinninen rima on peilikuva. Sehän kolvataan näyttömodulin takapuolelle ja numerointi on katsottu etupuolelta. Joten yksi peilikääntö jäi matkalta pois ja niinpä jokainen signaali oli parittain ristissä! Kannattaako yrittää kolvata näytön liitin etupuolelta? Ei, koska ei ole mitään mahkuja että se sopii enää kehykseensä silloin. Kannattaako yrittää kääntää sovitinkortilla liitin jotenkin? Ei, koska se on aivan kuolleena syntynyt ajatus jo mekaanisestikin. Ainoa elinkelpoinen vaihtoehto siis on nysvätä lattakaapeli auki 20 erilliseksi pariksi ja kääntää jokainen näin muodostunut pari ympäri. Tuollaiset irtoparit ei todellakaan halua asettua kauniisti liittimen haarukoihin, joten ensin ne piti teipata tukevasti muotoon, sitten jigata koko mysteeri liittimineen pieneen ruustukkiin ja pinsetti + suurennuslasihommana rihdata jokainen pari kohdalleen samalla kiristäen ruustukkia hiljalleen niin, että parit ei karkaa. Lopulta kun näyttää että kaikki on kohdillaan, kiristetään liitiin nippuun.

No, se onnistui mutta en voi suositella. Tyhmästä päästä kärsi taas koko ruumis. Pääasia että tämän jälkeen kaapeli toimii hienosti ja päästään taas eteenpäin.

Miksei pumppuledi nyt syty vaikka signaaligeneraattorilla testatessa toimi hienosti? Tsekkaus skoopilla näytti kummallisia jännitetasoja - kanttiaaltoa välillä n. 1,8 V - 2,5 V mikä ei a) näytä hyvältä eikä b) välttämättä riitä liipaisemaan varauspumppua. Ehkei ollut paras valinta ottaa pumppaussignaalia digitaalilähdöstä 13 joka siis on samalla se Ardulla olevan ledin lähtö. En jaksanut alkaa tuon kanssa, joten muutin kylmästi lisälangalla signaalin tulemaan lähdöstä 14 joka oli joutilas. Ja niinhän homma alkoi pelittää saman tien. Case closed.

Kuvassa näkyy lisätty hyppylanka ja kortin alta punainen kiilu pumpun indikaattoriledistä.

Nyt ollaan siinä vaiheessa että pikaisella hihasta vedetyllä koodinpätkällä termoparimittapiirit ei sano mitään SPI-väylällä. Siirrytään debuggaamaan sitä illemmalla ja palataan asiaan.

Pikatsekkaus SPI-väylästä

No kyllähän tuolla eloa on

Nyt pitää vaan kalibroida kellotus ja datan sisäänluku oikeisiin vaiheisiin ja tarkistaa miten chip selectin aktivoiminen vaikuttaa - joskus se tuntuu toimivan ekana kellopulssina.
Tuossa kuvassakin olisi kivempi jos ylin sana olisi 0x7fff eikä 0x3fff. Samoin kun termopari on irti niin datasanoman alin bitti pitäisi olla 1 eikä 0. taidanpa käydä vähän säätämässä skoopin dekoodausta josko kellon vaihe vaan olisi väärin päin tms. Mutta kyllä tämä tästä - ainakin tuossa alemman sanan puolivälissä oleva kompensointilämpölukema, ts. piirin sisäinen lämpötila, muuttelee kivasti kun laittaa sormen piirin päälle. Eli se ainakin reagoi ihan uskottavasti.

Salamapäivitys

Kellon vaiheenkääntö dekooderissa tuotti toivotun tulkkaustuloksen, eli tämän mukainen toiminta viritetään nyt myös ohjaimen koodiin. Aika lähellä sen kyllä pitäisi ollakin mutta jotain pientä viilaamista ehkä tarvitaan.
Jälkimmäisessä kuvassa muuten näkyy selvästi kuinka kompensointilämpölukema on muuttunut tracejen välillä.

SPI-linja toimii nyt hienosti ja käytännössä täysin virheettömästi. Kuten on tietenkin tarkoituskin.
Alustavat mittaukset termopari kiinnitettynä antavat nyt lupaavia tuloksia. Lämpötilalukemat vaikuttavat ilahduttavan stabiileilta ja tuon Maximin piirin sanomarakenne on helppo tulkita järkeviksi lukemiksi. Katsotaan tarvitseeko tähän laittaa ollenkaan suotoa vai pärjätäänkö ihan raakalla mittasignaalilla sellaisenaan. Toki piirilevyllä on 100 nF konkka termoparin johtojen välissä mikä vähän rauhoittaa mittauslukemia.Hyvä juttu silti.
Mittapiirin vianilmaisukin näyttää alustavasti toimivan; vikakoodi 1 ilmaisee avointa termoparipiiriä ja vain toinen kanava onkin kytkettynä tässä.
Hyvin toimii mutta toimikoon. Jatketaan taas ensi kerralla.