Съдържание:

Попадане в Stm32: Дистанционно управление за домашен медиен център: 4 стъпки (със снимки)
Попадане в Stm32: Дистанционно управление за домашен медиен център: 4 стъпки (със снимки)

Видео: Попадане в Stm32: Дистанционно управление за домашен медиен център: 4 стъпки (със снимки)

Видео: Попадане в Stm32: Дистанционно управление за домашен медиен център: 4 стъпки (със снимки)
Видео: STM32 GSM/GPRS модуль Ai-Thinker A6.Управление по SMS и громкая связь.ТЕСТ. 2024, Ноември
Anonim
Попадане в Stm32: Дистанционно управление за домашен медиен център
Попадане в Stm32: Дистанционно управление за домашен медиен център

Това е пълен прототип за дистанционно управление за домашен медиен център, базирано на микроконтролер smt32, stm32f103c8t6, известен като „платка“. Да предположим, че използвате компютър за домашен медиен център. Това е много гъвкаво решение, което ви позволява да поставите огромна видеотека във вътрешен твърд диск или можете да възпроизвеждате видео от мрежата, например youtube или така, изобщо нямате проблеми с кодеци или възпроизвеждане на видео, защото е много лесно да актуализирате софтуерния плейър по всяко време. Основният недостатък на това решение е, че трябва да използвате мишка и клавиатура, за да контролирате възпроизвеждането си. IR дистанционното управление е много удобен режим за това.

В тази статия ще покажа как да създадете собствено дистанционно управление с помощта на чип платка.

Стъпка 1: Идеята

Идеята
Идеята
Идеята
Идеята

Основната идея е много проста: платката за планове има вграден USB порт и може да действа като USB HID клавиатура. Ако прикрепим IR приемник към дъската, той може да преведе командата от вашето IR дистанционно управление до „натискане на клавиш“на виртуалната клавиатура. Не са необходими допълнителни драйвери!

В света около нас има много IR протоколи. Всеки телевизор на VCS доставчик има свой собствен IR протокол. Но всички тези протоколи имат нещо общо: те използват импулсна модулация за кодиране на сигнала. Обикновено има някаква преамбюла: дълъг импулс преди първия бит в пакета. След това IR контролът предава целия пакет с 0 и 1 и финализира предаването с финален дълъг импулс. За да декодираме бита, трябва да измерим дължината на импулса и дължината на пика. Обикновено пиковата дължина на логика 0 и логика 1 са еднакви, разликата е в пълната дължина на импулса.

Микроконтролерите stm32 имат вградена функция за улавяне на ШИМ сигнал. Почти всеки таймер на микроконтролера може да бъде поставен в „PWM сигнал за улавяне на повече“, когато каналните променливи на таймера запазват общата дължина на импулса и неговата пикова дължина. Тук трябва да подчертая малкия детайл: когато IR приемникът улови сигнала, напрежението на работния му щифт става 0, а в състояние на празен ход напрежението в работния щифт е 5 или 3.3 волта в зависимост от захранващото напрежение на IR приемника. Т.е. приемникът „инвертира“сигнала.

С режим на улавяне на ШИМ микроконтролерът stm32 може лесно да се превърне в IR дистанционен преводач от IR дистанционно към кодовете на клавиатурата. След това можете да стартирате любимия си софтуер за визуализация, например Kodi от VLC, за да пуснете любимия си филм в медийния център.

Стъпка 2: Създаване на контролера

Създаване на контролера
Създаване на контролера
Създаване на контролера
Създаване на контролера
Създаване на контролера
Създаване на контролера
Създаване на контролера
Създаване на контролера

За програмиране на микроконтролер stm32 бих искал да препоръчам безплатния софтуер от STM: системна работна маса (известен още като ac6) и инструмента за конфигуриране на платката cubeMX. За да качите софтуера в микроконтролера, може да се използва клонирането на чип на ST-Link V2 адаптера. Файловете за проекти на системния работен плот, приложени към тази стъпка, файл F1-IR_remote.zip.

Инструментът за конфигуриране на платката опростява процеса на първоначална хардуерна конфигурация на нашия микроконтролер.

Ако използвате инструмента за системна работна маса, можете просто да използвате изтегления проект. Но ако искате да проучите проекта по -подробно, можете да създадете конфигурация на платката в cubeMX:

  • Създайте нов проект и изберете борда stm32f103c8
  • Изберете „Кристален/керамичен резонатор“за елемента „Високоскоростен часовник (HSE)“в менюто RCC.
  • Изберете „Serial Wire“за елемента „Debug“в менюто SYS.
  • Конфигурирайте таймера #2 (меню TIM2) в режим на улавяне на ШИМ, както е показано на картинката:

    • Slave Mode -> Reset Mode
    • Източник на задействане -> TI1FP1
    • Източник на часовник -> Вътрешен часовник
    • Channel1 -> Input Capture директен режим
  • Поставете отметка в квадратчето „Устройство (FS) в менюто на USB
  • Изберете елемента на падащото меню „Клас устройство на човешки интерфейс (HID)“в елемента „Клас на IP IP“в меню USB_DEVICE
  • В панела за конфигуриране на часовника се уверете, че сте предоставили 72 MHz на таймера №2, защото имаме нужда от таймер на всеки 1 mks.
  • В конфигурационния панел конфигурирайте USB устройство, както е показано на снимката
  • В конфигурационния панел конфигурирайте таймер#2, както следва:

    • Prescaller - 71 (от 0 до 71) - 1 микро секунда отметка!
    • Режим на брояч - нагоре
    • Counter Period - 39999 (трябва да можем да измерим дългия импулс)
    • Входен канал за улавяне 1 - Falling Edge (не забравяйте, че сигналът от IR приемника е обърнат)

В режим PWM улавяне таймерът#2 ще работи по следния начин:

Когато бъде открит падащ фронт, броячът на таймера ще бъде записан в регистъра на канал1 и броячът на таймера ще се нулира с 0. Тогава таймерът ще продължи да брои посоката нагоре. Така че можем лесно да измерим дължината на импулса в микро секунди.

По подразбиране класът STM32 USB HID симулира USB мишката. Тук можете да намерите инструкцията за превръщане на контролера в клавиатура.

Стъпка 3: Приспособяване на контролера

Проектът работи с дистанционното управление на Panasonic и медийния център Kodi. За да адаптирате проекта за вашия собствен контролер, трябва да добавите кодовия масив за вашето дистанционно управление, както направих за дистанционното управление на panasonic (panasonicCode) към заглавката Inc/code.h. Както можете да видите, всяка команда има уникален идентификатор (в изброяването IRcommmand). Има 24 команди (0-23), разпознати от проекта. Командите са сортирани по уместност.

typedef {IR_play = 0, IR_stop, IR_pause, IR_OSD, IR_prethod_menu, IR_chapter_next, IR_t, IR_power, IR_unknown} IRкоманда;

конст 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};

конст 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};

След това трябва да добавите свое собствено дистанционно управление в метода init () в IR.cpp с функция addRemote (). Аргументите на функцията са:

  • Брой битове в пакета
  • Дължина на заглавката на пакета
  • "Нулева" битова дължина
  • "Една" битова дължина
  • Указател към кодовия масив
  • Числови елементи на масива

void IRcmd:: init (void) {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 работи в режим на улавяне на ШИМ с два канала: първи канал улавя цялата дължина на импулса, а канал2 улавя пиковата дължина. Когато открие падащия ръб на сигнала, стойността на таймера се записва в регистъра на първия канал и таймерът се нулира с 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};

Препоръчано: