Daftar Isi:

Jatuh di Stm32: Remote Control untuk Home Media Center: 4 Langkah (dengan Gambar)
Jatuh di Stm32: Remote Control untuk Home Media Center: 4 Langkah (dengan Gambar)

Video: Jatuh di Stm32: Remote Control untuk Home Media Center: 4 Langkah (dengan Gambar)

Video: Jatuh di Stm32: Remote Control untuk Home Media Center: 4 Langkah (dengan Gambar)
Video: Pemrograman STM32 - Bab 4 - Interrupt 2024, Desember
Anonim
Jatuh di Stm32: Remote Control untuk Pusat Media Rumah
Jatuh di Stm32: Remote Control untuk Pusat Media Rumah

Ini adalah prototipe lengkap untuk remote control pusat media rumahan berdasarkan pengontrol mikro smt32, stm32f103c8t6 yang dikenal sebagai papan 'bluepill'. Misalkan, Anda menggunakan PC untuk media center rumah. Ini adalah solusi yang sangat fleksibel, yang memungkinkan Anda untuk menempatkan perpustakaan video besar ke dalam hard drive internal, atau Anda dapat memutar video dari jaringan, misalnya youtube atau lebih, Anda tidak memiliki masalah dengan codec atau pemutaran video sama sekali, karena sangat mudah untuk memperbarui pemutar perangkat lunak setiap saat. Kerugian utama dari solusi ini adalah Anda harus menggunakan mouse dan keyboard untuk mengontrol pemutaran Anda. Remote control IR adalah mode yang nyaman untuk ini.

Pada artikel ini saya akan menunjukkan cara membuat remote control sendiri menggunakan chip bluepill board.

Langkah 1: Idenya

Ide
Ide
Ide
Ide

Ide utamanya sangat sederhana: papan bluepill telah tertanam port usb dan dapat bertindak sebagai keyboard USB HID. Jika kita memasang penerima IR ke papan, itu bisa menerjemahkan perintah dari remote control IR Anda ke 'tekan tombol' dari keyboard virtual. Tidak diperlukan driver tambahan!

Ada banyak protokol IR di dunia di sekitar kita. Setiap TV vendor VCS memiliki protokol IR sendiri. Tetapi semua protokol ini memiliki kesamaan: mereka menggunakan modulasi pulsa untuk mengkodekan sinyal. Biasanya, ada beberapa pembukaan: impuls panjang sebelum bit pertama dalam paket. Kemudian kontrol IR mentransmisikan seluruh paket dengan 0 dan 1 dan menyelesaikan transmisi dengan pulsa panjang akhir. Untuk memecahkan kode bit kita perlu mengukur panjang pulsa dan panjang puncak. Biasanya panjang puncak logika 0 dan logika 1 sama, yang membedakan adalah panjang pulsa lengkapnya.

Kontroler mikro stm32 memiliki fitur yang disematkan untuk menangkap sinyal PWM. Di dekat setiap pengatur waktu pengontrol mikro dapat dimasukkan ke dalam 'penangkapan sinyal PWM lebih banyak' ketika variabel saluran pengatur waktu menyimpan panjang total pulsa dan panjang puncaknya. Di sini saya harus menyoroti detail kecil: ketika penerima IR menangkap sinyal, tegangan pada pin kerjanya menjadi 0 dan dalam keadaan idle tegangan pada pin kerja adalah 5 atau 3,3 volt tergantung pada tegangan suplai penerima IR. Yaitu, penerima 'membalikkan' sinyal.

Dengan mode pengambilan PWM, pengontrol mikro stm32 dapat dengan mudah diubah menjadi penerjemah jarak jauh IR dari jarak jauh IR ke kode keyboard. Kemudian Anda dapat memulai perangkat lunak visualisasi favorit Anda, misalnya Kodi dari VLC untuk memutar film favorit Anda di pusat media.

Langkah 2: Membuat Pengontrol

Membuat Pengontrol
Membuat Pengontrol
Membuat Pengontrol
Membuat Pengontrol
Membuat Pengontrol
Membuat Pengontrol
Membuat Pengontrol
Membuat Pengontrol

Untuk memprogram pengontrol mikro stm32 saya ingin merekomendasikan perangkat lunak gratis dari STM: meja kerja sistem (alias ac6) dan alat konfigurasi papan cubeMX. Untuk mengunggah perangkat lunak ke pengontrol mikro, klon chip adaptor ST-Link V2 dapat digunakan. File proyek meja kerja sistem yang dilampirkan pada langkah ini, file F1-IR_remote.zip.

Alat konfigurasi papan menyederhanakan proses konfigurasi perangkat keras awal pengontrol mikro kami.

Jika Anda menggunakan alat meja kerja sistem, Anda bisa menggunakan proyek yang diunduh. Tetapi jika Anda ingin menyelidiki proyek lebih detail, Anda dapat membuat konfigurasi papan di cubeMX:

  • Buat proyek baru dan pilih papan stm32f103c8
  • Pilih 'Crystal/Ceramic Resonator' untuk item 'High Speed Clock (HSE)' di menu RCC.
  • Pilih 'Serial Wire' untuk item 'Debug' di menu SYS.
  • Konfigurasikan timer #2 (menu TIM2) dalam mode capture PWM seperti terlihat pada gambar:

    • Mode Budak -> Atur Ulang Mode
    • Sumber Pemicu -> TI1FP1
    • Sumber Jam -> Jam Internal
    • Channel1 -> Input Mode Tangkap langsung
  • Setel kotak centang 'Perangkat (FS) di menu USB
  • Pilih elemen menu pull-down 'Human Interface Device Class (HID)' di item 'Class of FS IP' di menu USB_DEVICE
  • Di panel konfigurasi jam, pastikan untuk memberikan 72 MHz ke timer #2 karena kita membutuhkan hitungan timer pada setiap 1 mks.
  • Di panel konfigurasi, konfigurasikan perangkat USB seperti yang ditunjukkan pada gambar
  • Di panel konfigurasi konfigurasikan timer #2 sebagai berikut:

    • Prescaller - 71 (dari 0 hingga 71) - 1 detik mikro!
    • Mode Penghitung - Naik
    • Counter Period - 39999 (kita harus bisa mengukur panjang pulsa)
    • Saluran pengambilan input1 - Falling Edge (ingat bahwa sinyal dari penerima IR terbalik)

Dalam mode pengambilan PWM, timer #2 akan berfungsi sebagai berikut:

Ketika front jatuh terdeteksi, penghitung waktu akan disimpan di register saluran1 dan penghitung waktu akan direset dengan 0. Kemudian pengatur waktu akan terus menghitung arah. Jadi kita dapat dengan mudah mengukur panjang pulsa dalam mikro detik.

Secara default, kelas HID USB STM32 mensimulasikan mouse USB. Di sini Anda dapat menemukan instruksi untuk mengubah pengontrol menjadi keyboard.

Langkah 3: Menyesuaikan Pengontrol

Proyek ini bekerja dengan remote control Panasonic dan pusat media Kodi. Untuk menyesuaikan proyek untuk pengontrol Anda sendiri, Anda harus menambahkan susunan kode untuk kendali jarak jauh Anda seperti yang saya lakukan untuk kendali jarak jauh panasonic (panasonicCode) ke header Inc/code.h. Seperti yang Anda lihat, setiap perintah memiliki ID unik (di IRcommmand enum). Ada 24 perintah (0-23) yang dikenali oleh proyek. Perintah diurutkan berdasarkan relevansinya.

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 remote control Anda sendiri dalam metode init() di IR.cpp dengan fungsi addRemote(). Argumen fungsi adalah:

  • Jumlah bit dalam paket
  • Panjang header paket
  • Panjang bit 'nol'
  • 'Satu' bit panjang
  • Pointer ke array kode
  • Jumlah elemen array

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

}

Juga file tersebut berisi tabel lain untuk mengubah perintah menjadi kode keyboard. Array kbdr_kodi berisi kode kunci untuk pusat media Kodi. Anda dapat menambahkan array lain untuk program pusat media Anda sendiri, misalnya, vlc player. Jika Anda ingin menambahkan tabel aplikasi pusat media lain, Anda akan membuat objek KBD lain, dan menginisialisasinya di main.cpp.

Langkah 4: Alat untuk Menyederhanakan Penjahitan

Alat untuk Menyederhanakan Menjahit
Alat untuk Menyederhanakan Menjahit
Alat untuk Menyederhanakan Menjahit
Alat untuk Menyederhanakan Menjahit

Ada dua proyek lain di repositori

  • IR menyelidiki - memungkinkan untuk mengukur parameter waktu sinyal remote Anda.
  • IR_capture - memungkinkan untuk menangkap kode HEX dari remote control Anda.

Cukup muat proyek penyelidikan IR dan sambungkan port USB papan bluepill ke komputer Anda. Kemudian luncurkan program terminal apa pun pada perangkat port serial virtual, yang sesuai dengan papan stm32. Saat Anda menekan tombol pada remote Anda, program akan mengukur pulsa yang diterima dan mencetak waktu rata-rata untuk pulsa yang berbeda. Ini harus menyederhanakan untuk mendeteksi panjang pulsa untuk header paket, nol dan satu bit.

Dalam proyek penyelidikan IR, timer #2 bekerja dalam mode pengambilan PWM dengan dua saluran: saluran satu menangkap seluruh panjang pulsa dan saluran2 menangkap panjang puncak. Ketika tepi sinyal turun terdeteksi, nilai timer disimpan ke register saluran satu dan timer diatur ulang dengan 0. Saat tepi naik sinyal terdeteksi, penghitung timer disimpan ke register saluran 2.

Untuk menangkap kode tombol remote control Anda sendiri, proyek IR_capture dapat digunakan. Di file main.c Anda harus menambahkan definisi jarak jauh seperti ini:

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

  • .hdr - panjang header dalam mks
  • .bit - jumlah bit dalam paket
  • .zero - panjang bit nol
  • .satu - panjang satu bit
  • .dev - deviasi (perbedaan waktu yang dapat diterima). Biasanya 1/10 dari panjang terkecil.

Kemudian tambahkan remote Anda ke daftar remote yang didukung:

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

Direkomendasikan: