اطلاعیه

Collapse
No announcement yet.

سوال در مورد LM35

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

    #16
    پاسخ : سوال در مورد LM35

    نوشته اصلی توسط navid.h
    ولتاژش ثابته . منبع تعذیه هم یه آداپتور 5 ولت سوئیچینگ هست. البته الان اندازه گرفتم ولتاژ سر ADC در حد 0.1 بالا پایین میره.
    ممکنه سنسور مورد داشته باشه ؟!! :eek:
    سلام وقت بخیر ، به احتمال خیلی زیاد همونطور که دوستان گفتن نوسان ولتاژ داری که تا یه مقداریش طبیعیه.این کارا رو انجام بده انشاالله مشکلت حل میشه:
    1- خروجی سنسورت رو توی برنامه طی چند مرحله ( مثلاً پنج مرحله یا بیشتر ) بخون و معدل گیری کن اینجوری اثر نوسانات کم میشه. هر چه تعداد نمونه ها بیشتر باشه نوسانات بیشتر حذف میشه ( در واقع با معدل گیری نوعی فیلتراسیون انجام میدی ).
    2- تغذیه ی سوییچینگ خودش معدن نویزه ، از تغذیه ی معمولی یا باتری استفاده کن.
    3- یه خازن بزرگ در حد 1000 میکرو فاراد یا بیشتر و یه خازن در حد چند صد نانوفاراد بذار دو سر تغذیه ی مدارت.
    ولی خب راهکار اولی فکر می کنم از همه کار آمد تر باشه. موفق باشی
    علم چندان که بیشتر خوانی چون عمل در تو نیست نادانی
    ( سعدی )

    دیدگاه


      #17
      پاسخ : سوال در مورد LM35

      دوستان خازن تانتالیوم که پلاریته نداره نه ؟! :biggrin:
      من همین سوالو هم تو یه فروم خارجی مطرح کردم این جوابو داد به من :
      کد:
      An LM35 puts out 0.01V per deg C, so 25 deg C would be .25V. If the ref is 2.56,
       it should be reading about 1/10th of 1023, or about 102. What IS it reading?
      منظورشو نفهمیدم دقیقا !!! :eek:

      دیدگاه


        #18
        پاسخ : سوال در مورد LM35

        دوستان یه سوال...
        من کماکان با بحث دقت ADC مشکل دارم. الان من دقیقا نفهمیدم که دقت ADC هر میکرو رو میشه تقییر داد یا کلا ثابت هست. اگه میشه تغییر داد از کجا. منظورم از دقت همون n بیتی بودن هست. میشه تعیین کرد با چه دقتی کار کنه یا اینکه تو فورمول باید یه عدد ثابت رو بذاریم. و اینکه اگر ولتاژ خروجی LM35 به ازای هر درجه 10mv هست پس فورمول Vref / 2^n چی کار میکنه ؟؟! :angry:
        خدا خیرتون بده. هم اکنون نیازمند یاری دوستان هستیم.بد جوری گیج شدم :biggrin:

        دیدگاه


          #19
          پاسخ : سوال در مورد LM35

          adc به صورت 10 بیتیه و نمیشه دقتش رو تغییر داد مگر با تغییر ولتاژ رفرنس

          دیدگاه


            #20
            پاسخ : سوال در مورد LM35

            نوشته اصلی توسط Reza 0020
            adc به صورت 10 بیتیه و نمیشه دقتش رو تغییر داد مگر با تغییر ولتاژ رفرنس
            میشه یه مقدار توضیح بدی که چطور میتونم دقت رو تغییر بدم؟
            مثلا اگه بخوام به ازای 5mv یه درجه اضافه بشه باید چی کار کنم؟

            دیدگاه


              #21
              پاسخ : سوال در مورد LM35

              این تغییرات دست خود سنسور و به نظرم دقت سنسور 0.5 درجه باشه یعنی به ازای 5 میلی ولت 0.5 درجه تغییرات دما و به ازای 10 میلی 1 درجه تغییر دما رو نشون میده
              واسه این سطح تغییرات میتونی از ولتاژ رفرنس 5 ولت هم استفاده کنی آخه شما حداقل مقدار ورودی که دارید 5 میلی ولته که میکرو اینمقدار رو میتونه اندازه بگیره فقط بعد اینکه مقدار رو از adc دریافت کردید باید اون مقدار رو بر 2 تقسیم کنید تا مقدار دمای شما بدست بیاد آخه اینجا به ازای هر درجه 2 عدد اضافه میشه ولی قبلا به ازای هر درجه 4 عدد اضافه میشد که باید تقسیم بر 4 میشد.

              دیدگاه


                #22
                پاسخ : سوال در مورد LM35

                نوشته اصلی توسط navid.h
                دوستان خازن تانتالیوم که پلاریته نداره نه ؟! :biggrin:
                من همین سوالو هم تو یه فروم خارجی مطرح کردم این جوابو داد به من :
                کد:
                An LM35 puts out 0.01V per deg C, so 25 deg C would be .25V. If the ref is 2.56,
                 it should be reading about 1/10th of 1023, or about 102. What IS it reading?
                منظورشو نفهمیدم دقیقا !!! :eek:
                سلام ، ببین دوست عزیز اول اینکه تا جایی که من اطلاع دارم توی خازنها فقط خازنهای الکترولیت و تانتالیوم مثبت و منفی دارن.
                دوم اینکه متن انگیسی که گفتی داره میگه ( ترجمه کلی ش( البته جسارت نباشه )):
                (( سنسور LM35 توی خروجیش 0.01 ولت به ازای هر درجه ی سلسیوس وجود داره که با این حساب در دمای 25 درجه ی سلسیوس، خروجیش 0.25 ولت میشه که اگه ولتاژ مرجعت 2.56 ولت باشه ( منظور مرجع ADC ) حدود 0.1 ولتاژ مرجع میشه ( که چون به ازای ولتاژ ورودی برابر مرجع ، در خروجی ADC عدد 1023 تولید میشه ) در دمای 25 درجه ، در خروجی ADC باید حدود یک دهم 1023 یعنی عدد 102 ظاهر بشه ، آیا همچین چیزی خونده میشه یا نه ؟ ))
                سوم اینکه شما اگه بخوای از این سنسور برای محدوده ی دمای مشخصی استفاده کنی می تونی خروجیش رو با یه مدار اپ امپی تقویت کنی( مشروط به اینکه اثر نویز رو کم کنی) و بدی به ADC تا دما رو با دقت بالاتری اندازه گیری کنی.
                ضمناً هرچی ولتاژ مرجع ADC رو کمتر کنی دقت اندازه گیریت بیشتر میشه مثلاً با مرجع 2.56 ولت چون هر پله ی ADC حدود 2.5 میلی ولت میشه پس می تونی تا دقت 0.25 سلسیوس رو اندازه گیری کنی.
                علم چندان که بیشتر خوانی چون عمل در تو نیست نادانی
                ( سعدی )

                دیدگاه


                  #23
                  پاسخ : سوال در مورد LM35

                  آقا من مدارو بایه فیلتر LC بستم الان تغییراتی که نشون میده ثابت هست :nice:. یه مساله ای که هست اینه که وقتی سنسور رو از مدار جدا میکنم و ولتاژ خروجیش رو میگیرم 242 میلی ولت رو نشون میده اما وقتی به مدار متصلش میکنم از 520 تا 600 متغیر میشه اما ظاهرا سنسور عدد ثابت رو نشون میده و قشنگ با افزایش و کاهش تغییر میکنه. آیا این قضیه ولتاژش طبیعیه ؟؟؟
                  و اینکه 242 میلی ولت در واقع همون 24 سانتی گراد هست و باید محاسبات رو یه جوری دربیارم که اینقدر رو نشون بده درسته ؟؟؟

                  دیدگاه


                    #24
                    پاسخ : سوال در مورد LM35

                    من مدار رو بستم و یک فیلتر LC رو هم به سر پایه avcc متصل کردم یه خارن 100n هم به پایه AREF متصله. الان ولتاژ خروجی سنسور دقیقا درسته و مطابق درجه حرارت هست. اگه 23 درجه باشه 238 میلی ولت نشون میده. برنامش رو هم نوشتم کاملا درسته و تو پروتئوس امتحانش کردم مشکلی نداشت حتی دیباگش هم کردم . اما وقتی میریزم رو میکرو مثلا دمای 23 درجه رو 14 نشون میده ... :angry: :angry: :angry: همه کار کردم. انواع خازنها رو هم گذاشتم رو vcc مشکل برطرف نشد.
                    دوستان اگه میشه یه نگاهی به برنامم بندازید ببینید مشکلی داره ؟ ممنون میشم
                    کد:
                    #include <mega8.h>
                    #include <delay.h>
                    #include <stdlib.h>
                    #include <stdio.h>
                    volatile unsigned int data,sum, temp,t1,t2;
                    volatile int a,i;
                    unsigned char segment [] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
                     unsigned char read_adc (void)
                      {             
                        ADCSRA = ADCSRA | 0x40;     
                        while (ADCSRA != 0xF4)
                        {                 
                        }
                        ADCSRA = ADCSRA | 0x10; 
                        return ADCW; 
                      }
                    void main (void)
                    {
                      PORTC = 0x00;
                      DDRC = 0x00;
                      DDRD = 0xFF;
                      DDRB = 0xFF;
                      TCCR2 = 0x0C;
                      TIFR = 0x80;
                      TIMSK = 0x80;
                      ADMUX = 0xC2; 
                      ADCSRA = 0xA4;
                      #asm("sei")
                      TCNT2=0x00; 
                      OCR2 = 124; 
                      while (1)
                        { 
                        delay_ms (1);    
                        PORTB = 0x08;
                        PORTD = segment [t2];
                        delay_ms (1);      
                        PORTB = 0x04;
                        PORTD = segment [t1];  
                        }
                      }
                      interrupt [TIM2_COMP] void timer0_comp_isr(void)
                      { 
                      a++;
                        if (a==625)
                        {  
                          sum = 0;
                          data = 0;      
                          for (i=0;i<=199;i++)
                          {  
                            data = read_adc();   
                            sum =sum+data;
                          }            
                          sum = sum/200;
                          temp = sum*2.56*100/1023;
                          a=0;  
                          t1 = temp/10;
                          t2 = temp%10;
                          }
                      }

                    دیدگاه


                      #25
                      پاسخ : سوال در مورد LM35

                      پایه های avcc وaref رو مستقیم به vcc وصل کن

                      دیدگاه


                        #26
                        پاسخ : سوال در مورد LM35

                        نوشته اصلی توسط reza javahery
                        پایه های avcc وaref رو مستقیم به vcc وصل کن
                        خازن پایه AREF و فیلتر LC رو بردارم ؟؟

                        دیدگاه


                          #27
                          پاسخ : سوال در مورد LM35

                          آره :angry: دو سر سلفو به هم وصل کن

                          دیدگاه


                            #28
                            پاسخ : سوال در مورد LM35

                            نشد . 5 درجه رو نشون میده اینجوری و هنوز ولتاژ پایه ADC حدود 220 میلی هست :cry:

                            دیدگاه


                              #29
                              پاسخ : سوال در مورد LM35

                              برنامت هم درسته پایه نمونه گیر adc تو عوض کن
                              تقسیم بر چند میکنی adc تو

                              دیدگاه


                                #30
                                پاسخ : سوال در مورد LM35

                                عوض هم کزدم نشده . ADC رو طبق فورمول انجام میدم . ADC خام رو تقسیم نمی کنم .
                                کد:
                                 for (i=0;i<=199;i++)
                                      {  
                                        data = read_adc();   
                                        sum =sum+data;
                                      }            
                                      sum = sum/200;
                                      temp = sum*2.56*100/1023;
                                      a=0;  
                                      t1 = temp/10;
                                      t2 = temp%10;
                                      }
                                  }

                                دیدگاه

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