0

Vrste komunikacije

Elektronički dijelovi u robotu komuniciraju. Izbor načina bitno utječe na pouzdanost i funkcionalost. Razlikujemo komunikaciju u kojoj kontroliramo oba kraja, npr. između mikrokontrolera (MCU) i mikroprocesora (MPU), i onu u kojoj je jedna strana zadana (jer je to npr. senzor s danim sučeljem). Navodimo dalje protokole komunikacije.

I2C

Vrlo čest izbor za sučelje senzora. Omogućava spajanje velikog broj senzora s malo (4) žica na samo 2 pina mikrokontrolera. Elaboriran serijski protokol koji omogućava relativno velike brzine i dvosmjernu komunikaciju, koju pokreće samo jedna strana. Svaka jedinica mora imati jedinstvenu adresu, što može biti problem, jer nekad treba spojiti više uređaja iste vrste, koji svi imaju istu fiksnu adresu. U tom slučaju pomaže ML-R I2C address translator, double (mrm-i2c-tran).

Osnovna mu je mana što se ne koristi unutar specifikacije koju su njegovi tvorci imali na umu, a ta je komunikacija između čipova štampane ploče. Proizvođači senzora idu linijom manjeg otpora: kad je već sučelje u čipu, najlakše iz izvesti ga diretno van u pinove senzora. Korisnik je nakon toga prisiljen spojiti ga (često dugim) žicama, koje mogu imati loše krimpane konektore, koji vremenom olabave i oksidiraju. Pinove korisnik može doticati i prazniti statički elektricitet u njih. Žice su antene za elektromagnetske smetnje. Rezultat je nepouzdan robot. Još gore, progresivne nepouzdanosti, jer se problemi vremenom povećavaju. Dodatna je teškoća što softver, koji kontrolira I2C u Arduino mikrokontroleru, karakteristično zaustavi tok programa kad se dogodi problem. Npr. neka jedinica uzemlji SCL liniju (uzemljeno je logički 1) i ostane u tom stanju. Grešku više ništa ne može ispraviti. Arduino nastavi beskonačno čekati da se napon podigne. Za razliku od ARMa, Arduino nema više programskih niti pa ne postoji neka druga koja ispravljala problem. PWM izlazi Arduina nastave davati posljednju komandu motorima i robot se nastavi kretati dok ne napravi neku štetu. Rješenje problema je teško jer se on nekad ne dogodi danima i teško je uvrebati pravi čas. Nakon što se dogodi, kako je program stao, nema više nikakve mogućnosti spremiti podatke koji bi pomogli detekciji, npr. koji je senzor bio problem. Kad postoji puno I2C jedinica, problem će izluditi kreatora robota. Korisnici pribjegavaju lemljenju umjesto krimpanja, što rješava samo djelomično jer i dalje žice-antene ostaju u zraku. Dobiva se nefleksibilan sistem u kojem je teško mijenjati senzore i spojevi koji su mehanički inferiorni u odnosu na krimpane. Često senzori i ne mogu biti na istoj pločici. Doduše, moguće je lemiti žice na njih, ali to je opet neprofesionalno i nefleksibilno rješenje. Zato je najbolji savjet za I2C jedinice putem zračnih žica: izbjegavati.

Kad kontrolirate oba kraja komunikacije, recimo da su to MCU i MPU, I2C je jedno od rješenja koja se primjenjuju u praksi. Na internetu postoje detalji provedbe. Imajući u vidu nepouzdanost, ne bismo ga preporučili, osim kad možete zalemiti oba uređaja na istu pločicu.

Analogno

Elektronika nekih senzora ima kao prirodni izlaz analognu veličinu, napon, pa je najlakše rješenje spojiti ga na pin senzora. Rješenje je potpuno u redu i nema mane kakve ima I2C. Mikrokontroler obično ima puno analognih ulaza. Ako neki senzor prestane raditi, čak i jednonitni Arduino neće stati, nego će samo čitati krivu vrijednost. Programski je relativno lako ustanoviti da vrijednost ne valja jer je ili van očekivanog opsega ili se ne mijenja u skladu s očekivanjima. Moguće je napraviti kratak test na početku programa, ili kad se potrebno tokom rada, i detektirat će se jedinica koja stvara probleme.

Neki senzori nemaju prirodno isključivo analogne izlaze. Npr. kompas daje analogni rezultat, kut od 0 do 360 stupnjeva. Međutim, ima ulazne parametre, kalibraciju i druge ulazne ili izlazne akcije za koje je prirodna kompliciranija komunikacija, npr. I2C, UART ili SPI. Obično I2C. Kako smo gore naučili, I2C smanjuje pouzdanost robota. Premda je to pitanje osobne procjene konstruktora, mišljenja smo da je pouzdanost bitnija od dodatnih opcija. Zato ML-R senzori često pružaju analogni izlaz, makar to zahtijevalo komplicirano tehničko rješenje (još jedan mikrokontroler).

Kad želite ostvariti jednostavnu komunikaciju između 2 jedinice (ali ne više od 2) i kad imate mogućnost proizvoljne implementacije na oba kraja, analogno može biti opcija. Analognih izlaza mikrokontrolera uvijek ima malo, obično samo 1 i to je prvo ograničenje. Drugo je da je komunikacija jednosmjerna. Treće je da ste ograničeni ili na jednu analognu informaciju ili na trikove, pomoću kojih u nju možete ugurati više podataka. Npr. 3.3 V podijelite tako da je 0 - 3 V analogna informacija, 3.05 - 3.15 V je druga (digitalna), više od 3.25 V treća digitalna. Uvijek možete slati samo jednu. Postoji dosta primjera u kojima je ovo rješenje sasvim dobro, potpuno je pouzdano i jednostavno za napraviti. Kao i kod za digitalne pinove, potpuno je u redu spojiti izlaz (pin) jednog mikrokontrolera na ulaz (pin) drugog.

Neki zatvoreniji sistemi, npr. FischerTechnik, teško prihvaćaju uređaje koji nisu dio originalnog sistema. Međutim, s analognog ulaza, koji imaju, čitaju bilo što. Senzor - uljez se prijavi kao neki originalni uređaj koji ima analogni ulaz i koriste se njegove funkcije. Npr.: ako pin prijavimo sistemu kao njegov senzor boje (a nije senzor boje, nego uljez) i u programu čitamo njegovu vrijednost, možemo poduzeti neku akciju. Akcija prolazi bez obzira bio to stvarno originalni senzor u boji ili ne.

ML-R senzori, kojima je druga vrsta sučelja prerađena u analogno, su npr. MRMS IR ball finder, direction (mrm-ir-finder), Mobilni robot C (mrm-imu-an), ML-R IMU, 3 analog outputs (mrm-imu-an3) i ML-R LIDAR 2m VL53L0X, analog output (mrm-lid-an).

SPI

Kao i I2C, serijski interface, ali bez strogo definiranog protokola i s jednom žicom više po uređaju. Dodatna žica (device select) rješava problem kolidirajućih adresa. Omogućava obično veće brzine od I2C-a. Nedostatak definicije protokola komplicira implementaciju. Rjeđe korišten od I2Ca. Dijeli neke njegove mane.

Digitalno

Kad senzor daje prirodno digitalni izlaz, npr. prekidač, takav će biti i njegov izlaz. Spoji se na digitalni pin mikrokontrolera, kojih ima u izobilju. Često je to jednostavna komunikacija za koju nema boljeg rješenja. Generira veliki broj žica koje stvaraju nepropusnu šumu na mikrokontroleru.

U slučaju kontrole oba komunikacijska uređaja, npr. MCU na MPU, ovo rješenje može biti vrlo dobro za jednostavne slučajeve. Npr., ako trebate iz MCU 1 javiti u MCU 2 u kojem je od 11 stanja, pogledate koliko bitova trebate za to. Uzmete logaritam po bazi 2 od 11, zaokružite na viši cijeli broj i zaključite da je to 4 (2 na četvrtu je 16, što je više od 11, znači možete prenijeti čak 16 stanja). Spojite 4 pina MCU 1, konfigurirana kao digitalni izlaz, na 4 pina MCU 2, konfigurirana kao digitalni ulaz. Sva 4 nula - stanje 1, prva 3 nula, 4. jedan - stanje 2, itd. Vrlo jednostavano za provesti u kodu i potpuno pouzdano. Periodički možete puštati signale 0000 pa 1111, da provjerite rade li sva 4 kanala. Znatno razumnije rješenje, nego uvoditi I2C.

UART

Dvosmjerna, serijska, brza komunikacija ostvarena putem 2 pina. Za razliku od I2C i SPI, samo između 2 uređaja. U principu dobro rješenje. Broj serijskih portova je ograničen pa nije moguće spajanje više uređaja, tako da se obično ne koristi za senzore ili kontrolere motora.

Spajanje 2 MCU, MCU ili MPU, je moguće na ovaj način. Ovisi o situaciji, ali moglo bi biti i najbolje rješenje, uz CAN Bus. Ako treba spojiti 3 ili više uređaja, više ne, ali za 2 da. Komunikacija je prilično pouzdana i relativno velike brzine. Moguće greške možete kontrolirati programski. Stavite timeout i funkcija za čitanje će završiti nakon njegovog isteka, čak i u slučaju greške. U tom slučaju znate koji je uređaj izvor greške i možete poduzeti korektivne akcije. Znači, puno bolje, nego I2C. Primjer programiranja pogledajte na u uputama za sastavljanje robota za praćenje linije.

PWM

Digitalno upravljanje u kojem informacije prenosi vremenska komponenta: širina digitalnog impulsa. Prirodno se koristi za upravljanje motorima, pogotovo servo. Problematičan je kao ulaz u Arduino mikrokontroler jer funkcija čeka prolaz impulsa, jako otežavajući rad u realnom vremenu. ARM mikrokontroleri rješavaju problem.

CAN Bus

Ako želite protokol koji stvarno jest stvoren za komunikaciju putem (dugih) žica, krimpanih konektora, koji radi u području jakih izvora smetnji, ne tražite dalje, to je Bosch CAN Bus. Na taj način su ožičeni današnji auti i profesionalni mobilni roboti. Za razliku od analogne komunikacije, ova je dvosmjerna i omogućava prijenos bilo kakvih podataka, umjesto jednostavne analogne veličine. Na odličan je način riješena prijava na sabirnicu, kad bilo koja jedinica želi pokrenuti komunikaciju. Za razliku od svih drugih načina navedenih na ovoj stranici, CAN Bus se spaja parangalno: uređaji su nanizani na žicu. Iz svakog ulaze (ili i izlaze) 4 žice. Znači da više neće biti klupko žica u mikrokontroleru. Može se koristiti jedna vrsta konektora za sve, što opet umanjuje mogućnost krivog spajanja, npr. obrnutog napona napajanja. Ako je tako dobar, zašto ga svi ne nude umjesto I2C? Zato što je tehničko rješenje kompliciranije i skuplje. Mali Arduino kontroleri nemaju CAN Bus. Kad ga i imaju, nedostaje transceiver, posebni konektori, kabel impedancije 120 Ohma i terminatori. Ako želite imati pouzdanog robota i spremni ste na zahtjevniju implementaciju CAN Bus je rješenje.

Za spajanje, čak i većeg broja, MPU ili MCU, ovo je odlično rješenje. Jedina mu je mana što brzina podataka nije maksimalna i paketi podataka su kratki. Npr., ako želite tok video podataka, to neće biti moguće. Morali biste koristiti industrijski Ethernet.