ايران ويج

نسخه‌ی کامل: كابرد ADC و چگونگي عمل كرد
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام
من از كتاب آقاي كاهه مطالعه ميكردم و ميخواستم در مورد كار با آنالوگ رو ياد بگيرم . اما ماشاالله انقدر قشنك و زياد توضيح دادن كه من اصلا نفهميدم و در كار با سنسور LM35 اصلا جواب نگرفتم.017

اگه ميشه يك تاپيك يا يك PDF يا هر چيزي كه به صورت كامل و علمي و همراه با مثالهاي كاربردي باشه به من معرفي كنيد.

راستي يه مطلب ديگه هم ميخوام :‌ اگه ميتونيد برام توضيح بديد كه اين پورت ADC ي AVR چطوري داره نمونه برداري ميكنه و آيا نياز به مدار ديگري سر راهش داره يا نه؟

از لطفتون ممنونم
از کتاب سعید یه نفر : آموزش بسکام


مبدل آنالوگ به ديجتال(ADC)



گاهي نياز است که يک کميت بيروني (مانند دما و شدت صدا و شدت نور و... ) اندازه گيري شود ، براي اينکار از وسيله اي به نام سنسور استفاده مي شود.

سنسور ها مقدار يک کميت آنالوگ را به ولتاژ يا جريان تبديل مي کند ، سپس اين ولتاژ انالوگ به مبدل انالوگ به ديجتال ميکرو داده مي شود و مبدل انالوگ به ديجتال مقدار ولتاژ را به کميت ديجتال متناظر تبديل ميکند ، سپس اين مقدار ديجتال با اعمال رياضي به مقدارعددي متناظر تبديل مي شود و روي LCD يا سون سگمنت نمايش داده مي شود .

حداکثر ولتاژي که مبدل انالوگ به ديجتال ،که از اين به بعد به آن Adcمي گوييم ميتواند اندازه بگيرد برابر با VCC است و اگر ولتاژ اعمالي از VCC بيشتر شود ممکن است مبدل انالوگ به ديجتال آسيب ببيند (معمولا بيشرين ولتاژ ورودي که به ADC اعمال ميکنند 5 ولت است) و کمترين ولتاژ اعمالي برابر با GND است .

ADC به ازاي ولتاژ 5 ولت عدد 1023 و به ازاي صفر ولت عدد صفر را در متغيير مربوطه قرارمي دهد .

Adcبا دستور زير راه اندازي مي شود :

کد php:
Config Adc Single/Free Prescaler Auto Reference Opt 

گزينه هاي single/free :
در حالتي که Single انتخاب شود مقدار ديجتال سيگنال انالوگ توسط دستور Getadc در يک متغيير از جنس Word ريخته مي شودو در حالتي که Free انتخاب شود مقدار ديجتال سيگنال انالوگ کانال صفر در ريجيستر مربوط به Adc ريخته مي شود .

Prescaler :
اين گزينه فرکانس ADC را مشخص ميکند و در حالتي که Autoانتخاب شود کامپاير با توجه به کريستال انتخاب شده بهترين کلاک را در نظر مي گيرد ، موارد ديگر براي کلاک عبارتند از 2 و 4 و 8 و 15 و 32 و 64 يا 128 است که يه جاي گزينه Auto نوشته مي شود .
هر چه عدد کمتری وارد شود فرکانس فوق بیشتر است .

Reference :
در صورتي که بخواهيد از يک ولتاژ مرجع استفاده کنيد اين گزينه را بنويسيد (در صورت عدم استفاده از اين دستور ولتاژ مرجع زمين است و نيازي به نوشتن اين دستور نيست) .
(اين امکان فقط در بعضي از ميکرو ها وجود دارد ) Opt ميتواند يکي از موارد زير باشد :
Off : در اين حالت ولتاژمرجع داخلي خاموش شده و از ولتاژ مرجع بر روي پايه Aref استفاده مي شود.
Avcc : در اين حالت ولتاژ پايه Avcc به عنوان ولتاژ مرجع در نظر گرفته مي شود .
Internal : در اين حالت از ولتاژ مر جع داخلي 2.65 ولت استفاده مي شود .

بعد از راه اندازي Adc نوبت به استفاده از آن است براي اينکار با دستور Start Adc ، ADC روشن شده و شروع به نمونه برداري از سيگنال انالوگ موجود بر روي پايه اش مي کند و آن را به مقدار ديجتال تغيير مي دهد ، اين مقدار ديجتال با دستور زير در يک متغيير از جنس Word ريخته مي شود

کد php:
Var = Getadc (Channel

Var يک متغيير از جنس Word ميباشد
Channel : شماره : شماره Adc است که سيگنال انالوگ به آن اعمال شده .

مانند :

کد php:
$regfile "m8def.dat" 
$crystal 8000000 
Config Lcd 
16 
Config Lcdpin 
Pin Db4 Pinb.2 Db5 Pinb.3 Db6 Pinb.4 Db7 Pinb.5 Rs Pinb.0 Pinb.1 
Config Adc 
Single Prescaler Auto 
Dim A 
As Word 
Start adc 
Q

Getadc(1
Locate 1 
Lcd A 
Goto 
End 

در خط هاي اول LCD و ADC پيکر بندي شده است در خط دهم مقدار انالوگ داده شده به پايه 24 ميکرو (PORTC.1) بعد از تبديل به مقدار ديجتال در متغيير A ريخته مي شود وسپس اين متغيير در سطر اول وستون اول LCD به نمايش در مي آيد .

مثال

کد php:
$regfile "m16def.dat"
$crystal 12000000
Config Lcd 
16 4
Config Lcdpin 
Pin Db4 Portd.0 Db5 Portd.1 Db6 Portd.2 Db7 Portd.3 Portd.4 Rs Portd.5
Config Adc 
Single Prescaler Auto
Dim A 
As Word As Word As Word As Word As Word As Word As Word As Word
Cls
Q
:
Getadc(0) : Locate 1 Lcd A
Getadc(1) : Locate 1 Lcd B
Getadc(2) : Locate 2 Lcd C
Getadc(3) : Locate 2 Lcd D
Getadc(4) : Locate 3 Lcd E
Getadc(5) : Locate 3 Lcd F
Getadc(6) : Locate 4 Lcd G
Getadc(7) : Locate 4 Lcd H
Goto Q
End 

در اين مثال از ميکرو مگا 16 و LCD 16*4 استفاده شده است ، ميکرو مگا 16 داراي 8 کانال ADC ميباشد ، که در اين مثال از همه ADC هاي اين ميکرو استفاده شده است .

ممکن است اين سوال براي شما پيش بيايد که : ADC نمي تواند بيشتر از 5 ولت را اندازه گيري کند ، ما ولتاژ هاي بالا تر را چگونه اندازه بگيريم؟ براي اندازه گيري ولتاژ هاي زياد شما بايد آن را با مقاومت کم کنيد ، فرض کنيد يک ولتاژ از 0 تا 200 ولت متغيير داريد و ميخواهيد آن را با ميکرو اندازه بگيريد ، شما بايد اين ولتاژ متغيير را به 0 تا 5 ولت تبديل کنيد ...
اين خيلي خوب بود و خيلي هم كمكم كرد.
چندتا سوال برام پيش اومد كه ميخوام بپرسم ازتون:
1- ولتاژ مرجع Aref اگر به همون 5ولت ميكرو وصل كنم چه اتفاقي مي افته؟

2- در قسمت prescaler اگر Auto ست كنم عيبو ايرادي پيش نمياد ؟ چون از كريستال 8مگا دارم استفاده ميكنم!

3- من اگر بخوام از ولتاژي كه سنسور آنالوگ بهم ميده استفاده كنم - در دستور ref چه مقاديري رو استفاده كنم؟

4- اين كه گفته شده اگر ولتاژ بيشتري بخواهيم استفاده كنيم و بايد سر راهش با يك مقاومت ولتاژ رو كم كنيم.آيا از دقت نمونه برداري كم نميشه ؟ آيا خطا پيش نمياد در مقدار پردازش شده؟

5- و در آخر اگر سنسور آنالوگي كه مقدار خروجيش با جريان (ميكرو آمپر) هست .بخوام استفاده كنم چه كاري بايد بكنم؟؟
1- خوب ولتاز مرجعتون میشه 5 ولت !
تو این هنگام اگه به ورودی 5 ولت بدین میکرو عدد 1023 رو برمیگردونه !!!
معمولا تا کارهای معمولی همین کارو می کنن !!!

2- بهتره رو حالت اتوماتیک ( همون AUTO ) بذارین !!
چون خود کامپایلر با توجه به فرکانس میکرو بهترین سرعت رو انتخاب می کنه !!

3- سنسورتون چیه ؟
اصلا هیچی ننویسین !!
کد php:
Config Adc Single Prescaler Auto 
اینجوری رفرنس خارجی در نظر میگیره !!!

4- مهندس دقت که بستگی به تقسیم مقاومتیتون داره که چقدر دقیق باشه !!
ولی فرضا شما زیر 5 ولت می تونی ولتاژ 10 میلی ولت رو حس کنی و اگه یه تقسیم مقاومتی 10* بذاری( یعنی ده برابر ولتاژ رو کم کنه ) اونموقع می تونی حداکثر 50 ولت رو اندازه بگری با دقت 100 میلی ولت !!! !!

5- یه مقاومت مناسب بذارین طوری که اون جریان مورد نظر از مقاومت رد بشه و ولتاژ دو سر مقاومت رو بخونین !!!!
تشكر ميكنم بابت راهنمايي و كمك.
ولي من جواب 4 و 5 رو خوب متوجه نشدم. لطفا واضحتر و يا راحتتر توضيح بديد :(
4-
فرض می کنیم از رفرنس خارجی 5 ولت استفاده کردیم !
تو این حالت اگه صفر ولت بدیم عدد صفر میکرو میگیره و اگه 5 ولت بدیم میکرو عدد 1023 رو میگیره !
یعنی بین 0 تا 5 ولت رو 1024 قسمت کرده !! 0-1023
یعنی کوچکترین ولتاژی که تو این حالت میشه حسش کرد 4.88 میلی ولت هستش !!!
اگه با همین صورت یه ولت متر درست کنیم حداکثر ولتاژی که میشه حس کرد 5 ولت و دقت ولت متر هم 0.0048 ولت است !!!!
1024÷5=0.0048

حالا ما می خوایم یه ولت متری درست کنیم که بتونه 0 تا 100 ولت رو اندازه گیری کنه !!
واسه این کار باید یه تقسیم مقاومتی بذاریم که ولتاژ ورودی رو 20 برابر تغصیف کنه !!
یعنی 100 ولت ورودی رو به 5 ولت تبدیل کنه !!!
میشه با یه مقاومت 2 کیلویی و یه مقاومت 38 کیلویی چنین تضعیفی رو ایجاد کرد !!

حال ما ولتاژ 100 ولت رو به 5 ولت تقسیم کردیم !!

یعنی اگر 100 ولت بدیم میکرو 1023 رو برمیگردونه !

تو این حالت حداقل ولتاژ قابل اندازه گیری 0.097 ولت هستش !
یعنی اگه ولتاژ 0.097 ولت رو بدیم قسمت تضعیف این ولتاژ رو 20 برابر کم می می کنه و این 0.097 ولت تبدیل به 0.0048 ولت میشه که همون حدقل ولتاژ قابل اندازه گیری ADC هستش !!!!!!
تو این حالت عدد یک برمیگرده !!!



5-
اونطوری که میگی خروجی سنسور فوق جریان هستش !
یعنی بسته به مقدار کمیت مورد اندازه گیری جریان خروجیش کم و زیاد میشه !
خوب ما خروجی رو یه مقاومت می ذاریم !
فرضا یک کیلو اهم !
حال اگه از این مقاومت جریان یک میلی آمپر عبور کنه با توجه به قانون ولت = آمپر * اهم ولتاژ دوسر مقاومت میشه یه ولت !!!
خوب ما هم ولتاژ دوسر مقاومت رو میخونیم و مقدار مقاومت رو هم داریم و خیلی راحت جریان عبوری ازش که همون جریان خروجی سنسور باشه رو حساب می کنیم !!!



امیدوارم تونسته باشم منظورم رو برسونم !!!
آقا اين كمكت به 100 ميليارد مي ارزيد .
واقعا كمكم كرد .
اگه ميشه پاك نكنيد اين تاپيك رو تا به دوستان هم لينك بدم تا مطالعه كنن.
ممنون
خواهش می کنم !

اگه تایپیکی مشکل سیاسی داشته باشه فقط پاک می کنیم !!!
سلام.
پايه هاي ميكروي 64 كه AVCC - AREF هست براي ADC چي كارش كنم؟؟

من از كسي پرسيدم گفت Aref و AVCC رو به 5 ولت وصل كنم درسته؟
مهندس اگه بخوای از رفرنس خارجی استفاده کنی خوب می تونی اونها رو به پنج ولت وصل کنی !

ولی اگه رفرنس داخلی استفاده کردی خوب می تونی پایه های فوق رو آزاد بذاری !
از اين پايه هاي ADC خروجي هم ميشه گرفت؟
خب من راستش هنوز ref رو تعيين نكردم كه داخلي باشه يا خارجي.
من نميدونم كدومش بهتره براي سنسور فشار؟
صفحه‌ها: 1 2