بستر سخت افزاری پروتکل 1-wire سنسور DHT22 با تایمر و DMA میکروکنترلر STM32

  1. Home
  2. /
  3. تایمر و DMA در...
  4. /
  5. سنسور دما و رطوبت...

در این مقاله ابتدا روش عملکرد و دیتاشیت سنسور دما و رطوبت DHT22 بررسی میشه. در ادامه روش های نرم افزاری  و سخت افراری راه اندازی DHT22 با STM32 رو بررسی میشه و کد پیاده سازی بستر سخت افزاری ارتباط 1-wire با تایمر و DMA ارائه میشه.

این مقاله خلاصه ی ویدئوی آموزشی “راه اندازی سنسور دما و رطوبت DHT22 با STM32 بدون delay” هست.

این ویدئو یکی از جلسات دوره آموزشی پیشرفته ی STM32F103 هست.

سنسور دما و رطوبت DHT22

پین های سنسور DHT22

سه تا سیم داره، زمین به زمین میکرو ، VDD هم به 3.3v یا 5v و پین دیتا با یک مقاومت pull-up میشود و میکروکنترلر و سنسور فقط میتونن این پین رو زمین کنن. 

پین های سنسور دما و رطوبت DHT22

خوندن دما و رطوبت از سنسور DHT22

1- پالس استارت میکرو: میکروکنترلر پین دیتا رو به مدت حداقل 1ms زمین میکنه و سپس پین رو آزاد میزاره و پین pull-up میشه. بعد از اون برای 20 تا 40 میکروثانیه باس یک میمونه.

2- پالس استارت سنسور DHT22: سنسور DHT22 برای 80us باس رو زمین میکنه و باس برای 80us هم یک میمونه. 

پین های سنسور دما و رطوبت DHT22

3- ارسال 40 پالس برای 40 بیت توسط DHT22 : با اندازه گیری مدت زمان یک بودن در هر پالس میفهمیم هر بیت صفر است یا یک.   

پین های سنسور دما و رطوبت DHT22

در 40 بیت ارسالی 16 بیت دما و 16 بیت رطوبت و 8 بیت checksum هست.

راه اندازی نرم افزاری سنسور دما و رطوبت DHT22 با آردوئینو

در راه اندازی به روش نرم افزاری مشابه الگوریتمی که برای راه اندازی DHT22 در آردوئینو استفاده میشه از یک پین ورودی و خروجی دیجیتال استفاده میشه. برای پالس استارت و زمین کردن باس دیتا پین ابتدا در حالت خروجی هست، سپس پین در حالت ورودی قرار میگیره و در بازه های زمانی ساخته شده با delay وضعیت پین خونده میشه.

پین های سنسور دما و رطوبت DHT22

سنسور دما و رطوبت DHT22 با تایمر و DMA میکروکنترلر STM32 بدون delay

با روش های متفاوت و با استفاده از یک یا دو تایمر و یک یا دو کانال DMA میشه این پروژه رو با پیاده سازی سخت افزاری و بدون delay انجام داد. در ادامه اندازه گیری دما با سنسور DHT22 رو با استفاده از دو تایمر و دو کانال DMA میکروکنترلر STM32 بررسی میکنیم.

تایمر 3 : master

از تایمر 3 برای انجام دو کار استفاده میکنیم:

1- زمین کردن پین دیتا برای پالس استارت         2- کنترل دوره تناوب نمونه برداری

برای تولید پالس استارت کانال 1 تایمر 3 در حالت PMW2 تنظیم میشه.

تایمر 4 : slave

از تایمر 4 برای انجام دو کار استفاده میکنیم:

1- بعد از دریافت همه ی بیت ها در update اینتراپت میده ، تا CPU محاسبات رو انجام بده

2- ثبت عدد کانتر در 43 لبه ی بالارونده در CCR1 و 43 لبه ی  پایین رونده در CCR2

برای تولید پالس استارت کانال 1 تایمر 3 در حالت PMW2 تنظیم میشه. 

پین های GPIO

برای زمین کردن پین دیتا از کانال 1 تایمر 3 استفاده میکنیم که پین PB4  باید در حالت خروجی AF open-drain تنظیم بشه. (نکته: در دیتاشیت نوشته وقتی میخواهید از کانال خروجی تایمر استفاده کنید حتما باید در حالت push-pull تنظیم بشه ولی ما نمیخواهیم که این پین بتونه، پین دیتا رو به 3.3v متصل کنه و نباید push-pull تنظیم بشه. اگر تنظیمات open-drain رو اعمال کنیم به درستی کار میکنه ولی دیتاشیت نگفته چنین قابلیتی وجود داره).

برای خوندن پین دیتا از کانال 1 تایمر 4 استفاده میکنم و پین PB6 در حالت ورودی float تنظیم میشه.

0 Comments

Submit a Comment

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *