Isi kandungan:

Jatuh di Stm32: Alat Kawalan Jauh untuk Pusat Media Rumah: 4 Langkah (dengan Gambar)
Jatuh di Stm32: Alat Kawalan Jauh untuk Pusat Media Rumah: 4 Langkah (dengan Gambar)

Video: Jatuh di Stm32: Alat Kawalan Jauh untuk Pusat Media Rumah: 4 Langkah (dengan Gambar)

Video: Jatuh di Stm32: Alat Kawalan Jauh untuk Pusat Media Rumah: 4 Langkah (dengan Gambar)
Video: SULTAN MEDAN INDRAKENZ NAIK JET PRIBADI KE PULAU PRIBADI!! 2024, Julai
Anonim
Jatuh di Stm32: Alat kawalan jauh untuk Pusat Media Rumah
Jatuh di Stm32: Alat kawalan jauh untuk Pusat Media Rumah

Ini adalah prototaip lengkap untuk alat kawalan jauh pusat media rumah berdasarkan pengawal mikro smt32, stm32f103c8t6 yang dikenali sebagai papan bluepill. Katakan, anda menggunakan PC untuk pusat media rumah. Ini adalah penyelesaian yang sangat fleksibel, yang membolehkan anda meletakkan pustaka video yang besar ke dalam cakera keras dalaman, atau anda boleh memainkan video dari rangkaian, misalnya youtube atau lebih, anda tidak menghadapi masalah sama sekali dengan codec atau video yang dimainkan, kerana sangat mudah untuk mengemas kini pemain perisian pada bila-bila masa. Kelemahan utama penyelesaian ini ialah anda harus menggunakan tetikus dan papan kekunci untuk mengawal main balik anda. Alat kawalan jauh IR adalah mod yang sesuai untuk ini.

Dalam artikel ini saya akan menunjukkan cara membuat alat kawalan jauh sendiri menggunakan papan bluepill cip.

Langkah 1: Idea

Idea
Idea
Idea
Idea

Idea utamanya sangat mudah: papan bluepill telah menyertakan port usb dan boleh berfungsi sebagai papan kekunci USB HID. Sekiranya kita melampirkan penerima IR ke papan, ia boleh menerjemahkan perintah dari alat kawalan jauh IR anda ke 'tekan kekunci' papan kekunci maya. Pemandu tambahan tidak diperlukan!

Terdapat banyak protokol IR di dunia di sekitar kita. Setiap vendor TV VCS mempunyai protokol IR tersendiri. Tetapi semua protokol ini mempunyai beberapa perkara yang sama: mereka menggunakan modulasi nadi untuk menyandikan isyarat. Biasanya, terdapat beberapa mukadimah: dorongan panjang sebelum bit pertama dalam paket. Kemudian kawalan IR menghantar seluruh paket dengan 0 dan 1 dan menyelesaikan penghantaran dengan nadi panjang selesai. Untuk menyahkod bit, kita perlu mengukur panjang nadi dan panjang puncak. Biasanya, panjang puncak logik 0 dan logik 1 adalah sama, perbezaannya adalah pada panjang nadi lengkap.

Pengawal mikro stm32 mempunyai ciri tertanam untuk menangkap isyarat PWM. Hampir setiap pemasa mikro pengawal dapat dimasukkan ke dalam 'PWM signal capture more' apabila pemboleh ubah saluran pemasa menyimpan jumlah panjang nadi dan panjang puncaknya. Di sini saya mesti mengetengahkan sedikit perinciannya: apabila penerima IR menangkap isyarat, voltan pada pin kerjanya menjadi 0 dan dalam keadaan siaga voltan pada pin kerja adalah 5 atau 3.3 volt bergantung pada voltan bekalan penerima IR. Yaitu, penerima 'membalikkan' isyarat.

Dengan mod tangkapan PWM, pengawal mikro stm32 dapat dengan mudah diubah menjadi penterjemah jarak jauh IR dari jarak jauh IR ke kod papan kekunci. Kemudian anda boleh memulakan perisian visualisasi kegemaran anda, misalnya Kodi dari VLC untuk memainkan filem kegemaran anda di pusat media.

Langkah 2: Membuat Pengawal

Membuat Pengawal
Membuat Pengawal
Membuat Pengawal
Membuat Pengawal
Membuat Pengawal
Membuat Pengawal
Membuat Pengawal
Membuat Pengawal

Untuk memprogram pengawal mikro stm32 saya ingin mengesyorkan perisian percuma dari STM: sistem kerja (alias ac6) dan alat konfigurasi papan cubeMX. Untuk memuat naik perisian ke pengawal mikro, klon cip penyesuai ST-Link V2 dapat digunakan. Fail projek meja kerja sistem dilampirkan pada langkah ini, fail F1-IR_remote.zip.

Alat konfigurasi papan memudahkan proses konfigurasi perkakasan awal pengawal mikro kami.

Sekiranya anda menggunakan alat meja kerja sistem, anda boleh menggunakan projek yang dimuat turun. Tetapi jika anda ingin menyiasat projek dengan lebih terperinci, anda boleh membuat konfigurasi papan di cubeMX:

  • Buat projek baru dan pilih papan stm32f103c8
  • Pilih 'Crystal / Ceramic Resonator' untuk item 'High Speed Clock (HSE)' dalam menu RCC.
  • Pilih 'Serial Wire' untuk item 'Debug' di menu SYS.
  • Konfigurasikan pemasa # 2 (menu TIM2) dalam mod tangkapan PWM seperti yang ditunjukkan pada gambar:

    • Mod Slave -> Mod Reset
    • Sumber Pencetus -> TI1FP1
    • Sumber Jam -> Jam Dalaman
    • Channel1 -> Mod langsung Tangkap Input
  • Tetapkan kotak semak 'Device (FS) dalam menu USB
  • Pilih elemen menu pull-down 'Human Interface Device Class (HID)' dalam item 'Class of FS IP' dalam menu USB_DEVICE
  • Pada panel konfigurasi jam, pastikan memberikan 72 MHz ke pemasa # 2 kerana kita memerlukan kiraan pemasa pada setiap 1 mks.
  • Pada panel konfigurasi, konfigurasikan peranti USB seperti yang ditunjukkan dalam gambar
  • Di panel konfigurasi, konfigurasikan pemasa # 2 seperti berikut:

    • Prescaller - 71 (dari 0 hingga 71) - 1 kutu detik mikro!
    • Mod Kaunter - Naik
    • Tempoh Pembilang - 39999 (kita seharusnya dapat mengukur nadi panjang)
    • Saluran tangkapan input1 - Falling Edge (ingat bahawa isyarat dari penerima IR terbalik)

Dalam mod tangkapan PWM, pemasa # 2 berfungsi seperti berikut:

Apabila bahagian depan jatuh dikesan, penghitung pemasa akan disimpan dalam daftar saluran1 dan penghitung pemasa akan diset semula dengan 0. Kemudian pemasa akan terus menghitung arah. Oleh itu, kita dapat mengukur panjang nadi dengan mudah dalam beberapa saat mikro.

Secara lalai kelas STM32 USB HID mensimulasikan tetikus USB. Di sini anda boleh mendapatkan arahan untuk menukar pengawal menjadi papan kekunci.

Langkah 3: Menyesuaikan Pengawal

Projek ini berfungsi dengan alat kawalan jauh Panasonic dan pusat media Kodi. Untuk menyesuaikan projek untuk pengawal anda sendiri, anda harus menambahkan susunan kod untuk alat kawalan jauh anda seperti yang saya lakukan untuk alat kawalan jauh panasonic (panasonicCode) ke tajuk Inc / code.h. Seperti yang anda lihat, setiap arahan mempunyai ID unik (di IRcommmand enum). Terdapat 24 perintah (0-23) yang dikenali oleh projek. Perintah disusun mengikut kesesuaian.

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, IR_info, IR_subtitle, IR_nxt_subtitle, IR_pos_subtitle, IR_teletext, IR_zoom, IR_mark_watched, IR_playlist, 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};

Kemudian anda harus menambahkan alat kawalan jauh anda sendiri dalam kaedah init () dalam IR.cpp dengan fungsi addRemote (). Argumen fungsi adalah:

  • Bilangan bit dalam paket
  • Panjang Header paket
  • Panjang bit 'sifar'
  • Panjang bit 'satu'
  • Penunjuk ke tatasusunan kod
  • Bilangan unsur larik

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

}

Fail juga mengandungi jadual lain untuk menukar perintah menjadi kod papan kekunci. Susunan kbdr_kodi mengandungi kod utama untuk pusat media Kodi. Anda boleh menambah array lain untuk program pusat media anda sendiri, misalnya, pemain vlc. Sekiranya anda menambah jadual aplikasi pusat media yang lain, anda akan membuat objek KBD yang lain, dan memulakannya di main.cpp.

Langkah 4: Alat untuk Memudahkan Penyesuaian

Alat untuk Memudahkan Penyesuaian
Alat untuk Memudahkan Penyesuaian
Alat untuk Memudahkan Penyesuaian
Alat untuk Memudahkan Penyesuaian

Terdapat dua projek lain di repositori

  • IR menyiasat - memungkinkan untuk mengukur parameter masa isyarat dari alat kawalan jauh anda.
  • IR_capture - memungkinkan untuk menangkap kod HEX alat kawalan jauh anda.

Muatkan projek IR IR dan sambungkan port USB papan bluepill ke komputer anda. Kemudian lancarkan sebarang program terminal pada peranti port bersiri maya, sesuai dengan papan stm32. Semasa anda menekan butang pada jarak jauh, program akan mengukur denyut nadi yang diterima dan mencetak rata-rata masa untuk nadi yang berbeza. Ia harus memudahkan untuk mengesan panjang nadi untuk tajuk paket, sifar dan satu bit.

Dalam projek penyiasatan IR, pemasa # 2 berfungsi dalam mod tangkapan PWM dengan dua saluran: saluran satu menangkap panjang keseluruhan nadi dan saluran 2 menangkap panjang puncak. Apabila tepi isyarat jatuh dikesan, nilai pemasa disimpan ke saluran satu daftar dan pemasa diset semula dengan 0. Apabila tepi isyarat meningkat, pengawal timer disimpan ke saluran 2 mendaftar.

Untuk menangkap kod butang alat kawalan jauh anda sendiri, projek IR_capture dapat digunakan. Dalam fail main.c anda harus menambahkan definisi jarak jauh seperti ini:

Panasonic kod IR = {.hdr = 5252,.bits = 48,.zero = 902,.one = 1755,.dev = 60};

  • .hdr - panjang pengepala dalam mks
  • .bits - bilangan bit dalam paket
  • .zero - panjang bit sifar
  • .satu - panjangnya satu-satu
  • .dev - penyimpangan (perbezaan masa yang boleh diterima). Biasanya ia adalah 1/10 dari panjang terkecil.

Kemudian tambahkan alat kawalan jauh anda ke senarai alat kawalan jauh yang disokong:

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

Disyorkan: