Korjaus Design Huonekalut

ATmega. PWM pulssilaskuri. Yhdistämme Arduinon sähkömittariin Arduino-projektin käännettävä laskuri led-indikaattoreilla

3

Sen lisäksi, että voit tehdä sen ilman keskeytyskäsittelijää, voit tehdä sen pienellä ohjelmistolla tai ilman ohjelmistoa ja käsitellä nopeampia pulsseja, jotka ovat mahdollisia ohjelmistokyselyn tai keskeytyslaskennan avulla.

Atmel AVR, että useimmat Arduinot perustuvat laskuri-/ajastinlaitteistoon, joka laskee pulssin suoraan tulonastasta. Sinun tarvitsee vain määrittää laskurilaitteisto ja lukea laskurirekisteri. 16-bittisten laskurien kanssa 8-bittisessä laitteessa on pieni komplikaatio, mutta tämä on helppo voittaa. Arduino asettaa ajastimet PWM-toimintoihin oletuksena, mutta tämä voidaan ohittaa kuvatulla tavalla (katso lisätietoja AVR-käyttöoppaasta) - sinun on käytettävä ajastinta/laskuria CTC-tilassa.

Arduninos-pohjainen ARM ja lähes kaikki muut mikro-ohjaimet sisältävät samanlaisia ​​laitteita; jotkut ovat joustavampia, jotta nastoja voidaan käyttää laitteiden laskemiseen.

AVR:ssä on 8- ja 16-bittiset laskurit. Jos tarvitset suuria lukuja, saatat joutua käsittelemään ylivuotokeskeytystä. Jos tarkistat laskurin säännöllisesti, pystyt käsittelemään senkin keskeytyksettä, sillä voit tehdä kyselyn paljon hitaammin ja mahdollisesti ajoittain kuin tulopulssi yksinkertaisesti pollaamalla ylivuotolippua ennen seuraavaa ylivuotoa.

Sinun tapauksessasi sinun on luultavasti luettava pulssien määrä säännöllisellä jaksolla, joka on vähemmän kuin aika, jolloin laskuri vuotaa yli suurimmalla odotetulla pulssinopeudella. Jos siis esimerkiksi käytit 8-bittistä laskuria ja maksimisyke oli 1 kHz, sinun on suoritettava kysely 256/1000 sekunnin välein tai vähemmän, mutta saat parhaan tarkkuuden tekemällä tästä ajanjaksosta mahdollisimman pitkän. . Joten sinulla voi olla esimerkiksi jotain seuraavanlaista (tämä ei ole oikea koodi, vain katkelma):

For(;;) ( viiveMS(250) ; taajuus = 4 * lukulaskuri() ; )

Vaihtoehto, joka saa lineaarisemman vasteen, mutta ei-deterministisen luvun, kyselee ylivuotoja ja mittaa ajan, joka kuluu kiinteän pulssimäärän laskemiseen, ja määrittää siksi mittauksesi kiinteän luvun ajasta, ei laskea tietyssä ajassa.

For(;;) ( int start = getMillisec() ; while(!counterOVF()) ( // Älä tee mitään (tai jotain hyödyllistä, mutta nopeaa) ) int t = getMillisec() - aloita ; taajuus = 256 * t/1000 ; )

0

Kiitos paljon kysymyksestäsi. Jos ymmärsin oikein, ensimmäinen ajatuksesi on sammuttaa pulssit laitteiston kautta, ja toinen on koko ajan, kun prosessori on varattu. Ongelmana on, että minun mikro on ladattu täyteen (joten yksinkertainen ISR incrementing laskurimuuttuja ei toimi) ja ei voi kyselyyn, koska se on tehtävä muita tehtäviä.Lisäksi minulla ei ole enää laitteisto laskurit. Onko muita vaihtoehtoja? Olen kuullut, että tämä on mahdollista käyttämällä analogisia portteja (luottaen samankaltaisuuteen PWM:n kanssa). Kiitos paljon - manattatta elokuun 28 14. 28. 8. 2014 klo 8.16.36

0

Molemmissa tapauksissa laitteistolaskuri suorittaa laskennan, toisessa esimerkissä kyselyni tarkistaa ylivuotolipun, mutta se on vain periaatteen osoittamiseksi, se ei ole perustavanlaatuinen päätös; se voi myös olla keskeytyskäsittelijä - etuna on, että saat yhden keskeytyksen jokaista 256 pulssia kohden (olettaen 8 laskuribittiä) jokaista pulssia kohden, joten keskeytyksen yläraja on paljon pienempi. - Clifford elokuun 28 14. 28. 8. 2014 klo 11.10.07

0

Voit käyttää analogista tuloa vain, jos anturin lähtö on kiinteä PWM-taajuus (ja olet lisännyt sopivan analogisen suodatuksen, jonka raja on hieman tämän taajuuden alapuolella), mutta kysymyksesi viittaa siihen, että se on muuttuva taajuus, ei PWM (miten muuten pulssilaskennan apua? ). -

Lisätehtävää varten

piirikaavio

Kaavio leipälaudalla

Huomautus

    Tässä kokeessa käytämme ensimmäistä kertaa IC:tä, tässä tapauksessa 74HC595 lähtösiirtorekisteriä. Mikropiirit ovat hyödyllisiä, koska niiden avulla voit ratkaista tietyn ongelman ilman vakiopiirin kokoamista joka kerta.

    Lähtösiirtorekisteri antaa meille mahdollisuuden "tallentaa" digitaaliset lähdöt käyttämällä vain 3:a 8:n sijaan. Rekisterisarja sallisi 16 ja niin edelleen. signaalit samojen kolmen nastan kautta.

    Ennen kuin käytät mikropiiriä, sinun on tutkittava huolellisesti sen kytkentäkaavio tietolomakkeessa. Jotta ymmärtäisimme, missä mikropiirin jalat lasketaan, niissä on puoliympyrän muotoinen lovi toisella puolella. Jos asetamme 74HC595:n lovi vasemmalle, alarivillä on jalat 1-8 ja ylärivillä 16-9.

    Kokeemme kaaviossa jalat on järjestetty eri järjestykseen, jotta liitännöissä ei ole sekaannusta. Teknisen lomakkeen mukaiset nastajärjestykset on allekirjoitettu mikropiirikuvan sisään, jalkanumerot ulkona.

    Muista, että seitsemän segmentin osoittimen kuvassa sen jalkojen numerot ja niiden vastaavuus segmenteille on allekirjoitettu.

Luonnos

Siirtääksemme osan siirtorekisterin kautta lähetettävästä tiedosta edelleen, meidän on kohdistettava LOW salpapintaan (sirun ST cp -sisääntulo), siirrettävä tiedot ja lähetettävä sitten HIGH salpaan. pin, jonka jälkeen lähetetään korkean ja matalan signaalin yhdistelmä.

Käytimme ShiftOut(dataPin, clockPin, bitOrder, value) -funktiota tiedon siirtämiseen. Funktio ei palauta mitään, ja se on kerrottava parametreina

  • Arduino-nasta, joka on kytketty mikropiirin DS-tuloon (datanasta),

Ei, tämä artikkeli ei käsittele toista tapaa huijata tämä huono-onninen laite. Näin voit käyttää Arduinoa ja LabView'ta sähkömittarin muuttamiseksi tehomittariksi tai jopa ampeerimittariksi!


Ensimmäinen sähkömittari oli induktio. Sen toimintaperiaate on naurettavan yksinkertainen - itse asiassa se on sähkömoottori, jonka roottori on alumiinilevy, joka pyörittää valitsinta. Mitä enemmän virtaa se ottaa, sitä nopeammin levy pyörii. Laite on täysin analoginen.

Nykyään induktiomittarit ovat kuitenkin menettämässä asemiaan ja väistyvät halvemmille elektronisille vastineilleen. Ja vain yksi näistä tulee kokeelliseksi:

Toimintaperiaate ei ole muuttunut paljon - tässä tapauksessa levy korvataan elektroniikalla, joka tuottaa pulsseja kulutetun sähkön määrän mukaan. Yleensä useimmissa laitteissa nämä pulssit näytetään LED-merkkivalolla. Vastaavasti mitä nopeammin tämä valo vilkkuu, sitä arvokkaampi kW poltetaan.
Lisäksi minkä tahansa laitteen etupaneelissa on laskurisuhde A- pulssien lukumäärä per 1 kWh. Kuten kuvasta näkyy, kokeellinen A = 12800. Näistä tiedoista voidaan tehdä seuraavat johtopäätökset:

Jokaisella pulssilla mittari tallentaa kulutuksen, joka on 1/12800 1 kWh:sta. Jos kytket mittarin kuorman päälle ja alat yksinkertaisesti laskea pulsseja, niin sen kuluttaman sähkön määrä (kWh) on helppo saada jakamalla pulssien lukumäärä välityssuhteella.

Koska ilmaisin muuttaa vilkkumisnopeuttaan, on mahdollista päätellä tehon (kW) ja yhden metrin pulssin ajan välinen suhde, mikä mahdollistaa tietojen saamisen tehosta / virrasta.
Emme lataa artikkelia laskelmilla, mutta tarvittaessa sitten

täällä he ovat

Todellakin, mittarin välityssuhde on hieno asia, sillä sen tuntemalla voit ilmaista sekä tehon että virran:
Tehdään suhde välityssuhteestamme (A=12800 imp/kW*h) ja tuntemattomasta välityssuhteesta, joka on kuormalla X ja yhden pulssin aikana (valo vilkkuu):

Tässä X on tuntematon teho ja t on yhden pulssin aika. Ilmaisemme tuntemattoman voiman täältä ja tässä se on:

Virta lasketaan käyttämällä seuraavaa suhdetta välityssuhteista ja tunnetuista ja tuntemattomista virroista kuormalla X.:


Mikä yleensä johtaa identtiseen kaavaan, mutta virralle (virta mitataan ampeereina ja indeksit tarkoittavat kuormaa, jolla tämä virta on):

Täällä voit nähdä sudenkuopan - sinun on tiedettävä virta ihanteellisella 1 kW:n kuormalla. Jos tarvitaan hyvää tarkkuutta, on parempi mitata se itse, ja jos ei, voit laskea sen likimäärin kaavan avulla (jännite ja teho tunnetaan), mutta se on karkeampaa, koska tehokerrointa ei oteta huomioon. tili.


Siten kaikki perustuu yhden impulssin ajan mittaamiseen (ilmaisimen vilkkuminen). Tutkimuksessani tukeuduin tähän erinomaiseen projektiin. Eräs italialainen teki rajapinnan tehonvalvontaan Labview-ympäristöön ja keksi piirin pulssien mittaamiseen. Mutta hänen projektissaan oli valtava virhe - se soveltui vain mittareille, joiden välityssuhde oli 1000 imp / kWh.

Ylempi käyrä on keskimääräinen teho 5 minuutin ajalta, alempi käyrä on reaaliaikainen. Käyttöliittymä on melko joustava ja sitä voidaan helposti muokata tarpeidesi mukaan. Jos et ole vielä käsitellyt LabView-ympäristöä, suosittelen tutustumista.

Jotta kaikki toimisi, osoittautui riittäväksi lisätä yksi lohko ohjelmaalgoritmiin yllä olevan kaavan mukaisesti.

Se näyttää tältä


Se kuulostaa yksinkertaiselta, mutta sitä ennen sinun on vielä mietittävä sitä!

Joten jos päätät silti ottaa tehovalvonnan käyttöön, on kaksi vaihtoehtoa:

1. Tiskisi on suljettu ja sinetöity parhaan kykysi mukaan. Tämä tarkoittaa, että pulsseja voidaan lukea vain valovastuksen avulla, joka reagoi hehkulampun vilkkumiseen. Se on kiinnitettävä sinisellä sähköteipillä mittarin etupaneelissa olevaa LED-merkkivaloa vastapäätä.
Kaava näyttää tältä:

Kaavio kosketuksettomaan pulssin poimimiseen


Ohjelma yksinkertaisesti vertaa valovastuksen ja potentiometrin resistanssiarvoa. Lisäksi jälkimmäisen avulla voit asettaa tällaisen anturin herkkyyden väärien hälytysten välttämiseksi ja säätämiseksi ilmaisimen kirkkauteen.

2. Sinulla on pääsy mittarin pulssilähtöön. Monissa malleissa on pulssilähtö, joka toistaa rakkaan räpyttelyn. Tämä tehdään, jotta laite voidaan liittää automaattiseen kirjanpitojärjestelmään. Se on transistori, joka avautuu, kun merkkivalo palaa, ja sulkeutuu, kun se sammuu. Kytkeminen suoraan siihen ei ole vaikeaa - se vaatii vain yhden vetovastuksen. Ennen kuin teet tämän, varmista kuitenkin, että tämä on pulssilähtö, ei jokin muu! (passissa on aina kaavio)

Kaavio telemetrialähtöön kytkemiseksi


Minun tapauksessani pääsy on täynnä, joten en vaivautunut liikaa. Asenna LabView ja aloita mittaus! Kaikki kaaviot edustavat tehoa (W) reaaliajassa.
Pitkään kärsinyt teekannu jaettiin ensimmäisenä. Korkin mukaan sen teho on 2,2 kW, mutta aikataulun perusteella se kuluttaa säännöllisesti vain 1700 wattia. Huomaa, että kulutus on enemmän tai vähemmän vakio ajan myötä. Tämä tarkoittaa, että lämmityselementti (todennäköisimmin nikromi) muuttaa vastustaan ​​hyvin vähän koko kiehumisprosessin aikana.

Liimapistooli on täysin eri asia - ilmoitettu teho on 20 W. Se käyttäytyy fysiikan lakien mukaisesti - kuumennettaessa lämmittimen vastus kasvaa ja virta pienenee vastaavasti. Tarkistin yleismittarilla ja kaikki on siellä.

Vanha radiovastaanotin "Kevät". Tässä kaavio nousi alussa johtuen siitä, että aloitin mittauksen impulssin aikana, ja vastaavasti tämä vaikutti dataan. Kaavion dioissa näkyy, kuinka käänsin äänenvoimakkuuden säädintä. Mitä kovempaa - sitä enemmän radio syö.

Perforaattori, jonka ilmoitettu teho on 700 wattia. Painoin nappia kokonaan, odotin vähän ja annoin mennä, mutta en sujuvasti. Kaavio näyttää selvästi käynnistysvirran moottoria käynnistettäessä. Siksi valo vilkkuu, kun hyvä naapuri alkaa hakkaamaan rakastettua seinäänsä.

Ja nyt mielenkiintoisin. Tein pienen kokeilun vanhalla kannettavallani, jonka tulos näkyy kuvassa:

Oranssi piste merkitsee aikaa, jolloin suoritin useita "raskaita" ohjelmia kerralla. Kuten näette, suorittimen kuormituskaavioilla ja lisääntyneellä kulutuksella on jotain yhteistä. Äskettäin oli

Tämä artikkeli sisältää kaikki tiedot Arduino-pohjaisesta sähkömittarista, mukaan lukien kaaviot, laiteohjelmistot, kommentit nykyisen laiteohjelmistoversion päivityksestä ja suunnittelusta.

Tältä se loppujen lopuksi näyttää.

Aluksi jaoin kaiken tiedon suureen kasaan pieniä artikkeleita - mikä teki sen etsimisestä ja tämän laitteen toistamisesta erittäin hankalaa. Tämä artikkeli korjaa tämän tilanteen.

Osa 1. Idea, suunnittelu ja ajattelu ääneen.

Asensin jokin aika sitten kaksivyöhykkeisen sähkömittarin hyödyntääkseni parempaa yöhintaa (50 % 2300:sta 0800:aan). Kävi ilmi, että kulutamme 45% sähköstä yöllä. Mutta vastaus on, kuinka kulutus tapahtuu kulutuspaikkojen yhteydessä. Tietenkään tämä laite ei.

Tästä syystä kulutustietojen yksityiskohtaisempaa esittämistä tarvittiin. Aluksi päätettiin tehdä laite, joka näyttää seuraavat tiedot:

  1. Nykyinen kuormitusteho
  2. Kulutus päivän alusta
  3. Kulutus kuun alusta lähtien
  4. Yökulutuksen prosenttiosuus %

Lisäksi laitteen on lähetettävä konfiguroitavaan Internet-osoitteeseen kulutustiedot viimeisen 24 tunnin ajalta 24 lukeman muodossa. Lähetysväli — asetettu minuutteina 1…120.

Valikossa asetetut parametrit:

  1. Tunti RTC:ssä
  2. Minuutti RTC:ssä
  3. Päivä RTC:ssä
  4. Kuukausi RTC:ssä
  5. Vuosi RTC:ssä
  6. Laskuväli 1…120
  7. verkko-osoite, joka ilmaisee sijaintimerkit: "a-z0-9_-/: ". Muokattava merkki on korostettava, jotta on selvää, mitä muokataan.

Laitteen alkuperäinen versio tehdään seuraavien moduulien perusteella:

  1. (selvennys ilmaisimen liittämisestä mega 2560:een)

Laite on kiinnostava selventämään kuinka paljon työpaja, medialaitteet, keittiövälineet kuluttavat. Tämän seurauksena sinun on saatava tiedot kaavioiden muodossa, Internetistä tai paikalliselta verkkopalvelimelta ()

Mittaussolmun alkuperäinen kytkentäkaavio.

Lainasin kaavion tehon ja jännitteen mittaamiseen. Keskimääräinen teho otetaan huomioon, eikä vain, monet muut parametrit, kuten taajuus, tehokerroin. Ensin sinun on koottava tällainen pieni teline mittausta varten.

Otan leipälaudan, etsin sopivan muuntajan jännitteen mittaamiseen (otan sen ATX-työhuoneesta) ja jatkan eteenpäin.

UPD. Mittayksikkö

Osa 2.1 Huomautuksia ENC28J60:n hämmästyttävistä ominaisuuksista

Ihme juttu. Tänään aloin kaivamaan moduulia työskentelyä varten ezernetin kanssa "laskuri"-projektia varten. Kuka olisi epäillyt, se oli hauskaa, ja kaikki meni lopulta.

Yhteyden kautta. Etsimme, mistä löytää SPI-rajapinnan Arduino "Megan" kanssa, no, tai sinun. Yhdistämme. Ripustamme CS-ulostulon (sirun valinta) minne haluamme, se asetetaan sitten erikseen kirjaston alustuksessa. "Ripinsin" sen 42. tapiin, sinulla voi olla joku toinen. Loput MOSI / MISO / SS / OV / 3.3V on kytketty vastaaviin Arduino-nastoihin.

Kävi ilmi, että vähentääkseen muistin käyttöä "ihana" EtherCard-kirjaston kehittäjä päätti ja lähetti ohjelman muistiin GET-pyynnön merkkijonoja. Eli kuvittele, että freelance-ohjelmoija päätti yhtäkkiä tehdä itsestään laskurin. Tehdäkseen kaiken älykkääksi hän päätti muokata URL-riviä, johon tiedot lähetetään. Ja teki tämän jopa tänään:

Niinpä hän yhdistää kirjaston ja luulee tekevänsä nyt helposti pyynnön ulkoiselle palvelimelle. Ei. Loppujen lopuksi hän asetti palvelimen merkkijonoksi. Valitettavasti merkkijono ei ole ohjelmamuisti. Harvardin arkkitehtuuri. Kaikki on jaettu.

Ei mitään, kiipesin nopeasti kirjastoon, löysin paikan, jossa pyyntö täytetty, vääristelin sitä, vein tietysti kaiken "ylimääräisen" mielestäni. Loppujen lopuksi kaikki toimii loistavasti.

Liitän mukaan kirjaston ja esimerkin työskentelystä palvelimen kanssa, joka toimii merkkijonoille. eikä vain ohjelman ei-muuttumattomille arvoille. Yhdessä esimerkin kanssa -

Projektin aikana on jäljellä vain ongelman ratkaiseminen mittausosan kanssa, kaikki muu on jo ratkaistu. Vaikein asia ohjelmassa oli URL-merkkijonon muokkaaminen.

Yhteysominaisuus on vain DHCP, en aio tehdä staattisia ip- ja valintatehtäviä, kaikki toimii aivan oikein, eikä tarvitse lisätä toimintoja, joita en tarvitse.

Osa 3. Vastaohjelmiston ensimmäinen virheenkorjaus

Tänään mietin hieman laskuriohjelmiston virheenkorjausta. Tosiasia on, että en vahingossa asentanut alennusvastusta, liian paljon jännitettä tunkeutui CT-anturiin ja seurauksena liian paljon melua tunkeutui tuloon. Korjattu, juotettu 150 ohmia rinnakkain ST-anturin kanssa, yleensä noin 100 ohmia tuli ulos.

Jouduin hieman korjaamaan kertoimia ohjelmassa, säädin ... kiinalaisen laskurin mukaan. Sitten volttimittarilla. Sain sen mahdollisimman lähelle.

Seurauksena oli, että vedenkeittimen keittämisen EH-kulutuksen mittaus osoitti samaa kuin kiinalaisella wattimittarilla. Se on jo hyvä, mutta minun täytyy tarkistaa päätiskiltä jotenkin.

H-kirjain kW:n jälkeen ei mahtunut näyttöön, mutta on ymmärrettävä, että se on siellä. Numero näyttää kulutuksen kuluvan tunnin alusta. Tunnin lopussa se lähetetään palvelimelle ja nollataan. Sitten luultavasti nollaan sen kerran päivässä.

Laskuriohjelmisto nykyisessä muodossaan -

Osa 4. Vartalon ensimmäisen osan tekeminen

Tein tänään kotelon, materiaali on sama kuin viime kerralla - 11mm caprolon. Kiinnitys on totta M4 imbus -ruuveilla, viime kerralla M3 oli kaikkialla. Se on liian heikkoa keholle.

Mittakaavassa laita hiiri "ilmaa" sisään.

Vielä on tehtävä etupaneeli, korjata moduulit, tehdä jyrsiminen USB:lle ja 12V teholle. Tämän laitteen tapauksessa luultavasti 0,7A riittää, eli jotain pientä voidaan käyttää.

Osa 5 Etupaneelin valmistus

Osa 9. Päivitetty ohjelmisto, joka perustuu laitteen toiminnan tuloksiin

Noin kuukauden toiminnan aikana tulin siihen tulokseen, että on tarpeen lisätä nykyisen kulutetun tehon siirto, kuukauden ensimmäisenä. Lisäksi siirsin keräävän web-palvelimen aliverkkooni sisälle ja lopetin tiedon lähettämisen ulkopuolelle. Koska jotkut eivät selvinneet. Siten tiedonkeruun luotettavuus on kasvanut.No, itse asiassa tässä on uusin laiteohjelmisto - .

Päivitys 23.9.2015. Tänään kirjoitin käyttöliittymän seurantatietojen katseluun. Samaan aikaan optimoin laiteohjelmiston, löysin siitä virheitä. Nostin sisäisen DNS-palvelimen, "" tämä on muutaman minuutin kysymys.

Näytti juuri viimeiset 48 tuntia (menetin tilastot, joten kaaviossa on vähemmän) tasoitettuna kaaviona. Splash on pesukoneen alku U:n mukaan - nykyisen tunnin hinta grivnoissa, huomioiden tietysti yöhinta. X:llä — päivämäärä/aika.

Nyt voimme katsoa, ​​mitä tapahtuu. Pieni vivahde - sijoitin kaiken kotiverkkoon vakauden lisäämiseksi.

Kirjoitin jo aiemmin, että kokeilin yhtä standardiohjelmistoa näyttämään sähköasentajien kulutuksen (emoncms). En ymmärrä paradigmaa ja lähestymistapaa. Siellä se lähettää joka kolmas sekunti dataa palvelimelle ja näyttää jotain. Tein sen toisin - laite kerää tietoja 1 tunnin ajan ja lähettää sen sitten viimeisen 24 tunnin ajan. Web-palvelin ei ole käynnissä, se on pienitehoinen NAS.

UPD. Kävi ilmi, että tämä ei ole Internet, joka minulla on, tämä laite ei joskus lähetä tietoja. Ei ole selvää, mihin se liittyy, ja sitä on vaikea saada kiinni, joten menin toiseen suuntaan - laskemalla välilukemat nykyisen kulutuksen perusteella. Päivän aikana jossain 1-2 kertaa tulee vika. Tämän järjestelmän avulla voit kieltäytyä tallentamasta tuntitietoja alallaan, mikä ei myöskään jostain syystä toimi aivan oikein.

UPD. Saatiin valmiiksi joitakin ohjelmistoja tietoja näyttävää sivustoa varten. Nyt on tuntijännite, tunti- ja päiväkulut.

Ajattelen ohjelmiston isännöimistä githubissa. Voi olla. niin se tulee olemaan.