INHOUDSOPGAWE:

Val in Stm32: Afstandsbediening vir Home Media Center: 4 stappe (met foto's)
Val in Stm32: Afstandsbediening vir Home Media Center: 4 stappe (met foto's)

Video: Val in Stm32: Afstandsbediening vir Home Media Center: 4 stappe (met foto's)

Video: Val in Stm32: Afstandsbediening vir Home Media Center: 4 stappe (met foto's)
Video: Webinar – Bluetooth Low Energy Power Control 2024, November
Anonim
Val in Stm32: afstandbeheer vir Home Media Center
Val in Stm32: afstandbeheer vir Home Media Center

Dit is 'n volledige prototipe vir afstandsbediening vir tuismediasentrum, gebaseer op smt32 -mikrobeheerder, stm32f103c8t6, bekend as 'bluepill' -bord. Gestel u gebruik 'n rekenaar vir tuismediasentrum. Dit is 'n baie buigsame oplossing, waarmee u 'n groot videobiblioteek op die interne hardeskyf kan plaas, of u kan video vanaf die netwerk speel, byvoorbeeld YouTube of so, u het geen probleme met codecs of video speel nie, want dit is baie maklik om die sagteware -speler enige tyd op te dateer. Die grootste nadeel van hierdie oplossing is dat u die muis en die sleutelbord moet gebruik om u afspeel te beheer. Die IR -afstandsbediening is baie gerieflik hiervoor.

In hierdie artikel sal ek wys hoe u 'n eie afstandsbediening kan maak met 'n chip bluepill -bord.

Stap 1: Die idee

Die idee
Die idee
Die idee
Die idee

Die hoofgedagte is baie eenvoudig: die bloupilbord het 'n ingeboude usb -poort en kan dien as 'n USB HID -sleutelbord. As ons 'n IR -ontvanger aan die bord koppel, kan dit die opdrag van u IR -afstandsbediening na 'sleuteldruk' van die virtuele sleutelbord vertaal. Geen ekstra bestuurders is nodig nie!

Daar is baie IR -protokolle in die wêreld rondom ons. Elke TV van VCS -verskaffer het sy eie IR -protokol. Maar al hierdie protokolle het iets gemeen: hulle gebruik polsmodulasie om die sein te kodeer. Gewoonlik is daar 'n aanhef: 'n lang impuls voor die eerste bietjie in die pakkie. Dan stuur IR -beheer die hele pakkie uit met 0 en 1 en finaliseer die transmissie met 'n lang pols. Om die bietjie te dekodeer, moet ons die lengtepuls en lengte van die piek meet. Gewoonlik is die pieklengte van logika 0 en logika 1 dieselfde, die verskil is in die volledige polslengte.

Die stm32 -mikrobeheerders het 'n ingeboude funksie om PWM -sein op te vang. Byna elke timer van die mikrobeheerder kan die 'PWM -seinopname meer' geplaas word as die kanaalveranderlikes van die timer die totale lengte van die pols en sy pieklengte bespaar. Hier moet ek die klein detail uitlig: as die IR -ontvanger die sein kry, word die spanning op die werkpen 0 en in die ledige toestand is die spanning in die werkpen 5 of 3,3 volt, afhangende van die voedingsspanning van die IR -ontvanger. Dit wil sê, die ontvanger 'draai' die sein om.

Met die PWM -opnamemodus kan die stm32 -mikrobeheerder maklik omskep word in 'n IR -afstandsvertaler van IR -afstandsbediening na die sleutelbordkodes. Dan kan u u gunsteling visualiseringsagteware begin, byvoorbeeld Kodi van VLC om u gunsteling fliek op die mediasentrum te speel.

Stap 2: Skep die beheerder

Die skep van die beheerder
Die skep van die beheerder
Die skep van die beheerder
Die skep van die beheerder
Die skep van die beheerder
Die skep van die beheerder
Die skep van die beheerder
Die skep van die beheerder

Om stm32 mikrobeheerder te programmeer, wil ek die gratis sagteware van STM aanbeveel: stelselwerkbank (ook bekend as ac6) en die bordkonfigurasiehulpmiddel cubeMX. Om die sagteware na die mikrobeheerder op te laai, kan die chipkloon van die ST-Link V2-adapter gebruik word. Die stelsel werkbank projek lêers wat by hierdie stap aangeheg is, F1-IR_remote.zip lêer.

Die bordkonfigurasiehulpmiddel vergemaklik die proses van die aanvanklike hardeware -opset van ons mikrobeheerder.

As u die stelselwerkbankinstrument gebruik, kan u die afgelaaide projek net gebruik. Maar as u die projek in meer besonderhede wil ondersoek, kan u die bordkonfigurasie in die cubeMX skep:

  • Skep 'n nuwe projek en kies bord stm32f103c8
  • Kies 'Crystal/Ceramic Resonator' vir die item 'High Speed Clock (HSE)' in die RCC -spyskaart.
  • Kies 'Serial Wire' vir die item 'Ontfout' in die SYS -kieslys.
  • Stel die timer 2 in (TIM2 -spyskaart) in die PWM -opnamemodus, soos op die foto getoon:

    • Slawe af -> Herstel modus
    • Triggerbron -> TI1FP1
    • Klokbron -> Interne klok
    • Channel1 -> Input Capture direkte modus
  • Stel die boks 'Toestel (FS) in die USB -kieslys in
  • Kies die aftrekkieslys-element 'Human Interface Device Class (HID)' in die 'Class of FS IP' item in USB_DEVICE-kieslys
  • Maak seker dat u in die klokkonfigurasiepaneel 72 MHz aan die timer #2 verskaf, want ons benodig 'n timer by elke 1 mk.
  • Stel die USB -toestel in die konfigurasiepaneel in soos op die foto getoon
  • Stel die timer#2 in die konfigurasiepaneel soos volg in:

    • Prescaller - 71 (van 0 tot 71) - 1 mikro sekonde bosluis!
    • Tellermodus - op
    • Tellerperiode - 39999 (ons behoort die lang pols te kan meet)
    • Invoeropname -kanaal 1 - Falling Edge (onthou dat die sein van die IR -ontvanger omgekeerd is)

In die PWM -opnamemodus werk die timer#2 die volgende:

As die vallende voorkant bespeur word, sal die tydteller in die kanaal1 -register gestoor word en die tydteller sal teruggestel word met 0. Dan sal die tydteller voortgaan om die rigting op te tel. Ons kan dus die polslengte in mikrosekondes maklik meet.

Die STM32 USB HID -klas simuleer standaard die USB -muis. Hier vind u die instruksie om die beheerder in 'n sleutelbord te verander.

Stap 3: Pas die beheerder aan

Die projek werk saam met Panasonic -afstandsbediening en Kodi -mediasentrum. Om die projek vir u eie beheerder aan te pas, moet u die kode -skikking vir u afstandbeheer byvoeg, net soos ek vir panasonic -afstandsbediening (panasonicCode) by die Inc/code.h -kop. Soos u kan sien, het elke opdrag 'n unieke ID (in die IR -opdrag). Daar is 24 opdragte (0-23) wat deur die projek herken word. Die opdrag word gesorteer volgens die relevansie.

typedef enum {IR_play = 0, IR_stop, IR_pause, IR_forward, IR_rewind, IR_last_channel, IR_OSD, IR_prevous_menu, IR_left, IR_right, IR_up, IR_down, IR_enter, IRs_tyds, IR_tyds, IR_tyds, IR_tyds, IR_tyds, IR_tyds, IR_tyds, IR_tyds, IR_tyds, IR_tyds, IR_tyds, IR_tyds, IR_tyds, IR_tyds, IR_tyds, IR_tyds, IR_tyds, IR_tyds, IR_tyds, IR_tyds, IR_titels, IRt_tref, IRt_t, Eerste, IR_krag, IR_onbekend} IR -opdrag;

const 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};

const 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};

Dan moet u u eie afstandsbediening by die init () metode in die IR.cpp met addRemote () funksie byvoeg. Die funksie -argumente is:

  • Aantal stukkies in die pakkie
  • Die pakkie Koplengte
  • 'Nul' bitlengte
  • 'Een' bietjie lengte
  • Wyser na die kode -skikking
  • Getalelemente van die skikking

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

}

Die lêer bevat ook 'n ander tabel om opdragte in sleutelbordkodes om te skakel. Die kbdr_kodi -skikking bevat die sleutelkodes vir die Kodi -mediasentrum. U kan nog 'n skikking vir u eie mediasentrumprogram byvoeg, byvoorbeeld vlc -speler. As u 'n ander mediasentrumtoepassingstabel sou byvoeg, sou u 'n ander KBD -voorwerp skep en dit in die main.cpp inisialiseer.

Stap 4: Gereedskap om kleremakery te vereenvoudig

Gereedskap om kleremakery te vereenvoudig
Gereedskap om kleremakery te vereenvoudig
Gereedskap om kleremakery te vereenvoudig
Gereedskap om kleremakery te vereenvoudig

Daar is nog twee ander projekte in die bewaarplek

  • IR -ondersoek - waarmee u die tydsberekeningparameters van die seine van u afstandsbediening kan meet.
  • IR_capture - waarmee u die HEX -kodes van u afstandbeheer kan opneem.

Laai net die IR -ondersoekprojek en koppel die USB -poort van die bluepill -bord aan op u rekenaar. Begin dan 'n terminale program op die virtuele seriële poortapparaat, wat ooreenstem met die stm32 -bord. Terwyl u op die knoppies op u afstandsbediening druk, meet die program die ontvangde pulse en druk die gemiddelde tye vir verskillende polse af. Dit moet vereenvoudig word om die polslengte vir die pakkopskrif, nul en een bis, op te spoor.

In die IR -ondersoekprojek werk die timer #2 in die PWM -opnamemodus met twee kanale: kanaal een vang die hele polslengte op en kanaal2 vang die pieklengte. As die dalende seinrand opgespoor word, word die timerwaarde in die kanaal een -register gestoor en die timer met 0. As die stygende rand van die sein opgespoor word, word die tydteller in die kanaal 2 -register gestoor.

Om die knoppiekodes van u eie afstandsbediening vas te lê, kan die IR_capture -projek gebruik word. In die main.c -lêer moet u die eksterne definisie soos hierdie byvoeg:

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

  • .hdr - die koplengte in mks
  • .bits - die aantal bisse in die pakkie
  • .zero - die lengte van die nulbit
  • .one - die lengte een die een bietjie
  • .dev - die afwyking (die verskil in tye wat aanvaar kan word). Gewoonlik is dit 1/10 van die kleinste lengte.

Voeg dan u afstandsbediening by die lys met ondersteunde afstandbeheer:

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

Aanbeveel: