فهرست مطالب:

سقوط در Stm32: کنترل از راه دور برای مرکز رسانه خانگی: 4 مرحله (همراه با تصاویر)
سقوط در Stm32: کنترل از راه دور برای مرکز رسانه خانگی: 4 مرحله (همراه با تصاویر)

تصویری: سقوط در Stm32: کنترل از راه دور برای مرکز رسانه خانگی: 4 مرحله (همراه با تصاویر)

تصویری: سقوط در Stm32: کنترل از راه دور برای مرکز رسانه خانگی: 4 مرحله (همراه با تصاویر)
تصویری: با یه دختر این کارو نکن😰 2024, نوامبر
Anonim
سقوط در Stm32: کنترل از راه دور برای مرکز رسانه خانگی
سقوط در Stm32: کنترل از راه دور برای مرکز رسانه خانگی

این یک نمونه کامل برای کنترل از راه دور مرکز رسانه خانگی است که بر اساس میکروکنترلر smt32 ، stm32f103c8t6 معروف به برد "bluepill" است. فرض کنید ، از رایانه شخصی برای مرکز رسانه خانگی استفاده می کنید. این یک راه حل بسیار انعطاف پذیر است که به شما امکان می دهد کتابخانه ویدئویی عظیمی را در هارد دیسک داخلی قرار دهید ، یا می توانید ویدیو را از شبکه پخش کنید ، به عنوان مثال یوتیوب یا موارد دیگر ، هیچ مشکلی در کدک ها یا پخش ویدئوها ندارید ، زیرا بسیار آسان برای به روز رسانی نرم افزار پخش در هر زمان. عیب اصلی این راه حل این است که شما باید از موس و صفحه کلید برای کنترل پخش خود استفاده کنید. کنترل از راه دور IR برای این کار بسیار مناسب است.

در این مقاله نحوه ایجاد کنترل از راه دور با استفاده از تخته bluepill تراشه را نشان خواهم داد.

مرحله 1: ایده

ایده
ایده
ایده
ایده

ایده اصلی بسیار ساده است: تخته bluepill دارای درگاه usb است و می تواند به عنوان صفحه کلید USB HID عمل کند. اگر گیرنده IR را به برد وصل کنیم ، می تواند فرمان را از کنترل از راه دور IR شما به "فشار کلید" صفحه کلید مجازی ترجمه کند. نیازی به درایور اضافی نیست!

پروتکل های IR زیادی در جهان اطراف ما وجود دارد. هر تلویزیون از فروشنده VCS دارای پروتکل IR خاص خود است. اما همه این پروتکل ها دارای یک ویژگی مشترک هستند: آنها از مدولاسیون پالس برای رمزگذاری سیگنال استفاده می کنند. معمولاً مقدمه ای وجود دارد: تکانه طولانی قبل از اولین بیت در بسته. سپس کنترل IR کل بسته را با 0 و 1 منتقل می کند و انتقال را با پالس طولانی نهایی نهایی می کند. برای رمزگشایی بیت باید پالس طول و طول قله را اندازه گیری کنیم. معمولاً طول پیک منطق 0 و منطق 1 یکسان است ، تفاوت در طول پالس کامل است.

میکرو کنترلرهای stm32 دارای ویژگی تعبیه شده برای ضبط سیگنال PWM هستند. هنگامی که متغیرهای کانال تایمر طول کل پالس و طول پیک آن را ذخیره می کنند ، تقریباً هر تایمر کنترل کننده میکرو را می توان در "ضبط سیگنال PWM" قرار داد. در اینجا باید جزئیات کمی را برجسته کنم: هنگامی که گیرنده مادون قرمز سیگنال را می گیرد ، ولتاژ روی پایه کاری آن 0 می شود و در حالت بیکاری ولتاژ در پین کار بسته به ولتاژ منبع گیرنده IR 5 یا 3.3 ولت است. یعنی گیرنده سیگنال را "وارونه" می کند.

با استفاده از حالت ضبط PWM ، میکروکنترلر stm32 را می توان به آسانی به یک مترجم IR از راه دور از راه دور IR به کدهای صفحه کلید تبدیل کرد. سپس می توانید نرم افزار تجسم مورد علاقه خود را شروع کنید ، به عنوان مثال Kodi of VLC تا فیلم مورد علاقه خود را در مرکز رسانه پخش کنید.

مرحله 2: ایجاد کنترلر

ایجاد کنترلر
ایجاد کنترلر
ایجاد کنترلر
ایجاد کنترلر
ایجاد کنترلر
ایجاد کنترلر
ایجاد کنترلر
ایجاد کنترلر

برای برنامه نویسی میکرو کنترلر stm32 ، من می خواهم نرم افزار رایگان STM را پیشنهاد کنم: workbench system (معروف به ac6) و ابزار پیکربندی برد cubeMX. برای بارگذاری نرم افزار در میکرو کنترلر ، می توان از کلون تراشه آداپتور ST-Link V2 استفاده کرد. فایلهای پروژه میز کار سیستم متصل به این مرحله ، فایل F1-IR_remote.zip.

ابزار پیکربندی برد روند پیکربندی سخت افزاری اولیه میکرو کنترلر ما را ساده می کند.

اگر از ابزار workbench سیستم استفاده می کنید ، فقط می توانید از پروژه بارگیری شده استفاده کنید. اما اگر می خواهید پروژه را با جزئیات بیشتری بررسی کنید ، می توانید پیکربندی برد را در cubeMX ایجاد کنید:

  • پروژه جدیدی ایجاد کرده و برد stm32f103c8 را انتخاب کنید
  • در منوی RCC ، "بلور/سرامیک رزوناتور" را برای "ساعت با سرعت بالا (HSE)" انتخاب کنید.
  • "Serial Wire" را برای مورد "Debug" در منوی SYS انتخاب کنید.
  • تایمر شماره 2 (منوی TIM2) را در حالت ضبط PWM مطابق تصویر پیکربندی کنید:

    • حالت برده -> حالت بازنشانی
    • منبع ماشه -> TI1FP1
    • منبع ساعت -> ساعت داخلی
    • Channel1 -> حالت مستقیم ضبط ورودی
  • کادر تأیید "Device (FS)" را در منوی USB تنظیم کنید
  • عنصر منوی کشویی "کلاس رابط انسانی (HID)" را در مورد "Class of FS IP" در منوی USB_DEVICE انتخاب کنید
  • در پنل پیکربندی ساعت ، مطمئن شوید که 72 مگاهرتز را به تایمر شماره 2 ارائه می دهید ، زیرا ما در هر 1 میلی متر به شمارش تایمر نیاز داریم.
  • در پنل پیکربندی دستگاه USB را همانطور که در تصویر نشان داده شده پیکربندی کنید
  • در پنل پیکربندی ، تایمر شماره 2 را به صورت زیر پیکربندی کنید:

    • Prescaller - 71 (از 0 تا 71) - 1 تیک میکرو ثانیه!
    • حالت شمارنده - بالا
    • دوره شمارنده - 39999 (ما باید بتوانیم نبض طولانی را اندازه گیری کنیم)
    • کانال ضبط ورودی 1 - سقوط لبه (به یاد داشته باشید که سیگنال گیرنده IR معکوس است)

در حالت ضبط PWM ، تایمر شماره 2 به شرح زیر عمل می کند:

هنگامی که قسمت سقوط تشخیص داده شد ، شمارنده تایمر در ثبت کانال 1 ذخیره می شود و شمارنده تایمر با 0 تنظیم مجدد می شود. سپس تایمر شمارش جهت را ادامه می دهد. بنابراین ما می توانیم به راحتی طول نبض را در میکرو ثانیه اندازه گیری کنیم.

به طور پیش فرض کلاس STM32 USB HID ماوس USB را شبیه سازی می کند. در اینجا می توانید دستورالعمل تبدیل کنترل کننده به صفحه کلید را پیدا کنید.

مرحله 3: تنظیم کنترل کننده

این پروژه با کنترل از راه دور پاناسونیک و مرکز رسانه Kodi کار می کند. برای تنظیم پروژه برای کنترلر خود ، باید آرایه کد را برای کنترل از راه دور خود مانند من برای کنترل از راه دور پاناسونیک (panasonicCode) به هدر Inc/code.h اضافه کنید. همانطور که می بینید ، هر دستور دارای شناسه منحصر به فرد است (در 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_preject_ IR ،_ IR_ IR_ IR ، IR_power ، IR_unknown} IRcommand ؛

توایع 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 investigate - امکان اندازه گیری پارامترهای زمان بندی سیگنال های ریموت شما.
  • IR_capture - امکان ضبط کدهای HEX کنترل از راه دور شما.

فقط پروژه IR IR را بارگیری کرده و پورت 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 - تعداد بیت های موجود در بسته
  • .zero - طول بیت صفر
  • . one - طول یک بیت
  • .dev - انحراف (تفاوت در زمان های قابل پذیرش). معمولاً 1/10 کوچکترین طول است.

سپس ریموت خود را به لیست ریموت های پشتیبانی شده اضافه کنید:

const IRcode* remote [2] = {& panasonic، & pioneer}؛

توصیه شده: