PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مشکل با adc



maxn
19-03-2014, 13:37
با سلام دوستان
در مورد 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 '************************************************* ******************************'

1nafar
19-03-2014, 15:51
سلام
پرش توی adc وقتی پیش میاد که ولتاژ رفرنس یا ولتاژ ورودی دارای نوسان باشه .
اگه شما ورودی adc رو زمین کردید و هنوز پرش وجود داره ، به احتمال زیاد ولتاز روی پایه رفرنس (aref ) دارای نوسان هست .
بهتره صفحه ی 159 به بعد کتاب زیر رو یک بار مطالعه کنید :
دانلود ویرایش دوم کتاب اصول کار با میکرو کنترلر های avr و کامپایلر بسکام (You can see links before reply)

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

maxn
19-03-2014, 17:08
سلام یک نفر جان . کتابتونو مطالعه کردم و یک نقطه برام نامفهوم بود چطوری باید از ورودی مثلا َ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

1nafar
19-03-2014, 17:38
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 رو مقداری کم کنید و تست کنید .

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

1nafar
20-03-2014, 08:03
یک نفر عزیز با دستوری که میفرماید مثلا
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 (You can see links before reply)





این دستور شخصا تست کردین روی سخت افزار؟


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

modj.ir
20-03-2014, 19:12
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

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

Doloop
21-03-2014, 11:36
سلام
خوب شما میدونین میزان پرش حداکثر چقدر باید باشه؟؟؟
من با adc میکروی stm32f103 تا 9 تا پرش داشتم ...
مطمئنید که بهتر از این جواب میده ؟؟؟ (البته بنده با xmega کار نکردم) و دوستانی که عملا کار کردن بهتره تجربشون رو اینجا مطرح کنن !!!

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

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

mapmap
30-04-2014, 21:34
سلام

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

متشکرم

mapmap
01-05-2014, 19:21
آقا برای حذف نویز adc یه فیلتر lc گذاشتم خیلی بهتر شد!!!
حالا خطاش به 4 میلی ولت رسید
یعنی هیچ راهی برا به صفر رسوندش نیست؟؟
توی برنامه اش ( به زبان بیسیک ) چه کارایی میتونم انجام بدم این نویز رو حذف کنم؟؟
میانگین گیری و کانفیگ adc و .... به چه شکل باید باشه ؟؟
یه نمونه بدین ممنون میشم.
بدرود