مقدمه
- وقتی ارتباط بین سنسورها با میکروکنترلر را برقرار میکنیم، در اکثر موارد خروجی سنسورها ذاتاً آنالوگ میباشد. اما میکروکنترلر تنها سیگنالهای دیجیتالی را پردازش میکند.
- بنابراین باید از ADC بین سنسور و میکروکنترلر استفاده کنیم. ADC سیگنال آنالوگ را به دیجیتال تبدیل کرده و تحویل میکروکنترلر میدهد.
- ADC کاربردهای بسیاری از جمله در پزشکی، مانیتورینگ محیط، تشخیص نشت گاز و … دارد.
مقاله مفید: تفاوت مدار آنالوگ و دیجیتال (تفاوت سیگنال، دادهها و خروجی های آنالوگ و دیجیتال)
آردوینو Uno دارای شش کانال ADC داخلی است که از آنها برای خواندن سیگنال آنالوگ در محدودهی ۵-۰ ولت استفاده میشود.
آردوینو دارای ADC ده بیتی است، یعنی مقدار دیجیتالی در محدودهی ۱۰۲۳-۰ (۲۱۰) تحویل میدهد. این مقدار وضوح (رزولوشن) خوانده میشود و بیانگر مقادیر گسستهای است که در محدودهی مقادیر آنالوگ تولید میکند.
محاسبه مقدار خروجی دیجیتال
- وضوح Vref / ((2^n) – 1) = ADC
- خروجی دیجیتال = Vin / Resolution
که در این روابط:
Vref: ولتاژ مرجع است که همان بیشینه مقداری است که ADC میتواند تبدیل کند.
برای ساده نگه داشتن موضوع، ولتاژ مرجع را ۵ ولت درنظر میگیریم.
برای ولتاژ Vin صفر، خروجی دیجیتال برابر با صفر است.
برای ولتاژ Vin ۵، خروجی دیجیتال برابر با ۱۰۲۳ (10-bit) است.
برای ولتاژ Vin ۲.۵، خروجی دیجیتال برابر با ۵۱۲ (10-bit) است.
پینهای ADC در آردوینو Uno
توابع مورد استفاده در ADC آردوینو
(analogRead (pin: این تابع برای خواندن مقدار آنالوگ از پین آنالوگ مشخص شده به کار میرود.
Pin: شماره پین آنالوگی که قصد خواندنش را داریم.
مقدار دیجیتال ۱۰۲۳-۰ را برمیگرداند.
مثال:
analogRead(A0) //read analog value at A0 channel
(analogReference (type: این تابع برای پیکربندی ولتاژ مرجع برای ورودی آنالوگ استفاده میشود.
خواندن مقادیر آنالوگ با استفاده از آردوینو
میخواهیم برنامهای نوشته و مقادیر آنالوگ متغیر را که یک پتانسیومتر تولید میکند و متصل به کانال آنالوگ A0 است را بخوانیم. مقدار دیجیتال را با استفاده از مانیتور سریال نمایش میدهیم.
دیاگرام اتصالات
اسکچ خواندن مقادیر آنالوگ
int sensorPin = A0; // input pin for the potentiometer int digitalValue = 0;// variable to store the value coming from the sensor void setup() { Serial.begin(9600); } void loop() { digitalValue = analogRead(sensorPin);// read the value from the analog channel Serial.print("digital value = "); Serial.println(digitalValue); //print digital value on serial monitor delay(1000); }
خروجی روی مانیتور سریال
نکته: اگر چیزی به کانال ورودی آنالوگ متصل نباشد، تابع ()analogRead مقادیر نوسانی نویز را برمیگرداند.
خواندن ولتاژ آنالوگ با استفاده از آردوینو Uno
ADC خروجی دیجیتالی تولید میکند که متناسب با مقادیر آنالوگ میباشد. برای فهم اینکه منظور از مقدار آنالوگ چیست، باید این مقادیر دیجیتال تبدیل شده را از طریق برنامه مجددا به آنالوگ تبدیل کنیم. برای تبدیل مقدار دیجیتال به ولتاژ ورودی آنالوگ از رابطهی زیر استفاده میکنیم.
Aout = digital value * (Vref/2^n – 1)
مثال: مقدار دیجیتال ۵۱۲ است و ADC ما ۱۰ بیتی با ولتاژ مرجع ۵ ولت میباشد. میخواهیم بدانیم که چه ولتاژ آنالوگی این مقدار دیجیتال را نتیجه داده است. بنابراین،
Aout = 512 * (5 V / 1023)
= 2.5 V
اسکچ خواندن ولتاژ آنالوگ با استفاده از آردوینو
int sensorPin = A0; // select the input pin for the potentiometer int digitalValue = 0; // variable to store the value coming from the sensor float analogVoltage = 0.00; void setup() { Serial.begin(9600); } void loop() { digitalValue = analogRead(sensorPin);// read the value from the analog channel Serial.print("digital value = "); Serial.print(digitalValue); //print digital value on serial monitor //convert digital value to analog voltage analogVoltage = (digitalValue * 5.00)/1023.00; Serial.print(" analog voltage = "); Serial.println(analogVoltage); delay(1000); }
خروجی روی پنجره سریال
- منبع: ترجمه از سایت electronicwings.com
امیدوارم آموزش ADC در آردوینو براتون مفید واقع شده باشه. کامنت یادتون نره.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
سلام بسیار مفید بود ادامه دهید