Naujas firmware GPS moduliui

Paskraidęs kiek su I2C GPS nutariau pabandyti perrašyti pačio GPS modulio firmware. Kam to reikėjo? Principe gal ir nelabai reikėjo, nes ir taip viskas veikė visai neblogai, bet norėjau pabandyti ne NMEA, o MTK binarinį protokolą. Šį protokolą palaiko I2C modulis. Forumuose buvo kalbų, kad taip GPS veikia dar geriau. Kodėl gi nepabandyti?

Pats firmware perrašymas paprastas – yra speciali programa, kuri tai ir padaro. Su nauju firmware GPS modulis iš pradžių veikia tuo pačiu NMEA protokolu. Perjungti į binarinį protokolą galima PMTK komandomis. Tai irgi jau yra I2C modulio programoje. Kuo pasižymi tas binarinis protokolas? Daug mažesniu perduodamų duomenų kiekiu. Ten yra tik minimumas ko būtinai reikia. Be to, duomenų kiekį mažina ir tai, kad protokolas ne tekstinis. Blogai tai, kad taip paprastai neišeina pažiūrėt kas išeina iš modulio, nes tekstinį formatą suprasti daug paprasčiau nei binarinį.

Pasižiūrėjęs ar tikrai iš modulio išeina tai kas reikia, pabandžiau skristi. Čia paaiškėjo, kad viskas pasidarė daug blogiau nei buvo… Pozicijos laikymas veikė blogai, labai dideli svyravimai, vos spėdavau išjungt, nes kitaip avarija garantuota… PID buvau nustatęs lygiai tokius pat kaip ir anksčiau. Bandžiau keisti, bet pastebimo teigiamo efekto nebuvo. Ilgai eksperimentavau, bet taip ir nesupratau kame reikalas. Bandžiau atstatyti atgal į NMEA, bet nuo to nė kiek nebuvo geriau. Pradėjau galvot, kad kažką mala tas naujas firmware, bet pasivaikščiojęs su kopteriu ir pažiūrėjęs maršrutą žemėlapyje, nutariau, kad čia viskas gerai. Reiškia priežastis buvo kažkur kitur…

Ilgokai galvojau kas dar pasikeitė? Prisiminiau, kad tik viską įjungus pasirodo 60-80 I2C klaidų. Toliau klaidų nėra. Pradėjau nagrinėt iš kur jos atsiranda. Paaiškėjo, kad atsiranda iš I2C GPS modulio. Panagrinėjęs atidžiau radau kame reikalas. Pasirodo, MWC pasileidžia greičiau nei I2C GPS modulis ir, matomai, bando su juo bendraut, bet, kadangi tas dar neveikia, nieko iš to neišeina. O pasileidžia su uždelsimu dėl labai paprastos priežasties. Prie PMTK komandų yra pauzės. Jos reikalingos tam, kad modulis spėtų įvykdyti pradinio nustatymo komandas.

Serial.begin(38400);
delay(1500); //let it init
Serial.write(“$PMTK251,115200*1F\r\n”);
delay(300);
Serial.end();
Serial.begin(115200);
Serial.write(“$PGCMD,16,0,0,0,0,0*6A\r\n”);
delay(1000);
Serial.write(“$PGCMD,16,0,0,0,0,0*6A\r\n”);
delay(300);
Serial.write(“$PMTK220,100*2F\r\n”); // 10 Hz

Tačiau tuo pačiu tai gerokai uždelsia I2C GPS modulio startą. To išvengti galima tokiu būdu: padaryti pauzę, kad pats MWC pasileistų su uždelsimu. Patyrinėjau kur tą pauzę geriau įdėti. Įdėjau pradinio setupo procedūroje. Viskas susitvarkė, I2C klaidos pradingo. Skrydis po to parodė, kad viskas vėl puikiai veikia. Reiškia starto metu kažką MWC ar nuskaito, ar perduoda I2C moduliui (smulkiau nenagrinėjau). Tai neįvykdavo, todėl ir atsirado tokios anomalijos.

Gali kilti klausimas kam šios komandos išvis reikalingos? Jos reikalingos tam, kad galima būtų skristi be backup baterijos GPS modulyje. Kiekvieno starto metu modulis yra konfigūruojamas kaip reikia MWC. Jei naudot backup bateriją šios komandos nebūtinos, galima nustatyti vieną kartą ir modulis tai atsimins kol baterija bus išimta arba išsikraus. Beje, NMEA protokolui tai kažkodėl nepadaryta, todėl aš irgi pasirašau panašų komandų rinkinį kuris perjungia GPS modulio RS232 į 115200 greitį ir nustatomas NMEA greitis 10 arba 5 Hz. Tik tuo atveju, jei yra noro naudoti NMEA.

Ar GPS veikia geriau? Panašu, kad kažkiek geriau. Pozicijos laikymas artimas idealiam…

This entry was posted in RC modeliai. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *