NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3647 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 13 از 13

موضوع: مشکل با adc

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Sep 2008
    نوشته ها
    36
    تشکر
    13
    تشکر شده 54 بار در 16 پست

    پیش فرض مشکل با adc

    با سلام دوستان
    در مورد adc xmega دوستان کار کردن در بسکام؟
    مشکلی که من دارم دقت این adc هست وقتی وردیو زمین میکنم حدود 20 واحد پرش دارم که هی کمو زیاد می شه با انواع ولتاژ رفلنسم چک کردم تغذیه میکر هم مشکلی نداره با اسکوپ چک کردم . تغذیه بخش آنلوگ هم مدار پیشنهادی اتمل بستم !!!! اینم از کانفیگ

    کد:
    Config Adca = Single , Convmode = Unsigned , Resolution = 12bit , Dma = Off , Reference = Arefb , Event_mode = None , Prescaler = 32 , Ch0_gain = 1 , Ch0_inp = Single_ended , Mux0 = &B0       '*******************************************************************************'

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    سلام
    پرش توی adc وقتی پیش میاد که ولتاژ رفرنس یا ولتاژ ورودی دارای نوسان باشه .
    اگه شما ورودی adc رو زمین کردید و هنوز پرش وجود داره ، به احتمال زیاد ولتاز روی پایه رفرنس (aref ) دارای نوسان هست .
    بهتره صفحه ی 159 به بعد کتاب زیر رو یک بار مطالعه کنید :
    دانلود ویرایش دوم کتاب اصول کار با میکرو کنترلر های avr و کامپایلر بسکام

    لطفا برای تایپک عنوان مناسب تری انتخاب کنید ( مثل مشکل با adc سریxmega در بسکام ) و برنامه ای رو نوشتید بزارید .

  4. #3
    کاربر علاقه مند
    تاریخ عضویت
    Sep 2008
    نوشته ها
    36
    تشکر
    13
    تشکر شده 54 بار در 16 پست

    پیش فرض

    سلام یک نفر جان . کتابتونو مطالعه کردم و یک نقطه برام نامفهوم بود چطوری باید از ورودی مثلا َA.2 مقدار بخونیم یعتی پایه آنالوگ رو انتخاب کنیم ؟ جون جوری که من متوجه شدم عدد 0 در دستور زیر به معنی انتخواب کانال نه پورت انلوگ!!!
    W = Getadc(adca , 0 )

    در مورد ولتاژ رفلنس هم تمام قواعد رو اعم از قرار دادن فیلتر lc و غیر رعایت کردم و با اسیلسکوپ هم این پایه اصلا نویزی نداره و پایداری کامل داره !!!
    همینطور با ولتاژ 1 ولت داخلیم تست کردم که در اون حالت ناپایداری بشتره!!!
    کد:
    $regfile = "xm32a4udef.dat"
    $crystal = 32000000
    $hwstack = 32
    $swstack = 10
    $framesize = 200
    
    
    $lib "xmega.lib"
    $external _xmegafix_clear
    $external _xmegafix_rol_r1014
    '--------------------------------------------------------------------
    Config Osc = Enabled , 32mhzosc = Enabled , 32khzosc = Enabled
    Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1
    
    
    
    
    
    
    '*******************************************************************************'
    Config Adca = Single , Convmode = Unsigned , Resolution = 12bit , Dma = Off , Reference = Arefb , Event_mode = None , Prescaler = 256 , Ch0_gain = 1 , Ch0_inp = Single_ended , Mux0 = &B0  
    
        '*******************************************************************************'
    do
    W = Getadc(adca , 0 )
    W = W - 200
    
    
    Stre = Str(w)
    Stre = Format(stre , "00000") + "  "
    1616_text 50 , 3 , Stre , Cyan , Black
      Loop

  5. #4
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    var = GETADC( ADC , channel [,MUX])
    var The variable that is assigned with the A/D value. This should be a Word or other 16 bit variable.
    ADC The ADC to use. This is either ADCA or ADCB.

    برای خوندن کانال 2 بر روی پورت a باید بنویسید :
    W = Getadc(adca ,2)
    برای خوندن کانال 2 بر روی پورت b باید بنوسید :
    W = Getadc(adcb , 2 )
    1-توی برنامه شما دارید adc های کانال a رو میخونید ، در حالی که ورودی ولتاژ رفرنس ، پایه Arefb معرفی شده . ( یه بار Arefa رو تست کنید ، شاید ورودی رفرنس b روی adc های کانال a تاثیر نداشته باشه .)
    2-بعضی وقت ها Prescaler و فرکانس کاری میکروکنترلر به درسی تعیین نمیشه ، در این حالت داده adc قبل از تبدیل و یا پایان نمونه برداری به خروجی ارسال میشه ، بهتره Prescaler رو مقداری کم کنید و تست کنید .

  6. #5
    کاربر علاقه مند
    تاریخ عضویت
    Sep 2008
    نوشته ها
    36
    تشکر
    13
    تشکر شده 54 بار در 16 پست

    پیش فرض

    یک نفر عزیز با دستوری که میفرماید مثلا
    W = Getadc(adca ,2) مقدار صفر یا همون 200 بر میگردونه و تاغیرات روی پین A.2 رو اصلا متوجه نمیشه!!! این دستور شخصا تست کردین روی سخت افزار؟

  7. #6
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    نقل قول نوشته اصلی توسط maxn نمایش پست ها
    یک نفر عزیز با دستوری که میفرماید مثلا
    W = Getadc(adca ,2) مقدار صفر یا همون 200 بر میگردونه و تاغیرات روی پین A.2 رو اصلا متوجه نمیشه!!! این دستور شخصا تست کردین روی سخت افزار؟
    سلام
    قبلا گفته بودید که 20 تا پرش داره ؟
    عدد 200 که بر میگرده ، ثابت هست و به خاطر خود adc هست و مشکلی نداره ، اما 20 تا پرش مشکل داره و ممکنه از مواردی که گفتم باشه .
    عدد 200 از کجا میاد ؟
    برای adc های سری atxmega چهار تا مد کاری برای اعمال ولتاژ ورودی پیش بینی شده ( دستوری که جلوی دستور _inp قرار میگیره ) :

    • Differential measurement without gain
    The ADC must be in signed mode when differential input is used
    Pin 0...Pin 7 can be selected as positive input
    Pin 0...Pin 3 can be sleected as negative input
    '
    ' +--------------+
    ' | |
    ' Pina.0 -----+ differnential|
    ' | without gain |
    ' | |
    ' Pina.1 -----+ ADC |
    ' | |
    ' +--------------+
    '
    Differential measurement with gain

    The gain is selectable to 1/2x, 1x, 2x, 4x, 8x, 16x, 32x and 64x gain
    The ADC must be in signed mode when differential input is used
    Pin 0...Pin 7 can be selected as positive input
    Pin 4...Pin 7 can be sleected as negative input
    '
    ' +--------------+
    ' | |
    ' Pina.0 -----+ differnential|
    ' | with gain |
    ' | |
    ' Pina.4 -----+ ADC |
    ' | |
    ' +--------------+
    '
    • Single ended input (signed mode)
    The ADC is differential, so for single ended measurements the negative input is connected to a fixed internal value.
    The negative input is connected to internal ground (GND) in signed mode.
    '
    ' +--------------+
    ' | |
    ' Vinp -----+ single ended |
    ' | signed mode |
    ' | |
    ' GND -----+ ADC |
    ' | |
    ' +--------------+
    '
    Single ended input (unsigned mode)

    In unsigned mode the negative input is connected to half of the voltage reference (Vref) voltage minus a fixed device specific negative offset
    The approximate value corresponding to ground is around 200. This value corresponds to the digital result of ΔV (0.05 * 4096).
    This value also depend on the selected voltage reference so you should measure the real value by first selecting the voltage reference.
    (ΔV = Vref * 0.05)
    How to measure the offset ?
    Connect the ADC input pin (Vinp) to GND and measure the offset.
    This is also called offset calibration. This value can be stored for example in EEPROM and is therefore available for all other measurements.
    See also example below.
    This offset calibration value is then subtracted to each ADC output
    The offset enables the ADC to measure for example zero crossing in unsigned mode.
    '
    ' +--------------+
    ' | |
    ' Vinp -----+ single ended |
    ' | unsigned mode|
    ' | |
    ' (Vref/2)-dV -----+ ADC |
    ' | |
    ' +--------------+
    '
    • Internal input
    The ADC is differential, so for single ended measurements the negative input is connected to a fixed internal value
    توی برنامه نوشته شده ما داریم از مد Single ended و unsigned mode استفاده میکنیم ، و باید ولتاژ رفرنس ایجاد شده رو از مقدار تبدیل شده کم کنیم :
    اطلاعات بیشتر در آدرس زیر وجود داره :
    CONFIG ADCx

    نقل قول نوشته اصلی توسط maxn نمایش پست ها

    این دستور شخصا تست کردین روی سخت افزار؟
    متاسفانه نه
    همون طور که توی تاپیک کتاب هم گفته شده ، برخی از فصل های این کتاب ناقص هستند ،بعضی از مباحث هم اصلا روشون بحث نشده . adc های سری atxmega هم یکی از بخش های ناقص هست .

  8. تشکرها از این نوشته :


  9. #7
    کاربر فعال
    تاریخ عضویت
    Jul 2010
    نام
    مرتضی مجتهدی
    نوشته ها
    313
    تشکر
    1
    تشکر شده 358 بار در 203 پست

    پیش فرض

    mosaferat hastamo archos9 roo keyboarde onscreen farsi nadare.
    1-dc xmega ofset dare.bayad mohasebe va az meghdare nahaee kasr konin.
    2-balaye 60k sample hata ta 6 bit khata dare

  10. تشکرها از این نوشته :


  11. #8
    کاربر علاقه مند
    تاریخ عضویت
    Sep 2008
    نوشته ها
    36
    تشکر
    13
    تشکر شده 54 بار در 16 پست

    پیش فرض

    خیلی ممنون - در مورد انتخاب پین مورد نظر باید یکی از کانلهارو کانفیک کنیم برای آن پین بعد مقدار adc از اون کانال بخونیم. ولی در مورد پرش هنوز مشکل دارم و این 20 واحد کلا حسابکتاب منو به هم میزنه !! از رفلنس خود پورت A هم استفاده کرم فرقی نکرد !! دوستانی که تجربه عملی داشتن 12 بیت تونستن جواب بگیرن یا رو 10 بیتش حساب باز کنم ؟؟سرعت cpu حتی تا 2mhz پایین آوردم با Prescaler = 512 ولی فایده ای نداشت!!

  12. #9
    مدیرکل انجمنها Doloop آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    حسين
    نوشته ها
    1,964
    تشکر
    3,312
    تشکر شده 3,086 بار در 1,371 پست

    پیش فرض

    سلام
    خوب شما میدونین میزان پرش حداکثر چقدر باید باشه؟؟؟
    من با adc میکروی stm32f103 تا 9 تا پرش داشتم ...
    مطمئنید که بهتر از این جواب میده ؟؟؟ (البته بنده با xmega کار نکردم) و دوستانی که عملا کار کردن بهتره تجربشون رو اینجا مطرح کنن !!!
    *** اللّهم عجّل لولیک الفرج ***

  13. کاربران : 2 تشکر کرده اند از شما Doloop برای ارسال این پست سودمند:


  14. #10
    کاربر فعال
    تاریخ عضویت
    Jul 2010
    نام
    مرتضی مجتهدی
    نوشته ها
    313
    تشکر
    1
    تشکر شده 358 بار در 203 پست

    پیش فرض

    مبدل آنالوگ به دیجیتال ایکسمگا ، مثل ای وی آر معمولی، در تبدیل زیر 64کیلو سمپل، باز هم باید میانگین گیری بشه و عملا همون 1 بیت خطا که باید رو داره . اما همونطور که گفتم در سرعت بالاتز حتی تا 6 بیت ( به گفته خود اراته نوت های اتمل و تست عملی خودم ) خطا داره .
    Getadc(adca , 0 , &B00xxx000)
    برای کانال a جای xxx عدد کانال مورد نظر رو بگذارید . یعنی مثلا برای ورودی دوم ، 010 و الی آخر
    تنظیمات و خطا ها زیاد هست و در یک پست نمی گنجه

  15. کاربران : 4 تشکر کرده اند از شما modj.ir برای ارسال این پست سودمند:


  16. #11
    کاربر علاقه مند
    تاریخ عضویت
    Sep 2008
    نوشته ها
    36
    تشکر
    13
    تشکر شده 54 بار در 16 پست

    پیش فرض

    خیلی ممنون دوستان در مورد سرعت و کاربرد xmega عالی هست ولیadc منو نا امید کرد . برای اندازه گیری جریان با دقت 0.000 نیازبه این ADC داشتم . دوستان ADC خارجی با دقت مناسب و قیمت مناسب چی سراغ دارین ؟
    ویرایش توسط maxn : 24-03-2014 در ساعت 18:47

  17. #12
    کاربر فعال mapmap آواتار ها
    تاریخ عضویت
    Mar 2010
    نام
    M
    نوشته ها
    158
    تشکر
    246
    تشکر شده 74 بار در 61 پست

    پیش فرض

    سلام

    از اساتید خواهش میکنم روشهای کاهش نویز adc رو ( خصوصا" تو برنامه نویسی با بسکام ) اینجا ذکر کنن مشکلات رو حل کنیم!!
    از منبع تغذیه ( باطری ) هم که استفاده میکنم دماسنجم که با lm35 میخوام بسازم حدود 3 درجه پرش داره!!!
    چطور باید اونو ثابت و دقیقش کنم ؟؟

    متشکرم

  18. #13
    کاربر فعال mapmap آواتار ها
    تاریخ عضویت
    Mar 2010
    نام
    M
    نوشته ها
    158
    تشکر
    246
    تشکر شده 74 بار در 61 پست

    پیش فرض

    آقا برای حذف نویز adc یه فیلتر lc گذاشتم خیلی بهتر شد!!!
    حالا خطاش به 4 میلی ولت رسید
    یعنی هیچ راهی برا به صفر رسوندش نیست؟؟
    توی برنامه اش ( به زبان بیسیک ) چه کارایی میتونم انجام بدم این نویز رو حذف کنم؟؟
    میانگین گیری و کانفیگ adc و .... به چه شکل باید باشه ؟؟
    یه نمونه بدین ممنون میشم.
    بدرود

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •