در این مقاله ابتدا روش عملکرد و دیتاشیت سنسور دما و رطوبت DHT22 بررسی میشه. در ادامه روش های نرم افزاری و سخت افراری راه اندازی DHT22 با STM32 رو بررسی میشه و کد پیاده سازی بستر سخت افزاری ارتباط 1-wire با تایمر و DMA ارائه میشه.
– پیاده سازی بستر سخت افزاری 1-wire
– ارتباط 1-wire بدون delay با تایمر و DMA
این مقاله خلاصه ی ویدئوی آموزشی “راه اندازی سنسور دما و رطوبت DHT22 با STM32 بدون delay” هست.
این ویدئو یکی از جلسات دوره آموزشی پیشرفته ی STM32F103 هست.
سنسور دما و رطوبت DHT22
پین های سنسور DHT22
سه تا سیم داره، زمین به زمین میکرو ، VDD هم به 3.3v یا 5v و پین دیتا با یک مقاومت pull-up میشود و میکروکنترلر و سنسور فقط میتونن این پین رو زمین کنن.
خوندن دما و رطوبت از سنسور DHT22
1- پالس استارت میکرو: میکروکنترلر پین دیتا رو به مدت حداقل 1ms زمین میکنه و سپس پین رو آزاد میزاره و پین pull-up میشه. بعد از اون برای 20 تا 40 میکروثانیه باس یک میمونه.
2- پالس استارت سنسور DHT22: سنسور DHT22 برای 80us باس رو زمین میکنه و باس برای 80us هم یک میمونه.
3- ارسال 40 پالس برای 40 بیت توسط DHT22 : با اندازه گیری مدت زمان یک بودن در هر پالس میفهمیم هر بیت صفر است یا یک.
در 40 بیت ارسالی 16 بیت دما و 16 بیت رطوبت و 8 بیت checksum هست.
راه اندازی نرم افزاری سنسور دما و رطوبت DHT22 با آردوئینو
در راه اندازی به روش نرم افزاری مشابه الگوریتمی که برای راه اندازی DHT22 در آردوئینو استفاده میشه از یک پین ورودی و خروجی دیجیتال استفاده میشه. برای پالس استارت و زمین کردن باس دیتا پین ابتدا در حالت خروجی هست، سپس پین در حالت ورودی قرار میگیره و در بازه های زمانی ساخته شده با delay وضعیت پین خونده میشه.
وبسایت ControllersTech : راه اندازی DHT22 با STM32 به روش آردوئینویی و با استفاده از delay
سنسور دما و رطوبت 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 تنظیم میشه.