DAC مخفف تبدیل دیجیتال به آنالوگ است . در این مقاله به بررسی کدهایی می پردازیم که مایکل اسمیت برای DAC مبتنی بر PWM ایجاد کرده است. من کد او را تغییر دادم تا سایر گزینه های DAC را بتوان امتحان کرد. من DAC 8 بیتی PWM را با R2R DAC در تعداد بیت های مختلف مقایسه می کنم. ممکن است از صدای خوب DAC 4 بیتی تعجب کنید. این مقاله شامل چندین نمونه صدا برای گزینه های مختلف DAC است و برخی انتزاع نرم افزار را نشان می دهد که امکان چندین گزینه DAC را فراهم می کند.
این مقاله بخشی از سری Arduino Sound Generation است. تصمیم گرفتم تمایز قسمت 1، 2، 3 را حذف کنم زیرا بسیاری از محتوا به مقالات قبلی وابسته نیست.
مقالات مرتبط:
- استفاده از PWM برای انجام لینک صدا
- استفاده از تایمر لینک را قطع می کند
- پخش لینک ملودی
- آماده شدن برای پروژه های صوتی لینک
- ایجاد صدا، چه گزینه هایی وجود دارد؟ ارتباط دادن
از بین تمام روش های مختلف تولید صدا ، روش DAC به نظر من همه کاره ترین است. همانطور که قبلا ذکر شد DAC یک نام کوتاه رایج برای مبدل دیجیتال به آنالوگ است. اساسا یک مقدار باینری/دیجیتال به مقدار آنالوگ/ولتاژ تبدیل می شود. یک DAC 8 بیتی یک مقدار باینری در محدوده 0 تا 255 را به یک ولتاژ آنالوگ از 0 تا 5 ولت تبدیل می کند. محدوده دقیق ولتاژ تبدیل به پیکربندی DAC بستگی دارد، اما برای اکثر چیزهایی که با آنها بازی خواهیم کرد، 0 تا 5 ولت کار می کند.
بایاس DAC برای نوسان +/-
از آنجایی که سیگنالهای آنالوگ، بهویژه صدا، نیاز به نوسان مثبت و منفی در حدود 0 ولت دارند، اغلب DAC را بایاس میکنیم تا مقیاس متوسط 0 ولت در نظر گرفته شود. اگر خروجی DAC از 0 تا 5 ولت باشد، معمولا سیگنال ها را بایاس می کنیم تا 2.5 ولت به 0 ولت تبدیل شود. اگر سیگنالهای خروجی خود را طوری تولید کنیم که نیم مقیاس 2.5 ولت باشد، میتوانیم خروجی را AC جفت کنیم تا یک نوسان 2.5 ولت +/- داشته باشیم.
تعصب نیم مقیاس ممکن است کمی گیج کننده باشد، اما واقعاً وقتی ایده کلی را به دست آورید، آسان است. ما فقط مقیاس 1/2 را صفر می نامیم تا اعداد بالای 1/2 مثبت و زیر منفی باشند. برای یک مبدل 8 بیتی می توانیم از MSB به عنوان یک بیت علامت استفاده کنیم تا این اتفاق بیفتد. در نظر بگیرید که اعشار 128 به صورت دودویی 10000000 است. توجه داشته باشید که MSB تنظیم شده است و این اساساً نیمی از محدوده 0-255 ممکن است. MSB را به عنوان یک بیت علامت در نظر بگیرید، یکی برای مقادیر مثبت و 0 یا منفی است.
با استفاده از این بایاس مقیاس 1/2، میتوانیم هر عدد دیجیتالی را که ممکن است دادههای صوتی را نشان دهد، به یک مقدار برای بارگذاری در DAC تبدیل کنیم. اولین مرحله این است که عدد را به محدوده +/-127 تبدیل کرده و 128 را به آن اضافه کنید. در این مثال، نسخه آنالوگ از 0 به 5 ولت با نقطه صفر اصلی روی 2.5 ولت تنظیم می شود. ما می توانیم بایاس 2.5 ولتی را در سخت افزار با یک خازن سری ساده حذف کنیم.
کوپلینگ تهویه مطبوع
خازن سری حتی در اکثر برنامه ها مورد نیاز نیست. برای مثال من از ورودی خط کارت صدای خود برای انجام این آزمایش ها استفاده می کنم. این ورودی یک خازن سری دارد. خازن سری برای تامین کوپلینگ A/C استفاده می شود. این فقط به این معنی است که سیگنال به طور مساوی در حدود 0 ولت نوسان می کند. نوسان ولتاژ +/- در حدود متوسط سطح DC توسط خازن اعمال می شود. البته برای خازن سری پاسخ فرکانسی وجود دارد اما مقدار خازن معمولا به اندازه کافی بالاست تا برای محدوده فرکانس صوتی مشکلی ایجاد نکند.
فیلتر کردن خروجی DAC
این نمودار مداری را که من بین خروجی های مختلف DAC و ورودی کارت صدای رایانه شخصی خود استفاده کردم نشان می دهد. مقاومت سری و خازن به زمین یک فیلتر ساده را تشکیل می دهند تا نویز فرکانس بالا ناشی از سوئیچینگ DAC فوراً بین مقادیر ولتاژ را از بین ببرد. اجزای فرکانس بالا را حذف می کند. مقاومت متغیر 100K (POT) به من امکان می دهد سطح ولتاژ خروجی را برای هر DAC تنظیم کنم. ورودی خط باید در محدوده 1 ولت پیک به اوج یا +0.5 تا 0.5- نگه داشته شود. از آنجایی که کارت صدا دارای کوپلینگ A/C است، من فقط باید دامنه را با استفاده از این POT به عنوان تقسیم کننده ولتاژ تنظیم کنم. همچنین توجه داشته باشید که من هر دو ورودی سمت راست و چپ را به خروجی فیلتر شده وصل کردم.