Innehållsförteckning:

Falling in Stm32: Remote Control for Home Media Center: 4 Steps (with Pictures)
Falling in Stm32: Remote Control for Home Media Center: 4 Steps (with Pictures)

Video: Falling in Stm32: Remote Control for Home Media Center: 4 Steps (with Pictures)

Video: Falling in Stm32: Remote Control for Home Media Center: 4 Steps (with Pictures)
Video: When Student use phone in class #shortsyoutube #shorts #students #comedy #jennyslectures 2024, November
Anonim
Falling in Stm32: Remote control for Home Media Center
Falling in Stm32: Remote control for Home Media Center

Detta är en komplett prototyp för fjärrkontroll för hemmamedia center baserad på smt32 mikrokontroller, stm32f103c8t6, känd som "bluepill" -kort. Anta att du använder en dator för hemmamedia center. Det är en mycket flexibel lösning, som gör att du kan placera ett stort videobibliotek i den interna hårddisken, eller så kan du spela upp video från nätverket, till exempel youtube eller så, du har inga problem med codecs eller videouppspelning alls, eftersom det är mycket lätt att uppdatera programvaruspelaren när som helst. Den största nackdelen med denna lösning är att du ska använda mus och tangentbord för att styra din uppspelning. IR -fjärrkontrollen är mycket bekvämt för detta.

I denna artikel kommer jag att visa hur man skapar en egen fjärrkontroll med chip bluepill board.

Steg 1: Idén

Idén
Idén
Idén
Idén

Huvudidén är väldigt enkel: bluepill -kortet har inbäddad usb -port och kan fungera som USB HID -tangentbord. Om vi ansluter IR -mottagaren till kortet kan det översätta kommandot från din IR -fjärrkontroll till 'knapptryckning' på det virtuella tangentbordet. Inga ytterligare förare krävs!

Det finns många IR -protokoll i världen omkring oss. Varje TV hos VCS -leverantören har sitt eget IR -protokoll. Men alla dessa protokoll har något gemensamt: de använder pulsmodulering för att koda signalen. Vanligtvis finns det en ingress: lång impuls före den första biten i paketet. Därefter sänder IR -kontrollen hela paketet med 0 och 1 och slutför överföringen med lång puls. För att avkoda biten måste vi mäta längdpulsen och längden på toppen. Vanligtvis är topplängden för logik 0 och logik 1 densamma, skillnaden ligger i hela pulslängden.

STM32 -mikrokontrollerna har inbäddad funktion för att fånga PWM -signal. Nästan varje timer på mikrokontrollen kan läggas in i "PWM -signalinspelning mer" när kanalvariablerna för timern sparar pulslängden och dess topplängd. Här måste jag markera den lilla detaljen: när IR -mottagaren fångar signalen blir spänningen på dess arbetsstift 0 och i viloläge är spänningen i arbetsstiftet 5 eller 3,3 volt beroende på IR -mottagarens matningsspänning. Dvs mottagaren 'inverterar' signalen.

Med PWM -inspelningsläge kan stm32 -mikrokontrollen enkelt förvandlas till en IR -fjärröversättare från IR -fjärrkontrollen till tangentbordskoderna. Sedan kan du starta din favorit visualiseringsprogramvara, till exempel Kodi från VLC för att spela din favoritfilm på mediecenteret.

Steg 2: Skapa kontrollen

Skapa kontrollen
Skapa kontrollen
Skapa kontrollen
Skapa kontrollen
Skapa kontrollen
Skapa kontrollen
Skapa kontrollen
Skapa kontrollen

För att programmera stm32 mikrokontroller vill jag rekommendera den fria programvaran från STM: systembänk (aka ac6) och kortkonfigurationsverktyget cubeMX. För att ladda upp programvaran till mikrokontrollen kan chipklonen på ST-Link V2-adaptern användas. Systemets arbetsbänkprojektfiler som bifogas detta steg, F1-IR_remote.zip-filen.

Kortkonfigurationsverktyget förenklar processen med initial hårdvarukonfiguration av vår mikrokontroller.

Om du använder systembänkverktyget kan du bara använda det nedladdade projektet. Men om du vill undersöka projektet i mer information kan du skapa kortkonfigurationen i cubeMX:

  • Skapa ett nytt projekt och välj tavlan stm32f103c8
  • Välj 'Crystal/Ceramic Resonator' för 'High Speed Clock (HSE)' i RCC -menyn.
  • Välj "Seriell tråd" för "Debug" -objektet i SYS -menyn.
  • Konfigurera timern #2 (TIM2 -menyn) i PWM -inspelningsläge enligt bilden:

    • Slavläge -> Återställ läge
    • Utlösarkälla -> TI1FP1
    • Klocka -> Intern klocka
    • Channel1 -> Input Capture direktläge
  • Markera kryssrutan 'Enhet (FS) i USB -menyn
  • Välj rullgardinsmenyn 'Human Interface Device Class (HID)' i 'Class of FS IP' i USB_DEVICE-menyn
  • I klockans konfigurationspanel, se till att ge 72 MHz till timern #2 eftersom vi behöver timerräkning vid varje 1 ms.
  • Konfigurera USB -enheten på konfigurationspanelen enligt bilden
  • Konfigurera timern 2 på konfigurationspanelen enligt följande:

    • Prescaller - 71 (från 0 till 71) - 1 mikro sekunders fästing!
    • Räknarläge - Upp
    • Räknarperiod - 39999 (vi borde kunna mäta den långa pulsen)
    • Input capture channel1 - Falling Edge (kom ihåg att signalen från IR -mottagaren är inverterad)

I PWM -inspelningsläget fungerar timern#2 enligt följande:

När den fallande fronten detekterades, skulle timräknaren sparas i kanal1 -registret och timräknaren skulle återställas med 0. Därefter fortsatte timern att räkna upp riktning. Så vi kan enkelt mäta pulslängden i mikrosekunder.

Som standard simulerar STM32 USB HID -klassen USB -musen. Här kan du hitta instruktionerna för att göra regulatorn till ett tangentbord.

Steg 3: Skräddarsy kontrollen

Projektet fungerar med Panasonic fjärrkontroll och Kodi mediacenter. För att skräddarsy projektet för din egen styrenhet bör du lägga till kodmatrisen för din fjärrkontroll som jag gjorde för panasonic fjärrkontroll (panasonicCode) till Inc/code.h -rubriken. Som du kan se har varje kommando ett unikt ID (i IRcommmand enum). Det finns 24 kommandon (0-23) som känns igen av projektet. Kommandot sorteras efter relevans.

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

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

Sedan bör du lägga till din egen fjärrkontroll i init () -metoden i IR.cpp med funktionen addRemote (). Funktionsargumenten är:

  • Antal bitar i paketet
  • Paketets rubriklängd
  • "Noll" bitlängd
  • "En" bitlängd
  • Pekare till kodmatrisen
  • Nummerelement i matrisen

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

}

Filen innehåller också en annan tabell för att konvertera kommandon till tangentbordskoder. Kbdr_kodi -arrayen innehåller nyckelkoderna för Kodi media center. Du kan lägga till en annan array för ditt eget mediacenterprogram, till exempel vlc -spelare. Om du skulle lägga till en annan mediacenterapplikationstabell skulle du skapa ett annat objekt KBD och initiera det i main.cpp.

Steg 4: Verktyg för att förenkla skräddarsy

Verktyg för att förenkla skräddarsy
Verktyg för att förenkla skräddarsy
Verktyg för att förenkla skräddarsy
Verktyg för att förenkla skräddarsy

Det finns ytterligare två projekt i förvaret

  • IR -undersökning - gör det möjligt att mäta tidsparametrarna för signalerna på din fjärrkontroll.
  • IR_capture - gör det möjligt att fånga HEX -koder på din fjärrkontroll.

Ladda bara IR -undersökningsprojektet och anslut USB -porten på bluepill -kortet till din dator. Starta sedan ett terminalprogram på den virtuella seriella portenheten, som motsvarar stm32 -kortet. Medan du trycker på knapparna på fjärrkontrollen mäter programmet de mottagna pulserna och skriver ut genomsnittstiderna för olika pulser. Det bör förenkla att detektera pulslängden för pakethuvudet, noll och en bit.

I IR -undersökningsprojektet arbetar timern #2 i PWM -inspelningsläge med två kanaler: kanal ett fångar hela pulslängden och kanal2 fångar topplängden. När den fallande signalkanten detekterades sparades timervärdet i kanal ett -registret och timern återställdes med 0. När signalens stigande kant detekterades sparades timräknaren i kanal 2 -registret.

För att fånga knappkoderna på din egen fjärrkontroll kan IR_capture -projektet användas. I main.c -filen bör du lägga till fjärrdefinitionen så här:

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

  • .hdr - rubriklängden i mks
  • .bits - antalet bitar i paketet
  • .zero - längden på nollbiten
  • .one - längden en bit
  • .dev - avvikelsen (skillnaden i tider som kan accepteras). Vanligtvis är det 1/10 av den minsta längden.

Lägg sedan till din fjärrkontroll i listan över fjärrkontroller som stöds:

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

Rekommenderad: