DS18B20_دماسنج

سنسور دمای DS18B20 (قسمت اول)

  DS18B20 چیست؟

 

           DS18B20 یک سنسور دمای دیجیتال قابل برنامه ریزی میباشد، که میتواند دمای محیط را با دقت 9bit تا 12bit اندازه گیری کند. تعیین میزان دقت با ارسال دستوری به سنسور امکان پذیر است. محدوده دمای اندازه گیری این سنسور از -55 تا +125 درجه سانتی گراد میباشد. همچنین میتوان برای این سنسور محدوده دمایی مشخص کرد. تا در صورت خروج دما از محدوده تعیین شده سنسور آلارم تولید کند. این سنسور دارای حافظه داخلی EEPROM بوده، که در صورت تنظیم محدوده دمایی حداقل و حداکثر برای آن، این اطلاعات در حافظه باقی میماند و در صورت قطع جریان اطلاعات پاک نمیشوند. این سنسور دارای یک کد منحصر به فرد 64bit میباشد.

         

   تبادل اطلاعات بین سنسور و میکروکنترولر بر پایه ی پرتکل تک سیمه(One Wire) صورت می گیرد. طبق این پروتکل می توان چندین وسیله را از طریق یک سیم مشترک به یکدیگر مرتبط نمود. این موضوع برای سنسور دمای DS18B20 نیز صادق است.

 

            برای تغذیه این سنسور دما می توانید از منابع با ولتاژ 3V تا 5.5V استفاده کنید. این سنسور اندازه گیری و تبدیل دما به عدد را حداکثر ظرف مدت 750 میلی ثانیه انجام می دهد.

 

            ساختمان داخلی سنسور به اینگونه است که ابتدا دما توسط یک سنسور آنالوگ داخلی اندازه گیری شده، سپس این مقدار اندازه گیری شده توسط واحد آنالوگ به دیجیتال(ADC) که در سنسور تعبیه شده، با دقت بالا به عدد تبدیل می شود. تمام این عملیات در بخش Temperature Sensor صورت می گیرد. در ادامه نتیجه کار در بخش Scratchpad ذخیره می شود. در انتها این عدد توسط پردازنده داخلی و با پرتکل ارتباطی One Wire برای میکرو ارسال می شود. همچنین دستورات دریافتی از میکروکنترولر نیز توسط این پردازنده داخلی پردازش می شوند.

 

در شکل زیر چگونگی نصب این سنسور به میکرو کنترولر آورده شده است.

 

 

DS18B20

DS18b20

معرفی دستورات جهت راه اندازی سنسور در محیط کد ویژن:

 

            با استفاده از دستور 1wire_search وارسال کد 0XF0 میتوان فهمید که چه تعداد سنسور روی باس قرار دارد.

 

برای تعیین Resolution و انتخاب حد دمای بالا و پایین از دستور زیر استفاده میکنیم:

 

 

Ds18b20_init (unsigned char *addr,signed char temp_low,signed char temp_high,unsigned char resolution);

اگر از یک  سنسور استفاده میکنید میتوان به جای addr مقدار صفر قرار داد.

 

 

مثال:

ds18b20_init ( 0 , 18 , 27 , DS18B20_12BIT_RES);

            در دستور بالا حد دمای پایین را 18 درجه سانتی گراد و دمای بالا را 27  درجه سانتی گراد و resolution را 12 بیتی قرار دادیم.

 

زمان پاسخ و Resolution  های سنسور DS18B20:

 

    DS18B20_9BIT_RES for 9 bit temperature measurement resolution (0.5°C)             93.75 ms

    DS18B20_10BIT_RES for 10 bit temperature measurement resolution (0.25°C)       187.5 ms

    DS18B20_11BIT_RES for 11 bit temperature measurement resolution (0.125°C)        375 ms

    DS18B20_12BIT_RES for 12 bit temperature measurement resolution (0.0625°C)    750 ms

برای خواندن مقدار سنسور از دستور زیر استفاده میکنیم:

 

ds18b20_temperature(unsigned char *addr);

 

مثال : خواندن مقدار سنسور هنگامی که یک سنسور روی باس قرار دارد.

Float Temp;

Temp = ds18b20_temperature (0);

 

این دستور مقدار سنسور را میخواند و داخل متغیر Temp قرارمیدهد.

 

 

            همچنین میتوان با دستور w1_search کد 0XEC را برای سنسور ارسال کنیم، تا سنسور هایی که برای آنها محدوده دما مشخص کرده ایم خود را به میکرو معرفی کنند.

 

 

 

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

 

دیدگاه ها :

  1. محمد گفت:

    خیلی عالی

  2. سید علی پورطباطبایی گفت:

    کامل و ساده تر و مفید تر از این دیگه نمیشد توضیح داد
    عالی ممنون

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد.