İçindekiler:

Stm32'ye Düşmek: Ev Medya Merkezi için Uzaktan Kumanda: 4 Adım (Resimlerle)
Stm32'ye Düşmek: Ev Medya Merkezi için Uzaktan Kumanda: 4 Adım (Resimlerle)

Video: Stm32'ye Düşmek: Ev Medya Merkezi için Uzaktan Kumanda: 4 Adım (Resimlerle)

Video: Stm32'ye Düşmek: Ev Medya Merkezi için Uzaktan Kumanda: 4 Adım (Resimlerle)
Video: Tadımlık Dersler - Dr. Öğr. Üyesi Yeşim Öniz / Drone ile Hedef Takibi 2024, Kasım
Anonim
Stm32'ye Düşmek: Ev Medya Merkezi için Uzaktan Kumanda
Stm32'ye Düşmek: Ev Medya Merkezi için Uzaktan Kumanda

Bu, 'bluepill' kartı olarak bilinen stm32f103c8t6 smt32 mikro denetleyiciye dayalı ev medya merkezi uzaktan kumandası için eksiksiz bir prototiptir. Ev medya merkezi için bir PC kullandığınızı varsayalım. Bu çok esnek bir çözümdür, dahili sabit diske büyük video kitaplığı yerleştirmenize veya ağdan video oynatmanıza, örneğin youtube veya benzerine izin verir, kodeklerle veya video oynatmayla hiç sorun yaşamazsınız, çünkü çok yazılım oynatıcıyı istediğiniz zaman güncellemek kolaydır. Bu çözümün ana dezavantajı, oynatmanızı kontrol etmek için fare ve klavye kullanmanız gerektiğidir. IR uzaktan kumanda bunun için çok uygun bir moddur.

Bu yazıda chip bluepill board kullanarak kendi uzaktan kumandanızı nasıl oluşturacağınızı göstereceğim.

Adım 1: Fikir

Fikir
Fikir
Fikir
Fikir

Ana fikir çok basit: bluepill kartında gömülü usb bağlantı noktası bulunur ve USB HID klavye olarak işlev görebilir. IR alıcısını panoya bağlarsak, IR uzaktan kumandanızdan gelen komutu sanal klavyenin 'tuşa basmasına' çevirebilir. Ek sürücü gerekmez!

Çevremizdeki dünyada birçok IR protokolü var. VCS satıcısının her TV'sinin kendi IR protokolü vardır. Ancak tüm bu protokollerin ortak bir özelliği vardır: sinyali kodlamak için darbe modülasyonu kullanırlar. Genellikle bir önsöz vardır: paketteki ilk bitten önceki uzun itme. Daha sonra IR kontrolü 0 ve 1 ile tüm paketi iletir ve bitiş uzun darbesi ile iletimi sonlandırır. Bitin kodunu çözmek için darbenin uzunluğunu ve tepe noktasının uzunluğunu ölçmemiz gerekir. Genellikle, mantık 0 ve mantık 1'in tepe uzunluğu aynıdır, fark tam darbe uzunluğundadır.

Stm32 mikro denetleyicileri, PWM sinyalini yakalamak için gömülü özelliğe sahiptir. Zamanlayıcının kanal değişkenleri darbenin toplam uzunluğunu ve tepe uzunluğunu kaydettiğinde, mikro denetleyicinin her zamanlayıcısının yanına 'PWM sinyal yakalama daha fazla' konabilir. Burada küçük bir ayrıntıyı vurgulamam gerekiyor: IR alıcı sinyali yakaladığında, çalışma pimindeki voltaj 0 olur ve boş durumda çalışma pimindeki voltaj, IR alıcı besleme voltajına bağlı olarak 5 veya 3,3 volt olur. Yani, alıcı sinyali 'ters çevirir'.

PWM yakalama modu ile stm32 mikro denetleyici, IR uzaktan kumandadan klavye kodlarına kolayca bir IR uzaktan çeviricisine dönüştürülebilir. Ardından en sevdiğiniz görselleştirme yazılımını başlatabilirsiniz, örneğin en sevdiğiniz filmi medya merkezinde oynatmak için Kodi of VLC.

Adım 2: Denetleyiciyi Oluşturma

Denetleyiciyi Oluşturma
Denetleyiciyi Oluşturma
Denetleyiciyi Oluşturma
Denetleyiciyi Oluşturma
Denetleyiciyi Oluşturma
Denetleyiciyi Oluşturma
Denetleyiciyi Oluşturma
Denetleyiciyi Oluşturma

stm32 mikro denetleyiciyi programlamak için STM'nin ücretsiz yazılımını tavsiye etmek istiyorum: system workbench (aka ac6) ve board configuration tool cubeMX. Yazılımı mikro denetleyiciye yüklemek için ST-Link V2 adaptörünün çip klonu kullanılabilir. Bu adıma eklenen sistem çalışma tezgahı proje dosyaları, F1-IR_remote.zip dosyası.

Kart yapılandırma aracı, mikro denetleyicimizin ilk donanım yapılandırma sürecini basitleştirir.

Sistem tezgahı aracını kullanıyorsanız, indirilen projeyi kullanabilirsiniz. Ancak projeyi daha detaylı incelemek isterseniz, cubeMX'te pano konfigürasyonunu oluşturabilirsiniz:

  • Yeni proje oluşturun ve stm32f103c8 panosunu seçin
  • RCC menüsünde 'Yüksek Hızlı Saat (HSE)' öğesi için 'Kristal/Seramik Rezonatör'ü seçin.
  • SYS menüsündeki 'Debug' öğesi için 'Serial Wire'ı seçin.
  • PWM çekim modunda zamanlayıcı #2'yi (TIM2 menüsü) resimde gösterildiği gibi yapılandırın:

    • Köle Modu -> Sıfırlama Modu
    • Tetik Kaynağı -> TI1FP1
    • Saat Kaynağı -> Dahili Saat
    • Kanal1 -> Giriş Yakalama doğrudan modu
  • USB menüsünde 'Aygıt (FS)' onay kutusunu ayarlayın
  • USB_DEVICE menüsündeki 'FS IP Sınıfı' öğesinde 'İnsan Arabirim Aygıtı Sınıfı (HID)' açılır menü öğesini seçin
  • Saat konfigürasyon panelinde, zamanlayıcı #2'ye 72 MHz sağladığınızdan emin olun çünkü her 1 mk'de zamanlayıcı sayımına ihtiyacımız var.
  • Yapılandırma panelinde USB cihazını resimde gösterildiği gibi yapılandırın
  • Yapılandırma panelinde zamanlayıcı#2'yi aşağıdaki gibi yapılandırın:

    • Ön Çağırıcı - 71 (0'dan 71'e) - 1 mikro saniye tik!
    • Sayaç Modu - Yukarı
    • Sayaç Periyodu - 39999 (uzun nabzı ölçebilmeliyiz)
    • Giriş yakalama kanalı1 - Düşen Kenar (IR alıcısından gelen sinyalin ters çevrildiğini unutmayın)

PWM yakalama modunda zamanlayıcı#2 aşağıdaki gibi çalışır:

Düşen cephe algılandığında zamanlayıcı sayacı kanal1 kaydına kaydedilecek ve zamanlayıcı sayacı 0 ile sıfırlanacaktır. Ardından zamanlayıcı yukarı yönde saymaya devam edecektir. Böylece darbe uzunluğunu mikro saniye cinsinden kolayca ölçebiliriz.

Varsayılan olarak STM32 USB HID sınıfı, USB fareyi simüle eder. Denetleyiciyi klavyeye çevirme talimatını burada bulabilirsiniz.

Adım 3: Denetleyiciyi Uyarlama

Proje, Panasonic uzaktan kumanda ve Kodi medya merkezi ile çalışıyor. Projeyi kendi kumandanız için uyarlamak için, benim panasonic uzaktan kumanda (panasonicCode) için yaptığım gibi uzaktan kumandanız için kod dizisini Inc/code.h başlığına eklemelisiniz. Gördüğünüz gibi, her komutun benzersiz bir kimliği vardır (IRcommmand numaralandırmasında). Proje tarafından tanınan 24 komut (0-23) vardır. Komut, alaka düzeyine göre sıralanır.

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

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

Ardından, addRemote() işleviyle IR.cpp'deki init() yöntemine kendi uzaktan kumandanızı eklemelisiniz. İşlev argümanları şunlardır:

  • Paketteki bit sayısı
  • paket Başlık uzunluğu
  • 'Sıfır' bit uzunluğu
  • 'Bir' bit uzunluğu
  • Kod dizisine işaretçi
  • Dizinin sayı elemanları

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

}

Ayrıca dosya, komutları klavye kodlarına dönüştürmek için başka bir tablo içerir. kbdr_kodi dizisi, Kodi medya merkezi için anahtar kodları içerir. Kendi medya merkezi programınız için başka bir dizi ekleyebilirsiniz, örneğin vlc player. Başka bir medya merkezi uygulama tablosu eklerseniz, başka bir KBD nesnesi yaratır ve bunu main.cpp'de başlatırsınız.

Adım 4: Terziliği Basitleştirecek Araçlar

Terziliği Basitleştirecek Araçlar
Terziliği Basitleştirecek Araçlar
Terziliği Basitleştirecek Araçlar
Terziliği Basitleştirecek Araçlar

Depoda iki proje daha var

  • IR araştırması - uzaktan kumandanızın sinyallerinin zamanlama parametrelerinin ölçülmesine izin verir.
  • IR_capture - uzaktan kumandanızın HEX kodlarını yakalamanıza izin verir.

Sadece IR araştırma projesini yükleyin ve bluepill kartının USB portunu bilgisayarınıza bağlayın. Ardından, sanal seri bağlantı noktası aygıtında stm32 kartına karşılık gelen herhangi bir terminal programını başlatın. Uzaktan kumandanızdaki tuşlara bastığınızda, program alınan darbeleri ölçer ve farklı darbeler için ortalama süreleri yazdırır. Paket başlığı, sıfır ve bir bit için darbe uzunluğunu algılamayı basitleştirmelidir.

IR araştırma projesinde zamanlayıcı #2 iki kanallı PWM yakalama modunda çalışıyor: birinci kanal tüm darbe uzunluğunu ve kanal2 tepe uzunluğunu yakalar. Düşen sinyal kenarı algılandığında, zamanlayıcı değeri kanal 1 kaydına kaydedilir ve zamanlayıcı 0 ile sıfırlanır. Sinyalin yükselen kenarı algılandığında, zamanlayıcı sayacı kanal 2 kaydına kaydedilir.

Kendi uzaktan kumandanızın düğme kodlarını yakalamak için IR_capture projesi kullanılabilir. main.c dosyasına aşağıdaki gibi uzak tanımı eklemelisiniz:

IRcode panasonic = {.hdr = 5252,.bits = 48,.sıfır = 902,.one = 1755,.dev = 60 };

  • .hdr - mks cinsinden başlık uzunluğu
  • .bits - paketteki bit sayısı
  • .zero - sıfır bitinin uzunluğu
  • .one - uzunluk bir bit
  • .dev - sapma (kabul edilebilecek süre farkı). Genellikle en küçük uzunluğun 1/10'u kadardır.

Ardından uzaktan kumandanızı desteklenen uzaktan kumandalar listesine ekleyin:

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

Önerilen: