فهرست مطالب:
- مرحله 1: ساختن مدار
- مرحله 2: تنظیم اسیلوسکوپ
- مرحله 3: نرم افزار را بارگیری و اجرا کنید
- مرحله 4: طراحی سفارشی خود را ایجاد کنید
- مرحله 5: مختصات فایل SVG را در IDE آردوینو جایگذاری کنید
- مرحله 6: درک کنید چرا PWM اینقدر کند است
- مرحله 7: از a به B ، Tad Bit Faster بروید
- مرحله 8: با یک توربو شارژر از a به B بروید
- مرحله 9: کد را درک کنید
- مرحله 10: با سرعت عالی ، مسئولیت بزرگی به همراه دارد
تصویری: ولتاژهای آنالوگ فوق سریع از آردوینو: 10 مرحله (همراه با تصاویر)
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:56
این دستورالعمل نحوه ایجاد تغییرات بسیار سریع ولتاژ آنالوگ از یک آردوینو و یک جفت مقاومت و خازن ساده را نشان می دهد. یکی از کاربردهایی که در آن مفید است ، تولید گرافیک روی یک اسیلوسکوپ است. چندین پروژه دیگر نیز این کار را انجام داده اند. 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: نرم افزار را بارگیری و اجرا کنید
نرم افزار را از مخزن Fast Vector Display For Arduino بارگیری کنید. این نرم افزار تحت GNU Affero Public License v3 دارای مجوز است و می تواند آزادانه تحت شرایط آن مجوز استفاده و اصلاح شود.
فایل "fast-vector-display-arduino.ino" را در Arduino IDE باز کرده و در Arduino خود بارگذاری کنید. لحظه ای ، انیمیشن "سال نو مبارک" را روی صفحه اسیلوسکوپ خود مشاهده خواهید کرد.
من این پروژه را به عنوان یک هکتون شخصی در هفته های منتهی به کریسمس توسعه دادم ، بنابراین یک پیام با موضوع کریسمس و سال نو وجود دارد که می توانید با تغییر متغیر PATTERN در کد مشاهده کنید.
مرحله 4: طراحی سفارشی خود را ایجاد کنید
اگر می خواهید نقاشی خود را ایجاد کنید ، می توانید مختصات نقطه را در طرح آردوینو در خطی که USER_PATTERN را تعریف می کند بچسبانید.
دریافتم که Inkscape یک ابزار بسیار خوب برای ایجاد نقاشی سفارشی است:
- با استفاده از یک فونت بزرگ و پررنگ مانند Impact متن ایجاد کنید.
- شی متن را انتخاب کرده و از منوی "مسیر" "Object to Path" را انتخاب کنید.
- حروف جداگانه را انتخاب کرده و با هم تداخل داشته باشید تا شکل متصل به هم ایجاد شود
- "Union" را از منوی "مسیر" انتخاب کنید تا آنها در یک منحنی واحد ترکیب شوند.
- اگر در هر حرف حفره ای وجود دارد ، با کشیدن یک مستطیل با ابزار مستطیل ، یک شکاف کوچک برش داده و با استفاده از ابزار "Difference" از کانتور جدا کنید.
- برای نمایش گره ها روی مسیر دوبار کلیک کنید.
- مستطیل همه گره ها را انتخاب کرده و روی ابزار "Make selected nodes corner" کلیک کنید.
- فایل SVG را ذخیره کنید.
نکته مهم این است که نقاشی شما باید دارای یک مسیر بسته و بدون سوراخ باشد. مطمئن شوید طرح شما کمتر از 130 امتیاز دارد.
مرحله 5: مختصات فایل SVG را در IDE آردوینو جایگذاری کنید
- فایل SVG را باز کرده و مختصات را کپی کنید. اینها در عنصر "path" جاسازی می شوند. اولین جفت مختصات را می توان نادیده گرفت. آنها را با 0 ، 0 جایگزین کنید.
- درست پس از "#تعریف USER_PATTERN" مختصات را در طرح آردوینو داخل براکت ها بچسبانید.
- همه فاصله ها را با کاما جایگزین کنید ، در غیر این صورت با خطای کامپایل مواجه خواهید شد. ابزار "جایگزینی و پیدا کردن" ممکن است مفید باشد.
- کامپایل و اجرا کنید!
- اگر مشکلی دارید ، کنسول سریال را تماشا کنید تا خطا رخ ندهد. به طور خاص ، اگر الگوی شما دارای نقاط زیادی برای بافر داخلی باشد ، پیام هایی را مشاهده خواهید کرد. در چنین مواردی ، تصویر سوسو زدن بیش از حد را نشان می دهد.
مرحله 6: درک کنید چرا PWM اینقدر کند است
برای شروع ، اجازه دهید رفتار خازن را در حال شارژ مرور کنیم.
خازنی که به منبع ولتاژ Vcc متصل است ، بر اساس منحنی نمایی ولتاژ خود را افزایش می دهد. این منحنی بدون علامت است ، به این معنی که با نزدیک شدن به ولتاژ مورد نظر سرعت آن کاهش می یابد. برای همه اهداف عملی ، ولتاژ پس از 5 ثانیه RC "به اندازه کافی نزدیک" است. RC "ثابت زمان" نامیده می شود. همانطور که قبلاً دیدیم ، این محصول مقادیر مقاومت و خازن در مدار شما است. مشکل این است که 5 RC زمان نسبتاً طولانی برای به روز رسانی هر نقطه در یک صفحه نمایش گرافیکی است. این منجر به سوسو زدن زیاد می شود!
وقتی از مدولاسیون عرض پالس (PWM) برای شارژ خازن استفاده می کنیم ، وضعیت بهتری نداریم. با PWM ولتاژ به سرعت بین 0V و 5V تغییر می کند. در عمل ، این بدان معناست که ما به سرعت بین فشار دادن بار به داخل خازن و کمی بیرون آوردن آن را به طور متناوب جایگزین می کنیم - این فشار و کشش بیشتر شبیه تلاش برای دویدن در یک ماراتن با برداشتن یک گام بزرگ به جلو و سپس یک قدم به عقب است. دوباره و دوباره.
وقتی همه چیز را به طور متوسط محاسبه می کنید ، رفتار شارژ خازن با استفاده از PWM دقیقاً شبیه به این است که از ولتاژ ثابت Vpwm برای شارژ خازن استفاده کرده باشید. هنوز حدود 5 ثانیه طول می کشد تا به اندازه کافی به ولتاژ مورد نظر نزدیک شویم.
مرحله 7: از 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 بروید
درست است. به جای استفاده از 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 برای اکثر برنامه ها به اندازه کافی خوب است و بسیار بخشنده تر است. با این حال ، روش "توربو شارژر" نیاز به کدگذاری دقیق دارد و فقط برای موارد خاص مناسب است:
- به زمان بندی بسیار حساس است. پس از رسیدن به سطح ولتاژ هدف ، پین رانندگی باید بلافاصله به حالت معمولی PWM تغییر کند تا از ولتاژ هدف جلوگیری نشود.
- این نیاز به دانش RC دارد ، بنابراین این مقادیر باید از قبل وارد شوند. با مقادیر نادرست ، زمان بندی اشتباه و ولتاژها نادرست خواهد بود. با PWM معمولی ، این تضمین وجود دارد که پس از مدتی بر روی ولتاژ صحیح قرار می گیرید ، حتی اگر ثابت RC مشخص نباشد.
- محاسبه فاصله زمانی دقیق برای شارژ خازن نیاز به معادلات لگاریتمی دارد که برای محاسبه زمان واقعی در آردوینو بسیار کند است. اینها باید قبل از هر فریم متحرک از قبل محاسبه شده و در جایی در حافظه ذخیره شوند.
- برنامه هایی که با این روش سروکار دارند باید با این واقعیت که تأخیرها بسیار غیر خطی هستند (در واقع نمایی هستند) مقابله کنند. رسیدن به ولتاژهای هدف نزدیک Vcc یا GND بیشتر از ولتاژهای نزدیک به نقطه وسط طول می کشد.
برای غلبه بر این محدودیت ها ، کد گرافیکی برداری من کارهای زیر را انجام می دهد:
- از تایمر 1 در 16 کیلوهرتز و روال سرویس وقفه برای دستکاری و زمان بندی دقیق خروجی استفاده می کند.
- برای استفاده از آن باید مقدار مشخصی از ثابت زمان RC را انتخاب کرد که این امر باعث محدود شدن انتخاب خازن و مقاومت می شود.
- این تاخیر زمانی را برای همه نقاط در یک قاب متحرک در یک بافر حافظه ذخیره می کند. این بدان معناست که روشی که زمان تاخیرها را با سرعت بسیار کندتری نسبت به روال سرویس وقفه ای که پین های خروجی را به روز می کند ، محاسبه می کند. هر قاب مشخصی ممکن است چندین ده بار رنگ آمیزی شود تا مجموعه جدیدی از تاخیرها برای قاب بعدی آماده استفاده شود.
- استفاده از بافر حافظه محدودیتی را در تعداد نقاط قابل ترسیم در هر فریم ایجاد می کند. من از یک کدگذاری فضایی کارآمد برای حداکثر استفاده از RAM موجود استفاده می کنم ، اما هنوز محدود به 150 نقطه است. فراتر از صد نقطه یا بیشتر ، به هر حال صفحه نمایش شروع به سوسو زدن می کند ، بنابراین این یک موضوع بحث برانگیز است!
توصیه شده:
نحوه خواندن چندین ارزش آنالوگ با استفاده از یک پین آنالوگ: 6 مرحله (همراه با تصاویر)
نحوه خواندن چندین ارزش آنالوگ با استفاده از یک پین آنالوگ: در این آموزش ، من به شما نحوه خواندن چندین مقدار آنالوگ با استفاده از تنها یک پین ورودی آنالوگ را نشان خواهم داد
ارزان ترین آردوینو -- کوچکترین آردوینو -- آردوینو پرو مینی -- برنامه نویسی -- آردوینو ننو: 6 مرحله (همراه با تصاویر)
ارزان ترین آردوینو || کوچکترین آردوینو || آردوینو پرو مینی || برنامه نویسی || آردوینو ننو: …………………………. لطفاً برای ویدیوهای بیشتر به کانال YouTube من مشترک شوید ……. .این پروژه در مورد نحوه ارتباط با کوچکترین و ارزانترین آردوینو است. کوچکترین و ارزان ترین آردوینو arduino pro mini است. شبیه آردوینو
سرور MINECRAFT خود را ایجاد کنید! فوق العاده آسان ، سریع و رایگان! (بدون کلیک برای طعمه): 11 مرحله (همراه با تصاویر)
سرور MINECRAFT خود را ایجاد کنید! فوق العاده آسان ، سریع و رایگان! (بدون کلیک برای طعمه): Minecraft یک بازی بسیار لذت بخش است که در آن شما عملاً می توانید هر کاری را که می خواهید انجام دهید! اما بازی با دوستان در سراسر اینترنت گاهی اوقات دردآور است. متأسفانه ، اکثر سرورهای چند نفره یا پر از ترول هستند ، نه تجربه بازی
فوق العاده قابل حمل ، فوق العاده بلند ، بادوام ، بلندگوهای باتری: 9 مرحله (همراه با تصاویر)
فوق العاده قابل حمل ، فوق العاده بلند ، با دوام ، بلندگوهای باتری: همیشه می خواستم یک سیستم بلندگوی قدرتمند برای کسانی که در مهمانی های باغی و مهمانی های محلی پیش می روند ، داشته باشم. بسیاری خواهند گفت که این یک دستورالعمل اضافی است ، زیرا بسیاری از رادیوهای سبک بوم باکس از روزهای گذشته که ارزان در دسترس بوده اند ، یا این سبک ارزان iPod mp3 d
نورپردازی سریع ، سریع ، ارزان ، زیبا و با کیفیت LED اتاق (برای هر کسی): 5 مرحله (همراه با تصاویر)
سریع ، سریع ، ارزان ، با نورپردازی خوب LED (برای هر کسی): به همه خوش آمدید :-) این اولین دستورالعمل من است بنابراین نظرات خوش آمدید :-) آنچه امیدوارم به شما نشان دهم نحوه ایجاد روشنایی سریع LED است TINY buget. آنچه شما نیاز دارید: CableLEDsResistors (510 اهم برای 12 ولت) منگنه ها آهن لحیم کاری کاترها و سایر پایه ها