Sadržaj:

UChip - Serijski preko IC -a!: 4 koraka
UChip - Serijski preko IC -a!: 4 koraka

Video: UChip - Serijski preko IC -a!: 4 koraka

Video: UChip - Serijski preko IC -a!: 4 koraka
Video: Snimak vodostaja rijeke Bosne iz zraka 2024, Juli
Anonim
UChip - Serijski preko IC!
UChip - Serijski preko IC!
UChip - Serijski preko IC!
UChip - Serijski preko IC!

Bežična komunikacija postala je ključna značajka u našim projektima u današnje vrijeme i govorimo o bežičnoj vezi, prvo što mi pada na pamet je Wi-Fi ili BT, no rukovanje komunikacijskim protokolima Wi-Fi ili BT nije lak zadatak i troši puno MCU resursa, ostavljajući mali prostor za kodiranje moje aplikacije. Stoga se obično odlučujem za vanjski Wi-Fi/BT modul serijski spojen na mikrokontroler kako bih podijelio uloge i stekao veću slobodu.

Međutim, ponekad su Wi-Fi i BT "pretjerani" za neke aplikacije koje zahtijevaju nisku brzinu prijenosa podataka i kratku komunikacijsku udaljenost. Nadalje, korištenje Wi-Fi-ja ili BT-a podrazumijeva neophodnost povezivanja vašeg pametnog telefona ili uređaja s odgovarajućom autentifikacijom.

Zamislite da jednostavno trebate uključiti/isključiti vanjsko svjetlo ili promijeniti intenzitet lampe ili otvoriti električna vrata. Da li bi vrijedilo koristiti Wi-Fi ili BT?

U zavisnosti od okruženja i aplikacija, bežična komunikacija preko IC (infracrvene) talasne dužine mogla bi vam biti od koristi. Serijski preko IC, implementiran s nekoliko vanjskih komponenti (3 diskretne komponente!), I uChip (vrlo mala ploča kompatibilna s Arduinom) može biti rješenje koje ste tražili!

Opis materijala (za jedan Tx-Rx uređaj):

1 x uChip

1 x IR LED: sa vrhom emisije na 950nm

1 x TSOP-38238 (ekvivalentno)

1 x 1KOhm otpornik

Hardver

1 x matična ploča/proto ploča

1 x crna plastična cijev: unutrašnji promjer iste veličine kao i IR LED, cijev je neophodna za sprječavanje unakrsnog razgovora s TSOP prijemnikom.

1 x aluminijska folija (3 cm x 3 cm)

1 x traka

SAVJET: Možete napraviti samo-TX ili samo-RX uređaj u slučaju da vam je potrebna komunikacija u jednom smjeru uklanjanjem nepotrebnog RX/TX hardvera iz kruga ili omogućavanjem/onemogućavanjem povezanog koda na skici.

Korak 1: Ožičenje

Ožičenje
Ožičenje
Ožičenje
Ožičenje
Ožičenje
Ožičenje

Spojite komponente zajedno prema shemi.

Nekoliko napomena o jednostavnoj shemi. Budući da TSOP-38238 omogućuje napajanje od 2,5 V do 5 V i apsorbira najviše 0,45 mA (tehnički list možete pronaći OVDJE), napajat ću prijemnik pomoću dva pina koji će osigurati uzemljenje, odnosno napajanje. Ovo omogućava uključivanje/isključivanje prijemnika na zahtjev i vrlo jednostavno postavljanje hardverskog ožičenja. Nadalje, u slučaju da vam je potrebna komunikacija u jednom smjeru, možete odabrati želite li napraviti uređaj (samo Tx/Rx) jednostavnim onemogućavanjem/omogućavanjem TSOP-38238.

Kako radi kolo?

Vrlo je jednostavno. Izlazni pin TSOP -a se povlači nisko kada senzor detektira niz od 6 impulsa ili više na 38KHz, s druge strane, povlači se visoko kada nema takvog signala. Stoga, za prijenos serijskih podataka putem IC -a, ono što krug radi je napajanje LED anode sa PWM -om od 38KHz modulirano sa TX serijskim signalom koji povlači nisku LED katodu.

Shodno tome, na visokom nivou serijskog TX0, LED dioda nije pristrasna ili pristrasna unazad (nema impulsa), a izlazni pin TSOP -a je visoko povučen. Prenoseći niski nivo na serijskoj ploči, LED se napaja i generira IC impulse u skladu s primijenjenim PWM signalom; stoga je izlaz TSOP -a smanjen.

Budući da je prijenos direktan (0-> 0 i 1-> 1), nema potrebe za pretvaračima ili drugom logikom na strani prijemnika.

Ja reguliram izlaznu optičku snagu LED -a odabirom radnog ciklusa PWM -a u skladu s primjenom. Što je viši radni ciklus, veća je optička izlazna snaga i stoga ćete dalje prenositi svoju poruku.

Imajte na umu da još uvijek moramo generirati impulse! Dakle, ne biste trebali ići iznad 90% radnog ciklusa, u suprotnom TSOP neće detektirati signal kao impulse.

Trebate li više energije?

Da bismo povećali struju, možemo li jednostavno smanjiti vrijednost otpornika od 1 kOhm?

Možda, samo nemojte biti previše zahtjevni! Maksimalna struja koju dobijete sa pina MCU -a ograničena je na 7mA kada pogonite pin priključka jačim od normalnog (PINCFG. DRVSTR = 1 i VDD> 3V) kako je navedeno u podatkovnom listu SAMD21.

Međutim, standardna konfiguracija (koja je ona koju su Arduino IDE knjižnice usvojile kao zadanu) ograničava struju na 2mA. Stoga upotreba 1 kOhm već daje trenutno ograničenje sa zadanim postavkama!

Povećanje struje nije samo stvar električnih komponenti. Ukratko:

  • Promijenite otpornik (čija je minimalna vrijednost ograničena na približno 470Ohm -> VDD/470 ~ 7mA);
  • Postavite odgovarajuće PORT-> PINCFG-> DRVSTR na 1;

Kôd sa ovom funkcijom ću vam dostaviti u budućem ažuriranju.

Ali zapamtite, poništavanje i pražnjenje struje sa MCU pinova blizu svojih granica nije tako dobar pristup. Zaista, smanjuje vijek trajanja i pouzdanost MCU -a. Stoga predlažem da zadržite normalnu snagu pogona za dugotrajnu upotrebu.

Korak 2: Programiranje

Umetnite skicu “IRSerial.ino” u uChip (ili Arduino kompatibilnu ploču koju koristite).

U slučaju da trebate promijeniti pin za generiranje PWM -a, provjerite koristite li pin spojen na TCC tajmer, jer ova verzija koda radi samo s TCC tajmerima (za informacije pogledajte "variant.c" vaše ploče). Dodaću kôd da koristim i TC tajmere u budućim ažuriranjima.

Kôd je prilično jednostavan. Nakon postavljanja niskog PIN_5 (pruža TSOP GND) i visokog PIN_6 (napajanja TSOP -a), MCU pokreće PWM na PIN_1, postavljajući vremenski period i snimanje u skladu s potrebnom frekvencijskom modulacijom (u mom slučaju to je 38KHz) i radnom snagom ciklus (12,5% prema zadanim postavkama). To je učinjeno iskorištavanjem standardne analogWrite () funkcije na PWM pinovima i promjenom samo PER_REG (registar perioda) i CC (hvatanje uporedi) registra (pisani kod je jednostavno izrezivanje i lijepljenje iz biblioteke wiring_analog). Možete podesiti potrebnu frekvenciju prema tome da senzor TSOP promijeni PER_REG (što je gornja granica za poništavanje brojača vremena), dok CC postavite proporcionalno vrijednosti perioda do željenog postotka radnog ciklusa.

Zatim kôd postavlja serijski port koristeći ispravnu brzinu prijenosa od 2400bps. Zašto tako niska brzina prijenosa ?! Odgovor je u tehničkom listu TSOP -a koji možete pronaći OVDJE. Budući da TSOP ima filtere s visokim odbijanjem šuma kako bi se spriječilo neželjeno prebacivanje, potrebno je poslati niz više impulsa kako bi se povukao TSOP izlazni pin (broj impulsa ovisi o verziji TSOP -a, 6 je tipična vrijednost). Slično, izlaz TSOP -a se povlači visoko nakon minimalnog vremena ekvivalentnog 10 impulsa ili više. Slijedom toga, kako bi se TSOP izlaz postavio kao modulirajući TX0 signal, potrebno je postaviti brzinu prijenosa uzimajući u obzir sljedeću jednadžbu:

Serijski Baud <PWM_frequency/10

Korištenjem 38KHz ovo rezultira brzinom prijenosa nižom od 3800bps, što znači da je viši "standardni" dopušteni baud rate 2400pbs, kako se ranije predviđalo.

Želite li povećati brzinu prijenosa podataka? Postoje dvije opcije.

Najjednostavnija opcija je promjena TSOP -a u verziju veće frekvencije (kao TSOP38256), koja bi vam omogućila udvostručenje brzine prijenosa (4800bps)

Nije dovoljno?! Zatim morate napraviti vlastitu optičku vezu pomoću jednostavne IC LED+fotodiode i pojačala. Međutim, ovo rješenje zahtijeva mnogo znanja o kodiranju i elektronici kako bi spriječilo da buka utječe na prenesene podatke, pa njegova implementacija nije nimalo laka! Međutim, ako se osjećate dovoljno samopouzdano, dobrodošli ste da isprobate vlastiti TSOP sistem!:)

Konačno, postavio sam SerialUSB port (2400bps) koji koristim za slanje i primanje podataka na serijskom monitoru.

Funkcija loop () uključuje kôd neophodan za prolaz kroz dvije serije i kopira se direktno iz primjera skice SerialPassthrough mijenjajući samo nazive serija.

Korak 3: Zaštitna IC LED dioda

Zaštitna IR LED
Zaštitna IR LED
Zaštitna IR LED
Zaštitna IR LED

Ako uključite gornje kolo nakon učitavanja koda “IRSerial.ino”, provjerite serijski monitor na Arduino IDE -u i pokušajte poslati niz. Vjerovatno ćete vidjeti da uChip prima upravo ono što odašilje! U krugu dolazi do unakrsnog razgovora zbog optičke komunikacije između IC LED i TSOP istog uređaja!

Ovdje dolazi najteži dio ovog projekta, sprječavanje unakrsnog govora! Petlja mora biti prekinuta da bi se uspostavila dvosmjerna serijska komunikacija putem IC -a.

Kako da prekinemo petlju?

Prva opcija, snižavate radni ciklus PWM -a, smanjujući tako optičku izlaznu snagu LED -a. Međutim, ovaj pristup također smanjuje udaljenost na kojoj dobivate pouzdan serijski IR kanal. Druga mogućnost je zaštita IR LED -a, čime se stvara usmjereni IR „snop“. To je stvar pokušaja i greške; napokon, koristeći komad crnog pneumatskog crijeva za zrak omotanog aluminijskom folijom i trakom (pružajući električnu izolaciju) uspio sam prekinuti razgovor. Stavljanje odašiljajuće LED LED unutar cijevi sprječava komunikaciju između TX i RX istog uređaja.

Pogledajte sliku da vidite moje rješenje, ali slobodno isprobajte druge metode i/ili predložite svoje! Ne postoji apsolutno rješenje za ovo pitanje (osim ako vam je potreban jednostavan jednosmjerni kanal) i vjerojatno ćete morati prilagoditi izgled sklopa, radni ciklus PWM-a i IR štit prema vašim potrebama.

Nakon što prekinete unakrsni razgovor, možete provjeriti radi li vaš uređaj i dalje stvaranjem petlje na uređaju Tx-Rx iskorištavajući odraz IC valne duljine na IC reflektirajućim površinama.

Korak 4: Komunicirajte

Komunicirajte!
Komunicirajte!
Komunicirajte!
Komunicirajte!

To je sve

Vaš serijski preko IC uređaja je spreman za komunikaciju, koristite ih za slanje podataka putem IC veze, uključite/isključite sve što vam se sviđa ili provjerite status senzora koji tajno skrivate!

Udaljenost na kojoj je komunikacija pouzdana nije toliko velika kao za WiFi ili BT uređaj. Međutim, usmjeren je (ovisno o otvoru LED -a i implementiranom sistemu IR zaštite), što može biti vrlo korisno u nekim aplikacijama!

Uskoro ću postaviti video na kojem možete vidjeti nekoliko primjera aplikacija koje sam napravio. Uživajte!

Preporučuje se: