Talaan ng mga Nilalaman:

Bumagsak sa Stm32: Remote Control para sa Home Media Center: 4 na Hakbang (na may Mga Larawan)
Bumagsak sa Stm32: Remote Control para sa Home Media Center: 4 na Hakbang (na may Mga Larawan)

Video: Bumagsak sa Stm32: Remote Control para sa Home Media Center: 4 na Hakbang (na may Mga Larawan)

Video: Bumagsak sa Stm32: Remote Control para sa Home Media Center: 4 na Hakbang (na may Mga Larawan)
Video: Interrupting Blink sketch (Subtittled) 2024, Nobyembre
Anonim
Bumagsak sa Stm32: Remote Control para sa Home Media Center
Bumagsak sa Stm32: Remote Control para sa Home Media Center

Ito ay isang kumpletong prototype para sa remote control ng home media center batay sa smt32 micro controller, stm32f103c8t6 na kilala bilang 'bluepill' board. Ipagpalagay, gumagamit ka ng isang PC para sa home media center. Ito ay napaka-kakayahang umangkop na solusyon, na nagbibigay-daan sa iyo upang maglagay ng malaking library ng video sa panloob na hard drive, o maaari kang maglaro ng video mula sa network, halimbawa ng youtube o higit pa, wala kang problema sa mga codec o pag-play ng video, sapagkat ito ay napaka madaling i-update ang software player anumang oras. Ang pangunahing kawalan ng solusyon na ito ay dapat mong gamitin ang mouse at keyboard upang makontrol ang iyong pag-playback. Ang IR remote control ay maginhawang mode para dito.

Sa artikulong ito ipapakita ko kung paano lumikha ng sariling remote control gamit ang chip bluepill board.

Hakbang 1: Ang Ideya

Ang ideya
Ang ideya
Ang ideya
Ang ideya

Ang pangunahing ideya ay napaka-simple: ang bluepill board ay may naka-embed na usb port at maaaring kumilos bilang USB HID keyboard. Kung ikakabit namin ang IR receiver sa board, maaari nitong isalin ang utos mula sa iyong IR remote control sa 'key press' ng virtual keyboard. Walang kinakailangang karagdagang mga driver!

Maraming mga IR protocol sa mundo sa paligid natin. Ang bawat TV ng VCS vendor ay mayroong sariling IR protocol. Ngunit ang lahat ng mga protokol na ito ay may ilang bagay na karaniwan: gumagamit sila ng pulse-modulation upang ma-encode ang signal. Karaniwan, mayroong ilang paunang salita: mahabang salpok bago ang unang piraso sa packet. Pagkatapos ang IR control ay nagpapadala ng buong packet na may 0 at 1 at tinatapos ang paghahatid na may tapusin ang mahabang pulso. Upang mai-decode ang kaunti kailangan namin upang masukat ang haba ng pulso at haba ng rurok. Karaniwan, ang tugatog na haba ng lohika 0 at lohika 1 ay pareho, ang pagkakaiba ay nasa kumpletong haba ng pulso.

Ang stm32 micro Controller ay may naka-embed na tampok upang makuha ang PWM signal. Malapit sa bawat timer ng micro controller ay maaaring ilagay sa 'PWM signal capture more' kapag ang mga variable ng channel ng timer ay nai-save ang kabuuang haba ng pulso at ang haba ng rurok nito. Narito dapat kong i-highlight ang maliit na detalye: kapag nahuli ng IR receiver ang signal, ang boltahe sa gumaganang pin nito ay naging 0 at sa idle na estado ang boltahe sa gumaganang pin ay isang 5 o 3.3 volts depende sa boltahe ng supply ng IR receiver. I.e., 'inverts' ng tatanggap ang signal.

Sa mode ng pagkuha ng PWM ang stm32 micro controller ay maaaring madaling maging isang IR remote translator mula sa IR remote sa mga keyboard code. Pagkatapos ay maaari mong simulan ang iyong paboritong visualizing software, halimbawa Kodi ng VLC upang i-play ang iyong paboritong pelikula sa media center.

Hakbang 2: Paglikha ng Controller

Lumilikha ng Controller
Lumilikha ng Controller
Lumilikha ng Controller
Lumilikha ng Controller
Lumilikha ng Controller
Lumilikha ng Controller
Lumilikha ng Controller
Lumilikha ng Controller

Upang programa ang stm32 micro controller nais kong inirerekumenda ang libreng software mula sa STM: system workbench (aka ac6) at ang board configure tool cubeMX. Upang mai-upload ang software sa micro controller ang chip clone ng ST-Link V2 adapter ay maaaring magamit. Ang mga file ng proyekto ng workbench system ay naka-attach sa hakbang na ito, F1-IR_remote.zip file.

Pinapasimple ng tool sa pagsasaayos ng board ang proseso ng paunang pagsasaayos ng hardware ng aming micro controller.

Kung gumagamit ka ng tool sa workbench ng system, maaari mo lang gamitin ang na-download na proyekto. Ngunit kung nais mong siyasatin ang proyekto sa higit pang mga detalye, maaari kang lumikha ng pagsasaayos ng board sa cubeMX:

  • Lumikha ng bagong proyekto at piliin ang board stm32f103c8
  • Piliin ang 'Crystal / Ceramic Resonator' para sa item na 'High Speed Clock (HSE)' sa RCC menu.
  • Piliin ang 'Serial Wire' para sa item na 'Debug' sa menu ng SYS.
  • I-configure ang timer # 2 (menu ng TIM2) sa PWM capture mode tulad ng ipinakita sa larawan:

    • Slave Mode -> I-reset ang Mode
    • Pinagmulan ng Trigger -> TI1FP1
    • Pinagmulan ng Clock -> Panloob na Clock
    • Channel1 -> Direktang mode ng pag-capture ng Input
  • Itakda ang checkbox 'Device (FS) sa menu ng USB
  • Piliin ang elemento ng menu ng pull-down na menu ng 'Human Interface Device Class (HID)' sa item na 'Class of FS IP' sa menu na USB_DEVICE
  • Sa panel ng pagsasaayos ng orasan, tiyaking magbigay ng 72 MHz sa timer # 2 dahil kailangan namin ng bilang ng timer sa bawat 1 mks.
  • Sa panel ng pagsasaayos i-configure ang USB aparato tulad ng ipinakita sa larawan
  • Sa panel ng pagsasaayos ay i-configure ang timer # 2 tulad ng sumusunod:

    • Prescaller - 71 (mula 0 hanggang 71) - 1 micro second tick!
    • Counter Mode - Pataas
    • Counter Period - 39999 (dapat nating sukatin ang mahabang pulso)
    • Input capture channel1 - Falling Edge (tandaan na ang signal mula sa IR receiver ay baligtad)

Sa mode ng pagkuha ng PWM gagana ang timer # 2 sa sumusunod:

Kapag nakita ang bumabagsak na harap, ang timer counter ay nai-save sa pagrehistro ng channel1 at ang timer counter ay i-reset sa 0. Kung gayon ang timer ay magpapatuloy na bilangin ang direksyon. Kaya madali naming masusukat ang haba ng pulso sa micro segundo.

Bilang default ang klase ng STM32 USB HID ay ginagaya ang USB mouse. Mahahanap mo rito ang tagubilin upang gawing keyboard ang controller.

Hakbang 3: Pagpapasadya ng Controller

Gumagana ang proyekto sa Panasonic remote control at Kodi media center. Upang maiangkop ang proyekto para sa iyong sariling tagapamahala dapat mong idagdag ang code array para sa iyong remote control tulad ng ginawa ko para sa panasonic remote control (panasonicCode) sa header ng Inc / code.h. Tulad ng nakikita mo, ang bawat utos ay may natatanging ID (sa IRcommmand enum). Mayroong 24 na utos (0-23) na kinikilala ng proyekto. Ang utos ay pinagsunod-sunod ayon sa kaugnayan.

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, IR_chapter_next, IR_chapter_previous, IRmark_, IRmark, IRtit, IR_power, IR_unknown} IRcommand;

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

Pagkatapos ay dapat mong idagdag ang iyong sariling remote control sa init () na pamamaraan sa IR.cpp na may addRemote () function. Ang mga argumento ng pag-andar ay:

  • Bilang ng mga piraso sa packet
  • Ang haba ng packer Header
  • Ang haba ng 'Zero' na haba
  • Ang haba ng 'One'
  • Ituro ang code array
  • Mga elemento ng numero ng array

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

}

Naglalaman din ang file ng isa pang talahanayan upang i-convert ang mga utos sa mga code ng keyboard. Naglalaman ang kbdr_kodi array ng mga key code para sa Kodi media center. Maaari kang magdagdag ng isa pang array para sa iyong sariling programa sa media center, halimbawa, vlc player. Kung magdaragdag ka ng isa pang talahanayan ng aplikasyon ng media center, lilikha ka ng isa pang object na KBD, at isasimula ito sa main.cpp.

Hakbang 4: Mga tool upang Pasimplehin ang Paghahanda

Mga tool upang gawing simple ang Tailoring
Mga tool upang gawing simple ang Tailoring
Mga tool upang gawing simple ang Tailoring
Mga tool upang gawing simple ang Tailoring

Mayroong dalawang iba pang mga proyekto sa lalagyan

  • Iimbestigahan ng IR - pinapayagan na masukat ang mga parameter ng tiyempo ng mga signal ng iyong remote.
  • IR_capture - pinapayagan na makuha ang mga HEX code ng iyong remote control.

I-load lamang ang proyekto ng IR investigate at ikonekta ang USB port ng bluepill board sa iyong computer. Pagkatapos ay ilunsad ang anumang programa ng terminal sa virtual serial port device, na naaayon sa board ng stm32. Habang pinindot mo ang mga pindutan sa iyong remote, susukat ng programa ang mga natanggap na pulso at i-print ang average na oras para sa iba't ibang pulso. Dapat itong gawing simple upang makita ang haba ng pulso para sa packet header, zero at isang piraso.

Sa proyekto ng IR investigate ang timer # 2 ay gumagana sa mode ng pagkuha ng PWM na may dalawang mga channel: kinukuhanan ng isang channel ang buong haba ng pulso at nakuha ng channel2 ang haba ng rurok. Kapag nakita ang nahuhulog na gilid ng signal, na-save ang halaga ng timer sa isang pag-rehistro ng channel at i-reset ang timer na may 0. Kapag nakita ang tumataas na gilid ng signal, naka-save ang timer counter sa pagrehistro sa channel 2.

Upang makuha ang mga code ng pindutan ng iyong sariling remote control, maaaring magamit ang proyekto ng IR_capture. Sa main.c file dapat mong idagdag ang remote na kahulugan tulad ng isang ito:

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

  • .hdr - ang haba ng header sa mks
  • .bits - ang bilang ng mga piraso sa packet
  • .zero - ang haba ng zero bit
  • .isa - ang haba ng isa ng kaunti
  • .dev - ang paglihis (ang pagkakaiba sa mga oras na maaaring tanggapin). Kadalasan ito ay 1/10 ng pinakamaliit na haba.

Pagkatapos idagdag ang iyong remote sa listahan ng mga suportadong mga remote:

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

Inirerekumendang: