Kazalo:

Vpad v Stm32: Daljinski upravljalnik za domači medijski center: 4 koraki (s slikami)
Vpad v Stm32: Daljinski upravljalnik za domači medijski center: 4 koraki (s slikami)

Video: Vpad v Stm32: Daljinski upravljalnik za domači medijski center: 4 koraki (s slikami)

Video: Vpad v Stm32: Daljinski upravljalnik za domači medijski center: 4 koraki (s slikami)
Video: Ремонт китайских airpods 2024, November
Anonim
Falling in Stm32: Remote Control for Home Media Center
Falling in Stm32: Remote Control for Home Media Center

To je popoln prototip daljinskega upravljalnika za domači medijski center, ki temelji na mikrokontrolerju smt32, stm32f103c8t6, znanem kot "bluepill" plošča. Recimo, da za domači medijski center uporabljate računalnik. To je zelo prilagodljiva rešitev, ki vam omogoča, da na notranji trdi disk vstavite ogromno video knjižnico ali pa predvajate video iz omrežja, na primer youtube ali tako, s kodeki ali predvajanjem videa sploh nimate težav, ker je zelo kadar koli je enostavno posodobiti predvajalnik programske opreme. Glavna pomanjkljivost te rešitve je, da za nadzor predvajanja uporabite miško in tipkovnico. IR daljinski upravljalnik je za to zelo primeren način.

V tem članku bom pokazal, kako ustvariti lasten daljinski upravljalnik z uporabo plošče s čipom.

1. korak: Ideja

Ideja
Ideja
Ideja
Ideja

Glavna ideja je zelo preprosta: plošča z načrtom ima vgrajena USB vrata in lahko deluje kot USB HID tipkovnica. Če na ploščo priključimo IR sprejemnik, bi lahko prevedel ukaz z vašega daljinskega upravljalnika IR v 'pritisk tipke' na virtualni tipkovnici. Dodatni gonilniki niso potrebni!

V svetu okoli nas je veliko protokolov IR. Vsak televizor prodajalca VCS ima svoj IR protokol. Toda vsi ti protokoli imajo nekaj skupnega: za kodiranje signala uporabljajo impulzno modulacijo. Običajno obstaja neka uvodna beseda: dolg impulz pred prvim bitom v paketu. Nato IR nadzor pošlje celoten paket z 0 in 1 in zaključi prenos s končnim dolgim impulzom. Za dekodiranje bita moramo izmeriti dolžino impulza in dolžino vrha. Običajno sta vršna dolžina logike 0 in logike 1 enaka, razlika je v celotni dolžini impulza.

Mikro krmilniki stm32 imajo vgrajeno funkcijo za zajemanje PWM signala. Skoraj vsak časovnik mikro krmilnika lahko vstavite v 'PWM signal signal more', ko kanalske spremenljivke časovnika shranijo skupno dolžino impulza in njegovo največjo dolžino. Tu moram poudariti majhno podrobnost: ko IR sprejemnik ujame signal, napetost na njegovem delovnem zatiču postane 0, v stanju mirovanja pa je napetost v delovnem zatiču 5 ali 3,3 voltov, odvisno od napajalne napetosti IR sprejemnika. To pomeni, da sprejemnik "obrne" signal.

Z načinom zajemanja PWM lahko mikro krmilnik stm32 enostavno spremenite v daljinskega IR prevajalnika iz daljinskega upravljalnika v kode tipkovnice. Nato lahko zaženete svojo najljubšo programsko opremo za vizualizacijo, na primer Kodi iz VLC, da predvajate svoj najljubši film v medijskem središču.

2. korak: Ustvarjanje krmilnika

Ustvarjanje krmilnika
Ustvarjanje krmilnika
Ustvarjanje krmilnika
Ustvarjanje krmilnika
Ustvarjanje krmilnika
Ustvarjanje krmilnika
Ustvarjanje krmilnika
Ustvarjanje krmilnika

Za programiranje mikro krmilnika stm32 bi priporočil brezplačno programsko opremo podjetja STM: sistemsko delovno mizo (aka ac6) in orodje za konfiguracijo plošče cubeMX. Za nalaganje programske opreme v mikro krmilnik lahko uporabite čip klon adapterja ST-Link V2. Projektne datoteke sistemske delovne mize, priložene temu koraku, datoteka F1-IR_remote.zip.

Orodje za konfiguracijo plošče poenostavi postopek začetne konfiguracije strojne opreme našega mikro krmilnika.

Če uporabljate orodje sistemske delovne mize, lahko uporabite samo preneseni projekt. Če pa želite podrobneje raziskati projekt, lahko ustvarite konfiguracijo plošče v cubeMX:

  • Ustvarite nov projekt in izberite ploščo stm32f103c8
  • Izberite "Crystal/Ceramic Resonator" za postavko "High Speed Clock (HSE)" v meniju RCC.
  • Izberite "Serial Wire" za element "Debug" v meniju SYS.
  • Časovnik št. 2 (meni TIM2) konfigurirajte v načinu zajema PWM, kot je prikazano na sliki:

    • Slave Mode -> Reset Mode
    • Vir sprožilca -> TI1FP1
    • Vir ure -> Notranja ura
    • Channel1 -> Neposredni način zajema vhoda
  • V meniju USB nastavite potrditveno polje 'Naprava (FS)'
  • Izberite element spustnega menija 'Razred naprav človeškega vmesnika (HID)' v elementu 'Razred FS IP' v meniju USB_DEVICE
  • Na nadzorni plošči ure zagotovite 72 MHz časovniku 2, ker potrebujemo števec časovnika na vsakih 1 mks.
  • Na konfiguracijski plošči konfigurirajte napravo USB, kot je prikazano na sliki
  • Na konfiguracijski plošči nastavite časovnik#2 na naslednji način:

    • Predkaler - 71 (od 0 do 71) - 1 mikro sekunda kljuk!
    • Način števca - gor
    • Števec - 39999 (dolgi impulz bi morali izmeriti)
    • Vhodni kanal za zajem 1 - padajoči rob (ne pozabite, da je signal iz IR sprejemnika obrnjen)

V načinu zajema PWM bi časovnik#2 deloval na naslednji način:

Ko zazna padajočo fronto, bi se števec časovnika shranil v register channel1, števec časovnika pa bi bil ponastavljen na 0. Nato bi časovnik še naprej odšteval smer. Tako lahko enostavno merimo dolžino impulza v mikro sekundah.

Privzeto razred STM32 USB HID simulira miško USB. Tu najdete navodila za pretvorbo krmilnika v tipkovnico.

3. korak: Prilagoditev krmilnika

Projekt deluje z daljinskim upravljalnikom Panasonic in medijskim centrom Kodi. Če želite projekt prilagoditi svojemu krmilniku, morate v glavo Inc/code.h dodati matriko kod za vaš daljinski upravljalnik, kot sem to storil za daljinski upravljalnik Panasonic (panasonicCode). Kot lahko vidite, ima vsak ukaz edinstven ID (v naštevanju IRcommmand). Projekt prepozna 24 ukazov (0-23). Ukazi so razvrščeni glede na pomembnost.

typedef enum {IR_play = 0, IR_stop, IR_zahod, IR_OS, IR_down, IR_sl, IR_stavka, IR, IR_power, IR_unknown} ukaz IR;

konst uint16_t kbrd_kodi = {HID_KEY_P, HID_KEY_X, HID_KEY_SPACE, HID_KEY_F, HID_KEY_R, HID_KEY_0, HID_KEY_M, HID_KEY_BACKSPACE, HID_KEY_LEFT, HID_KEY_RIGHT, HID_KEY_UP, HID_KEY_DOWN, HID_KEY_ENTER, HID_KEY_DOT, HID_KEY_COMMA, HID_KEY_S, HID_KEY_I, HID_KEY_T, HID_KEY_L, (uint16_t (HID_LEFT_CTRL) << 8) | HID_KEY_T, HID_KEY_V, HID_KEY_Z, HID_KEY_W, HID_KEY_C};

konst uint32_t panasonicCode = {0xd00505d, 0xd00000d, 0xd00606d, 0xd00525f, 0xd00929f, 0x100eced, 0xd00101d, 0x1002b2a, 0x1007273, 0x100f2f3, 0x1005253, 0x100d2d3, 0x1009293, 0x1002c2d, 0x100acad, 0x1009c9d, 0x1008e8f, 0x1004e4f, 0x100cecf, 0x1000e0f, 0x180c041, 0x1801091, 0x180a021, 0xd00bcb1};

Nato dodajte svoj daljinski upravljalnik v metodo init () v IR.cpp s funkcijo addRemote (). Argumenti funkcije so:

  • Število bitov v paketu
  • Dolžina glave paketa
  • Dolžina bitov "nič"
  • "En" bit dolžine
  • Kazalec na kodno polje
  • Številčni elementi matrike

void IRcmd:: init (void) {addRemote (48, 5252, 902, 1755, panasonicCode, sizeof (panasonicCode)/sizeof (uint32_t));

}

Datoteka vsebuje tudi drugo tabelo za pretvorbo ukazov v kode tipkovnice. Niz kbdr_kodi vsebuje kode ključev za medijski center Kodi. Za svoj program medijskega centra lahko dodate še drugo matriko, na primer predvajalnik vlc. Če bi dodali še eno tabelo aplikacij medijskega centra, bi ustvarili še en objekt KBD in ga inicializirali v main.cpp.

4. korak: Orodja za poenostavitev krojenja

Orodja za poenostavitev krojenja
Orodja za poenostavitev krojenja
Orodja za poenostavitev krojenja
Orodja za poenostavitev krojenja

V skladišču sta še dva projekta

  • IR preiskava - omogoča merjenje časovnih parametrov signalov vašega daljinskega upravljalnika.
  • IR_capture - omogoča zajem HEX kod vašega daljinskega upravljalnika.

Preprosto naložite IR preiskovani projekt in v računalnik priključite vrata USB plošče. Nato zaženite kateri koli terminalski program na napravi za navidezna serijska vrata, ki ustreza plošči stm32. Medtem ko pritisnete gumbe na daljinskem upravljalniku, bo program meril prejete impulze in natisnil povprečne čase za različne impulze. Poenostaviti bi moralo zaznavanje dolžine impulza za glavo paketa, nič in en bit.

V projektu IR preiskave časovnik #2 deluje v načinu zajema PWM z dvema kanaloma: prvi kanal zajema celotno dolžino impulza in kanal2 zajema dolžino vrha. Ko zazna padajoči rob signala, se vrednost časovnika shrani v register enega kanala in časovnik se ponastavi z 0. Ko je zaznan naraščajoči rob signala, se števec časovnika shrani v register kanala 2.

Za zajem kod gumbov vašega daljinskega upravljalnika lahko uporabite projekt IR_capture. V datoteko main.c morate dodati tako oddaljeno definicijo:

IRcode panasonic = {.hdr = 5252,.bit = 48,.zero = 902,.one = 1755,.dev = 60};

  • .hdr - dolžina glave v mks
  • .bits - število bitov v paketu
  • .zero - dolžina ničelnega bita
  • .one - dolžina ena za bit
  • .dev - odstopanje (razlika v časih, ki jih je mogoče sprejeti). Običajno je 1/10 najmanjše dolžine.

Nato dodajte daljinski upravljalnik na seznam podprtih daljinskih upravljalnikov:

const IRcode* remote [2] = {& panasonic, & pioneer};

Priporočena: