Мазмуну:

Stm32ге түшүү: Үй медиа борбору үчүн алыстан башкаруу: 4 кадам (сүрөттөр менен)
Stm32ге түшүү: Үй медиа борбору үчүн алыстан башкаруу: 4 кадам (сүрөттөр менен)

Video: Stm32ге түшүү: Үй медиа борбору үчүн алыстан башкаруу: 4 кадам (сүрөттөр менен)

Video: Stm32ге түшүү: Үй медиа борбору үчүн алыстан башкаруу: 4 кадам (сүрөттөр менен)
Video: BTT Octopus V1.1 — Конфигурация Klipper 2024, Июль
Anonim
Stm32ге түшүү: Үй медиа борборунун алыстан башкаруу
Stm32ге түшүү: Үй медиа борборунун алыстан башкаруу

Бул smt32 микро контроллерине негизделген үй медиа борборунун алыстан башкаруу үчүн толук прототиби, stm32f103c8t6 "планы" тактасы катары белгилүү. Мисалы, сиз үй медиа борбору үчүн ЖК колдонуп жатасыз дейли. Бул абдан ийкемдүү чечим, бул сизге чоң видео китепкананы ички катуу дискте жайгаштырууга мүмкүндүк берет, же сиз видеону тармактан ойното аласыз, мисалы youtube же башка, сизде кодектер же видео ойнотуу менен эч кандай көйгөй жок, анткени бул абдан каалаган убакта программалык камсыздоону жаңыртуу оңой. Бул чечимдин негизги кемчилиги - ойнотууну көзөмөлдөө үчүн чычканды жана клавиатураны колдонуу керек. IR алыстан башкаруу бул үчүн абдан ыңгайлуу режими болуп саналат.

Бул макалада мен чип планы тактасын колдонуп, алыстан башкарууну кантип түзүүнү көрсөтөм.

1 -кадам: Идея

Ой
Ой
Ой
Ой

Негизги идея абдан жөнөкөй: пландын үстөлүндө USB порт орнотулган жана USB HID клавиатурасы катары иштей алат. Эгерде биз IR алуучуну тактага тиркеп койсок, ал сиздин IR пультуңуздагы буйрукту виртуалдык клавиатуранын "басуу баскычына" которушу мүмкүн. Эч кандай кошумча айдоочулар талап кылынбайт!

Бизди курчап турган дүйнөдө көптөгөн IR протоколдору бар. VCS сатуучусунун ар бир телекөрсөтүүсүнүн өзүнүн IR протоколу бар. Бирок бул протоколдордун жалпы бир нерсеси бар: алар сигналды коддоо үчүн импульстук модуляцияны колдонушат. Адатта, кээ бир преамбула бар: пакетте биринчи битке чейин узак импульс. Андан кийин IR контролу бүт пакетти 0 жана 1 менен өткөрүп, узун импульс менен бүтүрүүнү аяктайт. Битти коддон чыгаруу үчүн биз импульстун узундугун жана чокунун узундугун өлчөшүбүз керек. Адатта, логиканын 0 жана логиканын эң жогорку узундугу бирдей, айырмасы импульстун толук узундугунда.

Stm32 микро контроллери PWM сигналын алуу үчүн камтылган функцияга ээ. Микроконтроллердин ар бир таймеринин жанына 'PWM сигналын көбүрөөк тартууга' коюуга болот, качан таймердин каналдын өзгөрмөлөрү импульстун жалпы узундугун жана анын эң жогорку узундугун сактап калат. Бул жерде мен кичинекей деталды белгилеп кетишим керек: IR кабылдагычы сигналды кармаганда, анын иштөөчү пининдеги чыңалуу 0 болуп калат жана бош абалда жумушчу пиндеги чыңалуу IR кабылдагычынын чыңалуусуна жараша 5 же 3,3 вольтту түзөт. Башкача айтканда, алуучу сигналды "тескери бурат".

PWM тартуу режими менен stm32 микро контроллерин IR пультунан IR пультунун клавиатура коддоруна оңой эле IR алыскы котормочусуна айландырса болот. Андан кийин сиз сүйүктүү визуалдаштыруу программаңызды баштай аласыз, мисалы VLCдин Kodi медиа борборунда сүйүктүү тасмаңызды ойнотуу үчүн.

2 -кадам: Контроллерди түзүү

Контроллерди түзүү
Контроллерди түзүү
Контроллерди түзүү
Контроллерди түзүү
Контроллерди түзүү
Контроллерди түзүү
Контроллерди түзүү
Контроллерди түзүү

Stm32 микро контроллерин программалоо үчүн мен STMден акысыз программаны сунуш кылгым келет: system workbench (aka ac6) жана cubeMX тактасынын конфигурация инструменти. Программаны микро контроллерге жүктөө үчүн ST-Link V2 адаптеринин чип клонун колдонсо болот. Бул кадамга тиркелген тутумдун иштөө долбоорунун файлдары, F1-IR_remote.zip файлы.

Такта конфигурация куралы микро контроллерибиздин алгачкы аппараттык конфигурация процессин жөнөкөйлөтөт.

Эгерде сиз системанын жумушчу тактасын колдонуп жатсаңыз, анда жөн эле жүктөлүп алынган долбоорду колдоно аласыз. Бирок эгер сиз долбоорду кененирээк иликтөөнү кааласаңыз, cubeMXте тактанын конфигурациясын түзө аласыз:

  • Жаңы долбоорду түзүп, stm32f103c8 тактасын тандаңыз
  • RCC менюсунда 'Жогорку ылдамдыктагы саат (HSE)' пункту үчүн 'Crystal/Ceramic Resonator' тандаңыз.
  • SYS менюсунда 'Мүчүлүштүктөрдү оңдоо' пункту үчүн 'Сериялык зымды' тандаңыз.
  • Сүрөттө көрсөтүлгөндөй PWM тартуу режиминде #2 таймерин (TIM2 менюсун) конфигурациялаңыз:

    • Кул режими -> Кайра коюу режими
    • Триггер булагы -> TI1FP1
    • Сааттын булагы -> Ички саат
    • Channel1 -> Input Capture түз режими
  • USB менюсунда "Түзмөк" (FS) белгилөө кутучасын коюңуз
  • USB_DEVICE менюсундагы 'FS IP классы' пунктундагы 'Human Interface Device Class (HID)' ачылуучу меню элементин тандаңыз.
  • Сааттын конфигурациясынын панелинде #2 таймерине 72 МГц берүүнү тактаңыз, анткени бизге ар бир 1 мкмде таймердин саны керек.
  • Конфигурация панелинде USB түзмөгүн сүрөттө көрсөтүлгөндөй конфигурациялаңыз
  • Конфигурация панелинде таймерди#2 төмөнкүдөй конфигурациялаңыз:

    • Prescaller - 71 (0дон 71ге чейин) - 1 микро экинчи кене!
    • Эсептегич режими - Өйдө
    • Counter Period - 39999 (биз узак импульсту өлчөй алышыбыз керек)
    • Киргизүү каналы1 - Falling Edge (IR алуучунун сигналы тескери экенин унутпаңыз)

PWM тартуу режиминде таймер#2 төмөнкүдөй иштейт:

Жыгылып жаткан фронт аныкталганда, таймер эсептегич channel1 реестрине сакталмак жана таймер эсептегич 0 менен баштапкы абалга келтирилмек. Андан кийин таймер багытты саноону улантмак. Ошентип, биз импульстун узундугун микро секундада оңой өлчөй алабыз.

Демейки боюнча STM32 USB HID классы USB чычканды окшоштурат. Бул жерде сиз контроллерди клавиатурага айлантуу боюнча көрсөтмөнү таба аласыз.

3 -кадам: Контроллерди тигүү

