Агуулгын хүснэгт:

Stm32 -д унах: Гэрийн медиа төвийн алсын удирдлага: 4 алхам (зурагтай)
Stm32 -д унах: Гэрийн медиа төвийн алсын удирдлага: 4 алхам (зурагтай)
Anonim
Stm32 унах: Гэрийн медиа төвийн алсын удирдлага
Stm32 унах: Гэрийн медиа төвийн алсын удирдлага

Энэ бол smt32 микро хянагч, stm32f103c8t6 дээр суурилсан гэрийн медиа төвийн алсын удирдлагын иж бүрэн загвар юм. Та гэрийн медиа төвд компьютер ашиглаж байна гэж бодъё. Энэ бол маш уян хатан шийдэл бөгөөд асар том видео санг дотоод хатуу дискэнд байрлуулах, эсвэл сүлжээнээс видео тоглуулах боломжтой, жишээ нь youtube гэх мэт, танд кодек эсвэл видео тоглуулахад ямар ч асуудал байхгүй. програм тоглуулагчийг хүссэн үедээ шинэчлэхэд хялбар. Энэхүү шийдлийн гол сул тал бол тоглуулах явцыг хянахын тулд хулгана, гарыг ашиглах явдал юм. IR алсын удирдлага нь үүнд тохиромжтой горим юм.

Энэ нийтлэлд би бичил схемийн самбар ашиглан өөрийн алсын удирдлагыг хэрхэн бий болгохыг харуулах болно.

Алхам 1: Санаа

Санаа
Санаа
Санаа
Санаа

Гол санаа нь маш энгийн: зураглалын самбар нь USB порт суулгасан бөгөөд USB HID гарны үүргийг гүйцэтгэдэг. Хэрэв бид IR хүлээн авагчийг самбар дээр хавсаргах юм бол энэ нь таны IR алсын удирдлагаас авсан тушаалыг виртуал гарны "товчлуур дарах" руу хөрвүүлэх болно. Нэмэлт жолооч шаардлагагүй!

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

STM32 микро контроллерууд нь ХОУХ -ны дохиог авах онцлог шинж чанартай байдаг. Цаг хэмжигчийн сувгийн хувьсагчид импульсийн нийт урт ба түүний оргил уртыг хэмнэх үед микро хянагчийн бүх таймерын ойролцоо 'ХОУХД -ийн дохиог илүү авах' хэсэгт байрлуулж болно. Энд би жижиг нарийн ширийн зүйлийг тодруулах ёстой: IR хүлээн авагч дохиог хүлээн авахад түүний ажиллах зүү дээрх хүчдэл 0 болж, сул зогсолтын үед IR хүлээн авагчийн тэжээлийн хүчдэлээс хамааран 5 эсвэл 3.3 вольт байна. Жишээлбэл, хүлээн авагч дохиог "урвуу" болгодог.

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

Алхам 2: Хянагч үүсгэх

Хянагчийг бий болгох
Хянагчийг бий болгох
Хянагчийг бий болгох
Хянагчийг бий болгох
Хянагчийг бий болгох
Хянагчийг бий болгох
Хянагчийг бий болгох
Хянагчийг бий болгох

STM32 микро хянагчийг програмчлахын тулд STM -ийн үнэгүй програм хангамжийг санал болгохыг хүсч байна: системийн ажлын ширээ (aka ac6) болон cubeMX хавтангийн тохиргооны хэрэгсэл. Програмыг микро хянагч руу оруулахын тулд ST-Link V2 адаптерийн чип клоныг ашиглаж болно. Энэ алхамд хавсаргасан системийн ажлын ширээний төслийн файлууд, F1-IR_remote.zip файл.

Самбарыг тохируулах хэрэгсэл нь манай микро хянагчийн анхны тоног төхөөрөмжийн тохиргооны процессыг хялбаршуулдаг.

Хэрэв та системийн ажлын ширээний хэрэгслийг ашиглаж байгаа бол татаж авсан төслийг ашиглаж болно. Гэхдээ хэрэв та төслийг илүү нарийвчлан судлахыг хүсвэл cubeMX дээр самбарын тохиргоог үүсгэж болно.

  • Шинэ төсөл үүсгээд stm32f103c8 самбарыг сонгоно уу
  • RCC цэснээс 'High Speed Clock (HSE)' зүйлийн хувьд 'Болор/Керамик резонатор' -ыг сонгоно уу.
  • SYS цэснээс 'Debug' зүйлийг сонгохын тулд 'Serial Wire' -ийг сонгоно уу.
  • Зураг дээр үзүүлсэн шиг таймер № 2 -ийг (TIM2 цэс) ХОУХ -ны зураг авах горимд тохируулна уу.

    • Боолын горим -> Дахин тохируулах горим
    • Гох эх сурвалж -> TI1FP1
    • Цагны эх сурвалж -> Дотоод цаг
    • Channel1 -> Input Capture шууд горим
  • USB цэснээс "Device (FS)" гэсэн хайрцгийг тохируулна уу
  • USB_DEVICE цэсийн 'Class of FS IP' зүйлээс 'Human Interface Device Class (HID)' цэсийг сонгоно уу.
  • Цагны тохиргооны самбар дээр 2 -р таймерт 72 МГц -ийг өгөхөө мартуузай, учир нь бидэнд 1 мкк тутамд таймер тоолох шаардлагатай болно.
  • Тохиргооны самбар дээр USB төхөөрөмжийг зураг дээр үзүүлсэн шиг тохируулна уу
  • Тохиргооны самбар дээр таймер №2 -ийг дараах байдлаар тохируулна уу.

    • Prescaller - 71 (0 -ээс 71 хүртэл) - 1 микро секундын тэмдэг!
    • Тоолуурын горим - дээш
    • Тоолуурын хугацаа - 39999 (бид урт импульсийг хэмжих чадвартай байх ёстой)
    • Оруулах суваг1 - Falling Edge (IR хүлээн авагчийн дохио урвуу байна гэдгийг санаарай)

ХОУХ -ны зураг авах горимд таймер#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_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};

panasonicCode = {0xd00505d, 0xd00000d, 0xd00606d, 0xd00525f, 0xd00929f, 0x100eced, 0xd00101d, 0x1002b2a, 0x1007273, 0x100f2f3, 0x1005253, 0x100d2d3, 0x1009293, 0x1002c2d, 0x100acad, 0x1009c9d, 0x1008e8f, 0x1004e4f, 0x100cecf, 0x1000e0f, 0x180c041, 0x1801091 uint32_t Const, 0x180a021, 0xd00bcb1};

Дараа нь та addRemote () функцтэй IR.cpp дахь init () аргад өөрийн алсын удирдлагыг нэмэх хэрэгтэй. Функцийн аргументууд нь:

  • Пакет дахь битүүдийн тоо
  • Пакетийн толгойн урт
  • 'Тэг' битийн урт
  • 'Нэг' битийн урт
  • Кодын массив руу заагч
  • Массивын тоон элементүүд

хүчингүй 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};

Зөвлөмж болгож буй: