برد STM سخت افزار قطعات الکترونیک

پروژه مدار گیرنده ریموت کدلرن ASK با میکروکنترلر STM32

نوشته شده توسط علی زاهدی

فرستنده و گیرنده های رادیویی به دلیل سهولت در استفاده و هزینه ساخت کم بسیار محبوب هستند. این نوع فرستنده گیرنده‌ها را در اطراف خود بسیار مشاهده کرده اید. از جمله کاربرد این نوع فرستنده ها در کنترلرهای درب های اتوماتیک و سیستم‌های امنیتی ، دزدگیر منازل و خودرو، کنترلر روشنایی و … است. در این پست قصد داریم تا نحوه ساخت گیرنده با ریموت کدلرن ASK استفاده از میکروکنترلر STM32 را آموزش دهیم. در ادامه با مرجع تخصصی بردهای امبدد به زبان فارسی، دیجی اسپارک همراه باشید.

 


شناخت مدولاسیون در صنعت برق


در رشته ی مهندسی برق و مخابرات به فرایند سوار کردن سیگنال پیام (اطلاعات) بر روی سیگنال حامل (معمولا دارای فرکانس بالا تری است) را مدولاسیون میگویند. این فرایند برای افزایش بهره‌وری انتقال و برد سیگنال و همچنین استفاده بهینه تر از پهنای باند صورت میگیرد. مدولاسیون انواع مختلفی دارد. که در تصویر زیر میتوانید انواع مدولاسیون را مشاهده کنید.

Type of Modulation

در صورتی که سیگنال حامل زمان پیوسته باشد. مدولاسیون به انواع آنالوگ و دیجیتال تقسیم می‌شود که هر یک دارای زیر شاخه هایی هستند. در این آموزش قصد داریم در مورد مدولاسون ASK که زیر شاخه ای از مدولاسون دیجیتال است صحبت کنیم.

 


مدولاسیون ASK


ASK مخفف Amplitude-shift keying به معنای کلیدزنی تغییر دامنه، یک روش مدولاسیون دیجیتال است (برای اشاره به مدولاسیون ‌های دیجیتال بیشتر از اصطلاح کلیدزنی استفاده می‌شود). در این روش مدولاسیون دیتای دیجیتال با تغییر دامنه‌ی سیگنال حامل ارسال می‌شود. همانطور که گفته شده این نوع مدولاسون زیر شاخه ای از مدولاسیون دیجیتال است و منطق آن صفر و یک است. بنابراین زمانی که سیگنال پیام دارای سطح منطقی یک باشد، فرستنده فرکانس مربوطه را تولید کرده و ارسال می‌کند. زمانی که سطح منطقی سیگنال پیام صفر باشد، فرستنده خاموش شده و سیگنالی ارسال نمی‌کند.

 

ASK Modulation

 


ریموت کنترل کدلرن ASK


عمده ترین کاربرد مدولاسیون ASK در ریموت های کنترلر درب اتوماتیک، دزدگیر اماکن و خودرو و … است. این نوع ریموت بصورت آماده در بازار با فرکانس های ۳۱۵ و ۴۳۳ مگاهرتز موجود است. ریموت ها دارای ۲ نوع کد گذاری هستند. نوع اول ریموت های کد فیکس هستند. در این نوع ریموت ها بر روی برد ریموت ۸ پین موجود است که هر یک از این پین ها میتوانند سه حالت داشته باشند (متصل به مثبت، متصل به منفی و بدون اتصال).

کد فیکس

کدگذاری کد فیکس

 

این نوع ریموت ها امنیت بالایی ندارند. همچنین به دلیل کد گذاری نسبتا مشکل محبوبیت زیادی ندارند. مورد دیگری که از نظر من برای ریموت های کد فیکس یک عیب به حساب می آید. این است که گیرنده های این نوع ریموت تنها میتوانند یک کد را تشخیص دهند و در صورتی که شما دو ریموت با کد های متفاوت داشته باشید، گیرنده تنها قادر به تشخیص یکی از آنها خواهد بود. نوع دوم ریموت های کد لرن یا همان ریموت کدلرن ASK هستند که امنیت بیشتری نسبت به ریموت های کد فیکس دارند. این نوع ریموت دارای یک کد ۲۰ رقمی منحصر به فرد است. در این نوع ریموت با فشردن هر کلید یک کد ۲۴ رقمی به سمت گیرنده ارسال می‌شود که ۲۰ آن مربوط به کد امنیتی و ۴ رقم دیگیر برای تشخیص کلید ها است. با استفاده از این ریموت با توجه به حافظه میکروکنترلر استفاده شده در بخش گیرنده شما میتوانید هر تعداد ریموت که در نظر دارید به گیرنده معرفی کنید.

ریموت کدلرن ASK - دیجی اسپارک

 


گیرنده ASK


شماتیک مدار گیرنده ASK با یک سرچ ساده در گوگل پیدا می‌شود. اما در صورتی که اطلاعات کافی درباره طراحی مدار را ندارید پیشنهاد می‌کنم از ماژول های آماده موجود در بازار استفاده کنید. ماژول های گرینده نیز همانند ریموت ها با فرکانس های ۳۱۵ و ۴۳۳ مگاهرتز در ببازار موجود است.  ماژول های گیرنده ASK موحود دربازار را میتوان به دو دسته super regenerative و super heterodyne تقسیم نمود. گیرنده های نوع super regenerative قدیمی تر هستند و دارای دقت، برد انتقال و هزینه کمتری هستند.

super regenerative Module

ماژول گیرنده

نوع دیگر گیرنده های موجود در بازار، گیرند های super heterodyne هستند. که نسبت به گیرنده نوع قبلی جدی تر و دارای حساسیت و کیفیت بیشتری است. و همچنین به دلیل استفاده از کریستال ثبات فرکانس بهتری دارد.

superheterodyne receiver module

ماژول گیرنده

 


اتصالات پروژه


ماژول های گیرنده دارای ۴ پایه هستند. پایه VCC به ۵+ ولت و پایه GND به زمین متصل می‌شود. همچنین دو پایه با نام Data موجود است که به یک دیگر متصل هستند. در این آموزش پای دیتا به پایه PB0 میکروکنترلر STM32 متصل شده است. همچنین برای تست برنامه ۳ عدد LED بر روی پایه های PB12 تا PB14 متصل شده است (شما میتوانید از رله بجای LED ها استفاده کنید) همچنین پایه PB15 برای تعریف ریموت جدید به یک کلید متصل شده است.

شماتیک پروژه ریموت کنترل ASK با برد STM32 - دیجی اسپارک

 


پیکربندی میکروکنترلر STM32


پس از ساخت پروژه در نرم افزار STM32CubeMX مطابق بخش اول آموزش میکروکنترلر های STM32 بایستی ۳ پایه برای LED ها بعنوان خروجی و یک پایه برای کلید بعنوان ورودی و Pull-up تعریف کنید. پایه PC13 را نیز با لیبل LED خروجی کنید. برای خواندن کد ریموت نیاز به فعال سازی وقفه خروجی بر روی یکی از پایه های میکروکنترلر است. در بخش دوم آموزش میکروکنترلر های STM32 نحوه تعریف پایه بعنوان وقفه خروجی توضیح داده شده است. یک پایه را بعنوان وقفه خارجی تعریف کنید. سپس برای پایه وقفه خارجی لیبیل “RF_IN” را انتخاب کنید. پس از آن به بخش GPIO رفته و در تنظیمات پایه RF_IN قسمت GPIO Mode را بر روی گزینه “External Interrupt Mode with Rising/Falling edge trigger detection” تنظیم کنید. همچنین در بخش NVIC  نیز وقفه خارجی را فعال کنید. در این آموزش پایه ها به مطابق تصویر زیر تعریف شده‌اند.

Stm32 Pinout

 

آموزش راه اندازی تایمر میکروکنترلرهای STM32 را مطالعه کنید. و سپس یک تایمر های موجود را انتخاب کنید. گزینه Clock Source را بر روی Internal Clock قرار دهید. سپس مقدار ۷۱۹ در قسمت Prescaler قرار دهید. فرکانس میکروکنترلر را بر روی ۷۲ مگاهرتز تنظیم کنید. سپس در بخش Project manager تنظیمات مورد نیاز را انجام دهید. سپس وارد بخش Code Generator شده و در قسمت Generated files تیک مربوط به گزینه Generate pripheral iniialization as a pair of ‘.c/.h’ files per pripheral را بزنید.

تنظیمات نرم افزار stm32cubemx Setting - دیجی اسپارک

تنظیمات نرم افزار STM32CubeMX

در آخر بر روی گزینه GENERATE CODE کلیک کنید و وارد نرم افزار KEIL شوید.

 


کدنویسی در نرم افزار KEIL


ابتدا از کتابخانه Stm32 Remote decoder را دانلود کنید. سپس کتابخانه را به پروژه ریموت کدلرن ASK اضافه کنید. در صورتی که با نحوه اضافه کردن کتابخانه به پروژه آشنا نیستید. آموزش اضافه کردن کتابخانه به پروژه های STM32 را مطالعه کنید. سپس بایستی وارد فایل askConfig.h شده و شمار تایمر تعریف شده را در قسمت #define _ASK_TIM وارد می‌کنیم. در این آموزش تایمر شماره ۴ در نظر گرفته شده است. پس این قسمت را مطابق دستور زیر تغییر می‌دهیم.

سپس وارد فایل main.c شده و کد زیر را به فایل main خود اضافه کنید. همانطور که در آموزش های قبل گفته شده است بایستی بخش های مختلف کد زیر را به بخش های مشخص شده در فایل main اضافه کنید. درصورتی که کد زیر را یکجا کپی کنید. با خطا مواجه خواهید شد.

در آخر  بایستی برنامه را کامپایل کرده و بر روی برد Bluepill پروگرام کنید. در صورتی که با نحوه پروگرام کردن میکروکنترلر های Stm32 آشنا نیستید. لطفا بخش اول آموزش های میکروکنترلر Stm32 را مطالعه نمایید.

 


نحوه عملکرد پروژه گیرنده کدلرن


هر بار که یکی از کلید های ریموت کدلرن ASK فشرده می‌شود. ریموت کد ۲۴ رقمی به سمت گیرنده ارسال می‌کند. زمانی که گیرنده دیتایی دریافت کند. در پایه های Data ماژول گیرنده موج مربعی تولید می‌شود. این موج مربعی توسط وقه خارجی میکروکنترلر شناسایی می‌شود و بهمراه تایمر به کد ۲۴ رقمی باینری تبدیل می‌شود. و در آخر کد دریات شده در آرایه RemoteData بصورت ۳ عدد هگز ذخیره می‌شود.

در ابتدا پس از روشن شدن سیستم بایستی کلید را نگه متصل به پایه PB15 را نگه داشته و سپس یکی از کلید های ریموت را فشار داده و کلید متصل به پایه PB15 را رها کنید. سپس LED موجود بر روی برد Bluepill چند بار چشمک خوهد زد. حالا ریموت به سیستم معرفی شده است. پس از این با فشردن هر کلید از ریموت یکی از LED ها روشن خواهد شد. همچنین یکی از کلید های ریموت برای خاموش شدن تمامی کلید ها تعریف شده است.

پروژه مدار گیرنده کد لرن ASK با برد STM32 - دیجی اسپارک

 


جمع بندی


در این آموزش ابتدا با مدولاسیون و انواع آن آشنا شدیم. سپس درباره ی مدولاسیون ASK صحبت کردیم. پس از آن با ریموت ها و نحوه کدگذاری آن ها آشنا شدیم. در ادامه گیرنده های موجود در بازار مورد بررسی قرار گرفتند. سپس کتابخانه ای برای تشخیص کد ریموت ها بر روی میکروکنترلر های STM32 معرفی شد. در آخر نحوه ساخت گیرنده ریموت کدلرن با میکروکنترلر STM32 توضیح داده شد.

 


لوازم مورد نیاز


 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

علی زاهدی

برنامه نویس و طراح سیستم های مبتنی بر میکروکنترلر

دانسته هایتان را مانند یک ساعت مچی در دست کنید، نه صرفا به این خاطر که نشان دهید آن را دارید. بلکه به این خاطر که اگر کسی از شما ساعت را پرسید، برایش بگویید.
لرد چسترفیلد

تبادل نظر و رفع عیب با ثبت دیدگاه

۲۲ دیدگاه

    • با سلام
      تصور کنید شما قرار است یک دزدگیر اماکن طراحی کنید. پس از بررسی امکانات مورد نیاز به نتیجه میرسید که از میکروکنترلر های STM32 استفاده کنید. در این موقع یکی از مهم ترین بخش های مورد نیاز همین پروژه داخل آموزش است.

    • با سلام
      اگر متن آموزش را با دقت مطالعه کنید. نوشته شده است که ASK یک نوع مدولاسیون دیجیتال است که در ریموت ها بسیار کاربرد دارد.

    • با سلام از توجه شما سپاسگزارم
      بله، امکان پیاده سازی این پروژه روی تمامی میکروکنترلر های STM32 وجود دارد.

      • متاسفانه میکرو عمل نکرد شاید در تعریف interrupt مشکلی وجود داره ممنون میشم راهنمایی کنید

          • سلام
            بله تنظیمات دقیقا همان هستش
            ولی چون کریستال میکرو stm32f100rbt بیشتر از ۲۴MHz نمیتونه باشه اون قسمت رو با توجه به میکرو تنظیم کردم ولی کار نکرد
            نمیدونم شاید اشتباه تنظیم کردم

  • سلام برای ارسال اطلاعات میشه از این روش استفاده کرد؟ من می خوام اطلاعات فریم ده بایتی رو ارسال کنم مثلا با ماژول h3v3e و چند گیرنده دارم در اونها اطلاعات را دریافت کنم میشه؟

    • با سلام
      بله امکان دریافت دیتا از این روش هست اما برای این کار بایستی تغییرات لازم را در کتابخانه ایجاد کنید.

  • سلام من چند روزی هست درگیر این پروژه هستم متاسفانه مدارم کار نمیکنه و نمیدونم مشکل از کجاست. اگه میشه بصورت مستقیم در ارتباط باشم باهاتون ممنون میشم

    • با سلام
      لطفا مشکل را از طریق بخش نظرات بیان کنید تا در آینده دیگر دوستان نیز بتوانند زودتر به پاسخ مشکلات برسند.
      برای شروع دیباگ با استفاده از یک LED بررسی کنید تا زمانی که کلید ریموت زده می‌شود. پایه دیتا گیرنده پالسی دریافت می‌کند یا خیر؟

  • سلام و تشکر ازشما
    اگر بخواهیم که با یک ریموت به چندین گیرنده فرمان بدیم راهکار چیه؟

    • با سلام
      برای این که با استفاده از یک ریموت، چند گیرنده را کنترل کنیم. بایستی برای مثال ۴ عدد ماژول گیرنده به همراه میکروکنترلر قرار دهیم و در کد، قسمت مربوط به فعال کردن یکی از خروجی ها را در یکی از میکروکنترلر ها بنویسیم و باقی خروجی ها را پاک کنیم. و همچنین برای دیگر خروجی ها در میکروکنترلر های دیگر همین کار را انجام دهیم. تا با فشار دادن هر کلید دستور مربوط به آن خروجی در میکروکنترلر مربوطه اجرا شود.

  • سلام مهندس بابت لایو امشب تشکر میکنم. فوق العاده بود.
    راجع به سوالی که در لایو مطرح شد، به نظر شما چرا استفاده از فرکانس ۴۳۳ مگاهرتز بیشتر روال پروژه‌ها است؟

    • با سلام از توجه شما سپاسگزارم
      من این مورد را بررسی کردم، دلیل استفاده از باند ۴۳۳ مگاهرتز این است که این باند در اکثر کشور ها (مخصوصا کشور های اروپایی) این باند آزاد است و همه میتواند از این باند استفاده کنند. برای فرکانس های دیگر باید مجوز هایی تهیه شود که این مجوز ها هزینه سالیانه تقریبا بالایی دارند. دلیل محبوبیت و استفاده زیاد از باند ۴۳۳ مگاهرتز این است.

  • آقا سلام، لایو عالی بود، خسته نباشید هم شما و هم آقای طباطبایی
    میخواستم بدونم که با یه برد دیگه که خودش از تراشه STM تهیه شده، باید این برد را پروگرام کنیم؟

    • با سلام از توجه شما سپاسگزارم.
      بله عموم پروگرامر های میکروکنترلر های STM32 از همین میکروکنترلر های STM32 ساخته شده اند. البته راه های دیگری هم برای پروگرام میکروکنترلر وجود دارد. ولی پیشنهاد بنده استفاده از پروگرامر های STLINK است. در انتهای آموزش لینک تهیه این پروگرامر را در قسمت لوازم مورد نیاز قرار دادم.