آموزش ساخت فرکانس متر با آردینو
تقریبا برای ساخت اکثر پروژه های الکترونیکی نیاز است که فرکانس خروجی آن اندازه گیری شود .
برای اندازه گیری فرکانس معمولا از اسیلوسکوپ یا سایر تجهیزات اندازه گیری استفاده می شود .
اما این دستگاهها معمولا قیمت بالایی دارند و تهیه آنها برای همه مقدور نمی باشد . برای حل مشکل ما در
این بخش ، قصد داریم که با کمک Arduino Uno و Schmitt trigger gate یک فرکانس متر ارزان بسازیم .
همچنین برای تست این فرکانس متر می خواهیم یک سیگنال ژنراتور ساده با استفاده از آی سی ۵۵۵ بسازیم .
این مدار سیگنال ژنراتور یک موج مربعی تولید می کند که برای تست به پروژه فرکانس متر ما داده می شود .
قطعات مورد نیاز :
۱٫ آی سی تایمر ۵۵۵ و ۷۴LS14 Schmitt trigger gate
۲٫ دو عدد مقاومت ۱ کیلو اهم و یک عدد مقاومت ۱۰۰ اهم
۳٫ دو عدد خازن ۱۰۰ نانو فاراد ، یک عدد خازن ۱۰۰۰ میکرو فاراد
۴٫ LCD 16*2
۵٫ برد بورد و اتصالات مربوط به آن
۶٫ پتانسیومتر ۴۷ کیلو اهم
طراحی مدار :
در تصویر زیر مدار پروژه فرکانس متر ( اندازه گیر فرکانس ) را مشاهده می کنید .
LCD با استفاده از اتصالاتی به برد آردینو متصل شده است .
اندازه فرکانس در LCD نمایش داده می شود .
ورودی موج به مدار پروژه ی سیگنال ژنراتور می رود که از طریق آن ، سیگنال تولید شده به آردینو می رود .
از IC 74LS14 برای اطمینان از اینکه فقط موج مستطیلی به آردینو می رسد استفاده می شود .
از خازن ها جهت فیلتر کردن نویز ها استفاده شده است .
این فرکانس متر می تواند فرکانس های تا ۱ مگاهرتز را اندازه گیری کند .
مدار سیگنال در تصویر زیر رسم شده است .
مدار سیگنال ژنراتور با استفاده تایمر ۵۵۵ :
اول از همه در مورد آی سی ۵۵۵ موج مربعی صحبت خواهیم کرد .
ساخت این مدار ضروری است .
زیرا برای تست فرکانس متر نیاز به تولید سیگنال مشخص داریم .
با داشتن یک سیگنال ژنراتور ما می توانیم موج مربعی تولید کنیم و با ارسال آن به آردینو ، خطا و حساسیت و سایر پارامترها را تنظیم کنیم .
تصویر سیگنال ژنراتور ساخته شده با آی سی ۵۵۵ در تصویر زیر آمده است :
مدار شماتیک این سیگنال ژنراتور نیز در تصویر زیر آورده شده است :
فرکانس سیگنال خروجی به مقاومت های RA، RB و خازن C بستگی دارد. معادله به صورت داده شده است.
Frequency (F) = 1/ (Time period) = 1.44/ ((RA+RB2)C).
در اینجا RA و RB مقادیر مقاومت و C مقدار ظرفیت هستند. با قرار دادن مقادیر مقاومت و ظرفیت خازن در معادله فوق فرکانس موج مربع خروجی را بدست می آوریم.
در دو تصویر بالا می بینیم که RB با یک پتانسیومتر در عمل جایگزین شده است . این کار به این دلیل انجام گرفته تا بتوانیم با تغییر مقاومت پتانسیومتر
فرکانس موج مربعی را تغییر دهیم .
اشمیت تریگر گیت :
می دانیم همه سیگنال های آزمایشی مربعی یا مستطیلی نیستند .
امواج مثلثی ، سینوسی و … نیز داریم .
از آنجایی که آردینو فقط قادر به تشخیص امواج مربعی یا مستطیلی می باشد ، ما باید تمام امواج سینوسی ، مثلثی و … را به موج مربعی
یا مستطیلی تبدیل کنیم .
برای این کار از اشمیت تریگر استفاده می کنیم .
اشمیت تریگر گیت یک قطعه دیجیتال است که برای عملیات حسابی و منطقی طراحی شده است .
این گیت خروجی را بر اساس سطح ولتاژ ورودی تعیین می کند . این گیت دارای سطح ولتاژ تری شولد است .
وقتی سطح ولتاژ ورودی بالاتر از سطح ولتاژ تری شولد باشد ، خروجی سطح بالا می شود . ( سطح بالا رونده پالس مربعی ) .
برعکس ، اگر سطح ولتاژ ورودی کمتر از ولتاژ تری شولد شود ، خروجی گیت سطح پایین می شود .
و به این شکل سیگنال مربعی توسط اشمیت تریگر ساخته می شود .
معمولا قبل اشمیت تریگر یک گیت NOT قرار داده می شود .
ما قصد داریم از تراشه ۷۴LS14 استفاده کنیم، این تراشه دارای ۶ گیت Schmitt Trigger در آن است. این شش گیت همانطور که در شکل زیر نشان داده شده است به صورت داخلی متصل می شوند
جدول کارکرد اشمیت تریگر به همراه گیت NOT ( معکوس ) در جدول زیر آورده شده است :
اکنون خروجی اشمیت تریگر را می توانیم به آردینو متصل کنیم و موج مربعی بگیریم .
توضیح کدهای پروژه فرکانس متر آردینو
کد نویسی برای فرکانس متر بسیار ساده می باشد .
ما در اینجا تابع PulseIn را توضیح می دهیم که وظیفه اصلی اندازه گیری فرکانس را این تابع برعهده دارد .
این تابع ما را قادر می سازد که مدت زمان حالت مثبت یا مدت زمان حالت منفی یک پالس مستطیلی را اندازه بگیریم .
Htime = pulseIn(8,HIGH);
Ltime = pulseIn(8, LOW);
این تابع زمانی اندازه گیری می کند که لبه بالا رونده یا لبه پایین رونده در PIN8 آردینو وجود دارد .
بنابراین در یک سیکل موج مدت زمان سطوح مثبت یا منفی را در میکرو ثانیه خواهیم داشت .
این تابع مدت زمان را در حد میکرو ثانیه اندازه گیری می کند .
در یک سیگنال داده شده، زمان بالا = ۱۰ میلی ثانیه و زمان کم = ۳۰ میلی ثانیه (با فرکانس ۲۵ هرتز) داریم.
بنابراین ۳۰۰۰۰ در عدد صحیح Ltime و ۱۰۰۰۰ در Htime ذخیره می شود
وقتی آنها را با هم جمع می کنیم، مدت چرخه را خواهیم داشت و با معکوس کردن آن، فرکانس را خواهیم داشت.
کد کامل پروژه در این قسمت قرار داده شده است :
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
int Htime; //integer for storing high time
int Ltime; //integer for storing low time
float Ttime; // integer for storing total time of a cycle
float frequency; //storing frequency
void setup()
{
pinMode(8,INPUT);
lcd.begin(16, 2);
}
void loop()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Frequency of signal");
Htime=pulseIn(8,HIGH); //read high time
Ltime=pulseIn(8,LOW); //read low time
Ttime = Htime+Ltime;
frequency=1000000/Ttime; //getting frequency with Ttime is in Micro seconds
lcd.setCursor(0,1);
lcd.print(frequency);
lcd.print(" Hz");
delay(500);
}