ADC مخفف Analog to Digital Converter مبدل سیگنال های آنالوگ است. مثل کم و زیاد کردن شدت نور محیط، کم و زیاد شدن صدای یک بلندگو و هر آنچه که با سیگنال های آنالوگ در ارتباط است. شاید اولین موردی که به ذهنتان خطور کند، این است که رزبری پای در تمامی نسخه های ارائه شده اش، فاقد ADC بوده و است! بله بود! رزبری پای پیکو دارای ۴ پایه ADC است که برای سیگنال های آنالوگ و ارتباط سخت افزاری به برد جدید بنیاد رزبری پای اضافه شده است. شاید هم قرار است در آینده جایی بین کاربران باز کند! در ادامه آموزش adc رزبری پای با مرجع تخصصی رزبری پای به زبان فارسی، دیجی اسپارک همراه باشید.
رابط آنالوگ به دیجیتال ADC
در الکترونیک مبدل آنالوگ به دیجیتال برای تبدیل سیگنال های آنالوگی استفاده میشود. مثل کم و زیاد کردن صدای میکروفن و یا کاهش و افزایش شدت نور که از طریق سیگنال های آنالوگ قابل تغییر است.
کاربرد ADC
از ADC برای تبدیل سیگنال آنالوگ مانند ولتاژ به یک فرم دیجیتالی تا توسط میکروکنترلر قابل خواندن و پردازش باشد. بسیاری از میکروکنترلرها دارای ADC داخلی هستند و همچنین برای راحتی استفاده ماژول های آماده با قابلیت اتصال چندین ADC تولید و طراحی شده است. تا اینجا متوجه شدیم مبدل ADC، یک مبدل دیتا است که با رمزگذاری سیگنال آنالوگ در کد باینری، به بردهای امبدد مثل رزبری پای، آردوینو اجازه می دهد تا با دنیای واقعی ارتباط برقرار کنند. در دنیای واقعی ، سیگنال های آنالوگ به طور مداوم مقادیری را تغییر می دهند که از منابع و سنسورهای مختلفی گرفته می شوند که می توانند صدا ، نور ، دما یا حرکت را اندازه گیری کنند و بسیاری از سیستم های دیجیتال با اندازه گیری سیگنال های آنالوگ از این مبدل ها با محیط خود در ارتباط هستند. در حالی که سیگنال های آنالوگ به صورت مداوم دیتا را تغییر میدهند و از سمتی دیگر بردهای دیجیتال با سیگنال باینری کار می کنند که فقط دارای دو حالت گسسته هستند ، منطق “۱” (HIGH) یا منطق “۰” (LOW). یا یک یا صفر اولین نکته ای که همیشه برای یادگیری از آن استفاده میشود. دنیای دیجیتال فقط عدد ۱ یعنی فعال و عدد صفر یعنی غیرفعال را درک میکند. اما در دنیای آنالوگ بین ۰ و ۱ هزاران عدد وجود دارد که توسط سیگنال های آنالوگ قابل تفکیک است.
در این پروژه توسط یک ماژول پتانسیومتر خطی آنالوگ مقادیر ولتاژ را در هر لحظه دریافت کرده و به یک عدد قابل فهم برای میکرو کنترلر تبدیل میکنیم. برای اینکار از ۵ ال ای دی LED استفاده میکنیم. شدت نور هر ال ای دی با تغییر خطی پتانسیومتر افزایش و کاهش یافته و در خروجی قابل مشاهده است.
پایه های ADC رزبری پای پیکو
رابط ADC در RP2040 فاقد رفرنس است و به همین دلیل از تغذیه ۳٫۳ ولت داخلی تراشه استفاده میکند. در پیکو پایه ADC_AVDD از SMPS 3.3 ولت با استفاده از فیلتر R-C تغذیه میشود. ADC جریان زیادی در مدار مصرف میکند تا جایی که در صورت غیرفعال بودن حسگر دما تا حدود ۱۵۰ میلی آمپر جریان کشیده و به همین دلیل جریان ماسفت برابر ۱۵۰μA*200 = ~30mV خواهد بود. با استفاده از تغییر مقاومت بین پایه VREF و پایه ۳٫۳ ولت میتواند تا حدودی ماسفت و نویز ایجاد شده را کاهش دهد. برای استفاده از پایه های ADC کافیست از پین های GP26-GP27 و GP28 استفاده کنید.
کدنویسی با میکروپایتون
برای اجرای پروژه adc رزبری پای از میکروپایتون استفاده میکنیم. میکروپایتون زبان برنامه نویسی توسعه یافته توسط پایتون برای میکروکنترلرها است و بسیاری از IDE ها از بردهای میکروکنترلر مانند Raspberry Pi و ESP ها از میکروپاتیون برای ارتباط نرم افزاری بهره میبرند. برای کدنویسی از تمامی IDE هایی که از میکروپایتون و تراشه RP2040 پشتیبانی میکنند، میتوانید استفاده کنید.
برای کدنویسی adc رزبری پای به دستورات PWM در پایتون نیاز داریم که روش کار ساده است.
استفاده از ماژول machine
ماژول machine از چندین دستورات خاص برای استفاده ی سخت افزاری از بردها تشکیل شده است. اکثر توابع موجود در این ماژول امکان دستیابی مستقیم و بدون محدودیت به بلوک های سخت افزاری را در سیستم فراهم می کند CPU ، تایمرها و برای اجرای پروژه هایی که برای تعریف ورودی و خروجی ها به آن نیاز داریم، بسیار کاربردی است. از آبجکت Pin در کدنویسی ماژول برای کنترل پایه های I/O استفاده میشود.
PWM Pulse Width Modulation
مدولاسیون پهنای باند PWM روشی برای به دست آوردن خروجی آنالوگ روی پین دیجیتال است. PWM به دو پارامتر فرکانس و دیوتی سایکل وابسته است. در PWM عرض سیگنال مدام در حال تغییر است اما فرکانس ثابت ادامه میدهد. در صورتیکه سیگنال PWM در یک فرکانس ثابت کار کند، با تغییر زمان، زمانیکه دامنه سیگنال High باشد، زمان دامنه سیگنال پایین را تغییر داده میشود. به این بازه ی زمانی پهنای پالس گفته میشود. پهنای پالس که وابسته به دوره ی سیگنال است، دیوتی سایکل Duty Cycle گفته می شود. دوره زمانی سیگنال (T) که به پریود زمانی نیز گفته می شود از لحظه افزایش پله ی سیگنال موج مربعی شروع شده و به میزان شروع فزایش بعدی طول می کشد. برای استفاده از PWM در پکیج Machine از دستور زیر استفاده کنید. در این آموزش ۵ ال ای دی را توسط دستورات PWM شدت نور آن ها را در بازهی زمانی مشخص تعریف میکنیم.
برای استفاده از PWM برای یک پایه در ابتدا یک آبجکت برای پایه میسازیم:
>>> import machine >>> p12 = machine.Pin(12)
سپس یک آبجکت PWM میسازیم:
>>> pwm12 = machine.PWM(p12)
همچنین میتوانید توسط دستورات زیر فرکانس و دیوتی سایکل را تعریف کنید:
>>> pwm12.freq(500) >>> pwm12.duty(512)
در صورتیکه بخواهید حد بالا و پایین را برای PWM تعریف کنید:
>>> pwm12 PWM(12, freq=500, duty=512
کد میکروپایتون PWM
کد میکروپایتون را به نرم افزار Thonny انتقال داده و Run کنید.
from machine import Pin, PWM, ADC pwm = PWM(Pin(15)) pwm1 = PWM(Pin(14)) pwm2 = PWM(Pin(13)) pwm3 = PWM(Pin(12)) pwm4 = PWM(Pin(11)) adc = ADC(Pin(26)) pwm.freq(1000) while True: duty = adc.read_u16() pwm.duty_u16(duty) pwm1.duty_u16(duty) pwm2.duty_u16(duty) pwm3.duty_u16(duty) pwm4.duty_u16(duty)
تحلیل کد پایتون
برای هر خروجی که در این پروژه از ۵ ال ای دی استفاده شده است، به ترتیب توابع PWM برای پایتون که یاد دادیم را همراه با آبجکت مینویسیم.
pwm = PWM(Pin(15)) pwm1 = PWM(Pin(14)) pwm2 = PWM(Pin(13)) pwm3 = PWM(Pin(12)) pwm4 = PWM(Pin(11))
در مرحله ی بعدی پایه ی ADC را تعریف میکنیم.
adc = ADC(Pin(26))
سپس فرکانس را به دلخواه انتخاب کنید.
pwm.freq(1000)
نوبت به دیوتی سایکل رسیده است. برای هر خروجی یک دیوتی سایکل مجزا نوشته شده است.
while True: duty = adc.read_u16() pwm.duty_u16(duty) pwm1.duty_u16(duty) pwm2.duty_u16(duty) pwm3.duty_u16(duty) pwm4.duty_u16(duty)
روش اجرا
طبق جدول زیر اتصالات برای adc رزبری پای را انجام دهید. سپس ولوم را به صورت افزایشی و کاهشی تغییر دهید. تمام ال ای دی ها روی یک موج PWM از HIGH به LOW تغییر وضعیت میکند و شدت نور از کم به زیاد تغییر خواهد کرد.
اتصالات رزبری پای پیکو
در این پروژه به دلخواه از ماژول ولوم خطی ۱۰ کیلو استفاده کرده ام. اما شما میتوانید از هر پتانسیومتر و ولومی که در اختیار دارید، استفاده کنید.
وسایل مورد نیاز
رزبری پای پیکو Raspberry Pi Pico
جمع بندی لیدی پای
اگر هیچ دانشی از زبان برنامه پایتون ندارید، با یک بار خواندن عمیق این آموزش کاملا به مفاهیم و دستورات پایتون مسلط خواهید شد. در این پروژه با دستورات پایتون برای فراخوانی PWM آشنا خواهید شد. هر خط از برنامه تحلیل شده است و کافیست آن ها را یک بار در IDE تایپ کنید تا به درک عمیق تری از نوشتن کدها برسید. از کاربرهای این پروژه به ساخت چراغ ال ای دی با قابلیت کم و زیاد کردن شدت نور اشاره کرد.
بابت توضیحات کامل از شما ممنونم
با سلام
سپاس از همراهی شما کاربر گرامی
امیدوارم آموزش ها مفید واقع شود.
با سلام
این ولومی که در آموزش کار کردید چه تفاوتی با ولوم های عادی سه پایه داره؟
با سلام
ولوم کشویی به صورت دوکاناله است و دو کانال ADC را میتوانید به صورت مجزا کنترل کنید.
سلام ممنون از آموزش خوبتون
من وقتی وصل میکنم ماکزیمم رو درست میزنه اما مینیمم رو صفر نمیاره و متغییره گاهی ۱۶۰ میزنه گاهی ۸۵ و دائم تغییر میکنه. این دلیلش چیه؟
یه سوال دیگه هم اینکه آیا باید مقاومتی بین ولوم و پیکو باشه؟من مستقیم وصل کردم.
* از این ولوم سه پایه ۱۰ کیلو هست
با سلام
ممکن است نویز در مدار وجود داشته باشد کابل اتصالی روش اتصال ولوم همگی تاثیر گذار خواهد بود.
سلام و خسته نباشید
ممنون از سایت خوبتون
میشه این پایه های رزبری پای رو به صورت فارسی بگید که هر کدام چه کار میکنند؟
ممنون
با سلام
خیر این مورد امکان پذیر نیست . در هر آموزش پایه ها معرفی شده است.