Mục lục:

Falling in Stm32: Điều khiển từ xa cho Home Media Center: 4 bước (có hình ảnh)
Falling in Stm32: Điều khiển từ xa cho Home Media Center: 4 bước (có hình ảnh)

Video: Falling in Stm32: Điều khiển từ xa cho Home Media Center: 4 bước (có hình ảnh)

Video: Falling in Stm32: Điều khiển từ xa cho Home Media Center: 4 bước (có hình ảnh)
Video: Mô hình cập nhật chương trình từ xa cho các thiết bị IoTs | TAPIT Workshop 2020 2024, Tháng mười một
Anonim
Falling in Stm32: Điều khiển từ xa cho Home Media Center
Falling in Stm32: Điều khiển từ xa cho Home Media Center

Đây là một nguyên mẫu hoàn chỉnh cho điều khiển từ xa trung tâm đa phương tiện gia đình dựa trên bộ điều khiển vi mô smt32, stm32f103c8t6 được gọi là bảng 'bluepill'. Giả sử, bạn đang sử dụng PC cho trung tâm đa phương tiện gia đình. Đây là giải pháp rất linh hoạt, cho phép bạn đặt thư viện video khổng lồ vào ổ cứng nội bộ hoặc bạn có thể phát video từ mạng, ví dụ như youtube hoặc hơn, bạn không gặp khó khăn gì với codec hoặc phát video, vì nó rất dễ dàng cập nhật trình phát phần mềm bất kỳ lúc nào. Nhược điểm chính của giải pháp này là bạn phải sử dụng chuột và bàn phím để điều khiển quá trình phát lại của mình. Điều khiển từ xa IR có nhiều chế độ thuận tiện cho việc này.

Trong bài viết này, tôi sẽ hướng dẫn cách tạo điều khiển từ xa bằng cách sử dụng chip bluepill board.

Bước 1: Ý tưởng

Ý tưởng
Ý tưởng
Ý tưởng
Ý tưởng

Ý tưởng chính rất đơn giản: bảng bluepill có cổng USB nhúng và có thể hoạt động như bàn phím USB HID. Nếu chúng tôi gắn bộ thu IR vào bảng, nó có thể dịch lệnh từ điều khiển từ xa IR của bạn thành 'phím bấm' của bàn phím ảo. Không có trình điều khiển bổ sung được yêu cầu!

Có rất nhiều giao thức IR trên thế giới xung quanh chúng ta. Mỗi TV của nhà cung cấp VCS có giao thức IR riêng. Nhưng tất cả các giao thức này đều có một số điểm chung: chúng sử dụng điều chế xung để mã hóa tín hiệu. Thông thường, có một số phần mở đầu: xung dài trước bit đầu tiên trong gói. Sau đó, điều khiển IR truyền toàn bộ gói với 0 và 1 và kết thúc quá trình truyền với kết thúc xung dài. Để giải mã bit, chúng ta cần đo độ dài xung và độ dài của đỉnh. Thông thường, độ dài đỉnh của logic 0 và logic 1 là như nhau, sự khác biệt nằm ở độ dài xung hoàn chỉnh.

Bộ điều khiển vi mô stm32 có tính năng nhúng để bắt tín hiệu PWM. Gần mọi bộ đếm thời gian của bộ điều khiển vi mô có thể được đặt trong 'thu thập tín hiệu PWM nhiều hơn' khi các biến kênh của bộ định thời lưu tổng độ dài của xung và độ dài đỉnh của nó. Ở đây tôi phải làm nổi bật chi tiết nhỏ: khi bộ thu IR bắt tín hiệu, điện áp trên chân làm việc của nó trở thành 0 và ở trạng thái nhàn rỗi, điện áp trong chân làm việc là 5 hoặc 3,3 volt tùy thuộc vào điện áp cung cấp của bộ thu IR. Tức là máy thu 'đảo ngược' tín hiệu.

Với chế độ chụp PWM, bộ điều khiển vi mô stm32 có thể dễ dàng biến thành bộ dịch điều khiển từ xa IR từ điều khiển từ xa IR sang các mã bàn phím. Sau đó, bạn có thể khởi động phần mềm trực quan hóa yêu thích của mình, chẳng hạn như Kodi của VLC để phát bộ phim yêu thích của bạn trên trung tâm đa phương tiện.

Bước 2: Tạo bộ điều khiển

Tạo bộ điều khiển
Tạo bộ điều khiển
Tạo bộ điều khiển
Tạo bộ điều khiển
Tạo bộ điều khiển
Tạo bộ điều khiển
Tạo bộ điều khiển
Tạo bộ điều khiển

Để lập trình bộ điều khiển vi mô stm32, tôi muốn giới thiệu phần mềm miễn phí từ STM: bàn làm việc hệ thống (hay còn gọi là ac6) và công cụ cấu hình bo mạch cubeMX. Để tải phần mềm lên bộ điều khiển vi mô, có thể sử dụng bản sao chip của bộ điều hợp ST-Link V2. Tệp dự án bàn làm việc hệ thống được đính kèm với bước này, tệp F1-IR_remote.zip.

Công cụ cấu hình bo mạch đơn giản hóa quá trình cấu hình phần cứng ban đầu của bộ điều khiển vi mô của chúng tôi.

Nếu bạn đang sử dụng công cụ bàn làm việc hệ thống, bạn có thể chỉ cần sử dụng dự án đã tải xuống. Nhưng nếu bạn muốn điều tra dự án chi tiết hơn, bạn có thể tạo cấu hình bo mạch trong cubeMX:

  • Tạo dự án mới và chọn bảng stm32f103c8
  • Chọn 'Bộ cộng hưởng pha lê / gốm' cho mục 'Đồng hồ tốc độ cao (HSE)' trong menu RCC.
  • Chọn 'Serial Wire' cho mục 'Debug' trong menu SYS.
  • Định cấu hình bộ hẹn giờ # 2 (menu TIM2) ở chế độ chụp PWM như trên hình:

    • Chế độ nô lệ -> Chế độ đặt lại
    • Nguồn kích hoạt -> TI1FP1
    • Nguồn đồng hồ -> Đồng hồ bên trong
    • Kênh 1 -> Chế độ chụp trực tiếp đầu vào
  • Đặt hộp kiểm 'Thiết bị (FS) trong menu USB
  • Chọn phần tử menu kéo xuống 'Lớp thiết bị giao diện người (HID)' trong mục 'Lớp FS IP' trong menu USB_DEVICE
  • Trong bảng cấu hình đồng hồ, hãy đảm bảo cung cấp 72 MHz cho bộ định thời số 2 vì chúng ta cần đếm bộ đếm thời gian ở mỗi 1 mks.
  • Trong bảng cấu hình, hãy cấu hình thiết bị USB như trong hình
  • Trong bảng cấu hình, hãy cấu hình bộ hẹn giờ số 2 như sau:

    • Prescaller - 71 (từ 0 đến 71) - 1 micro giây tích tắc!
    • Chế độ bộ đếm - Lên
    • Khoảng thời gian đếm - 39999 (chúng ta có thể đo được xung dài)
    • Kênh bắt đầu vào 1 - Cạnh rơi (hãy nhớ rằng tín hiệu từ bộ thu IR bị đảo ngược)

Trong chế độ chụp PWM, bộ hẹn giờ số 2 sẽ hoạt động như sau:

Khi mặt trước rơi xuống được phát hiện, bộ đếm thời gian sẽ được lưu trong thanh ghi channel1 và bộ đếm thời gian sẽ được đặt lại bằng 0. Sau đó bộ đếm thời gian sẽ tiếp tục đếm ngược hướng. Vì vậy chúng ta có thể dễ dàng đo độ dài xung tính bằng micro giây.

Theo mặc định, lớp STM32 USB HID mô phỏng chuột USB. Tại đây bạn có thể tìm thấy hướng dẫn để biến bộ điều khiển thành bàn phím.

Bước 3: Điều chỉnh Bộ điều khiển

Dự án hoạt động với điều khiển từ xa của Panasonic và trung tâm truyền thông Kodi. Để điều chỉnh dự án cho bộ điều khiển của riêng bạn, bạn nên thêm mảng mã cho điều khiển từ xa của mình như tôi đã làm cho điều khiển từ xa panasonic (panasonicCode) vào tiêu đề Inc / code.h. Như bạn có thể thấy, mọi lệnh đều có ID duy nhất (trong enum IRcommmand). Có 24 lệnh (0-23) được công nhận bởi dự án. Lệnh được sắp xếp theo mức độ liên quan.

typedef enum {IR_play = 0, IR_stop, IR_pause, IR_earch, 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_pretle_time, IRtle_submark, IR_subti, IRxtoom_subti, IRxtplay_subti, IRxt, IRzoom, IR_subti, IRxt, IRzmark_subti, IRxt, IRz,mark 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};

Sau đó, bạn nên thêm điều khiển từ xa của riêng mình trong phương thức init () trong IR.cpp với hàm addRemote (). Các đối số của hàm là:

  • Số bit trong gói
  • Độ dài tiêu đề gói tin
  • Độ dài bit '0'
  • Độ dài 'một' bit
  • Con trỏ đến mảng mã
  • Số phần tử của mảng

void IRcmd:: init (void) {addRemote (48, 5252, 902, 1755, panasonicCode, sizeof (panasonicCode) / sizeof (uint32_t));

}

Ngoài ra tệp còn chứa một bảng khác để chuyển đổi lệnh thành mã bàn phím. Mảng kbdr_kodi chứa các mã khóa cho trung tâm phương tiện Kodi. Bạn có thể thêm một mảng khác cho chương trình trung tâm đa phương tiện của riêng mình, chẳng hạn như trình phát vlc. Nếu bạn muốn thêm một bảng ứng dụng trung tâm đa phương tiện khác, bạn sẽ tạo một đối tượng KBD khác và khởi tạo nó trong main.cpp.

Bước 4: Các công cụ để đơn giản hóa việc may đo

Các công cụ để đơn giản hóa việc may đo
Các công cụ để đơn giản hóa việc may đo
Các công cụ để đơn giản hóa việc may đo
Các công cụ để đơn giản hóa việc may đo

Có hai dự án khác trong kho lưu trữ

  • Điều tra IR - cho phép đo các thông số thời gian của tín hiệu từ điều khiển từ xa của bạn.
  • IR_capture - cho phép nắm bắt mã HEX của điều khiển từ xa của bạn.

Chỉ cần tải dự án điều tra IR và kết nối cổng USB của bảng bluepill vào máy tính của bạn. Sau đó khởi chạy bất kỳ chương trình đầu cuối nào trên thiết bị cổng nối tiếp ảo, tương ứng với bảng stm32. Trong khi bạn nhấn các nút trên điều khiển từ xa, chương trình sẽ đo các xung nhận được và in thời gian trung bình cho các xung khác nhau. Nó sẽ đơn giản hóa để phát hiện độ dài xung cho tiêu đề gói, không và một bit.

Trong dự án điều tra IR, bộ định thời số 2 đang hoạt động ở chế độ chụp PWM với hai kênh: kênh một thu toàn bộ độ dài xung và kênh 2 ghi lại độ dài đỉnh. Khi phát hiện cạnh tín hiệu giảm, giá trị bộ định thời được lưu vào thanh ghi kênh một và bộ định thời đặt lại bằng 0. Khi phát hiện cạnh lên của tín hiệu, bộ đếm bộ định thời được lưu vào thanh ghi kênh 2.

Để nắm bắt các mã nút của điều khiển từ xa của riêng bạn, dự án IR_capture có thể được sử dụng. Trong tệp main.c, bạn nên thêm định nghĩa từ xa như sau:

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

  • .hdr - độ dài tiêu đề tính bằng mks
  • .bits - số bit trong gói
  • .zero - độ dài của bit 0
  • .one - độ dài mỗi thứ một bit
  • .dev - độ lệch (chênh lệch về thời gian có thể được chấp nhận). Thông thường nó bằng 1/10 chiều dài nhỏ nhất.

Sau đó, thêm điều khiển từ xa của bạn vào danh sách điều khiển từ xa được hỗ trợ:

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

Đề xuất: