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, Studeni
Anonim
UChip - Serijski preko IC -a!
UChip - Serijski preko IC -a!
UChip - Serijski preko IC -a!
UChip - Serijski preko IC -a!

Bežična komunikacija postala je ključna značajka u našim današnjim projektima i govorimo o bežičnoj mreži, 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 bitrate 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 jačinu svjetiljke ili otvoriti električna vrata. Bi li se isplatilo koristiti Wi-Fi ili BT?

Ovisno o okruženju i aplikacijama, bežična komunikacija putem IC (infracrvene) valne duljine mogla bi vam dobro doći. 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!

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

1 x uChip

1 x IR LED: sa vrhom emisije na 950nm

1 x TSOP-38238 (ekvivalent)

1 x 1KOhm otpornik

Hardver

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

1 x Crna plastična cijev: unutarnji promjer iste veličine kao i IR LED, cijev je neophodna za sprječavanje unakrsnog razgovora s TSOP prijamnikom.

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. To omogućuje 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 krug?

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 kad nema takvog signala. Stoga, za prijenos serijskih podataka putem IC -a, krug napaja LED anodu s PWM -om od 38KHz moduliranom s TX serijskim signalom koji povlači nisku LED katodu.

Slijedom toga, na visokoj razini serijskog TX0, LED dioda nije pristrana ili pristrana unatrag (bez impulsa), a izlazni pin TSOP -a je visoko povučen. Prenoseći nisku razinu na serijskoj ploči, LED se napaja i generira IC impulse u skladu s primijenjenim PWM signalom; stoga je izlaz TSOP -a nizak.

Budući da je prijenos izravni (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, inače 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 s 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 (koju su standardno prihvatile Arduino IDE knjižnice) ograničava struju na 2 mA. Stoga korištenje 1kOhm već daje trenutno ograničenje sa zadanim postavkama!

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

  • 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 s ovom značajkom pružit ću u budućem ažuriranju.

Ali zapamtite, poništavanje i istjecanje struje iz MCU pinova blizu njegovih granica nije tako dobar pristup. Doista, smanjuje vijek trajanja i pouzdanost MCU -a. Stoga predlažem da zadržite normalnu snagu pogona za dugotrajnu uporabu.

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 mjerač vremena, jer ova verzija koda radi samo s TCC mjeračima (ove podatke potražite u "variant.c" ploče)). Dodati ću kôd za korištenje TC mjerača vremena u budućim ažuriranjima.

Kod je vrlo 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 vremensko razdoblje i snimanje u skladu s potrebnom frekvencijskom modulacijom (u mom slučaju to je 38KHz) i radnom snagom ciklusa (12,5% prema zadanim postavkama). To je učinjeno iskorištavanjem standardne analogWrite () funkcije na PWM pinovima i promjenom samo PER_REG (registar razdoblja) i CC (snimanje usporedbe) registra (pisani kod jednostavno je izrezivanje i lijepljenje iz biblioteke wiring_analog). U skladu s time možete postaviti potrebnu frekvenciju tako da senzor TSOP promijeni PER_REG (što je gornja granica za poništavanje brojača vremena), dok CC postavite proporcionalno vrijednosti razdoblja 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 podatkovnom 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 signal TX0, potrebno je postaviti brzinu prijenosa uzimajući u obzir sljedeću jednadžbu:

Serijski Baud <PWM_frequency/10

Korištenjem 38KHz to rezultira brzinom prijenosa nižom od 3800bps, što znači da je viša "standardna" dopuštena brzina prijenosa 2400pbs, kako se ranije predviđalo.

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

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

Nedovoljno?! 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 se spriječilo da buka utječe na prenesene podatke pa stoga njegova implementacija nije nimalo laka! Međutim, ako se osjećate dovoljno samopouzdano, više ste nego dobrodošli da isprobate vlastiti TSOP sustav!:)

Na kraju, postavio sam SerialUSB port (2400bps) koji koristim za slanje i primanje podataka na serijski monitor.

Funkcija loop () uključuje kôd potreban za prolaz podataka kroz dvije serije i kopira se izravno 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 nakon učitavanja koda “IRSerial.ino” uključite gornji krug, provjerite serijski monitor na Arduino IDE -u i pokušajte poslati niz. Vjerojatno ć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 razgovora! Petlja se mora prekinuti kako bi se dvosmjerna serijska komunikacija odvijala putem IC veze.

Kako ćemo prekinuti 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, čime se stvara usmjereni IR "snop". To je stvar pokušaja i pogreške; napokon, pomoću komada 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 morate 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

Komunicirati!
Komunicirati!
Komunicirati!
Komunicirati!

To je sve

Vaš serijski preko IC uređaja spreman je 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 LED otvoru i implementiranom sustavu IR zaštite), što može biti vrlo korisno u nekim aplikacijama!

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

Preporučeni: