فهرست مطالب:

ولتاژهای آنالوگ فوق سریع از آردوینو: 10 مرحله (همراه با تصاویر)
ولتاژهای آنالوگ فوق سریع از آردوینو: 10 مرحله (همراه با تصاویر)

تصویری: ولتاژهای آنالوگ فوق سریع از آردوینو: 10 مرحله (همراه با تصاویر)

تصویری: ولتاژهای آنالوگ فوق سریع از آردوینو: 10 مرحله (همراه با تصاویر)
تصویری: Arduino Tutorial 26 - Using Joystick with Arduino Taking Action | SunFounder's ESP32 IoT Learnig kit 2024, جولای
Anonim
Image
Image

این دستورالعمل نحوه ایجاد تغییرات بسیار سریع ولتاژ آنالوگ از یک آردوینو و یک جفت مقاومت و خازن ساده را نشان می دهد. یکی از کاربردهایی که در آن مفید است ، تولید گرافیک روی یک اسیلوسکوپ است. چندین پروژه دیگر نیز این کار را انجام داده اند. Johngineer یک درخت کریسمس ساده را با استفاده از مدولاسیون عرض پالس (PWM) نشان می دهد. برخی دیگر با استفاده از نردبان مقاومت یا استفاده از تراشه مبدل دیجیتال به آنالوگ در آن پروژه پیشرفت کرده اند.

استفاده از PWM باعث چشمک زدن زیاد می شود ، در حالی که استفاده از نردبان مقاومت یا مبدل دیجیتال به آنالوگ به پین و اجزای خروجی بیشتری نیاز دارد که ممکن است به آسانی در دسترس نباشند. مداری که من استفاده می کنم همان مقاومت و خازن ساده مرده است که در نسخه نمایشی درخت کریسمس استفاده می شود ، اما با چشمک زدن کمتری عمل می کند.

ابتدا ، شما را در فرایند ساخت مدار راهنمایی می کنم. سپس به شما آموزش می دهم که چگونه تصویر خود را اضافه کنید. در نهایت ، من نظریه ای را در مورد اینکه چه چیزی باعث سریعتر شدن آن می شود ، معرفی می کنم.

اگر این دستورالعمل را دوست داشتید ، لطفاً به آن رای دهید!:)

مرحله 1: ساختن مدار

ساختن مدار
ساختن مدار

برای ساختن مدار به موارد زیر نیاز دارید:

الف) یک آردوینو بر اساس Atmel 16MHz ATmega328P ، مانند Arduino Uno یا Arduino Nano.

ب) دو مقاومت با مقدار R که حداقل 150Ω باشد.

ج) دو خازن با ارزش C به طوری که C = 0.0015 / R ، مثال:

  • R = 150Ω و C = 10µµ
  • R = 1.5kΩ و C = 1 µµ
  • R = 15kΩ و C = 100nF
  • R = 150kΩ و C = 10nF

دلایل انتخاب این مقادیر دو چیز است. در درجه اول ، ما می خواهیم جریان را در پین های آردوینو زیر حداکثر جریان نامی 40mA نگه داریم. هنگام استفاده از ولتاژ تغذیه آردوینو 5 ولت ، استفاده از مقدار 150Ω جریان را به 30mA محدود می کند. مقادیر بزرگتر R جریان را کاهش می دهد و بنابراین قابل قبول است.

محدودیت دوم این است که ما می خواهیم زمان را ثابت نگه داریم ، که حاصل R و C است ، برابر با 1.5 میلی ثانیه. نرم افزار به طور خاص برای این زمان ثابت تنظیم شده است. در حالی که امکان تنظیم مقادیر R و C در نرم افزار وجود دارد ، محدوده محدودی وجود دارد که در اطراف آن کار خواهد کرد ، بنابراین اجزای سازنده را تا حد ممکن نزدیک به نسبت پیشنهادی انتخاب کنید.

پس از این که به شما نحوه مونتاژ مدار نمایش را نشان دادم ، توضیحات دقیق تری در مورد اهمیت ثابت RC در بخش نظریه داده می شود.

مرحله 2: تنظیم اسیلوسکوپ

راه اندازی اسیلوسکوپ
راه اندازی اسیلوسکوپ

تظاهرات نیاز به یک اسیلوسکوپ دارد که روی حالت X/Y تنظیم شده است. سرنخ های آزمون باید همانطور که در نمودارها نشان داده شده است ، متصل شوند. اسیلوسکوپ شما با من متفاوت خواهد بود ، اما من مراحل لازم را برای تنظیم حالت X/Y روی واحدم انجام می دهم:

الف) رفت و برگشت افقی را توسط کانال B (محور X) کنترل کنید.

ب) اسیلوسکوپ را روی حالت دو کاناله تنظیم کنید.

ج) ولت/div را روی هر دو کانال تنظیم کنید تا بتواند ولتاژهای 0 تا 5 ولت را نمایش دهد. من معدن را روی 0.5V/div تنظیم کردم.

د) حالت اتصال را روی DC در هر دو کانال تنظیم کنید.

ه) موقعیت X و Y را طوری تنظیم کنید که هنگام خاموش شدن آردوینو نقطه در گوشه سمت چپ پایین صفحه قرار گیرد.

مرحله 3: نرم افزار را بارگیری و اجرا کنید

Image
Image

نرم افزار را از مخزن Fast Vector Display For Arduino بارگیری کنید. این نرم افزار تحت GNU Affero Public License v3 دارای مجوز است و می تواند آزادانه تحت شرایط آن مجوز استفاده و اصلاح شود.

فایل "fast-vector-display-arduino.ino" را در Arduino IDE باز کرده و در Arduino خود بارگذاری کنید. لحظه ای ، انیمیشن "سال نو مبارک" را روی صفحه اسیلوسکوپ خود مشاهده خواهید کرد.

من این پروژه را به عنوان یک هکتون شخصی در هفته های منتهی به کریسمس توسعه دادم ، بنابراین یک پیام با موضوع کریسمس و سال نو وجود دارد که می توانید با تغییر متغیر PATTERN در کد مشاهده کنید.

مرحله 4: طراحی سفارشی خود را ایجاد کنید

درک کنید که چرا PWM اینقدر کند است
درک کنید که چرا PWM اینقدر کند است

اگر می خواهید نقاشی خود را ایجاد کنید ، می توانید مختصات نقطه را در طرح آردوینو در خطی که USER_PATTERN را تعریف می کند بچسبانید.

دریافتم که Inkscape یک ابزار بسیار خوب برای ایجاد نقاشی سفارشی است:

  1. با استفاده از یک فونت بزرگ و پررنگ مانند Impact متن ایجاد کنید.
  2. شی متن را انتخاب کرده و از منوی "مسیر" "Object to Path" را انتخاب کنید.
  3. حروف جداگانه را انتخاب کرده و با هم تداخل داشته باشید تا شکل متصل به هم ایجاد شود
  4. "Union" را از منوی "مسیر" انتخاب کنید تا آنها در یک منحنی واحد ترکیب شوند.
  5. اگر در هر حرف حفره ای وجود دارد ، با کشیدن یک مستطیل با ابزار مستطیل ، یک شکاف کوچک برش داده و با استفاده از ابزار "Difference" از کانتور جدا کنید.
  6. برای نمایش گره ها روی مسیر دوبار کلیک کنید.
  7. مستطیل همه گره ها را انتخاب کرده و روی ابزار "Make selected nodes corner" کلیک کنید.
  8. فایل SVG را ذخیره کنید.

نکته مهم این است که نقاشی شما باید دارای یک مسیر بسته و بدون سوراخ باشد. مطمئن شوید طرح شما کمتر از 130 امتیاز دارد.

مرحله 5: مختصات فایل SVG را در IDE آردوینو جایگذاری کنید

  1. فایل SVG را باز کرده و مختصات را کپی کنید. اینها در عنصر "path" جاسازی می شوند. اولین جفت مختصات را می توان نادیده گرفت. آنها را با 0 ، 0 جایگزین کنید.
  2. درست پس از "#تعریف USER_PATTERN" مختصات را در طرح آردوینو داخل براکت ها بچسبانید.
  3. همه فاصله ها را با کاما جایگزین کنید ، در غیر این صورت با خطای کامپایل مواجه خواهید شد. ابزار "جایگزینی و پیدا کردن" ممکن است مفید باشد.
  4. کامپایل و اجرا کنید!
  5. اگر مشکلی دارید ، کنسول سریال را تماشا کنید تا خطا رخ ندهد. به طور خاص ، اگر الگوی شما دارای نقاط زیادی برای بافر داخلی باشد ، پیام هایی را مشاهده خواهید کرد. در چنین مواردی ، تصویر سوسو زدن بیش از حد را نشان می دهد.

مرحله 6: درک کنید چرا PWM اینقدر کند است

برای شروع ، اجازه دهید رفتار خازن را در حال شارژ مرور کنیم.

خازنی که به منبع ولتاژ Vcc متصل است ، بر اساس منحنی نمایی ولتاژ خود را افزایش می دهد. این منحنی بدون علامت است ، به این معنی که با نزدیک شدن به ولتاژ مورد نظر سرعت آن کاهش می یابد. برای همه اهداف عملی ، ولتاژ پس از 5 ثانیه RC "به اندازه کافی نزدیک" است. RC "ثابت زمان" نامیده می شود. همانطور که قبلاً دیدیم ، این محصول مقادیر مقاومت و خازن در مدار شما است. مشکل این است که 5 RC زمان نسبتاً طولانی برای به روز رسانی هر نقطه در یک صفحه نمایش گرافیکی است. این منجر به سوسو زدن زیاد می شود!

وقتی از مدولاسیون عرض پالس (PWM) برای شارژ خازن استفاده می کنیم ، وضعیت بهتری نداریم. با PWM ولتاژ به سرعت بین 0V و 5V تغییر می کند. در عمل ، این بدان معناست که ما به سرعت بین فشار دادن بار به داخل خازن و کمی بیرون آوردن آن را به طور متناوب جایگزین می کنیم - این فشار و کشش بیشتر شبیه تلاش برای دویدن در یک ماراتن با برداشتن یک گام بزرگ به جلو و سپس یک قدم به عقب است. دوباره و دوباره.

وقتی همه چیز را به طور متوسط محاسبه می کنید ، رفتار شارژ خازن با استفاده از PWM دقیقاً شبیه به این است که از ولتاژ ثابت Vpwm برای شارژ خازن استفاده کرده باشید. هنوز حدود 5 ثانیه طول می کشد تا به اندازه کافی به ولتاژ مورد نظر نزدیک شویم.

مرحله 7: از a به B ، Tad Bit Faster بروید

از a به B ، Tad Bit Faster سریعتر بروید
از a به B ، Tad Bit Faster سریعتر بروید

فرض کنید خازنی داریم که قبلاً تا Va شارژ شده است. فرض کنید از () analogWrite برای نوشتن مقدار جدید b استفاده می کنیم. حداقل زمانی که باید منتظر بمانید تا ولتاژ Vb به دست آید چقدر است؟

اگر 5 ثانیه RC را حدس زده اید ، بسیار عالی است! با انتظار 5 ثانیه RC ، خازن تقریباً به Vb شارژ می شود. اما اگر بخواهیم ، می توانیم کمی کمتر منتظر بمانیم.

به منحنی شارژ نگاه کنید. می بینید ، خازن قبلاً در Va بود. این بدان معناست که ما مجبور نیستیم زمان t_a را منتظر بمانیم. ما فقط باید خازن را از صفر شارژ می کردیم.

بنابراین با عدم انتظار آن زمان ، شاهد بهبود هستیم. زمان t_ab در واقع کمی کوتاهتر از 5 RC است.

اما صبر کنید ، ما می توانیم خیلی بهتر عمل کنیم! تمام فضای بالای v_b را ببینید. این تفاوت بین Vcc ، حداکثر ولتاژ موجود برای ما و Vb است که قصد داریم به آن برسیم. آیا می بینید که چگونه آن ولتاژ اضافی می تواند به ما کمک کند خیلی سریعتر به جایی که می خواهیم برسیم؟

مرحله 8: با یک توربو شارژر از a به B بروید

با یک توربو شارژر از a به B برسید!
با یک توربو شارژر از a به B برسید!

درست است. به جای استفاده از PWM در ولتاژ هدف V_b ، ما آن را در یک Vcc ثابت برای مدت زمان بسیار بسیار کوتاهتری نگه می داریم. من به این روش توربو شارژر می گویم و به سرعت ما را به جایی می رساند که می خواهیم! پس از تاخیر زمانی (که باید محاسبه کنیم) ، با تغییر حالت به PWM در V_b ، ترمزها را می کوبیم. این باعث می شود ولتاژ نتواند از هدف عبور کند.

با استفاده از این روش ، می توان ولتاژ خازن را از V_a به V_b در کسری از زمان نسبت به استفاده از PWM تغییر داد. اینجوری جاهایی میگیری عزیزم!

مرحله 9: کد را درک کنید

کد را درک کنید
کد را درک کنید

ارزش یک تصویر هزار کلمه است ، بنابراین نمودار داده ها و عملیات انجام شده در کد را نشان می دهد. از چپ به راست:

  • داده های گرافیکی در PROGMEM (یعنی حافظه فلش) به عنوان فهرستی از نقاط ذخیره می شود.
  • هر ترکیبی از عملیات ترجمه ، مقیاس بندی و چرخش به یک ماتریس تبدیل وابسته ترکیب می شود. این کار یکبار در ابتدای هر فریم متحرک انجام می شود.
  • نقاط یک به یک از داده های گرافیکی خوانده می شوند و هر یک در ماتریس تبدیل ذخیره شده ضرب می شوند.
  • نقاط تغییر یافته از طریق یک الگوریتم قیچی تغذیه می شوند که هر نقطه را خارج از منطقه قابل مشاهده برش می دهد.
  • با استفاده از جدول جستجوی تاخیر RC ، نقاط به ولتاژهای رانندگی و تاخیرهای زمانی تبدیل می شوند. جدول جستجوی تأخیر RC در EEPROM ذخیره می شود و می تواند مجدداً برای چندین اجرا از کد استفاده شود. در هنگام راه اندازی ، جدول جستجوی RC برای صحت بررسی می شود و هر مقدار نادرست به روز می شود. استفاده از EEPROM باعث ذخیره حافظه RAM با ارزش می شود.
  • ولتاژها و تاخیرهای رانندگی روی قاب غیر فعال در بافر فریم نوشته می شود. بافر فریم شامل فضایی برای یک قاب فعال و یک قاب غیرفعال است. هنگامی که یک فریم کامل نوشته می شود ، قاب غیرفعال فعال می شود.
  • یک روال سرویس وقفه به طور مداوم با خواندن مقادیر ولتاژ و تأخیر در بافر قاب فعال دوباره تصویر را ترسیم می کند. بر اساس آن مقادیر ، چرخه های وظیفه پین های خروجی را تنظیم می کند. تایمر 1 برای اندازه گیری تاخیر زمانی تا چند نانو ثانیه با دقت استفاده می شود ، در حالی که تایمر 2 برای کنترل چرخه وظیفه پین ها استفاده می شود.
  • پین با بیشترین تغییر در ولتاژ همیشه "با توربو شارژ می شود" با چرخه عملکرد صفر یا 100 ، سریعترین زمان شارژ یا تخلیه را فراهم می کند. پین با تغییر کمتر در ولتاژ با یک چرخه وظیفه ای انتخاب می شود که با زمان انتقال اولین پین مطابقت داشته باشد. این تطابق زمان برای اطمینان از ترسیم مستقیم خطوط بر روی اسیلوسکوپ مهم است.

مرحله 10: با سرعت عالی ، مسئولیت بزرگی به همراه دارد

از آنجا که این روش بسیار سریعتر از PWM است ، چرا analogWrite () از آن استفاده نمی کند؟ خوب ، زیرا فقط PWM برای اکثر برنامه ها به اندازه کافی خوب است و بسیار بخشنده تر است. با این حال ، روش "توربو شارژر" نیاز به کدگذاری دقیق دارد و فقط برای موارد خاص مناسب است:

  1. به زمان بندی بسیار حساس است. پس از رسیدن به سطح ولتاژ هدف ، پین رانندگی باید بلافاصله به حالت معمولی PWM تغییر کند تا از ولتاژ هدف جلوگیری نشود.
  2. این نیاز به دانش RC دارد ، بنابراین این مقادیر باید از قبل وارد شوند. با مقادیر نادرست ، زمان بندی اشتباه و ولتاژها نادرست خواهد بود. با PWM معمولی ، این تضمین وجود دارد که پس از مدتی بر روی ولتاژ صحیح قرار می گیرید ، حتی اگر ثابت RC مشخص نباشد.
  3. محاسبه فاصله زمانی دقیق برای شارژ خازن نیاز به معادلات لگاریتمی دارد که برای محاسبه زمان واقعی در آردوینو بسیار کند است. اینها باید قبل از هر فریم متحرک از قبل محاسبه شده و در جایی در حافظه ذخیره شوند.
  4. برنامه هایی که با این روش سروکار دارند باید با این واقعیت که تأخیرها بسیار غیر خطی هستند (در واقع نمایی هستند) مقابله کنند. رسیدن به ولتاژهای هدف نزدیک Vcc یا GND بیشتر از ولتاژهای نزدیک به نقطه وسط طول می کشد.

برای غلبه بر این محدودیت ها ، کد گرافیکی برداری من کارهای زیر را انجام می دهد:

  1. از تایمر 1 در 16 کیلوهرتز و روال سرویس وقفه برای دستکاری و زمان بندی دقیق خروجی استفاده می کند.
  2. برای استفاده از آن باید مقدار مشخصی از ثابت زمان RC را انتخاب کرد که این امر باعث محدود شدن انتخاب خازن و مقاومت می شود.
  3. این تاخیر زمانی را برای همه نقاط در یک قاب متحرک در یک بافر حافظه ذخیره می کند. این بدان معناست که روشی که زمان تاخیرها را با سرعت بسیار کندتری نسبت به روال سرویس وقفه ای که پین های خروجی را به روز می کند ، محاسبه می کند. هر قاب مشخصی ممکن است چندین ده بار رنگ آمیزی شود تا مجموعه جدیدی از تاخیرها برای قاب بعدی آماده استفاده شود.
  4. استفاده از بافر حافظه محدودیتی را در تعداد نقاط قابل ترسیم در هر فریم ایجاد می کند. من از یک کدگذاری فضایی کارآمد برای حداکثر استفاده از RAM موجود استفاده می کنم ، اما هنوز محدود به 150 نقطه است. فراتر از صد نقطه یا بیشتر ، به هر حال صفحه نمایش شروع به سوسو زدن می کند ، بنابراین این یک موضوع بحث برانگیز است!

توصیه شده: