Բովանդակություն:

Ընկնում է Stm32- ում. Հեռակառավարում տան մեդիա կենտրոնի համար. 4 քայլ (նկարներով)
Ընկնում է Stm32- ում. Հեռակառավարում տան մեդիա կենտրոնի համար. 4 քայլ (նկարներով)

Video: Ընկնում է Stm32- ում. Հեռակառավարում տան մեդիա կենտրոնի համար. 4 քայլ (նկարներով)

Video: Ընկնում է Stm32- ում. Հեռակառավարում տան մեդիա կենտրոնի համար. 4 քայլ (նկարներով)
Video: STM32 Blue Pill-ի ծրագրավորում LDmicro PLC Ladder Logic-ով 2024, Դեկտեմբեր
Anonim
Ընկնում է Stm32- ում. Հեռակառավարում տան մեդիա կենտրոնի համար
Ընկնում է Stm32- ում. Հեռակառավարում տան մեդիա կենտրոնի համար

Սա տնային մեդիա կենտրոնի հեռակառավարման ամբողջական նախատիպն է ՝ հիմնված smt32 միկրոկառավարիչի, stm32f103c8t6- ի վրա, որը հայտնի է որպես «bluepill» տախտակ: Ենթադրենք, դուք համակարգիչ եք օգտագործում տնային մեդիա կենտրոնի համար: Դա շատ ճկուն լուծում է, որը թույլ է տալիս տեղադրել հսկայական վիդեո գրադարան ներքին կոշտ սկավառակի մեջ, կամ կարող եք տեսանյութեր նվագարկել ցանցից, օրինակ ՝ youtube կամ այլ կերպ, ընդհանրապես դժվարություն չունեք կոդեկների կամ տեսանյութերի նվագարկման հետ, քանի որ դա շատ հեշտ է ցանկացած ժամանակ թարմացնել ծրագրակազմի նվագարկիչը: Այս լուծման հիմնական թերությունն այն է, որ դուք պետք է օգտագործեք մկնիկ և ստեղնաշար `ձեր նվագարկումը վերահսկելու համար: IR հեռակառավարման վահանակը շատ հարմար է դրա համար:

Այս հոդվածում ես ցույց կտամ, թե ինչպես ստեղծել սեփական հեռակառավարման վահանակ `չիպերի կապույտ տախտակի միջոցով:

Քայլ 1: Գաղափարը

Գաղափարը
Գաղափարը
Գաղափարը
Գաղափարը

Հիմնական գաղափարը շատ պարզ է. Bluepill տախտակը ներկառուցված է USB պորտ և կարող է հանդես գալ որպես USB HID ստեղնաշար: Եթե մենք IR ստացողը կցենք տախտակին, այն կարող է թարգմանել ձեր IR հեռակառավարման վահանակի հրամանը վիրտուալ ստեղնաշարի «ստեղն սեղմելու»: Լրացուցիչ վարորդներ չեն պահանջվում:

Մեզ շրջապատող աշխարհում կան բազմաթիվ IR արձանագրություններ: VCS վաճառողի յուրաքանչյուր հեռուստատեսություն ունի իր սեփական IR արձանագրությունը: Բայց այս բոլոր արձանագրությունները մի ընդհանուր բան ունեն. Ազդանշանը կոդավորելու համար օգտագործում են զարկերակային մոդուլյացիա: Սովորաբար, կա մի նախաբան. Երկար իմպուլս մինչև փաթեթի առաջին բիթը: Այնուհետև IR հսկողությունը փոխանցում է ամբողջ փաթեթը 0 -ով և 1 -ով և վերջնականացնում է փոխանցումը ավարտի երկար իմպուլսով: Բիթը վերծանելու համար մենք պետք է չափենք երկարության զարկերակը և գագաթնակետի երկարությունը: Սովորաբար, տրամաբանության գագաթնակետի 0 -ն և տրամաբանությունը 1 -ը նույնն են, տարբերությունը ամբողջ զարկերակի երկարության մեջ է:

Stm32 միկրոկարգավորիչները ներկառուցված են PWM ազդանշանը գրավելու գործառույթ: Միկրոհսկիչի գրեթե յուրաքանչյուր ժամաչափ կարող է դրվել «PWM ազդանշանը ավելի շատ գրավելու» մեջ, երբ ժամաչափի ալիքային փոփոխականները խնայում են զարկերակի ընդհանուր երկարությունը և դրա գագաթնակետը: Այստեղ ես պետք է նշեմ մի փոքր մանրամասնություն. Այսինքն, ստացողը «շրջում» է ազդանշանը:

PWM ֆիքսման ռեժիմով stm32 միկրոհսկիչը կարելի է հեշտությամբ վերածել IR հեռակա թարգմանչի ՝ IR հեռավորությունից ստեղնաշարի կոդերին: Այնուհետև կարող եք սկսել ձեր նախընտրած տեսողական ծրագրակազմը, օրինակ ՝ Kodi of VLC- ն ՝ ձեր նախընտրած ֆիլմը մեդիա կենտրոնում ցուցադրելու համար:

Քայլ 2: Ստեղծեք վերահսկիչ

Կառավարիչի ստեղծում
Կառավարիչի ստեղծում
Կառավարիչի ստեղծում
Կառավարիչի ստեղծում
Կառավարիչի ստեղծում
Կառավարիչի ստեղծում
Կառավարիչի ստեղծում
Կառավարիչի ստեղծում

Stm32 միկրո վերահսկիչ ծրագրավորելու համար ես կցանկանայի խորհուրդ տալ STM- ի անվճար ծրագրակազմ. Softwareրագրակազմը միկրոհսկիչի մեջ ներբեռնելու համար կարող է օգտագործվել ST-Link V2 ադապտեր չիպի կլոնը: Այս քայլին կցված համակարգի աշխատանքային սեղանի նախագծի ֆայլերը ՝ F1-IR_remote.zip ֆայլը:

Տախտակի կազմաձևման գործիքը պարզեցնում է մեր միկրոհսկիչի սկզբնական ապարատային կազմաձևման գործընթացը:

Եթե դուք օգտագործում եք համակարգի աշխատասեղանի գործիքը, կարող եք պարզապես օգտագործել ներբեռնված նախագիծը: Բայց եթե ցանկանում եք ավելի մանրամասն ուսումնասիրել նախագիծը, կարող եք cubeMX- ում ստեղծել տախտակի կազմաձևում.

  • Ստեղծեք նոր նախագիծ և ընտրեք տախտակ stm32f103c8
  • RCC ընտրացանկում ընտրեք «Բյուրեղապակյա/կերամիկական ռեզոնատոր» ՝ «Բարձր արագության ժամացույց (HSE)» կետի համար:
  • SYS ընտրացանկում «Վրիպազերծում» կետի համար ընտրեք «Serial Wire»:
  • Կարգավորեք ժամաչափը #2 (TIM2 ընտրացանկ) PWM ֆիքսման ռեժիմում, ինչպես ցույց է տրված նկարում.

    • Ստրուկի ռեժիմ -> Վերագործարկեք ռեժիմ
    • Գործարկման աղբյուր -> TI1FP1
    • Sourceամացույցի աղբյուր -> Ներքին ժամացույց
    • Channel1 -> Input Սևեռման ուղղակի ռեժիմ
  • USB ընտրացանկում նշեք «Սարքը (FS)» վանդակը
  • USB_DEVICE ընտրացանկում «FS IP դաս» տարրում ընտրեք «Մարդկային միջերեսի սարքի դաս (HID)» ընտրացանկի տարրը:
  • Clockամացույցի կազմաձևման վահանակում համոզվեք, որ թիվ 2 ժամաչափին տրամադրեք 72 ՄՀց հաճախականություն, քանի որ մեզ անհրաժեշտ է ժամաչափի հաշվարկ յուրաքանչյուր 1 արկղում:
  • Կազմաձևման վահանակում կազմաձևեք USB սարքը, ինչպես ցույց է տրված նկարում
  • Կազմաձևման վահանակում կարգավորեք#2 ժամաչափը հետևյալ կերպ.

    • Prescaller - 71 (0 -ից 71) - 1 միկրո վայրկյան տիզ:
    • Counter Mode - Up
    • Հակահարված - 39999 (մենք պետք է կարողանանք չափել երկար զարկերակը)
    • Մուտքային գրավման ալիք 1 - ընկնող եզր (հիշեք, որ IR ընդունիչից ազդանշանը շրջված է)

PWM գրավման ռեժիմում թիվ 2 ժամաչափը կաշխատի հետևյալ կերպ.

Երբ ընկնող ճակատը հայտնաբերվի, ժմչփի հաշվիչը կպահվի Channel1 գրանցամատյանում, և ժմչփի հաշվիչը կվերակայվի 0 -ով: Հետո ժամաչափը կշարունակի հաշվել ուղղությունը: Այսպիսով, մենք կարող ենք հեշտությամբ չափել զարկերակի երկարությունը միկրո վայրկյանում:

Լռելյայն STM32 USB HID դասը նմանակում է USB մկնիկը: Այստեղ դուք կարող եք գտնել հրահանգը ՝ վերահսկիչը ստեղնաշարի վերածելու համար:

Քայլ 3: Կառավարիչի հարմարեցում

Նախագիծն աշխատում է Panasonic հեռակառավարման վահանակի և Kodi մեդիակենտրոնի հետ: Ձեր սեփական վերահսկիչի համար նախագիծը հարմարեցնելու համար դուք պետք է ավելացնեք ձեր հեռակառավարման վահանակի ծածկագիրը, ինչպես դա արեցի panasonic հեռակառավարման վահանակի համար (panasonicCode) Inc/code.h վերնագրին: Ինչպես տեսնում եք, յուրաքանչյուր հրաման ունի եզակի ID (IRcommmand enum- ում): Կան 24 հրաման (0-23), որոնք ճանաչվել են նախագծի կողմից: Հրամանը դասավորված են ըստ համապատասխանության:

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_preject, IR_sum_ IR, IR, IR_power, IR_nknown} 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};

Այնուհետև IR.cpp- ում դուք պետք է ավելացնեք ձեր սեփական հեռակառավարման վահանակը ՝ addRemote () գործառույթով: Ֆունկցիայի փաստարկներն են.

  • Փաթեթի բիթերի քանակը
  • Փաթեթի վերնագրի երկարությունը
  • «Eroրո» բիտ երկարություն
  • «Մեկ» բիտ երկարություն
  • Կոդի զանգվածի ցուցիչ
  • Numberանգվածի թվային տարրեր

դատարկ IRcmd:: init (անվավեր) {addRemote (48, 5252, 902, 1755, panasonicCode, sizeof (panasonicCode)/sizeof (uint32_t));

}

Նաև ֆայլը պարունակում է մեկ այլ սեղան ՝ հրամանները ստեղնաշարի կոդերի փոխարկելու համար: Kbdr_kodi զանգվածը պարունակում է Kodi մեդիա կենտրոնի հիմնական կոդերը: Դուք կարող եք ավելացնել մեկ այլ զանգված ձեր սեփական մեդիա կենտրոնի ծրագրի համար, օրինակ ՝ vlc նվագարկիչ: Եթե ավելացնեիք մեդիա կենտրոնի կիրառման այլ աղյուսակ, կստեղծեիք մեկ այլ օբյեկտ KBD և այն նախաստորագրեք main.cpp- ում:

Քայլ 4. Գործիքներ `պարզեցնելու համար դերձակը

Գործիքներ ՝ պարզեցնելու համար դերձակությունը
Գործիքներ ՝ պարզեցնելու համար դերձակությունը
Գործիքներ ՝ պարզեցնելու համար դերձակությունը
Գործիքներ ՝ պարզեցնելու համար դերձակությունը

Պահեստում կա ևս երկու նախագիծ

  • IR հետաքննություն - թույլ է տալիս չափել ձեր հեռակառավարման ազդանշանների ժամանակային պարամետրերը:
  • IR_capture - թույլ է տալիս գրավել ձեր հեռակառավարման վահանակի HEX կոդերը:

Պարզապես բեռնեք IR հետաքննության նախագիծը և միացրեք կապի տախտակի USB պորտը ձեր համակարգչին: Այնուհետեւ գործարկեք ցանկացած տերմինալային ծրագիր վիրտուալ սերիալային պորտի սարքի վրա, որը համապատասխանում է stm32 տախտակին: Մինչ հեռակառավարման կոճակները սեղմում եք, ծրագիրը չափում է ստացված իմպուլսները և տպում է տարբեր զարկերակների միջին ժամանակը: Այն պետք է պարզեցնի փաթեթի վերնագրի զրոյական երկարության հայտնաբերումը `զրո և մեկ բիթ:

IR հետազոտական նախագծում թիվ 2 ժամաչափը աշխատում է PWM գրավման ռեժիմում `երկու ալիքով. Առաջին ալիքը գրավում է ամբողջ զարկերակի երկարությունը, իսկ 2 -ը` գագաթնակետի երկարությունը: Երբ ընկնում է ազդանշանի եզրը, ժմչփի արժեքը պահվում է առաջին ալիքի գրանցամատյանում և ժմչփը կարգավորվում է 0 -ով: Երբ ազդանշանի բարձրացող եզրը հայտնաբերվում է, ժամաչափի հաշվիչը պահվում է 2 -րդ ալիքի գրանցամատյանում:

Ձեր հեռակառավարման վահանակի կոճակների կոդերը գրավելու համար կարող է օգտագործվել IR_capture նախագիծը: Main.c ֆայլում դուք պետք է ավելացնեք հեռավոր սահմանումը, ինչպես սա է.

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

  • .hdr - վերնագրի երկարությունը mks- ում
  • .bit - փաթեթում բիթերի քանակը
  • .zero - զրո բիտի երկարությունը
  • . մեկ - երկարությունը մեկ բիթ
  • .dev - շեղումը (ժամանակների տարբերությունը, որը կարելի է ընդունել): Սովորաբար դա ամենափոքր երկարության 1/10 -ն է:

Այնուհետև ձեր հեռակառավարիչը ավելացրեք աջակցվող հեռակառավարման վահանակների ցուցակին.

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

Խորհուրդ ենք տալիս: