PWM: شبیه سازی پین های آنالوگ با برد آردوینو

سیگنال های PWM

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

این نوع سیگنال ها برای مواردی بسیار کاربردی است که شما نه تنها می خواهید از سیگنال های دیجیتال HIGH و LOW ، یعنی 1 یا 0 ، ON و OFF استفاده کنید ، بلکه می خواهید بیشتر توضیح دهید تا حدودی سیگنال های پیچیده تر به عنوان مثال ، می توان سرعت a را تعدیل کرد موتور DC، یا شدت نور یک نور ، برای یک شیر برقی و غیره

سیستم آنالوگ و دیجیتال

سیگنال آنالوگ و دیجیتال

مدارهای الکترونیکی را می توان به دو خانواده یا دسته بزرگ تقسیم کرد: دیجیتال و آنالوگ. هنگام صحبت در مورد الکترونیک دیجیتال ، ما از کمیت هایی با مقادیر گسسته استفاده می کنیم ، یعنی از یک سیستم باینری که با سیگنال های الکتریکی ولتاژ کم یا زیاد نشان داده می شود ، برای تفسیر حالت بیت های مورد استفاده استفاده می شود. از طرف دیگر ، وقتی صحبت از یک مدار آنالوگ می شود ، مقادیری با مقادیر پیوسته در حال استفاده هستند.

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

در مورد آنالوگها ، این دو گروه یا نوع بزرگ وجود ندارد ، زیرا در اینجا آنها سیگنالهای مداومی هستند که همیشه به سیگنال سیستم فعلی. به عنوان مثال ، در یک بلندگو ، سیگنالی که به آن ارائه می شود به صدایی که می خواهید تولید کنید بستگی دارد. همان میکروفون که بسته به صدایی که دریافت می کند سیگنال آنالوگ ایجاد می کند. مطمئناً شما آن را با حسگرهای دیگری که در این وبلاگ شرح داده ایم و با سیگنال های آنالوگ عمل می کنند نیز مشاهده کرده اید (و بنابراین ، باید فرمولی ایجاد شود تا بعداً مقادیر در طرح های Arduino IDE محاسبه یا شرطی شود ) ...

این خصوصیات یکی و دیگری باعث می شود که برخی ویژگی های خاص خود را داشته باشند مزایا و معایب، طبق معمول تقریباً در همه موارد. به عنوان مثال ، موارد دیجیتالی تمایل دارند ارزان تر ، سریعتر ، آسان تر برای توسعه ، اطلاعات را می توان با سهولت بیشتری ذخیره کرد ، آنها دقت بیشتری دارند ، می توانند برنامه ریزی شوند ، در برابر اثرات سر و صدا و غیره آسیب پذیر نیستند. اما همچنین درست است که با آنالوگ ها می توانید با سیگنال های پیچیده تری کار کنید.

توسط ejemplo، یک سنسور اثر Hall از نوع دیجیتال فقط می تواند وجود یا عدم وجود یک میدان مغناطیسی نزدیک را تشخیص دهد. در عوض ، یک سنسور اثر هال آنالوگ می تواند این کار را انجام دهد و همچنین به لطف یک سیگنال آنالوگ که در خروجی تولید می کند ، چگالی میدان مغناطیسی گفته شده را تعیین می کند. با دانستن چگونگی تفسیر سیگنال ولتاژ بیشتر یا کمتر به خوبی ، می توانید به راحتی از آن اندازه آگاه شوید. شما در بسیاری از بزرگی های طبیعت نمونه های دیگری نیز دارید که می توانید با یک سیستم آنالوگ از قبیل دما ، زمان ، فشار ، فاصله ، صدا و ... کمی اندازه گیری کنید.

سیگنال آنالوگ و دیجیتال

گفته شد ، الف سیگنال آنالوگ این یک ولتاژ یا جریان الکتریکی خواهد بود که با زمان و به طور مداوم متفاوت است. اگر نمودار شود ، سیگنال آنالوگ یک موج سینوسی تک فرکانسی است.

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

باید بدانید که مدارهایی برای رفتن از سیگنال آنالوگ به سیگنال دیجیتال یا بالعکس وجود دارد. اینها مبدل ها آنها به عنوان DAC (مبدل دیجیتال به آنالوگ) و ADC (مبدل آنالوگ به دیجیتال) شناخته می شوند. و آنها در بسیاری از دستگاههایی که امروزه از آنها استفاده می کنیم مانند تلویزیون ، کامپیوتر و غیره بسیار رایج است. با استفاده از آنها می توانید سیگنال های دیجیتالی استفاده شده توسط این تجهیزات را به سطح الکترونیکی تبدیل کنید تا با سایر وسایل جانبی یا قطعاتی که به صورت آنالوگ کار می کنند کار کند.

توسط ejemplo، یک بلندگو یا میکروفون با سیگنال های آنالوگ که با کارت صدا کار می کند ، یا کارت های گرافیک دیجیتالی که دارای تراشه معروف RAMDAC برای پورت های مانیتور آنالوگ هستند ... در آردوینو از این نوع مبدل ها برای چندین پروژه نیز استفاده می شود ، همانطور که خواهیم دید. ..

PWM چیست؟

چرخه وظیفه گرافیکی

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

این برای مفید است آردوینو از آنجا که خودکار یا اجزای الکترونیکی زیادی وجود دارد که می توانید به پروژه های خود اضافه کنید قادر به ارائه سیگنال آنالوگ واقعی نیستند، اما آنها از این PWM برای کار استفاده می کنند. همچنین نمی توانند از سیگنال آنالوگ گسسته استفاده کنند ، یعنی به جهش ولتاژ می رود تا شبیه سیگنال دیجیتال باشد. کاری که آنها می توانند انجام دهند استفاده از خروجی دیجیتال -Vcc یا Vcc از نوع دیجیتال برای تولید این سیگنال عجیب است ...

بنابراین ، PWM نوعی "ترفند" است که با آن آردوینو و سایر سیستم ها می توانند با این نوع سیگنالها همکاری کنند نه کاملاً آنالوگ هستند و نه دیجیتال معمولی. برای امکان پذیر بودن ، آنها بسته به علاقه در هر زمان ، یک خروجی دیجیتال را برای مدت زمان مشخص یا خاموش فعال نگه می دارند. این از آنچه که یک ساعت دیجیتال یا سیگنال کد باینری است ، که پالس های آن دارای عرض یکسان است ، فاصله زیادی دارد.

در پروژه های خود با Arduino می توانید این نوع سیگنال های PWM را بررسی کنید که در آن فرکانس ثابت محرک های پالس در طول زمان حفظ می شود ، اما عرض این پالس ها متنوع است. در حقیقت ، هنگامی که سیگنالی با توجه به کل چرخه بالا نگه داشته می شود ، آن را Duty Cycle می نامند. بنابراین ، چرخه وظیفه در٪ نشان داده شده است.

به یاد داشته باشید که در PWM شما مانند یک سیگنال آنالوگ ، بین چندین مقدار ولتاژ کار نمی کنید و بین آنها نوسان می کند. در مورد PWM این یک سیگنال مربع در سبک دیجیتال است و که حداکثر مقدار آن Vcc است. به عنوان مثال ، اگر با منبع تغذیه 3 ولت کار می کنید ، می توانید پالس 3 ولت یا 0 ولت بدهید ، اما نه یک ولت یا هر مقدار متوسط ​​دیگر که در یک آنالوگ واقعی اتفاق می افتد. آنچه در آن حالت متفاوت خواهد بود عرض پالس است که می توانیم 1٪ را در آن مقدار Vcc بالا نگه داریم یا 30٪ آن را به انرژی بیشتر و غیره بدهیم.

اما مراقب باشید ، زیرا اگر دستگاهی از محدودیت Vcc پشتیبانی کند و با PWM بیش از حد باشد ، ممکن است آسیب ببیند. بنابراین احترام به مقادیر صفحه داده ارائه شده توسط تولیدکنندگان همیشه ضروری خواهد بود. همچنین ، در برخی از دستگاه ها مانند موتورهای DC ، رله ها، آهن ربا ، و غیره ، ولتاژ پس از چرخه وظیفه می تواند به این معنی باشد که بارهای القایی می تواند آسیب برساند. به همین دلیل است محافظت به موقع

PWM در آردوینو

اتوبوس آردوینو I2C

حالا که با نحوه کار آن آشنا شدید ، بیایید مورد خاص PWM را در دنیای آردوینو ببینیم ...

PWM: pinout در Arduino

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

  • Arduino UNO، مینی و نانو- شما 6 خروجی 8 بیتی PWM روی پایه های 3 ، 5 ، 6 ، 9 ، 10 و 11 دارید که آن را درست در مقابل عدد خواهید داشت.
  • آردوینو مگا- در این قدرتمندترین برد آردوینو شما 15 خروجی 8 بیتی PWM دارید. آنها روی پایه های 2 تا 13 و 44 تا 46 قرار دارند.
  • آردوینو به دلیل: در این حالت 13 خروجی 8 بیتی PWM وجود دارد. آنها روی پایه های 2 تا 13 قرار دارند ، به علاوه دو خروجی آنالوگ دیگر که توسط DAC با وضوح 12 بیتی گسسته شده اند.

هنگامی که شما در مورد رزولوشن 8 بیت یا 12 بیت و غیره صحبت می کنید ، در این نوع خروجی های PWM ، شما به اتاق مانوری که دارید اشاره می کنید. با 8 بیت دارای 256 سطح است که بین آنها می توانید متفاوت باشید ، و 12 بیت به 4096 سطح می رسند.

کنترل با تایمر

برای کنترل سخت افزار PWM ، Arduino از تایمرها استفاده خواهد کرد برای این. هر تایمر فعلی می تواند 2 یا 3 خروجی PWM را تأمین کند. یک رجیستر مقایسه ای برای هر خروجی این سیستم را تکمیل می کند تا وقتی زمان به مقدار رجیستر می رسد ، حالت یا مقدار خروجی تغییر کند تا آن چرخه های وظیفه متوقف شود. اگرچه دو خروجی کنترل شده توسط تایمر یکسان وجود دارد ، هر دو می توانند چرخه های مختلف وظیفه داشته باشند ، اگرچه فرکانس یکسانی دارند.

در مورد تایمرهای مرتبط با هر پایه PWM ، این تفاوت وجود دارد بستگی به نوع برد آردوینو دارد که شما دارید:

  • Arduino UNO، مینی و نانو:
    • تایمر 0 - 5 و 6
    • تایمر 1 - 9 و 10
    • تایمر 2 - 3 و 11
  • آردوینو مگا:
    • تایمر 0 - 4 و 13
    • تایمر 1 - 11 و 12
    • تایمر 2 - 9 و 10
    • تایمر 3 - 2 ، 3 و 5
    • تایمر 4 - 6 ، 7 و 8
    • تایمر 5 - 44 ، 45 و 46

رجیستر مقدماتی زمان را به یک عدد صحیح تقسیم کرده و تایمر بقیه کارها را برای کنترل هر یک از خروجی های PWM مرتبط انجام می دهد. تغییر مقدار رجیستری می تواند فرکانس را تغییر دهد. فرکانس همچنین بسته به تایمر و صفحه متفاوت خواهند بود:

  • Arduino UNO، مینی و نانو:
    • Timer0: اجازه می دهد مقادیر 1 ، 8 ، 64 ، 256 و 1024 را تهیه کنید. فرکانس 62.5 کیلو هرتز است.
    • Timer1: با ایستگاه از پیش تنظیم 1 ، 8 ، 64 ، 256 و 1024. با فرکانس 31.25 کیلو هرتز.
    • Timer2: برابر با Timer1 است ، فقط اینكه علاوه بر موارد قبلی ، مقادیر 32 و 128 را نیز اضافه می كند.
  • آردوینو مگا:
    • تایمر 0 ، 1 ، 2: همان شکل بالا.
    • تایمر 3 ، 4 ، و 5: با فرکانس 31.25 کیلوهرتز و مقدماتی از 1 ، 8 ، 64 ، 256 و 1024.

ناسازگاری و درگیری

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

  • کتابخانه سروو: هنگامی که از سرو موتور استفاده می کنید ، از تایمر به شدت استفاده می شود ، که می تواند منجر به درگیری شود. به طور خاص از Timer1 برای UNO ، Nano و Mini استفاده کنید ، یعنی در حالی که از طرحی با آن کتابخانه استفاده می کنید ، نمی توانید از پایه های 9 و 10 استفاده کنید. در مگا به تعداد سرویس ها بستگی دارد ...
  • SPI: اگر از ارتباط SPI در برد آردوینو استفاده شده است ، از پین 11 برای عملکرد MOSI استفاده می شود. به همین دلیل نمی توان از آن پین PWM استفاده کرد.
  • لحن: این عملکرد از Timer2 برای کار استفاده می کند. بنابراین اگر از آن استفاده شود ، پایه های 3 و 11 (یا 9 و 10 برای Mega) را بی فایده می کنید.

آزمایش عملی با آردوینو

شماتیک Arduino PWM با LED

اگر می خواهید نحوه کار PWM روی Arduino را در محل ببینید ، بهترین کاری که می توانید انجام دهید اتصال لیدهای اندازه گیری یک ولت متر یا مولتی متر (در عملکرد برای اندازه گیری ولتاژ) بین پایه PWM که برای استفاده انتخاب کرده اید و پایه زمین یا GND برد Arduino. به این ترتیب در صفحه دستگاه اندازه گیری خواهید دید که به لطف این ترفند PWM چگونه می توان ولتاژ را با خروجی دیجیتال تغییر داد.

می توانید ولت متر / مولتی متر را با یک LED جایگزین کنید تا ببینید که شدت نور با یک موتور DC یا هر عنصر دیگری که می خواهید تغییر می کند. من آن را در نمودار Fritzing با یک LED بدون بیشتر ساده کرده ام ، اما شما می دانید که این همچنین می تواند نوک های یک مولتی متر را نشان دهد ...

اگر از LED استفاده می کنید مقاومت در کاتد و GND را بخاطر بسپارید.

به کد منبع برای کنترل میکروکنترلر برد آردوینو برای اینکه همه چیز کار کند ، باید این مورد را در Arduino IDE وارد کنید (در این مورد من از پین 6 PWM استفاده کرده ام Arduino UNO):

const int analogOutPin = 6;
byte outputValue = 0;  
 
void setup()
{  
   Serial.begin(9600);        
   pinMode(ledPIN , OUTPUT); 
 
   bitSet(DDRB, 5);       // LED o voltímetro
   bitSet(PCICR, PCIE0);       
   bitSet(PCMSK0, PCINT3);     
}
 
void loop() 
{
   if (Serial.available()>0)  
   {
      if(outputValue >= '0' && outputValue <= '9')
      {
         outputValue = Serial.read();   // Leemos la opción
         outputValue -= '0';      // Restamos '0' para convertir a un número
         outputValue *= 25;      // Multiplicamos x25 para pasar a una escala 0 a 250
         analogWrite(ledPIN , outputValue);
      }
   }
}  
 
ISR(PCINT0_vect)
{
   if(bitRead(PINB, 3))
   { 
      bitSet(PORTB, 5);   // LED on 
   }
   else
   { 
      bitClear(PORTB, 5); // LED off  
   } 
} 
من به شما توصیه می کنم با ارزش ها بازی کنید و ببینید نتایج روی نور یا ولت متر. این برنامه می تواند مقادیر 0 تا 9 را دریافت کند بنابراین می توانید ببینید که همه چیز چگونه تغییر می کند. برای اطلاعات بیشتر ، شما را راهنمایی می کنم دوره آردوینو که در دانلود رایگان داریم ...

محتوای مقاله به اصول ما پیوست اخلاق تحریریه. برای گزارش یک خطا کلیک کنید اینجا.

نظر بدهید ، نظر خود را بگذارید

نظر خود را بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخشهای موردنیاز علامتگذاری شدهاند با *

*

*

  1. مسئول داده ها: میگل آنخل گاتون
  2. هدف از داده ها: کنترل هرزنامه ، مدیریت نظرات.
  3. مشروعیت: رضایت شما
  4. ارتباط داده ها: داده ها به اشخاص ثالث منتقل نمی شوند مگر با تعهد قانونی.
  5. ذخیره سازی داده ها: پایگاه داده به میزبانی شبکه های Occentus (EU)
  6. حقوق: در هر زمان می توانید اطلاعات خود را محدود ، بازیابی و حذف کنید.

  1.   خوزه dijo

    سلام روز خوش. اول از همه من می خواهم از شما برای وقت اختصاص داده شده در مورد این جدیدترین تشکر کنم.
    من می خواهم برای شما پرس و جو کنم. من سعی می کنم کد را بر روی یک شبیه ساز پروتئوس 8 برای Arguino Mega اجرا کنم. من یک ولت متر را به پین ​​6 وصل می کنم ، پروتئوس به پورت سریال متصل است ، اما نمی دانم چگونه یا چه چیزی تغییر کند تا ولتاژهای مختلفی از آن خارج شود. برای ایجاد کامپایل مجبور شدم تنظیمات جزئی در کد انجام دهم. از کمک شما بسیار سپاسگزاریم