اطلاعیه

Collapse
No announcement yet.

اعمال VCC به VREF و آسیب ADCدر XMEGA

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

    اعمال VCC به VREF و آسیب ADCدر XMEGA

    سلام.

    در دیتاشیت های XMEGA در بخش ویژگی های الکتریکی و قسمت ADC Characteristics اعلام شده خداکثر ولتاژ قابل اعمال به VREF میزان VCC-0.6 هست .

    من به پایه VREFدر ATXMEGA16A4 ولتاژ 3.3ولت VCC رو مستقیما اعمال کردم.

    اولین مشکل ایجاد شده ، شناخته نشدن میکرو توسط پروگرمر MKII بود . که با قطع کردن اتصال VREF از VCC این مشکل حل شد .

    بعد از این ماجرا من نتونستم از ADC داده درستی دریافت کنم . بیشتر کانال ها با وجود آزاد بودن مقدار 4095 رو در مد تک ورودی بی علامت بر میگردونن .
    (از برنامه قبلا نتیجه گرفتم و مطمئن هستم)

    سوال من اینه که آیا اعمال VCC به طور مستقیم به VREF باعث آسیب به ADC میشه یا نه.

    (نمی خوام بیهوده ای سی رو عوض کنم و برد رو خراب کنم)

    با تشکر

    #2
    پاسخ : اعمال VCC به VREF و آسیب ADCدر XMEGA

    سلام اگر شما مقدار ref رو در برنامه مقدار داخلی بگذارید ولتاژ نباید از 2.56 بالاتر برو که موجب خرابی بلوک adc می شود اما اگر مقدار خیلی بیشتر باشه میتونه بطور کل میکرو رو بسوزونه مثلا" در حال کار با adc بودم مقدار روی داخلی 2.56 تنظیم بود ولتاژ لحظه ای 12 به پین adc خورد میکرو کاملا" سوخت. اینکه میگید 3.3 دادین ممکنه به علت کم بودن اختلاف پتانسیل به قسمتی از adc یا پینی که شما کار میکنید صدمه خورده باشه از پینهای دیگر استفاده کنید ببینید کار میکنه. موفق باشید
    کم باش اصلا هم نگران کم بودنت نباش!!!
    اونی که اگر کم باشی گمت میکنه, همونیه که اگر زیاد باشی حیفت میکنه!!
    فقط خوب باش. خوب بودن به اندازه کافی متفاوتت میکنه.

    دیدگاه


      #3
      پاسخ : اعمال VCC به VREF و آسیب ADCدر XMEGA

      در XMEGA پایه مستقلی به عنوان VREF وجود ندارد و یکی از پین های PA0 به عنوان AREFA یا PB0 به عنوان AREFB می تواند به عنوان ولتاژ مرجع ورودی در نظر گرفته شود. از آنجایی که این پین ها، پین های ورودی پورت هستند، اتصال Vcc در حالت معمول نمی تواند مشکل را ایجاد کند. اما این امکان وجود دارد (هر چند آن را بعید می دانم) که با فعال کردن ولتاژ مرجع از روی این پین ها، در صورتی که مقدار آن بزرگتر از Vcc-0.6 باشد منجر به آسیب شود.
      اوژن: به معنای افکننده و شکست دهنده است
      دانایی، توانایی است-Knowledge is POWER
      برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
      وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
      قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
      اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
      ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

      دیدگاه


        #4
        پاسخ : پاسخ : اعمال VCC به VREF و آسیب ADCدر XMEGA

        نوشته اصلی توسط طراح
        در XMEGA پایه مستقلی به عنوان VREF وجود ندارد و یکی از پین های PA0 به عنوان AREFA یا PB0 به عنوان AREFB می تواند به عنوان ولتاژ مرجع ورودی در نظر گرفته شود. از آنجایی که این پین ها، پین های ورودی پورت هستند، اتصال Vcc در حالت معمول نمی تواند مشکل را ایجاد کند. اما این امکان وجود دارد (هر چند آن را بعید می دانم) که با فعال کردن ولتاژ مرجع از روی این پین ها، در صورتی که مقدار آن بزرگتر از Vcc-0.6 باشد منجر به آسیب شود.
        بله . منظور منم AREFB هست و ولتاژ مرجع روی همین پین فعال شد .
        امشب با تعویض IC اگر مشکل برطرف شد نتیجه را اعلام می کنم .
        با تشکر.

        دیدگاه


          #5
          پاسخ : اعمال VCC به VREF و آسیب ADCدر XMEGA

          با تعویض ای سی Atxmega16A4 مشکل فوق بر طرف شد .
          لازم به ذکر است مشکل ایجاد شده برای واحد ADC احتمالا به دو دلیل بود:
          1- اعمال VCC به AREFB و فعال سازی این پایه به عنوان ولتاژ مرجع.
          2-اعمال 3.3 ولت به ADC6 (پایه PC0 ) و فعال سازی ولتاژ مرجع 1 ولت داخلی .

          و اما صورت مساله ای جدید :
          کد زیر مربوط به راه اندازی ADC برای اندازه گیری ولتاژ خارجی می باشد .

          کد:
          void ADC_init(void){
          
          	ADC_CalibrationValues_Load(&ADCB);
            
           	ADC_ConvMode_and_Resolution_Config(&ADCB, false, ADC_RESOLUTION_12BIT_gc);
          
          	ADC_Reference_Config(&ADCB, ADC_REFSEL_INT1V_gc);
          
          	ADC_Prescaler_Config(&ADCB, ADC_PRESCALER_DIV512_gc);
           
          	ADC_Ch_InputMode_and_Gain_Config(&ADCB.CH0,ADC_CH_INPUTMODE_SINGLEENDED_gc,ADC_CH_GAIN_1X_gc);
            
          	ADC_Ch_InputMux_Config(&ADCB.CH0, ADC_CH_MUXPOS_PIN6_gc, ADC_CH_MUXNEG_PIN0_gc);
           
          	ADC_Enable(&ADCB);
          
              ADC_Wait_8MHz(&ADCB);
          
          	offset = ADC_Offset_Get_Unsigned(&ADCB, &(ADCB.CH0), true); 
          }
          
          uint16_t read_adc(void){
           uint16_t ADC_result;
              // Start a single conversion
              ADC_Ch_Conversion_Start(&ADCB.CH0);
              
              while(!ADC_Ch_Conversion_Complete(&ADCB.CH0));
                
              ADCA.INTFLAGS = ADC_CH0IF_bm;   // Clear CH0IF by writing a one to it
              ADC_result =  ADC_ResultCh_GetWord_Unsigned(&ADCB.CH0, offset);    
              
             return ADC_result; 
          }


          برای ولتاژ های بین صفر تا 1 ولت این تابع اعداد درستی در خروجی ظاهر می کند .

          اما
          با اعمال GND به ورودی مورد نظر ، داده برگشتی از ADC اعدادی در حدود 5534 می باشد.(و در بعضی مواقع اعداد نزدیک به صفر نظیر 2 یا 5 در خروجی تابع ظاهر می شود ).
          در حالی که باید این مقدار برابر آفست داخلی باشد و نه برابر صفر یا مقدار 5534 .



          اگر الگوی فوق مشکل دارد لطفا اعلام کنید .

          مشخصات مدار مورد آزمایش :
          میکروکنترلر : ATXMEGA64A3 (آزمایش روی بردآزمایشی مهندس کی نژاد انجام شد)
          فرکانس کلاک پریفرال ها: 32 مگاهرتز (ایجادشده توسط کریستال خارجی 16 مگاهرتز و PLL داخلی )
          مد کاری : بی علامت و تک ورودی .
          با تشکر .

          دیدگاه


            #6
            پاسخ : اعمال VCC به VREF و آسیب ADCدر XMEGA

            مشکل فوق در اثر برگشت مقدار offset نادرست ایجاد شده است .

            زیرا مقدار offset در تابع ADC_ResultCh_GetWord_Unsigned از داده برگشتی ADCکم می شود .

            این عدد در این مثال حدود 115 می باشد .(offset=115 )


            آیا نحوه به کارگیری توابع بالا درست است؟
            مخصوصا تابع ADC_ResultCh_GetWord_Unsigned و ADC_Offset_Get_Unsigned ؟

            در صورت امکان نمونه کد مطمئنی را معرفی کنید.

            دیدگاه


              #7
              پاسخ : اعمال VCC به VREF و آسیب ADCدر XMEGA

              برای بدست آوردن آفست در مد Signed در ابتدا باید کانال در مد تفاضلی قرار داده شود و هر دو ورودی تفاضلی به یک پین نسبت داده شوند. در این حالت اگر آفستی وجود نداشت، باید مقدار ADC قرائت شده صفر باشد. اما به دلیل وجود آفست، مقدار خوانده شده غیر صفر است که می تواند به همین عنوان ذخیره شود. در نسخه قدیمی AVR1300 برای این منظور کدی قرار داده شده که بسیار قابل استفاده است.

              کد:
              ADC_CalibrationValues_Load(&ADCA);
              ADC_ConvMode_and_Resolution_Config(&ADCA, ADC_ConvMode_Signed, ADC_RESOLUTION_12BIT_gc);
              ADC_Prescaler_Config(&ADCA, ADC_PRESCALER_DIV32_gc);
              ADC_Reference_Config(&ADCA, ADC_REFSEL_VCC_gc); 
              ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH0,ADC_CH_INPUTMODE_DIFF_gc,ADC_DRIVER_CH_GAIN_NONE);
              ADC_Ch_InputMux_Config(&ADCA.CH0, ADC_CH_MUXPOS_PIN1_gc, ADC_CH_MUXNEG_PIN1_gc);
              ADC_Enable(&ADCA);
              ADC_Wait_8MHz(&ADCA);
              offset = ADC_Offset_Get_Signed(&ADCA, &ADCA.CH0, false);


              برای مد Unsigned هم باید ورودی ADC صفر شود و در صورت عدم وجود آفست مقداری حدود 200 خوانده می شود. اما آفست می تواند این مقدار را تغییر دهد که از روی مقدار قرائت شده می توان آفست را بدست آورد.
              اوژن: به معنای افکننده و شکست دهنده است
              دانایی، توانایی است-Knowledge is POWER
              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

              دیدگاه


                #8
                پاسخ : اعمال VCC به VREF و آسیب ADCدر XMEGA

                من هم ولتاژ 3.3 را به عنوان AREFA به PA0 وصل کردم. مشکلاتی برام پیش اومد مثل این که گاهی وقتها آی سی پروگرام نمی شد. ولتاژ روی بعضی پین ها هم در حالت روشن بودن کم شده بود (حدود 2.4) برنامه اش هم درست کار نمی کرد.

                دیدگاه


                  #9
                  پاسخ : اعمال VCC به VREF و آسیب ADCدر XMEGA

                  همانطور که در پست های قبل توضیح داده شد، حداکثر ولتاژ مجاز AVcc-0.6 است و بنابراین 3.3 ولت برای اعمال به AREFA یک ولتاژ غیر مجاز است.
                  اوژن: به معنای افکننده و شکست دهنده است
                  دانایی، توانایی است-Knowledge is POWER
                  برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                  وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                  قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                  اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                  ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                  دیدگاه

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