Სარჩევი:

დაცემა Stm32: დისტანციური მართვა სახლის მედია ცენტრისთვის: 4 ნაბიჯი (სურათებით)
დაცემა Stm32: დისტანციური მართვა სახლის მედია ცენტრისთვის: 4 ნაბიჯი (სურათებით)

ვიდეო: დაცემა Stm32: დისტანციური მართვა სახლის მედია ცენტრისთვის: 4 ნაბიჯი (სურათებით)

ვიდეო: დაცემა Stm32: დისტანციური მართვა სახლის მედია ცენტრისთვის: 4 ნაბიჯი (სურათებით)
ვიდეო: LDmicro 11: Serial LCD Temperature Controller (Microcontroller PLC Ladder Programming with LDmicro) 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 სიგნალის გადაღებისას", როდესაც ტაიმერის არხის ცვლადები ინახავს პულსის საერთო სიგრძეს და მის პიკის სიგრძეს. აქ უნდა გამოვყო მცირედი დეტალი: როდესაც IR მიმღები იჭერს სიგნალს, ძაბვა მის სამუშაო პინზე ხდება 0 და უმოქმედო მდგომარეობაში ძაბვა სამუშაო პინში არის 5 ან 3.3 ვოლტი დამოკიდებულია IR მიმღების მიწოდების ძაბვაზე. ანუ მიმღები სიგნალს 'შებრუნებს'.

PWM გადაღების რეჟიმით stm32 მიკროკონტროლი შეიძლება ადვილად იქცეს IR დისტანციურ მთარგმნელად IR დისტანციურიდან კლავიატურის კოდებზე. შემდეგ თქვენ შეგიძლიათ დაიწყოთ თქვენი საყვარელი ვიზუალიზაციის პროგრამული უზრუნველყოფა, მაგალითად Kodi of VLC, რომ ითამაშოთ თქვენი საყვარელი ფილმი მედია ცენტრში.

ნაბიჯი 2: კონტროლერის შექმნა

კონტროლერის შექმნა
კონტროლერის შექმნა
კონტროლერის შექმნა
კონტროლერის შექმნა
კონტროლერის შექმნა
კონტროლერის შექმნა
კონტროლერის შექმნა
კონტროლერის შექმნა

Stm32 მიკრო კონტროლერის დასაპროგრამებლად მინდა გირჩიოთ უფასო პროგრამული უზრუნველყოფა STM– დან: სისტემის სამუშაო მაგიდა (aka ac6) და დაფის კონფიგურაციის ინსტრუმენტი cubeMX. მიკრო კონტროლერში პროგრამული უზრუნველყოფის ასატვირთად შეიძლება გამოყენებულ იქნას ST-Link V2 ადაპტერის ჩიპური კლონი. სისტემის სამუშაო მაგიდის პროექტის ფაილები, რომლებიც თან ერთვის ამ ნაბიჯს, F1-IR_remote.zip ფაილს.

დაფის კონფიგურაციის ინსტრუმენტი ამარტივებს ჩვენი მიკრო კონტროლერის საწყისი აპარატურის კონფიგურაციის პროცესს.

თუ თქვენ იყენებთ სისტემის სამუშაო მაგიდის ინსტრუმენტს, შეგიძლიათ გამოიყენოთ გადმოწერილი პროექტი. მაგრამ თუ გსურთ უფრო დეტალურად გამოიძიოთ პროექტი, შეგიძლიათ შექმნათ დაფის კონფიგურაცია cubeMX– ში:

  • შექმენით ახალი პროექტი და შეარჩიეთ დაფა stm32f103c8
  • RCC მენიუში აირჩიეთ "ბროლის/კერამიკული რეზონატორი" "მაღალი სიჩქარის საათის (HSE)" ელემენტისთვის.
  • აირჩიეთ "სერიული მავთული" "გამართვის" ელემენტისთვის SYS მენიუში.
  • დააკონფიგურირეთ ტაიმერი #2 (TIM2 მენიუ) PWM გადაღების რეჟიმში, როგორც ეს ნაჩვენებია სურათზე:

    • მონა რეჟიმი -> გადატვირთვის რეჟიმი
    • გამომწვევი წყარო -> TI1FP1
    • საათის წყარო -> შიდა საათი
    • არხი 1 -> შეყვანის გადაღების პირდაპირი რეჟიმი
  • USB მენიუში დააყენეთ ჩამრთველი 'მოწყობილობა (FS)
  • აირჩიეთ "ადამიანის ინტერფეისის მოწყობილობის კლასი (HID)" ჩამოსაშლელი მენიუს ელემენტი "Class of FS IP" პუნქტში USB_DEVICE მენიუში
  • საათის კონფიგურაციის პანელში, დარწმუნდით, რომ მიაწოდეთ ტაიმერს #2 72 მეგაჰერცი, რადგან ჩვენ გვჭირდება ტაიმერის დათვლა თითოეულ 1 მეტრზე.
  • კონფიგურაციის პანელში დააინსტალირეთ USB მოწყობილობა, როგორც ნაჩვენებია სურათზე
  • კონფიგურაციის პანელში დააკონფიგურირეთ ტაიმერი#2 შემდეგნაირად:

    • პრესკალერი - 71 (0 -დან 71 -მდე) - 1 მიკრო წამი ტკიპა!
    • Counter Mode - Up
    • კონტრ პერიოდი - 39999 (ჩვენ უნდა შეგვეძლოს გრძელი პულსის გაზომვა)
    • შეყვანის გადაღების არხი 1 - დაცემის ზღვარი (გახსოვდეთ, რომ სიგნალი IR მიმღებიდან არის შემობრუნებული)

PWM გადაღების რეჟიმში ტაიმერი#2 იმუშავებს შემდეგნაირად:

როდესაც დაცემული წინა მხარე გამოვლინდა, ტაიმერის მრიცხველი შეინახება არხის 1 რეგისტრში და ტაიმერის მრიცხველი გადატვირთული იქნება 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_preyed, IR_sum_ IR, IR, IR_power, IR_unknown} 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};

შემდეგ თქვენ უნდა დაამატოთ თქვენი საკუთარი დისტანციური მართვის init () მეთოდი IR.cpp- ში addRemote () ფუნქციით. ფუნქციის არგუმენტებია:

  • ბიტების რაოდენობა პაკეტში
  • პაკეტის სათაურის სიგრძე
  • "ნულოვანი" ბიტის სიგრძე
  • "ერთი" ცოტა სიგრძე
  • მაჩვენებელი კოდის მასივზე
  • მასივის რიცხვითი ელემენტები

void IRcmd:: init (void) {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 საგამოძიებო პროექტი და დააკავშირეთ Bluepill დაფის 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
  • .bits - პაკეტში ბიტების რაოდენობა
  • . ნული - ნულოვანი ბიტის სიგრძე
  • .ერთი - სიგრძე ერთი ბიტი
  • .dev - გადახრა (განსხვავება დროში, რომლის მიღებაც შესაძლებელია). ჩვეულებრივ, ეს არის ყველაზე პატარა სიგრძის 1/10.

შემდეგ დაამატეთ თქვენი დისტანციური მართვის პულტის სიას:

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

გირჩევთ: