آموزش راه اندازی WS2812 LED با میکروکنترلر STM32 + سورس کد

در ادامه آموزش های اصفهان درایو قصد داریم با هم راه اندازی WS2812 LED رو آموزش ببینیم. بدون اتلاف وقت سریعا سراغ روش راه اندازی میریم. WS2812 یک چیپ کنترل هوشمند نور LED هست. همونطور که میدونید هر رنگی از این LEDها، از ترکیب سه رنگ سبز، آبی و قرمز ساخته میشه. با تنظیم مقداری از 0 تا 255 برای هر رنگ شما میتونید طیف رنگی وسیعی رو از این LED ها دریافت کنید. خب پس ما نیاز داریم عددی از 0 تا 255 برای تنظیم سه رنگ به صورت جداگونه برای این درایور ارسال کنیم!

با جستجوی دیتاشیت این درایور اطلاعاتی که نیاز داریم استخراج بشه در تصویرهای زیر قابل مشاهده است:

 

آموزش راه اندازی WS2812 LED با میکروکنترلر STM32 + سورس کد

 

مطابق تصویر، برای ارسال صفر 0 به سمت درایور، پالس ارسالی بهش باید برای مدت زمان 0.4 میکروثانیه سطح یک داشته باشه و برای زمان 0.85 میکروثانیه سطح صفر داشته باشه. با جمع این مقادیر، میشه نتیجه گرفت که پالس برای یک سوم از کل دوره تناوب باید سطح یک داشته باشه.

به طور مشابه برای ارسال یک به سمت درایور، پالس ارسالی برای دو سوم از طول دوره تناوب باید سطح یک داشته باشه.

در نهایت هم باید یک پالس ریست به طول بیشتر از 50 میکروثانیه برای درایور ارسال بشه که متوجه بشه 24 بیت ارسالی متشکل از 8 بیت برای قرمز، 8 بیت برای سبز و 8 بیت برای آبی تموم شده ومنتظر دریافت یک سری دیتای دیگه باشه!

بعد از این هم نحوه چیدمان بیت ها رو در تصویر زیر میتونیم مشاهده بکنیم:

 

آموزش راه اندازی WS2812 LED با میکروکنترلر STM32 + سورس کد

 

مشخصه که هر داده از 24 بیت تشکیل شده، G R B

ما باید 8 بیت مربوط به سبز رو اول بفرستیم(MSB First)

دیتا برای تموم LED ها باید همراه با هم ارسال بشه، مثلا اگر شما 12 LED دارین، باید 12*24 بیت برای درایور ارسال بشه

درایور 24 بیت اول رو به LED اول اختصاص میده، 24 بیت دوم رو به LED دوم و به همین ترتیب.

بعد از ارسال داده برای تمام LEDها ما باید خط سیگنال رو LOW نگه داریم( برای زمانی بیشتر از 50 میکروثانیه)

با در نظر گرفتن طول موج پالس برای ارسال 0 و 1 منطقی، اگر ما یک شکل موج PWM داشته باشیم که دارای فرکانس 800 کیلوهرتز باشه، با تنظیم صحیح دیوتی سایکل این شکل موج قادر خواهیم بود صفر و یک رو به صورت صحیحی برای درایور ارسال کنیم. برای این منظور ما قصد داریم یک تایمر PWM با فرکانس 800کیلوهرتز ایجاد کنیم و از خاصیت DMA میکروکنترلر STM32 برای تنظیم دیوتی سایکل بهره بگیریم. حالا چرا DMA؟

اگر ما بخوایم از دستورات کتابخونه HAL برای تنظیم دیوتی سایکل استفاده کنیم، با توجه به اینکه خود این دستورات نیاز به زمانی برای اجرا دارن، زمان بندی شکل موج ارسالی برای درایور دقیق نخواهد بود و در نتیجه 0 و  1 ارسالی به درستی تنظیم نمیشه! خب حالا که ما همه چیز رو میدونیم، به سراغ تنظیمات میکروکنترلر در نرم افزار STM32CUBEMX میریم:

در این آموزش از میکروکنترلر STM32F103VET استفاده میکنیم

 

تنظیم کلاک میکروکنترلر روی 72 مگاهرتز

 

آموزش راه اندازی WS2812 LED با میکروکنترلر STM32 + سورس کد

 

تنظیم کانال 1 تایمر به عنوان خروجی PWM

 

WS2812 + STM32

 

تنظیم پارامترهای تایمر به منظور تولید PWM با فرکانس 800KHZ

 

WS2812 + STM32

 

انجام تنظیمات DMA برای تایمر

 

آموزش راه اندازی WS2812 LED با میکروکنترلر STM32 + سورس کد

 

دقت کنید که برای DMA حالت NORMAL و جهت انتقال داده هم memory to peripheral انتخاب شده!

برای تنظیم دیوتی سایکل به روی 30 درصد، کافی هست از مقدار 27 استفاده کنیم و برای داشتن دیوتی سایکل 70 درصد هم از مقدار 63!

در نهایت با درنظر گرفتن تمامی نکاتی که بالا خدمت شما عرض شده، سورس کد نهایی ما به شکل زیر نوشته میشه:

 

برای تنظیم رنگ و تعداد LEDها

 

آموزش راه اندازی WS2812 LED با میکروکنترلر STM32 + سورس کد

 

 

برای تنظیم روشنایی

 

آموزش راه اندازی WS2812 LED با میکروکنترلر STM32 + سورس کد

 

تعریف متغیرها

 

آموزش راه اندازی WS2812 LED با میکروکنترلر STM32 + سورس کد

 

تابع ارسال

 

آموزش راه اندازی WS2812 LED با میکروکنترلر STM32 + سورس کد

 

آموزش راه اندازی WS2812 LED با میکروکنترلر STM32 + سورس کد

 

 

تنظیم رنگ هر LED و تست برنامه

 

آموزش راه اندازی WS2812 LED با میکروکنترلر STM32 + سورس کد

 

در این آموزش به سادگی تونستیم WS2812 رو با استفاده از ویژگی DMA برای تایمر و خروجی PWM اون راه اندازی کنیم. در کد بالا این قابلیت وجود داره که روشنایی LED ها و رنگ مدنظر با ترکیبی از سه رنگ سبز، قرمز و آبی ساخته بشه و افکت های متفاوتی رو هم ایجاد کرد!

 

 

 

امیدواریم از این آموزش استفاده برده باشید!

 

دانلود پروژه

ESF Drive WS2812.rar

 

منبع

 

با سایر آموزش های اصفهان درایو همراه باشید!

 

 

 

 

۵
از ۵
۴ مشارکت کننده

بلاگ تخصصی اصفهان درایو