Долбоор Panasonic пульту жана Kodi медиа борбору менен иштейт. Долбоорду өз контролеруңузга ылайыкташтыруу үчүн, мен пансионикалык алыстан башкаруу (panasonicCode) Inc/code.h аталышына окшоп, алыстан башкаруу үчүн код массивин кошушуңуз керек. Көрүнүп тургандай, ар бир буйрук уникалдуу IDге ээ (IRcommmand enumда). Долбоор тарабынан таанылган 24 буйрук (0-23) бар. Буйрук актуалдуулугу боюнча иргелет.

typedef санап чыгуу аркылуу {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};

Андан кийин addRemote () функциясы менен IR.cppтеги init () усулуна өзүңүздүн алыстан башкарууну кошушуңуз керек. Функциянын аргументтери:

  • Пакеттеги биттердин саны
  • Пакеттин башынын узундугу
  • 'Zero' бит узундугу
  • "Бир" бит узундугу
  • Код массивине көрсөткүч
  • Массивдин сан элементтери

жараксыз IRcmd:: init (жараксыз) {addRemote (48, 5252, 902, 1755, panasonicCode, sizeof (panasonicCode)/sizeof (uint32_t));

}

Файлда буйруктарды клавиатура коддоруна айландыруу үчүн дагы бир таблица бар. Kbdr_kodi массивинде Kodi медиа борборунун ачкыч коддору камтылган. Сиз медиа борборуңуздун программасына башка массивди кошо аласыз, мисалы, vlc player. Эгерде сиз башка медиа борбордун колдонмо таблицасын кошо турган болсоңуз, анда сиз башка KBD объектисин түзүп, аны main.cppте баштайсыз.

4 -кадам: Тигүүчүлүктү жөнөкөйлөтүүчү куралдар

Тигүүчүлүктү жөнөкөйлөтүүчү куралдар
Тигүүчүлүктү жөнөкөйлөтүүчү куралдар
Тигүүчүлүктү жөнөкөйлөтүүчү куралдар
Тигүүчүлүктү жөнөкөйлөтүүчү куралдар

Репозиторийде дагы эки долбоор бар

  • IR иликтөө - сиздин пульттун сигналдарынын убакыт параметрлерин өлчөөгө мүмкүндүк берет.
  • IR_capture - алыстан башкарууңуздун HEX коддорун тартууга мүмкүндүк берет.

Жөн эле IR изилдөө долбоорун жүктөп, плюстун USB портун компьютериңизге туташтырыңыз. Андан кийин, stm32 тактасына туура келген виртуалдык сериялык порт түзмөгүндө каалаган терминалдык программаны ишке киргизиңиз. Сиз алыстан баскычтарды басканыңызда, программа алынган импульстарды өлчөп, ар кандай импульстун орточо убактысын басып чыгарат. Бул пакеттин аталышы, нөл жана бир бит үчүн импульстун узундугун аныктоону жөнөкөйлөштүрүшү керек.

IR изилдөө долбоорунда таймер #2 PWM тартуу режиминде эки канал менен иштейт: биринчи канал бүт импульстун узундугун, ал эми channel2 эң узундукту кармайт. Түшүп жаткан сигналдын чеги аныкталганда, таймердин мааниси каналга бир реестрге сакталат жана таймер 0 менен баштапкы абалга келтирилет. Сигналдын көтөрүлүүчү чети аныкталганда, таймердин эсептегичи 2 -каналдын реестрине сакталат.

Өзүңүздүн алыстан башкаруунун баскыч коддорун басып алуу үчүн, IR_capture долбоорун колдонсо болот. Main.c файлында сиз алыстан аныктоону ушул сыяктуу кошушуңуз керек:

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

  • .hdr - баштын узундугу mks
  • .bits - пакеттеги биттердин саны
  • .zero - нөлдүк биттин узундугу
  • .one - узундугу бир
  • .dev - четтөө (кабыл алынышы мүмкүн болгон убакыт айырмасы). Адатта, бул эң кичине узундуктун 1/10 бөлүгүн түзөт.

Анан алыстан башкарууну колдоого алынган алыстан башкаруу тизмесине кошуңуз:

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

Сунушталууда: