اطلاعیه

Collapse
No announcement yet.

کمک در خواندن دما از سنسور ntc بوسیله میکروکنترلر avr

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کمک در خواندن دما از سنسور ntc بوسیله میکروکنترلر avr

    سلام دوستان. سال نو مبارک
    من میخواستم تغییرات مقاومت ntc یا همون ترمیستور رو بوسیله avr بخونم. سه تا روش تو اینترنت دیدم که یکیش جدول lookup دومی معادله استین هارت و سومی معادله بتا. آرایه lookup بنظرم اصولی نیومد و واسه همین کذاشتمش کنار ولی با اون دو تا روش بعدی نتونستم دمای دقیق رو رو بدست بیارمیعنی خیلی با دمایی که در واقعیت وجود داره فرق داره و متاسفانه چون خروجی این نوع سنسورها آنالوگ و غیر خطی هست تغییرات خروجی زیاده. لطفا اگه دوستان با این نوع سنسور کار کردن نمونه کد واسه winavr و نحوه بستن سنسور بصورت سخت افزاری رو واسم توضیح بدن. سپاسگزارم

    #2
    نوشته اصلی توسط ebrahim496 نمایش پست ها
    سلام دوستان. سال نو مبارک
    من میخواستم تغییرات مقاومت ntc یا همون ترمیستور رو بوسیله avr بخونم. سه تا روش تو اینترنت دیدم که یکیش جدول lookup دومی معادله استین هارت و سومی معادله بتا. آرایه lookup بنظرم اصولی نیومد و واسه همین کذاشتمش کنار ولی با اون دو تا روش بعدی نتونستم دمای دقیق رو رو بدست بیارمیعنی خیلی با دمایی که در واقعیت وجود داره فرق داره و متاسفانه چون خروجی این نوع سنسورها آنالوگ و غیر خطی هست تغییرات خروجی زیاده. لطفا اگه دوستان با این نوع سنسور کار کردن نمونه کد واسه winavr و نحوه بستن سنسور بصورت سخت افزاری رو واسم توضیح بدن. سپاسگزارم
    سلام
    معادله مشخصه این سنسورها یک معادله لگاریتمیه. من نمیدونم معادله رو درست پیاده کردید یا نه، اما اگر مقاومت سنسور رو درست قرائت کرده باشید و ضرایب معادله رو درست وارد کنید، با دقت خوبی باید بتونید دما رو محاسبه کنید.
    این تابعی برای تبدیل مقاومت به دما، با دادن مقدار مقاومت و ضرایب هستش:
    کد:
    float SteinhartHart(float R, float A, float B, float C)
    {
    float T = A;
    T += B * logf(R);
    T += C * powf(logf(R), 3);
    T = 1 / T;
    T -= 273.15;
    return T;
    }​
    توی رابطه بالا، R مقاومت سنسور به اهم و مقادیر A و B و C هم ضرایب معادله هستن که هم میشه از روی نمودار مشخصه سنسور بدستشون آورد، هم از طریق بتا و دمای یک نقطه خاص سنسور.
    برای محاسبه ضرایب از روی بتا میشه از روابط زیر کمک گرفت:
    کد:
    float A = (1 / (T0+273.15)) - ((1 / Beta) * logf(R0));
    float B = (1 / Beta);
    float C = 0;​
    البته لزومی نداره ضرایب رو در ران تایم حساب کنید. میتونید خیلی راحت از پیش محاسبه کنید و به صورت ثابت توی کد برنامه قرار بدید.

    دیدگاه


      #3
      نوشته اصلی توسط ebrahim496 نمایش پست ها
      سلام دوستان. سال نو مبارک
      من میخواستم تغییرات مقاومت ntc یا همون ترمیستور رو بوسیله avr بخونم. سه تا روش تو اینترنت دیدم که یکیش جدول lookup دومی معادله استین هارت و سومی معادله بتا. آرایه lookup بنظرم اصولی نیومد و واسه همین کذاشتمش کنار ولی با اون دو تا روش بعدی نتونستم دمای دقیق رو رو بدست بیارمیعنی خیلی با دمایی که در واقعیت وجود داره فرق داره و متاسفانه چون خروجی این نوع سنسورها آنالوگ و غیر خطی هست تغییرات خروجی زیاده. لطفا اگه دوستان با این نوع سنسور کار کردن نمونه کد واسه winavr و نحوه بستن سنسور بصورت سخت افزاری رو واسم توضیح بدن. سپاسگزارم
      سلام و درود،
      سال نو شما هم مبارک.

      قبلا در این تاپیک به شکل خلاصه و قابل فهم آموزش دادم :

      با سلام و احترام ، در اکثر پروژه های موجود در اینترنت ،از ماژول ها و سنسور هایی مثل LM35 , SHT11 , Type K و ... برای اندازه‌گیری دما استفاده میشه که مسلماً سنسور های اقتصادی و ارزان قیمتی نیستن. استفاده از NTC برای اندازه‌گیری دما عموما یک روش تجاری تلقی میشه و بیشتر افراد به علت عدم آشنایی با محاسبات مورد نیاز از این روش

      این نکته رو در نظر داشته باشید که برای خوندن دمای واقعی توسط NTC حتما باید مقدار دقیق Beta سنسور NTC که خریدید رو داشته باشید ،در غیر اینصورت خطای بزرگ تعجبی نداره.

      دیدگاه


        #4
        نوشته اصلی توسط hossein.m98 نمایش پست ها

        سلام
        معادله مشخصه این سنسورها یک معادله لگاریتمیه. من نمیدونم معادله رو درست پیاده کردید یا نه، اما اگر مقاومت سنسور رو درست قرائت کرده باشید و ضرایب معادله رو درست وارد کنید، با دقت خوبی باید بتونید دما رو محاسبه کنید.
        این تابعی برای تبدیل مقاومت به دما، با دادن مقدار مقاومت و ضرایب هستش:
        کد:
        float SteinhartHart(float R, float A, float B, float C)
        {
        float T = A;
        T += B * logf(R);
        T += C * powf(logf(R), 3);
        T = 1 / T;
        T -= 273.15;
        return T;
        }​
        توی رابطه بالا، R مقاومت سنسور به اهم و مقادیر A و B و C هم ضرایب معادله هستن که هم میشه از روی نمودار مشخصه سنسور بدستشون آورد، هم از طریق بتا و دمای یک نقطه خاص سنسور.
        برای محاسبه ضرایب از روی بتا میشه از روابط زیر کمک گرفت:
        کد:
        float A = (1 / (T0+273.15)) - ((1 / Beta) * logf(R0));
        float B = (1 / Beta);
        float C = 0;​
        البته لزومی نداره ضرایب رو در ران تایم حساب کنید. میتونید خیلی راحت از پیش محاسبه کنید و به صورت ثابت توی کد برنامه قرار بدید.
        درود. ممنون از توجهتون. بله معادله رو درست پیاده کردم منتها سنسوری که بنده استفاده میکنم مربوط به یخچال فریزر هست و در دمای 25 درجه 5 کیلو اهمه و هیچ مشخصه دیگه ای نداره که بشه از رو دیتاشیت عدد بتا یا ثابت های A, B و C رو بدست آورد. بنده قبلا تو اینترنت اعداد ثابت رو پیدا کرده بودم و بعدا از سایتهای دیگه هم که در مورد ترمیستور مطالعه میکردم دیدم ثابتها تو چند تا سایت که بازدید کردم همشون عین هم بودند ولی نمیدونم چرا در عمل دما مثلا از 3 درجه میپره به مثلا منفی 5 یا مثبت 20. حتی تو پروتیوس هم همین نتیجه رو داد. نمیدونم چطوری میشه کدی که نوشتم رو آپلود کنم

        دیدگاه


          #5
          نوشته اصلی توسط HS1386 نمایش پست ها

          سلام و درود،
          سال نو شما هم مبارک.

          قبلا در این تاپیک به شکل خلاصه و قابل فهم آموزش دادم :

          با سلام و احترام ، در اکثر پروژه های موجود در اینترنت ،از ماژول ها و سنسور هایی مثل LM35 , SHT11 , Type K و ... برای اندازه‌گیری دما استفاده میشه که مسلماً سنسور های اقتصادی و ارزان قیمتی نیستن. استفاده از NTC برای اندازه‌گیری دما عموما یک روش تجاری تلقی میشه و بیشتر افراد به علت عدم آشنایی با محاسبات مورد نیاز از این روش

          این نکته رو در نظر داشته باشید که برای خوندن دمای واقعی توسط NTC حتما باید مقدار دقیق Beta سنسور NTC که خریدید رو داشته باشید ،در غیر اینصورت خطای بزرگ تعجبی نداره.
          درود. بله در جریان هستم ولی متاسفانه سنسورهای یخچال فریزر هیچ کد یا مشخصه ای ندارند و شرکت سازنده هم معلوم نیست که بشه دیتاشیت اون قطعه رو دانلود کرد. با 5 سنسور نو تست کردم و نتیجه همشون یکی بود

          دیدگاه


            #6
            نوشته اصلی توسط ebrahim496 نمایش پست ها

            درود. ممنون از توجهتون. بله معادله رو درست پیاده کردم منتها سنسوری که بنده استفاده میکنم مربوط به یخچال فریزر هست و در دمای 25 درجه 5 کیلو اهمه و هیچ مشخصه دیگه ای نداره که بشه از رو دیتاشیت عدد بتا یا ثابت های A, B و C رو بدست آورد. بنده قبلا تو اینترنت اعداد ثابت رو پیدا کرده بودم و بعدا از سایتهای دیگه هم که در مورد ترمیستور مطالعه میکردم دیدم ثابتها تو چند تا سایت که بازدید کردم همشون عین هم بودند ولی نمیدونم چرا در عمل دما مثلا از 3 درجه میپره به مثلا منفی 5 یا مثبت 20. حتی تو پروتیوس هم همین نتیجه رو داد. نمیدونم چطوری میشه کدی که نوشتم رو آپلود کنم
            محاسبه ضرایب راه دیگه‌ای هم داره. میشه از روی ۳ نقطه کار سنسور ضرایب رو بدست آورد که اتفاقا دقیق تره و ثابت C هم توی روابط ظاهر میشه.
            کد:
            T0 += 273.15;
            T1 += 273.15;
            T2 += 273.15;
            
            // natural logarithm of Resistances
            float L1 = logf(R0);
            float L2 = logf(R1);
            float L3 = logf(R2);
            
            // inverse of Temperature
            float Y1 = 1 / T0;
            float Y2 = 1 / T1;
            float Y3 = 1 / T2;
            
            // gamma
            float g2 = (Y2 - Y1) / (L2 - L1);
            float g3 = (Y3 - Y1) / (L3 - L1);
            
            // A, B, C
            float C = ((g3 - g2) / (L3 - L2)) / (L1 + L2 + L3);
            float B = g2 - C * (powf(L1, 2) + (L1 * L2) + powf(L2, 2));
            float A = Y1 - (B + powf(L1, 2) * C) * L1;​
            به نظرم بهتره در ابتدا مقدار مقاومت خونده شده توسط میکروکنترلر رو مانیتور کنید که مطمئن بشید پرش نداشته باشه. از سالم بودن سنسور هم حتما اطمینان حاصل کنید.
            مقادیر نقطه کار هم بهتره با فاصله از هم باشن. اندازه‌گیریشون هم طبیعتا نیاز به یک اهم‌متر دقیق و یک دماسنج داره که دمای درست رو بهتون بده. میتونید برای مثال از یخ در حال آب شدن به عنوان دمای ۰ درجه استفاده کنید. در نهایت اگر دقت خوانش خوب باشه، میشه با کالیبره کردن صحت رو هم بالا برد. مهم دقیق بودن اندازه‌گیری شماس.
            جدیدترین ویرایش توسط hossein.m98; 2026/03/30, 22:09.

            دیدگاه


              #7
              نوشته اصلی توسط hossein.m98 نمایش پست ها

              محاسبه ضرایب راه دیگه‌ای هم داره. میشه از روی ۳ نقطه کار سنسور ضرایب رو بدست آورد که اتفاقا دقیق تره و ثابت C هم توی روابط ظاهر میشه.
              کد:
              T0 += 273.15;
              T1 += 273.15;
              T2 += 273.15;
              
              // natural logarithm of Resistances
              float L1 = logf(R0);
              float L2 = logf(R1);
              float L3 = logf(R2);
              
              // inverse of Temperature
              float Y1 = 1 / T0;
              float Y2 = 1 / T1;
              float Y3 = 1 / T2;
              
              // gamma
              float g2 = (Y2 - Y1) / (L2 - L1);
              float g3 = (Y3 - Y1) / (L3 - L1);
              
              // A, B, C
              float C = ((g3 - g2) / (L3 - L2)) / (L1 + L2 + L3);
              float B = g2 - C * (powf(L1, 2) + (L1 * L2) + powf(L2, 2));
              float A = Y1 - (B + powf(L1, 2) * C) * L1;​
              به نظرم بهتره در ابتدا مقدار مقاومت خونده شده توسط میکروکنترلر رو مانیتور کنید که مطمئن بشید پرش نداشته باشه. از سالم بودن سنسور هم حتما اطمینان حاصل کنید.
              مقادیر نقطه کار هم بهتره با فاصله از هم باشن. اندازه‌گیریشون هم طبیعتا نیاز به یک اهم‌متر دقیق و یک دماسنج داره که دمای درست رو بهتون بده. میتونید برای مثال از یخ در حال آب شدن به عنوان دمای ۰ درجه استفاده کنید. در نهایت اگر دقت خوانش خوب باشه، میشه با کالیبره کردن صحت رو هم بالا برد. مهم دقیق بودن اندازه‌گیری شماس.
              ممنون از پاسختون. حتما امتحان میکنم

              دیدگاه


                #8
                نوشته اصلی توسط ebrahim496 نمایش پست ها

                درود. ممنون از توجهتون. بله معادله رو درست پیاده کردم منتها سنسوری که بنده استفاده میکنم مربوط به یخچال فریزر هست و در دمای 25 درجه 5 کیلو اهمه و هیچ مشخصه دیگه ای نداره که بشه از رو دیتاشیت عدد بتا یا ثابت های A, B و C رو بدست آورد. بنده قبلا تو اینترنت اعداد ثابت رو پیدا کرده بودم و بعدا از سایتهای دیگه هم که در مورد ترمیستور مطالعه میکردم دیدم ثابتها تو چند تا سایت که بازدید کردم همشون عین هم بودند ولی نمیدونم چرا در عمل دما مثلا از 3 درجه میپره به مثلا منفی 5 یا مثبت 20. حتی تو پروتیوس هم همین نتیجه رو داد. نمیدونم چطوری میشه کدی که نوشتم رو آپلود کنم
                ADC رو در حالت 8 بیتی قرار دادید یا 10 بیتی ؟
                ولتاژ رفرنس چنده ؟
                NTC رو با چه مقاومتی سری کردید و تغذیه اش 5 ولته یا کمتر ؟

                دیدگاه


                  #9
                  نوشته اصلی توسط HS1386 نمایش پست ها

                  ADC رو در حالت 8 بیتی قرار دادید یا 10 بیتی ؟
                  ولتاژ رفرنس چنده ؟
                  NTC رو با چه مقاومتی سری کردید و تغذیه اش 5 ولته یا کمتر ؟
                  ADC در حالت ۱۰ بیت هستش و ولتاژ رفرنس رو ۵ ولت قرار دادم. با یک مقاومت ۱۰ کیلو سری کردم

                  دیدگاه

                  لطفا صبر کنید...
                  X