Raspberry Pi / Arduino / Muu / Other // virtasilmukkavastaanotin 4-20mA current loop receiver

Jos kellä on tiedossa toimivia tuotteita tai helposti saatavilla olevista komponenteista luotavia otsikon mukaisia laitteita tai kytkentöjä niin tänne linkkiä.

Tarkoitus olisi siis valjastaa Raspberry Pi (tai Arduino tai…) vastaanottamaan teollisuusohjauksessa varsin yleistä analogista signaalin siirtoa: virtasilmukkaa.

Tätä silmukkaa yleensä poweroidaan virtarajoitetulla virtalähteellä maksimijännitteen ollessa joitakin kymmeniä voltteja. Silmukan virtaa moduloidaan lähettimellä, josta ei tässä sen enempää. Silmukkalähetin moduloi sitten lähetettävän suureen mukaisesti silmukan läpi vähintään 4mA enintään 20mA virtaa.

Vastaanottimen tehtävä on sitten olla tämän silmukan osana ja muuntaa silmukan läpi kulkeva virta luettavampaan muotoon. Tässä tapauksessa virtaa luetaan AD-muuntimella, jonka maksimi input-jännite on 3.3V. Itse kytkennän syöttöjännite on yksipuolinen 5V.

Systeemin pitäisi sietää yleisimmät vikatilanteet: avoin silmukka ja oikosulku. Vastaanottimen kannalta jälkimmäinen ei ole ongelma ja avoimen silmukan osalta silmukkaa syöttävä virtalähteen ja lähettimen yhdistelmä rajoittaa virran vian kohteesta riippuen 20mA tai ~30mA tasolle. Tämän ylittävä virta on mahdollista ja saa rikkoa vastaanottimen. Jos vastaanotin hajoaa, sen pitäisi hajota turvallisesti eli syttymättä tuleen.

Vastaanotin saa indikoida silmukan vikatilanteita, mutta se ei tässä tapauksessa ole kovin tärkeää. Jo virran pysyminen 4-20mA välissä indikoi melko hyvin OK-tilannetta. Helpoiten vikaindikaatio tapahtuu säätämällä AD-muuntimen toiminta-alue vähän laajemmaksi kuin 4-20mA.

Jos valmis laite löytyy, sen pitäisi olla tietysti naurettavan ja halvan välimaastossa hinnaltaan. Valmistettavan laitteen tulisi olla suunniteltu helposti hyllystä saatavista edullisista osista.

Shortly in English: I’m looking for links to either buyable products or schematics to current loop receivers suitable for Raspberry Pi or Arduino use: that is, they can be powered from USB 5 Volts power.

1 Like

Valmiista ei ole niin tietoa, mutta helposti saatavista kompoista tuommoinen kyllä syntyy ilman isompaa draamaa.

Kysymyksiä:

  • jos vastaanotin on erillinen laite, niin mitä haluat sen antavan lähtötietona? Esimerkiksi lähtötieto voisi olla lukuarvo välillä 0 - haluttu maksimi. Resoluutio tietty riippuu käytetyn A/D-muuntimen resoluutiosta ja voisi tyypillisesti olla 10/12/max 16 bittiä. Sen tarkempi resoluutio vaatii jo huolellista piiri- ja sähköistä suunnittelua.
    -Mikä olisi fyysisen tason liityntätapa? SPI tms voisi olla kätevä.
  • tarvitaanko galvaanista erotusta? Erotus mutkistaa piiriä huomattavasti, mutta toisaalta tekee siitä varsin yleiskäyttöisen.

Jos mä tekisin, niin ottaisin ihan paljaan AtMega32U:n tai 328P:n ja tekisin sillä. Peruskytkentään ei mene montaa komponenttia ja piirilevystä tulee naurettavan yksinkertainen.

Kekkasin sitte valmiin sopivan reseptin:

MCP3008 SPI-liitettävä ADC mittaa 100ohm vastuksen yli jäävää jännitettä.

Hyvää: simppeli, halpa, löytyy valmis koodi Adafruitilta. Mitoituksensa myötä kätevästi mitta-alue yltää 33mA saakka, eli ihan karvan verran yli sen yleisesti suositellun maksimivirran, mitä virtasilmukan virtalähteen pitäis suostua ikinä syöttämään (30mA).

Huonoa: kanavat ei ole erotettu toisistaan eikä edes differentiaalisia. Ylivirtasuojausta ei ole. Mitään muutakaan suojausta ei ole. Bittejä hukkuu kun mittausaluetta tuhlataan alueen ylittävän virran mittaamisen kykyyn.

  • t

Onko edistynyt ja ootko päässyt kokeileen kytkistä?

Itsellä vähän samaa tarvetta. Käytännössä mun pitää ohjata putkistossa kiertävän veden lämpötilan perusteella kiertovesipumppuja. Varastossa on taajuusmuuttajia jotka ymmärtää joko 4-20mA silmukkaa tai sitten 5-10kOhm potikkaa. Antureina käytän PT100:sia koska on edullisia ja tarkkoja. No yksi oli helppo toteuttaa 0-100c 4-20mA lähettimellä.

Kaksi muuta on ongelmallisempia koska ne tarvisi invertoidun tiedon tamulle (lämpötilan noustessa kierrokset laskisi. Tätä ominaisuutta ei tisessään tamussa ole. 20-4mA lähettimiä löytyy, hinta kova (verrattuna noihin 4-20mA muutaman euron).

No todennäköisesti näiden kahden kohdalla mun kannattaa ostaa lähettimiksi PT100 antureille 0-5v lähettimet jotka on helppo sitten lukea Arduinon analogi inputilla ja sitten ohjata sillä tiedolla 10kOhm digipotikkaa joka on kytketty tamuun. Tai ainakin järkeilin että olisi ehkä se helpoin. Arduinon kanssa ihan aloittelija joten kyllä tuossakin varmaan vähän kokeilua ja erehtymistä tulee oleen. Hyvä puoli on että tuosta voi ainakin teoriassa tehdä sitten just sellaisen käyrän kuin haluaa eikä tarvi tyytyä tuohon ilman Arduinoo rakentuvaan lineaariseen (nyt kun mietin niin jos tuon toimiin saan niin saatan tästä syystä vaihtaa myös tuon yhden toteutuksen Arduino pohjaiseksi vaikka siinä vähän enemmän tuleekin rikkoutuvia osia).

Mutta, voi olla että tarve tulee myös paineantureille yms (esim hälytys kohonneesta paineesta tai liian nopeasti muuttuvasta paineesta, esim putkivuoto). Jolloin tuo virtasilmukka toteutus todennäköisesti tulee tarpeelliseksi.

Rupesin miettiin omassa tilanteessa että mikä olisi loppupeleissä minimi kytkis tuolle PT100 anturille Arduinoon kytkettäessä.

Mutta näköjään näinkin pienellä kytkiksellä on saatu 4-20mA virtasilmukan kytkettyä Arduinoon. Itse kyllä pistäisin tuohon vastuksen rinnalle jonkun 5v zener diodin.

EDIT: Toki myös on vaihtoehtona tälläiset 4-20mA -> 0-5v muuntimet: http://www.aliexpress.com/item/Current-to-Voltage-Converter-4-20mA-to-0-5V-Signal-Conversion-Module-I-V-Converter/32600317023.html

Jotain ton kaltaista päädyin sitten tekemään.

AD-muuntimeksi valitsin nopean etsinnän jälkeen MCP3008, joka siis on 8-kanavainen single-ended SPI-liitetty muunnin. Oikein kätsä RasPeille. Adafruitilla ja muillakin on valmista Pythonia tätä vasten.

Vastukseksi valiutui 100ohm, joka sopii RasPin 3,3V käyttöjännitteelle kätevästi. Maksiminäyttämäksi tulee 33mA eli sopivasti enemmän kun asennuksissa usein käytetty 30mA lenkin maksimivirtaraja. Tässä toki hukkuu näyttämää, mutta eipä kytkentä muutenkaan ole liian tarkka.

Mä en oikein vielä tiedä miten luen PT100 antureita Arduinolle jos matkaa on vähän reilummin. Siinä tarkoituksessahan virtasilmukka on juurikin loistava kun ei tule jännitehäviötä. Eli otanko PT100:lta tiedon 4-20mA virtasilmukka lähettimelle ja taas sitten muunnan sen lähellä Arduinoa 0-5v signaaliksi. Tulee vaan runsaasti osia…

PT100/PT1000:lle voi tehä kelvinkytkennän:

Tällöin ei piuhan pituus haittaa, tai siis se tulee kompensoitua.