Spisu treści:

Falling in Stm32: Pilot do Home Media Center: 4 kroki (ze zdjęciami)
Falling in Stm32: Pilot do Home Media Center: 4 kroki (ze zdjęciami)

Wideo: Falling in Stm32: Pilot do Home Media Center: 4 kroki (ze zdjęciami)

Wideo: Falling in Stm32: Pilot do Home Media Center: 4 kroki (ze zdjęciami)
Wideo: AUKCJA NA 4000 BTC | HACK IOTA | PROBLEMY TREZORA [21.02.2020] 2024, Listopad
Anonim
Falling in Stm32: pilot zdalnego sterowania do Home Media Center
Falling in Stm32: pilot zdalnego sterowania do Home Media Center

Jest to kompletny prototyp pilota do domowego centrum multimedialnego opartego na mikrokontrolerze smt32, stm32f103c8t6, znanym jako płytka 'bluepill'. Załóżmy, że używasz komputera do domowego centrum multimedialnego. Jest to bardzo elastyczne rozwiązanie, które pozwala umieścić ogromną bibliotekę wideo na wewnętrznym dysku twardym lub odtwarzać wideo z sieci, na przykład youtube lub tak, nie masz żadnych problemów z kodekami lub odtwarzaniem wideo w ogóle, ponieważ jest bardzo łatwa aktualizacja odtwarzacza oprogramowania w dowolnym momencie. Główną wadą tego rozwiązania jest to, że do sterowania odtwarzaniem należy używać myszy i klawiatury. Pilot na podczerwień jest do tego wygodnym trybem.

W tym artykule pokażę jak stworzyć własny pilot przy użyciu płytki chipowej bluepill.

Krok 1: Pomysł

Pomysł
Pomysł
Pomysł
Pomysł

Główna idea jest bardzo prosta: płytka bluepill ma wbudowany port USB i może działać jako klawiatura USB HID. Jeśli podłączymy odbiornik IR do tablicy, może to przetłumaczyć polecenie z pilota IR na „naciśnięcie klawisza” wirtualnej klawiatury. Nie są wymagane żadne dodatkowe sterowniki!

W otaczającym nas świecie istnieje wiele protokołów IR. Każdy telewizor dostawcy VCS ma swój własny protokół IR. Ale wszystkie te protokoły mają jedną wspólną cechę: używają modulacji impulsowej do kodowania sygnału. Zwykle jest jakaś preambuła: długi impuls przed pierwszym bitem w pakiecie. Następnie sterowanie IR przesyła cały pakiet z 0 i 1 i kończy transmisję długim impulsem finish. Aby zdekodować bit, musimy zmierzyć długość impulsu i długość piku. Zwykle długość piku logicznego 0 i logicznego 1 jest taka sama, różnica polega na całkowitej długości impulsu.

Mikrokontrolery stm32 mają wbudowaną funkcję przechwytywania sygnału PWM. Prawie każdy zegar mikrokontrolera można umieścić w „przechwytywaniu sygnału PWM więcej”, gdy zmienne kanału zegara zapisują całkowitą długość impulsu i jego szczytową długość. Tutaj muszę podkreślić drobny szczegół: gdy odbiornik IR złapie sygnał, napięcie na jego pinie działającym wynosi 0, a w stanie spoczynku napięcie na pinie roboczym wynosi 5 lub 3,3 V w zależności od napięcia zasilania odbiornika IR. Czyli odbiornik „odwraca” sygnał.

Dzięki trybowi przechwytywania PWM mikrokontroler stm32 można łatwo przekształcić w zdalny tłumacz IR z pilota IR na kody klawiatury. Następnie możesz uruchomić swoje ulubione oprogramowanie do wizualizacji, na przykład Kodi z VLC, aby odtworzyć swój ulubiony film w centrum multimedialnym.

Krok 2: Tworzenie kontrolera

Tworzenie kontrolera
Tworzenie kontrolera
Tworzenie kontrolera
Tworzenie kontrolera
Tworzenie kontrolera
Tworzenie kontrolera
Tworzenie kontrolera
Tworzenie kontrolera

Do zaprogramowania mikrokontrolera stm32 polecam darmowe oprogramowanie firmy STM: system workbench (aka ac6) oraz narzędzie do konfiguracji płytki cubeMX. Do wgrania oprogramowania do mikrokontrolera można użyć klonu chipa adaptera ST-Link V2. Pliki projektu systemu workbench dołączone do tego kroku, plik F1-IR_remote.zip.

Narzędzie do konfiguracji płytki upraszcza proces wstępnej konfiguracji sprzętowej naszego mikrokontrolera.

Jeśli korzystasz z systemowego narzędzia workbench, możesz po prostu użyć pobranego projektu. Ale jeśli chcesz zbadać projekt bardziej szczegółowo, możesz utworzyć konfigurację płytki w cubeMX:

  • Utwórz nowy projekt i wybierz tablicę stm32f103c8
  • Wybierz „Rezonator kryształowy/ceramiczny” dla pozycji „Zegar wysokiej prędkości (HSE)” w menu RCC.
  • Wybierz „Serial Wire” dla pozycji „Debug” w menu SYS.
  • Skonfiguruj timer #2 (menu TIM2) w trybie przechwytywania PWM, jak pokazano na rysunku:

    • Tryb Slave -> Tryb resetowania
    • Źródło wyzwalania -> TI1FP1
    • Źródło zegara -> Zegar wewnętrzny
    • Kanał1 -> tryb bezpośredniego przechwytywania wejścia
  • Ustaw pole wyboru „Urządzenie (FS) w menu USB”
  • Wybierz element menu rozwijanego „Human Interface Device Class (HID)” w pozycji „Class of FS IP” w menu USB_DEVICE
  • W panelu konfiguracji zegara upewnij się, że do zegara nr 2 podałeś 72 MHz, ponieważ potrzebujemy licznika zegara co 1 mks.
  • W panelu konfiguracyjnym skonfiguruj urządzenie USB, jak pokazano na rysunku
  • W panelu konfiguracyjnym skonfiguruj timer#2 w następujący sposób:

    • Prescaller - 71 (od 0 do 71) - 1 mikrosekunda tiku!
    • Tryb licznika - w górę
    • Okres licznika - 39999 (powinniśmy być w stanie zmierzyć długi impuls)
    • Input capture channel1 - Falling Edge (pamiętaj, że sygnał z odbiornika IR jest odwrócony)

W trybie przechwytywania PWM zegar nr 2 działałby następująco:

Po wykryciu spadającego frontu licznik timera zostanie zapisany w rejestrze kanału 1, a licznik timera zostanie zresetowany na 0. Następnie timer będzie kontynuował zliczanie w górę. Dzięki temu możemy z łatwością zmierzyć długość impulsu w mikrosekundach.

Domyślnie klasa STM32 USB HID symuluje mysz USB. Tutaj znajdziesz instrukcję, jak zmienić kontroler w klawiaturę.

Krok 3: Dostosowywanie kontrolera

Projekt współpracuje z pilotem Panasonic i centrum medialnym Kodi. Aby dostosować projekt do własnego kontrolera, należy dodać tablicę kodów dla pilota, tak jak w przypadku pilota Panasonic (panasonicCode) do nagłówka Inc/code.h. Jak widać, każde polecenie ma unikalny identyfikator (w wyliczeniu IRcommand). W projekcie są rozpoznawane 24 komendy (0-23). Polecenia są sortowane według trafności.

typedef wyliczenia {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 } Polecenie IR;

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

Następnie należy dodać własny pilot w metodzie init() w IR.cpp z funkcją addRemote(). Argumentami funkcji są:

  • Liczba bitów w pakiecie
  • Długość nagłówka pakietu
  • „Zerowa” długość bitu
  • „Jeden” bit długości
  • Wskaźnik do tablicy kodów
  • Liczba elementów tablicy

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

}

Plik zawiera również kolejną tabelę do konwersji poleceń na kody klawiatury. Tablica kbdr_kodi zawiera kody kluczy dla centrum multimedialnego Kodi. Możesz dodać kolejną macierz do własnego programu centrum multimedialnego, na przykład odtwarzacz vlc. Jeśli chcesz dodać kolejną tabelę aplikacji centrum multimedialnego, utworzysz kolejny obiekt KBD i zainicjujesz go w main.cpp.

Krok 4: Narzędzia ułatwiające krawiectwo

Narzędzia ułatwiające krawiectwo
Narzędzia ułatwiające krawiectwo
Narzędzia ułatwiające krawiectwo
Narzędzia ułatwiające krawiectwo

W repozytorium są jeszcze dwa inne projekty

  • Badanie IR - pozwala zmierzyć parametry czasowe sygnałów twojego pilota.
  • IR_capture - umożliwia przechwytywanie kodów HEX pilota.

Wystarczy załadować projekt IR i podłączyć port USB płytki bluepill do komputera. Następnie uruchom dowolny program terminalowy na urządzeniu wirtualnego portu szeregowego, odpowiadający płycie stm32. Podczas naciskania przycisków na pilocie program mierzy odebrane impulsy i drukuje średnie czasy dla różnych impulsów. Powinno to uprościć wykrywanie długości impulsu dla nagłówka pakietu, zero i jeden bit.

W projekcie badawczym IR zegar #2 pracuje w trybie przechwytywania PWM z dwoma kanałami: kanał pierwszy przechwytuje całą długość impulsu, a kanał 2 przechwytuje długość szczytu. Po wykryciu opadającego zbocza sygnału wartość timera zapisywana jest w rejestrze kanału pierwszego, a timer resetuje się na 0. Po wykryciu narastającego zbocza sygnału licznik timera zapisywany jest w rejestrze kanału 2.

Aby przechwycić kody przycisków własnego pilota, można użyć projektu IR_capture. W pliku main.c należy dodać zdalną definicję taką jak ta:

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

  • .hdr - długość nagłówka w mks
  • .bits - ilość bitów w pakiecie
  • .zero - długość bitu zerowego
  • .one - długość jeden bit
  • .dev - odchylenie (możliwa do zaakceptowania różnica czasów). Zwykle jest to 1/10 najmniejszej długości.

Następnie dodaj pilota do listy obsługiwanych pilotów:

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

Zalecana: