Radijo valdymo grandinės ant mikrovaldiklių. DIY radijo valdymo pultas

„Pasidaryk pats“ radijo valdymas 12 komandų

Schema leidžia valdyti modelius ar kiti įrenginiai ir apkrovos ant atstumo.Vienu metu galima paspausti iki 8 mygtukų. Grandinę lengva pagaminti ir po surinkimo reikia tik valdiklių programinės įrangos. Komandų vykdymo indikatoriai – šviesos diodai. Žinoma, prie atitinkamų procesoriaus išėjimų per srovę ribojančius rezistorius galite prijungti, pavyzdžiui, galingų lauko tranzistorių vartus arba bipolinių tranzistorių bazes.

Siųstuvo grandinė:



Imtuvas


Super regeneratorius: pagal diagramoje ir darbinėse dalyse nurodytus parametrus jis turi 100% pakartojamumą.


Jo reguliavimas susideda tik iš tolimo kilpos ritės apsisukimai ir sujungimo talpos su antena parinkimas.3-ias dekoderio valdiklio išėjimas naudojamas signalo praėjimui valdyti sąrankos metu (su programine įranga prijungta vidinio komparatoriaus išvestis).Valdyti galima naudojant įprastą ULF.
Imtuvo dekoderis – PIC16F628A, jis dekoduoja ir vykdo gautas komandas.

Kodavimo-dekoderio sistema gali veikti tiek laidais, tiek su kitais imtuvais ir siųstuvais. Kiekvienas 0 ir 1 paketas iš kodavimo pusės yra „nudažytas“ 5,5 kHz virpesiais, kad būtų geresnis atsparumas triukšmui + kontrolinės sumos perdavimas.
Imtuvas turi būti maitinamas iš stabilizuoto 5 voltų šaltinio (schemoje neparodyta, plokštėje yra 5 A ROLL + diodas). Siųstuvas maitinamas nuo 3,6 voltų, bet ne daugiau kaip 5,5 voltų (plokštėje yra 5A ROLL + diodas).
Paspaustų mygtukų raštas PORTB (6–13 kaiščiai) siunčiančioje dalyje visiškai atsispindi priimančiojoje PORTB dalyje (6–13 kontaktai). Paspaustų mygtukų paveikslėlis PORTA (3>2, 4>15,15>16, 16>17).

Aš pats norėčiau pasakyti, kad tai puikus sprendimas bet kokioje nuotolinio valdymo situacijoje. Visų pirma, tai taikoma situacijoms, kai reikia valdyti daugybę įrenginių per atstumą. Net jei jums nereikia valdyti daugybės apkrovų per atstumą, verta kurti, nes dizainas nėra sudėtingas! Pora neretų komponentų yra mikrovaldiklis PIC16F628A ir mikroschema MRF49XA - siųstuvas-imtuvas

Nuostabus vystymasis ilgą laiką sklando internete ir sulaukia teigiamų atsiliepimų. Jis buvo pavadintas jo kūrėjo garbei (10 komandų radijo valdymas mrf49xa nuo blaze) ir yra adresu -

Žemiau yra straipsnis:

Siųstuvo grandinė:

Susideda iš valdymo valdiklio ir siųstuvo-imtuvo MRF49XA.

Imtuvo grandinė:

Imtuvo grandinė susideda iš tų pačių elementų kaip ir siųstuvas. Praktiškai skirtumas tarp imtuvo ir siųstuvo (neatsižvelgiant į šviesos diodus ir mygtukus) yra tik programinėje dalyje.

Šiek tiek apie mikroschemas:

MRF49XA- mažo dydžio siųstuvas-imtuvas, turintis galimybę veikti trijuose dažnių diapazonuose.
1. Žemo dažnio diapazonas: 430,24 - 439,75 MHz(2,5 kHz žingsnis).
2. Aukšto dažnio diapazonas A: 860,48–879,51 MHz(5 kHz žingsnis).
3. Aukšto dažnio diapazonas B: 900,72–929,27 MHz(7,5 kHz žingsnis).

Diapazono ribos nurodomos naudojant etaloninį kvarcą, kurio dažnis yra 10 MHz, kurį pateikia gamintojas. Su 11 MHz etaloniniais kristalais įrenginiai normaliai veikė 481 MHz dažniu. Išsamūs tyrimai dėl didžiausio dažnio „priveržimo“, palyginti su gamintojo deklaruotu dažniu, nebuvo atlikti. Tikėtina, kad jis gali būti ne toks platus kaip TXC101 luste, nes duomenų lape MRF49XA Minimas sumažintas fazinis triukšmas, vienas iš būdų tai pasiekti yra susiaurinti VCO derinimo diapazoną.

Įrenginiai turi šias technines charakteristikas:
Siųstuvas.
Galia - 10 mW.

Perdavimo režimu suvartojama srovė yra 25 mA.
Ramybės srovė - 25 µA.
Duomenų perdavimo greitis – 1kbit/sek.
Visada perduodamas sveikasis duomenų paketų skaičius.
FSK moduliacija.
Triukšmui atsparus kodavimas, kontrolinės sumos perdavimas.

Imtuvas.
Jautrumas - 0,7 µV.
Maitinimo įtampa - 2,2 - 3,8 V (pagal duomenų lapą ms, praktiškai veikia normaliai iki 5 voltų).
Nuolatinis srovės suvartojimas - 12 mA.
Duomenų perdavimo greitis iki 2 kbit/sek. Apribota programine įranga.
FSK moduliacija.
Triukšmui atsparus kodavimas, kontrolinės sumos apskaičiavimas gavus.
Darbo algoritmas.
Galimybė vienu metu paspausti bet kokį bet kokio skaičiaus siųstuvo mygtukų derinį. Imtuvas realiuoju režimu parodys paspaustus mygtukus su šviesos diodais. Paprasčiau tariant, kol paspaudžiamas siunčiančiosios dalies mygtukas (arba mygtukų derinys), užsidega atitinkamas šviesos diodas (arba šviesos diodų derinys) ant priimančiosios dalies.
Atleidus mygtuką (arba mygtukų derinį), atitinkami šviesos diodai iškart užgęsta.
Testavimo režimas.
Tiek imtuvas, tiek siųstuvas, tiekdami jiems maitinimą, 3 sekundėms pereina į bandymo režimą. Ir imtuvas, ir siųstuvas yra įjungti, kad 1 sekundę 2 kartus su 1 sekundės pauze perduotų EEPROM užprogramuotą nešlio dažnį (pauzės metu siuntimas išjungiamas). Tai patogu programuojant įrenginius. Tada abu įrenginiai yra paruošti naudoti.

Valdiklio programavimas.
Siųstuvo valdiklio EEPROM.


Viršutinė EEPROM eilutė po mirksėjimo ir tiekimo siųstuvo valdikliui atrodys taip...

80 1F – (4xx MHz subjuostas) – RG konfigūracija
AC 80 - (tiksli dažnio reikšmė 438 MHz) - Freg Setting RG
98 F0 – (didžiausia siųstuvo galia, nuokrypis 240 kHz) – Tx Config RG

82 39 – (siųstuvas įjungtas) – Pow Management RG.

Pirmoji antrosios eilutės atminties ląstelė (adresas 10 val) — identifikatorius. Numatytasis čia FF. Identifikatorius gali būti bet kas, esantis baite (0 ... FF). Tai yra individualus nuotolinio valdymo pulto numeris (kodas). Tuo pačiu adresu imtuvo valdiklio atmintyje yra jo identifikatorius. Jie turi atitikti. Tai leidžia sukurti skirtingas imtuvo/siųstuvo poras.

Imtuvo valdiklis EEPROM.
Visi toliau nurodyti EEPROM nustatymai bus automatiškai įrašyti į savo vietas, kai tik valdikliui bus tiekiamas maitinimas po jo programinės įrangos atnaujinimo.
Kiekvienoje langelyje esantys duomenys gali būti keičiami savo nuožiūra. Jei įvesite FF į bet kurį duomenims naudojamą langelį (išskyrus ID), kitą kartą įjungus maitinimą, šis langelis iš karto bus perrašytas numatytaisiais duomenimis.

Viršutinė EEPROM eilutė po to, kai mirksi programinė įranga ir tiekiamas maitinimas imtuvo valdikliui, atrodys taip...

80 1F – (4xx MHz subjuostas) – RG konfigūracija

AC 80 - (tiksli dažnio reikšmė 438 MHz) - Freg Setting RG
91 20 — (imtuvo dažnių juostos plotis 400 kHz, didžiausias jautrumas) — Rx Config RG
C6 94 – (duomenų greitis – ne didesnis kaip 2 kbit/sek) – duomenų perdavimo sparta RG
C4 00 – (AFC išjungtas) – AFG RG
82 D9 – (imtuvas įjungtas) – Pow Management RG.

Pirmoji antrosios eilutės atminties ląstelė (adresas 10 val) — imtuvo identifikatorius.
Norėdami teisingai pakeisti tiek imtuvo, tiek siųstuvo registrų turinį, naudokite programą RFICDA pasirinkdami lustą TRC102 (tai yra MRF49XA klonas).
Pastabos
Išvirkštinė lentų pusė – vientisa masė (skarduota folija).
Patikimo veikimo nuotolis matomumo sąlygomis yra 200 m.
Imtuvo ir siųstuvo ritės apsisukimų skaičius yra 6. Jei naudosite 11 MHz etaloninį kristalą, o ne 10 MHz, dažnis bus didesnis nei maždaug 40 MHz. Maksimali galia ir jautrumas šiuo atveju bus 5 imtuvo ir siųstuvo grandinių apsisukimai.

Mano įgyvendinimas

Įrenginio diegimo metu po ranka turėjau nuostabią kamerą, todėl lentos gamybos ir dalių montavimas ant plokštės pasirodė kaip niekad įdomus. Ir štai prie ko tai privedė:

Pirmasis žingsnis yra padaryti spausdintinę plokštę. Norėdami tai padaryti, stengiausi kiek įmanoma išsamiau aptarti jo gamybos procesą.

Išpjauname reikiamo dydžio lentą.Matome, kad yra oksidų - reikia jų atsikratyti.Storis buvo 1,5 mm.

Kitas etapas yra paviršiaus valymas, tam turėtumėte pasirinkti reikiamą įrangą, būtent:

1. Acetonas;

2. Švitrinis popierius (nulinės klasės);

3. Trintukas

4. Priemonės kanifolijos, fliuso, oksidų valymui.

Acetonas ir priemonės kontaktams plauti ir valyti nuo oksidų bei eksperimentinės plokštės

Valymo procesas vyksta taip, kaip parodyta nuotraukoje:

Švitriniu popieriumi nuvalome stiklo pluošto laminato paviršių. Kadangi jis yra dvipusis, viską darome iš abiejų pusių.

Imame acetoną ir nuriebaliname paviršių + nuplauname likusius švitrinio popieriaus trupinius.

O šydas – švari lenta, antspaudą galite uždėti lazeriniu lygintuvu. Bet tam reikia antspaudo :)

Iškirpti iš bendro kiekio Nukirpti perteklių

Paimame išpjautas imtuvo ir siųstuvo sandariklius ir uždedame juos ant stiklo pluošto taip:

Signeto tipas ant stiklo pluošto

Apversdamas jį

Paimame lygintuvą ir viską kaitiname tolygiai, kol nugarinėje pusėje atsiras pėdsakas. SVARBU NEPERkaitinti!Priešingu atveju dažai plauks! Palaikykite 30-40 sekundžių. Tolygiai perbraukiame sunkias ir prastai šildomas signeto vietas. Gero dažų perdavimo į stiklo pluoštą rezultatas yra pėdsakų įspaudas.

Lygus ir svarus lygintuvo pagrindas Užtepkite antspaudą įkaitintu lygintuvu
Spaudžiame signetą ir verčiame.

Taip atrodo baigtas atspausdintas ženklas antroje blizgaus žurnalinio popieriaus pusėje. Takeliai turėtų būti matomi maždaug taip, kaip nuotraukoje:



Panašų procesą atliekame su antruoju ženklu, kuris jūsų atveju gali būti imtuvas arba siųstuvas. Viską padėjau ant vieno stiklo pluošto gabalo



Viskas turėtų atvėsti. Tada atsargiai pirštu nuimkite popierių po tekančiu vandeniu. Sukite jį pirštais, naudodami šiek tiek šiltą vandenį.

Po šiek tiek šiltu vandeniu Pirštais susukite popierių Valymo rezultatas

Ne viso popieriaus galima išimti tokiu būdu. Kai lenta išdžiūsta, lieka balta „patina“, kurią išgraviravus, tarp takelių gali susidaryti neišgraviruotų vietų. Atstumas mažas.



Todėl imame ploną pincetą arba čigonišką adatą ir pašaliname perteklių. Nuotrauka puikiai parodo!



Be popieriaus likučių, nuotraukoje matyti, kaip dėl perkaitimo kai kuriose vietose sulipo mikroschemos kontaktinės trinkelės. Juos reikia atsargiai atskirti, naudojant tą pačią adatą, kuo kruopščiau (nubraukiant dalį dažų) tarp kontaktinių kilimėlių.

Kai viskas paruošta, pereiname prie kito etapo – oforto.

Kadangi turime dvipusį stiklo pluoštą, o atvirkštinė pusė yra vientisa masė, ten reikia laikyti varinę foliją. Šiuo tikslu jį užklijuosime juostele.

Lipni juosta ir apsaugota lenta Antroji pusė yra apsaugota nuo ėsdinimo lipnios juostos sluoksniu. Elektrinė juosta kaip „rankenėlė“, leidžianti lengvai ėsdinti plokštę

Dabar išgraviruojame lentą. Aš tai darau senamadišku būdu. 1 dalį geležies chlorido atskiedžiu iki 3 dalių vandens. Visas tirpalas yra indelyje. Patogu laikyti ir naudoti. Aš pakaitinu mikrobangų krosnelėje.


Kiekviena lenta buvo išgraviruota atskirai. Dabar paimame į rankas jau pažįstamą „nulį“ ir nuvalome tonerį ant lentos

Aš apsisprendžiau atrakinti ketvirtą valdymo ašį ir įdiegti nuotolinio valdymo pulte mygtukų, jungiklių ir šviesos diodų debesį. Tada tai buvo grandinės, lituoklio ir programinės įrangos klausimas. Kaip vėliau paaiškėjo, nebuvo pakankamai mygtukų ir jungčių, todėl turėjau juos įdiegti iš naujo.

Naminio radijo valdymo pulto schema

Grandinė yra pagrįsta Atmega8 mikrovaldikliu. Jo kojos tiesiogine prasme buvo „nuo galo iki galo“. Norėdami pamatyti didesnę diagramą, spustelėkite paveikslėlį (schema taip pat yra archyve straipsnio pabaigoje).

Suskaičiuokime: 10 mygtukų/jungiklių + 2 šviesos diodai + 2 kojelės kvarcui (reikia laiko tikslumo PWM signalo) + 5 ADC kanalai + 2 kojos UART + 1 kanalas PPM signalui išvesti į RF modulį = 22 MK kojos . Lygiai taip pat, kaip Atmega8, kuris yra sukonfigūruotas programavimui grandinėje (turiu omenyje RESET kaištį, dar žinomą kaip PC6).

LEDus prijungiau prie PB3 ir PB5 (MOSI ir SCK programavimo jungtis).Dabar ikeldamas firmware stebesiu graziu mirksima (tam tikra prasme nenaudinga - bet cia vaikiausi vizualiai grazaus efekto).

Priminsiu nuo ko viskas prasidėjo – turėjau HF modulį iš Hobiking įrangos (jį pakeitė FrSky HF modulis), turėjau sraigtasparnio įrangą. Kadangi rankenėlių įrangoje nebuvo (o kodėl jos būtų?), tai iš šešių kanalų įprastai (standartiškai) naudosiu tik 4 (po du kiekvienai lazdelei). Vieną kanalą nusprendžiau išleisti ant 8 nepriklausomų mygtukų/jungiklių, kitą - programiškai imituoti suktuko sukimąsi (pavyzdžiui, gražus važiuoklės atleidimas - paspaudi jungiklį, ir važiuoklė atleidžiama 10 sekundžių). Kitas jungiklis vis dar neapsisprendė, ką su juo daryti.
Šviesos diodai, rodantys jungiklių būseną, veikia nepriklausomai nuo mikrovaldiklio. Vienas iš programine įranga valdomų šviesos diodų yra atsakingas už išsikrovusio akumuliatoriaus rodymą, antrasis rodo esamą programinės įrangos suktuko būseną.

Be mygtukų ir šviesos diodų, taip pat norėjau pridėti standartinę (man) UART jungtį prie korpuso (ryšiui su kompiuteriu, tada parašysiu savo sąrankos programą), ir jungtį su PPM signalo išvestimi - nuotolinio valdymo pulto prijungimas prie treniruoklio. Po kovos su programuotojo jungtimi supratau, kad ji man netinka - ir aš ją taip pat išėmiau. Vienintelis blogas dalykas yra tai, kad kyla pavojus trumpinti jungties kaiščius, nors jie yra „įleidžiami“ į korpusą. Bet tai galima apdoroti 220 omų serijos rezistoriais (tai suteikia 99% garantiją, kad mikrovaldiklis išliks nepažeistas)

Kai priartėjau prie įrangos naudojimo, supratau, kad pamiršau mygtuką Bind (paspaudus siųstuvas pereina į imtuvo paieškos režimą). Aš irgi turėjau tai užbaigti

Radijo nuotolinio valdymo pulto plokštė

Labai paprasta – dauguma kojų tiesiog iškeliamos. Plokštėje yra 5 voltų stabilizatorius ir įėjimo įtampos matavimo grandinė. Kodėl naudojote DIP paketą? Ką tik turėjau... be to - kodėl gi ne DIP...

Kai visa tai litavau, šovė mintis: ar tikrai veiks šis laidų debesis?!
Bet vis tiek veikia. Dažniausiai mano lentos būna švarios nuo kanifolijos... bet čia aš nuolat blaškiausi su skirstytuvu, kol paaiškėjo, kad tai programinė, o ne aparatinė problema. Maitinimas iš dviejų skardinių lipo (kas kažkada liko iš įprastos trijų skardinių, kai buvo pamiršta atjungti nuo apkrovos. Dėl to viena skardinė visiškai išsikrovė). Nepaisant to, esu numatęs galimybę dirbti iš AA baterijų. Niekada nežinai

Dėl to gavau keturių kanalų įrangą su savo firmware, kurioje galiu keisti ką noriu. Apie programinę-aparatinę įrangą ir programinę įrangą parašysiu vėliau.

Dabar galite atsisiųsti dabartinę programinės įrangos versiją. Kol kas jis visai nekonfigūruojamas (t.y. kol kas nėra nustatymų reversui, išlaidoms, kompensavimui ir kitoms „gėrybėms“). Tiesiog nuskaitoma rankenėlių būsena ir generuojamas PPM signalas. Mygtukai ir MOD jungiklis dar neveikia. Bet veikia virtualus servo (5 kanale) ir matuojamas įėjimo įtampos lygis. Jei jis yra per mažas, IND šviesos diodas pradės mirksėti (programinė įranga automatiškai nustato, kiek elementų yra ličio polimero akumuliatoriuje). Ir taip pat - išlaidos 4 kanale (tas, kur pridėjau savo potenciometrą) yra išpūstos, kad kompensuotų nepilną potenciometro sukimosi diapazoną.

Šiame straipsnyje pamatysite, kaip savo rankomis pasidaryti radijo valdiklį 10 komandų. Šio įrenginio veikimo nuotolis yra 200 metrų ant žemės ir daugiau nei 400 metrų ore.



Diagrama paimta iš svetainės vrtp.ru
Siųstuvas

Imtuvas


Mygtukus galima spausti bet kokia tvarka, nors viskas vienu metu veikia stabiliai. Naudodami jį galite valdyti įvairias apkrovas: garažo vartus, žibintus, lėktuvų modelius, automobilius ir taip toliau... Apskritai viskas, viskas priklauso nuo jūsų fantazijos.

Darbui mums reikia dalių sąrašo:
1) PIC16F628A-2 vnt (mikrovaldiklis) (nuoroda į aliexpress pic16f628a )
2) MRF49XA-2 vnt (radijo siųstuvas) (nuoroda į aliexpress MRF 49 XA )
3) 47nH induktorius (arba apvyniokite pats) - 6 vnt
Kondensatoriai:
4) 33 uF (elektrolitinis) - 2 vnt.
5) 0,1 uF-6 vnt
6) 4,7 pF-4 vnt
7) 18 pF - 2 vnt
Rezistoriai
8) 100 omų - 1 vnt
9) 560 omų - 10 vnt
10) 1 Com-3 vnt
11) LED - 1 vnt
12) mygtukai - 10 vnt.
13) Kvarcas 10MHz-2 vnt
14) Tekstolitas
15) Lituoklis
Kaip matote, prietaisas susideda iš minimalių dalių ir jį gali atlikti bet kas. Jūs tiesiog turite to norėti. Prietaisas labai stabilus, po surinkimo veikia iš karto. Grandinė gali būti padaryta kaip ant spausdintinės plokštės. Tas pats su montuojamu montavimu (ypač pirmą kartą, bus lengviau programuoti). Pirmiausia gaminame lentą. Atsispausdinkite


Ir lentą nuodijame.

Lituojame visus komponentus, geriau PIC16F628A lituoti kaip paskutinį, nes jį dar reikės užprogramuoti. Visų pirma, lituokite MRF49XA


Svarbiausia būti labai atsargiam, ji turi labai subtilių išvadų. Kondensatoriai aiškumo dėlei. Svarbiausia nepainioti 33 uF kondensatoriaus polių, nes jo gnybtai yra skirtingi, vienas yra +, kitas - -. Visi kiti kondensatoriai gali būti lituojami kaip tik norite, jie neturi poliškumo ant gnybtų


Galite naudoti įsigytas 47nH rites, bet geriau jas suvynioti patiems, jos visos vienodos (6 0,4 vielos apsisukimai ant 2 mm įtvaro)

Kai viskas sulituota, viską gerai patikriname. Toliau imame PIC16F628A, jį reikia užprogramuoti. Naudojau PIC KIT 2 lite ir naminį lizdą
Čia yra nuoroda į programuotoją ( 2 paveikslėlių rinkinys )


Čia yra prijungimo schema


Viskas paprasta, todėl nebijokite. Tiems, kas toli nuo elektronikos, patariu nepradėti nuo SMD komponentų, o pirkti viską DIP dydžio. Pats tai dariau pirmą kartą


Ir viskas tikrai pavyko iš pirmo karto


Atidarykite programą, pasirinkite mūsų mikrovaldiklį

Įrašas užsidegė ir aš sugalvojau pasigaminti savo lėktuvą. Pasiėmiau jau paruoštus brėžinius ir iš kinų užsisakiau variklius, baterijas ir propelerius. Bet nusprendžiau pats pasidaryti radijo valdiklį, pirma - įdomiau, antra - reikia kažkuo užsiimti, kol pakeliui pakeliui su likusiomis atsarginėmis dalimis, ir trečia - yra galimybė būti originaliam ir pridėkite visokių gėrybių.
Saugokitės nuotraukų!

Kaip ir ką valdyti

Paprasti žmonės pasiima imtuvą, įjungia servo ir greičio reguliatorių, judina nuotolinio valdymo pulto svirtis ir mėgaujasi gyvenimu nesidomėdami veikimo principais ir nesigilindami į smulkmenas. Mūsų atveju tai neveiks. Pirmoji užduotis buvo išsiaiškinti, kaip valdomi servosai. Viskas pasirodo gana paprasta, pavara turi tris laidus: + maitinimo, - maitinimo ir signalo. Ant signalo laido yra stačiakampiai kintamo darbo ciklo impulsai. Norėdami suprasti, kas tai yra, pažiūrėkite į paveikslėlį:

Taigi, jei norime nustatyti pavarą į kraštinę kairę padėtį, turime siųsti 0,9 ms trukmės impulsus su 20 ms intervalu, jei į kraštutinę dešinę - 2,1 ms trukmę, intervalas yra toks pat. , na, su vidurinėmis pozicijomis yra tas pats. Kaip paaiškėja, greičio reguliatoriai valdomi panašiai. Tie, kurie yra temoje, pasakys, kad tai yra įprastas PWM, kurį galima įdiegti bet kuriame mikrovaldiklyje - smulkmena. Taigi aš taip nusprendžiau, vietinėje parduotuvėje nusipirkau servo mašiną ir ant duonos lentos prikniedžiau jam vadinamąjį ATtiny13 servo testerį. Ir tada paaiškėjo, kad PWM nėra visiškai paprastas, bet turi spąstų. Kaip matyti iš aukščiau pateiktos diagramos, darbo ciklas (impulso trukmės ir periodo trukmės santykis) yra nuo 5% iki 10% (toliau aš imsiu 1,0 ms ir 2,0 ms trukmės impulsus kaip kraštutines padėtis ) 256 skaitmenų PWM skaitikliui ATtiny13, tai atitinka reikšmes nuo 25 iki 50. Tačiau tai su sąlyga, kad skaitikliui užpildyti prireiks 20 ms, tačiau iš tikrųjų tai neveiks, o 9,6 MHz dažniui ir 1024 prescaler, turime apriboti skaitiklį iki 187 (TOR), tokiu atveju gausime 50,134 Hz ​​dažnį. Dauguma (jei ne visi) servo įrenginiai neturi tikslaus atskaitos dažnio generatoriaus, todėl valdymo signalo dažnis gali šiek tiek svyruoti. Jei paliksite skaitiklio TOP 255, tada valdymo signalo dažnis bus 36,76 Hz - jis veiks kai kuriuose diskuose (galbūt su trikdžiais), bet ne visuose. Taigi, dabar turime 187 skaitmenų skaitiklį, kurio 5–10% atitinka reikšmes nuo 10 iki 20 - iš viso 10 reikšmių, tai bus šiek tiek diskretiška. Jei ketinate žaisti su laikrodžio dažniu ir išankstiniu skalavimu, žemiau yra 8 bitų PWM palyginimo lentelė:

Tačiau dauguma mikrovaldiklių turi 16 bitų (ar daugiau) laikmatį PWM generuoti. Čia diskretiškumo problema iš karto išnyks ir dažnis gali būti tiksliai nustatytas. Ilgai neaprašysiu, iškart duosiu ženklą:

Nemanau, kad Kinijos servo 600 ir 1200 verčių skirtumas yra reikšmingas, todėl padėties nustatymo tikslumo problema gali būti laikoma uždaryta.

Kelių kanalų valdymas

Sutvarkėme vieną servo, bet lėktuvui jų reikia mažiausiai trijų ir greičio reguliatoriaus. Paprastas sprendimas yra paimti mikrovaldiklį su keturiais 16 bitų PWM kanalais, tačiau toks valdiklis bus brangus ir greičiausiai užims daug vietos plokštėje. Antrasis variantas yra naudoti programinę įrangą PWM, tačiau procesoriaus laikas taip pat nėra pasirinkimas. Jei dar kartą pažiūrėtumėte į signalų diagramas, tai 80% atvejų jis neneša jokios informacijos, todėl racionaliau būtų nustatyti tik patį impulsą 1-2 ms naudojant PWM. Kodėl darbo ciklas kinta tokiose siaurose ribose, nes būtų lengviau generuoti ir nuskaityti impulsus, kurių darbo ciklas yra bent 10–90%? Kodėl mums reikia to neinformatyvaus signalo, kuris užima 80 % laiko? Įtariau, kad galbūt šiuos 80% gali užimti impulsai kitoms pavaroms, tada šis signalas yra padalintas į keletą skirtingų. Tai yra, per 20 ms laikotarpį gali tilpti 10 impulsų, kurių trukmė yra 1-2 ms, tada šis signalas kažkokiu demultiplekseriu yra padalintas į 10 skirtingų, kurių periodo trukmė yra tik 20 ms. Vos pasakęs, PROTEUS nubraižiau tokią diagramą:


74HC238 veikia kaip demultiplekseris; impulsai iš mikrovaldiklio išvesties tiekiami į jo įvestį E. Šie impulsai yra PWM, kurių periodas yra 2 ms (500 Hz), o darbo ciklas yra 50–100%. Kiekvienas impulsas turi savo darbo ciklą, nurodantį kiekvieno kanalo būseną. Taip atrodo signalas E įėjime:


Kad 74HC238 žinotų, į kurią išvestį siųsti srovės signalą, naudojame mikrovaldiklio PORTC ir demultiplekserio A, B, C įėjimus. Dėl to išėjimuose gauname šiuos signalus:


Išvesties signalai gaunami tinkamu dažniu (50Hz) ir darbo ciklu (5-10%). Taigi, jums reikia sugeneruoti PWM, kurio dažnis yra 500 Hz ir užpildymas 50–100%, čia yra lentelė, skirta nustatyti 16 bitų skaitiklio išankstinį skalavimą ir TOP:


Įdomu tai, kad galimas PWM reikšmių skaičius yra lygiai 1000 kartų mažesnis nei laikmačio dažnis.
Programinės įrangos diegimas
„ATmega8“, kurio laikrodžio dažnis yra 16 MHz, „AtmelStudio6“ viskas įgyvendinama taip: pirma, apibrėžiame kraštutinių servo padėčių skaitiklio vertes:
#define LOW 16000U #define HIGH 32000U
tada inicijuojame PWM generatorių laikmatyje / skaitiklyje1:
OCR1A = AUKŠTAS; //Nustatykite TOP TCCR1A = 0<Belieka įdiegti pertraukimus:
ISR(TIMER1_COMPA_vect) //pertraukti, kai pasiekiama viršutinė skaitiklio vertė, prieš pat kito impulso pradžią ( //c_num yra kintamasis, nurodantis esamo kanalo numerį, kanalai yra kanalo reikšmių masyvas, jei (c_num<= 7) { OCR1B = channels; } else { OCR1B = 0; //отключаем ШИМогенератор для несуществующих в демультиплексоре 8 и 9 канала } } ISR(TIMER1_COMPB_vect, ISR_NOBLOCK)// прерывание возникающее в конце импульса { if (c_num <= 7) { PORTC = c_num; //для каналов 0-7 выводим номер канала на PORTC } //и изменяем значение счетчика от 0 до 9 if (c_num >= 9) ( c_num = 0; ) else ( c_num++; ) )
Visuotiniu mastu įgalinkite pertraukimus ir baigsite, įveskite reikšmes nuo LOW iki HIGH į kanalus ir pakeisite reikšmes kanaluose.

Diegimas aparatinėje įrangoje

Na, mes sutvarkėme teoriją, laikas visa tai įgyvendinti. ATmega8A mikrovaldiklis buvo pasirinktas kaip sistemos smegenys, kvarcas veikia 16 MHz dažniu (ne todėl, kad norėjau 16 000 servo pozicijų, o todėl, kad turėjau keletą tokių gulinčių). MK valdymo signalas bus priimtas per UART. Rezultatas yra tokia diagrama:


Po kurio laiko pasirodė ši skara:




Dviejų trijų kontaktų jungčių nelitavau, nes man jų nereikia, o iš eilės nelituoja, nes neturiu metalizuotų skylių, o apatinėje jungtyje iš abiejų pusių takelius būtų galima pakeisti į laidas, tačiau programinėje įrangoje nėra problemų išvesti signalą į bet kurią jungtį. Taip pat trūksta 78L05, nes mano variklio reguliatoriuje yra įmontuotas stabilizatorius (WE).
Duomenims priimti HM-R868 radijo modulis yra prijungtas prie plokštės:


Iš pradžių galvojau jungti tiesiai į plokštę, bet tokia konstrukcija netilpo į lėktuvą, teko tai daryti per laidą. Jei pakeisite programinę-aparatinę įrangą, programavimo jungties kontaktai gali būti naudojami kai kurioms sistemoms įjungti / išjungti (šoniniai žibintai ir kt.)
Plokštė kainavo apie 20 UAH = 2,50 USD, imtuvas - 30 UAH = 3,75 USD.

Perduodama dalis

Lėktuvo dalis yra, belieka susitvarkyti su antžemine įranga. Kaip jau rašyta anksčiau, duomenys perduodami per UART, po vieną baitą kiekvienam kanalui. Iš pradžių prijungiau savo sistemą laidu per adapterį prie kompiuterio ir išsiunčiau komandas per terminalą. Tam, kad dekoderis nustatytų siuntinio pradžią, o ateityje atrinktų būtent jam adresuotas siuntas, pirmiausia išsiunčiamas identifikacinis baitas, po to 8 baitai, apibrėžiantys kanalų būseną. Vėliau pradėjau naudoti radijo modulius; kai siųstuvas buvo išjungtas, visi varikliai pradėjo siaubingai trūkčioti. Norėdami filtruoti signalą nuo triukšmo, su dešimtuoju baitu siunčiu XOR iš visų 9 ankstesnių baitų. Padėjo, bet silpnai pridėjau ir laiko tarpo tarp baitų patikrą, viršijus visą siuntimą ignoruojamas ir vėl pradedamas priėmimas, laukiant identifikatoriaus baito. Pridėjus kontrolinę sumą XOR pavidalu, komandų siuntimas iš terminalo tapo įtemptas, todėl greitai sujungiau šią programą slankikliais:


Skaičius apatiniame kairiajame kampe yra kontrolinė suma. Kompiuteryje judindami slankiklius, pajudėjo lėktuvo vairai! Apskritai visa tai derinau ir pradėjau galvoti apie nuotolinio valdymo pultą, jam nusipirkau šias vairasvirtes:

Bet tada man kilo mintis. Vienu metu mane traukė visokie skrydžio treniruokliai: „IL-2 Sturmovik“, „Lock On“, „MSFSX“, „Ka-50 Black Shark“ ir kt. Atitinkamai turėjau „Genius F-23“ vairasvirtę ir nusprendė jį prisukti prie minėtos programos slankikliais. Paieškojau „Google“, kaip tai įgyvendinti, radau šį įrašą ir pavyko! Man atrodo, kad valdyti lėktuvą pilnaverčiu vairasvirte yra daug šauniau, nei naudojant nedidelę pultelio lazdelę. Apskritai viskas kartu parodyta pirmoje nuotraukoje - tai yra netbook, vairasvirtė, FT232 keitiklis ir prie jo prijungtas HM-T868 siųstuvas. Konverteris jungiamas 2m laidu nuo spausdintuvo, kuris leidžia montuoti ant kokio medžio ar panašaus.

Pradėkite!

Taigi, yra lėktuvas, yra radijo valdymas - Eime! (c) Pirmas skrydis buvo atliktas virš asfalto, rezultatas buvo per pusę sulaužytas fiuzeliažas ir pusiau suplyšęs variklis. Antrasis skrydis buvo atliktas ant minkštesnio paviršiaus:

Vėlesni 10 skrydžių taip pat nebuvo itin sėkmingi. Manau, kad pagrindinė priežastis yra ypatingas vairasvirtės diskretiškumas - posūkiui ji davė tik 16 reikšmių (vietoj galimų 256), su žingsnio ašimi jis nebuvo geresnis. Tačiau kadangi dėl bandymų orlaivis buvo labai apgadintas ir jo negalima taisyti:


– Patikrinti šios versijos tikrumą kol kas neįmanoma. Šiai versijai pritaria ir vaizdo įraše užfiksuotas bandymas išlyginti lėktuvą – jis skrenda pasviręs, o po to smarkiai krenta priešinga kryptimi (bet turėtų būti sklandžiai). Čia yra vaizdesnis vaizdo įrašas:

Įrangos veikimo nuotolis apie 80m, ji pagauna ir toliau, bet karts nuo karto.
Na, tai viskas, ačiū už dėmesį. Tikiuosi, kad pateikta informacija kam nors bus naudinga. Mielai atsakysiu į visus klausimus.