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

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

در فصل اول مشخصات و خلاصه ای از مدار و قطعات استفاده شده و نحوه و مدار مولد پالس مربعی ومثلثی و پالس سینوسی و محاسبات مدار و نحوه کنترل مدار بوسیله میکرو مورد نظر آورده شده است و در فصل دوم فلوچارت برنامه و برنامه میکرو که به زبان C نوشته شده و نتیجه پروژه تهیه شده و در آخر پروژه ،DATA SHEET قطعات استفاده شده آورده شده است.

فصل اول:
میکرو استفاده شده وسیله ای برای کنترل و تنظیم نوع خروجی ،فرکانس وآفست و …می باشد.
مشخصات و محدوه این مدار:
انواع موج خروجی : مثلثی ، مربعی، سینوسی
محدوده دامنه : ۱۵ الی ۱۵-
محدوده فرکانس: ۵۰HZ-30KHZ

خلاصه ای از مدار
در این سیستم از قطعات زیر استفاده شده.
میکرو کنترولر سری AVR (ATMega16L) برای کنترل سیستم
یک عدد LCD دو در شانزده متنی برای نمایش خروجی با کاربر
چهار عدد میکرو سویچ برای کنترل سیستم
op amp برای ایجاد موج مثلّثی و مربعی

چند عدد دیود زنر و ۱N4148 و مقاومت برای ایجاد موج سینوسی
آی سی ۴۰۵۱ و ۴۰۵۲ و AD7523 برای کنترل فرکانس ،گین و نوع خروجی
LCDوچند عدد کلید برای نمایش اطلاعات و نیز تغییر امکانات
برای تغذیه از رگولاتور مثبت ومنفی ۱۵و۵ ولت استفاده شده است

ایجاد موج مثلثی و مربعی

در اینجا برای ایجاد موج مثلثی از یک انتگرال گیر با آپ امپ استفاده کرده ایم با توجه به شکل فوق …. آپ امپ سمت راست این انتگرال گیر می باشد در طرف چپ مدار از یک مدار اشمیت تریگر استفاده شده است با بالا رفتن ولتاژ انتگرالگیر این اشمیت تریگر سویچ میکند سپس با فعال کردن ترانزیستور مقاومت R/2 فعال شده وباعث میشود که مدار انتگرال گیر به صورت معکوس عمل کرده و ایجاد یک رمپ منفی میکند. به این ترتیب از خروجی آپ امب اول موج مثلثی و از خروجی آپ امپ دوم مربعی گرفته میشود.

محاسبات مدار
در صورتی که ترانزیستور غیر فعال باشد ولتاژ سر پایه منفی برابر Vc/2 میباشد و پس جریان عبوری از R برابر
(Vc – Vc/2) /R = Vc/(2R)
و با شارژ شدن خازن و فرمول آن ولتاژ خروجی برابر
Vo = 1/C( Vc/2R)t+V0 = (Vc/2RC)t
از آن طرف ولتاژ اشمیت ترگر برابر با توجه به مقادیر داخل نقشه و نیز زمین بودن + V برابر ۱/۳ ولتاژ تغذیه می باشد .
زمانی که این ولتاز نیاز دارد تا به ولتاژ ماکزیمم وسپس به حالت اول برسد چهار برابر میباشد در این صورت فرکانس ( ۱/t ) به صورت زیر در می آید
f = 1/t =4 * (Vc / Vpp) * (1/2RC) = ( Vc/Vpp ) * (2/RC)
Vpp= 1\3 Vc
برای تغییرات در این فرکانس میتوان باکمک تغییر در مقدار Vc ویا خازن مدار پرداخت
در اینجا برای کنترل فرکانس در مقادیر کم از Vc استفاده شده است. برای این منظور از کنترل دیجیتال یکی از دو کانال مبدل آنالوگ به دیجیتال آسی AD7528 استفاده میکنیم .
این ای سی دارای دو مبدل آنالوگ به دیجیتال میباشد که یکی از آن برای این منظور ودیگری در جای دیگر بدان پرداخته میشود.

و برای تغییرات بالا خازن را می بایست تغییر داد که در اینجا از آنالوگ سویچ ۴۰۵۱ که یک دیکدر یک به هشت میباشد استفاده میکنیم .
مقادیر خازنهای استفاده شده به صورت زیر میباشد.
۲٫۲p , 22p, 220p, 2.2n, 22n ,220n

موج سینوسی
برای ایجاد موج سینوسی از چند منبع ولتاژ که به وسیله دیود زنر ایجاد شده است وچند مقاومت خاص از موج مثلثی تولید میگردد. (مدار شکل زیر)

این مدار موج مثلثی به شکل موج تقریبا سینوسی تبدیل میکند .منابع تغذیه انتخاب شده برابر ۲٫۲ ولت ۳٫۳، ۴٫۷،۵٫۱ میباشد در پیک مثبت در بین ولتاژ سفر تا ۲٫۲+۰٫۷ دیود هیچ کدام از دیودها فعال نمیباشند در این صورت ولتاژ ورودی با ولتاژ خروجی برابر می باشد اما بعد از آن تا ولتاژ ۴ ولت فقط دیود اول فعال میباشد در این صورت مقاومت ۶۲k و مقاومت ۱۰k باعث کاهش نسبی ولتاژ میگردد برای بقیه دیودها این وضع ادامه میابد تا به ولتاژ سینوسی برسیم.

چگونگی محاسبه
چون شیب رمپ برابر شیب در نقطه صفر در موج سینوسی می باشد داریم
Vsin = A Sin(Pi/2 t);
Vramp = B t
Vsin’ (۰) = Vramp’(۰);
A Pi/2 Cos(Pi/2 t) = B
A = 2B / pi

A دامنه موج سینوسی و B دامنه موج رمپ می باشد که با توجه به مقدار گرفته شده ۱۰ ولت برای موج مثلثی مقدار موج سینوس در حدود ۶٫۳۶ به دست می آید.
فرض کنید n عدد دیود فعال شده باشند در این صورت ولتاژ موج سینوسی برابر با Vsin1 باشد در این صورت ولتاژ موج مثلثی برابر
(Vramp – Vsin)/R = (Vsin – V1)/R1 +(Vsin – V2)/R2+…+(Vsin – Vn)/R

برای محاسبه مقاومت اول فرض را بر این گذاشه که مقاومت ۱۰K را انتخاب کرده چون دیود اول در ولتاژ ۲٫۹ وصل میشود .میتوان به راحتی مقدار ۶٫۲ را برای مقاومت اول بدست آورد.وهمچنین با داشتن این مقاومت میتوان مقاومت بعدی را بدست آور تا به مقاومت نهایی رسید.
قابل ذکر است به علت متقارن بودن مدار فقط نیاز به محاسبه نصف مدار میباشد و مقاومت های منفی را ازآن همان مقاومتهای قسمت مثبت میباشد.

کنترل خروجی
برای آنکه خروجی را نیز کنترول کرد از نظر نوع موج و دامنهاز دو آی سی ۴۰۵۲ وAD7528 نصف آن استفاده شده است .
آی سی ۴۰۵۲ یک آنالگ سویچ یک به چهار میباشد که باآن نوع موج خروجی ( مربعی، مثلثی و سینوسی ) را انتخاب میکنیم این آی همانند ای سی ۴۰۵۱ میباشد . خروجی این ای سی به Vref آسی AD7528 رفته که همان آسی که برای کنترل فرکانس هم استفاده میگردد.

ای اسی در این صورت مانند یک ولوم عمل کرده و ولتاژ را کاهش داده که با یک تقویت کنده opamp ی به مقدار ولتاژ مورد نظر رسید در این صورت کار کنترول دامنه نیز به صورت دیجیتال در آمده است.

میکروکنترولر Atmega16L
این میکرو دارای ۳۲ تا I/O میباشد
ولتاژ تغذیه ۵٫۵ تا ۲٫۷ را میتواند تحمل کند
دارای K16 بایت حافظه فلش (قابل برنامه ریزی)
و۱۰۲۴ بایت Ram میباشد
واز فرکانسهای m1وm2وm4وM8 را بطور داخلی استفاده میکند

در اینجا این میکرو برای کنترول سیستم استفاده میشود که به وسیله ۴ کلید که برروی برد تعبیه شده است میتوان کنترول سیستم را به دست گرفت .
برای برنامه نویسی میکرو کنترلر AVR زبان C که در قالب codveiton استفاده میکنیم.

برای کنترل کلیدها که یک سر آنها به زمین وصل شده است و دیگری به میکرو، به طور داخلی به وسیله ریجسترهای کنترول پورت میکرو پولاپ شده که هنگامی که کلیدی فشار داده نشده باشد عدد یک خوانده و در صورت فشار دادن کلید عدد صفر را میکرو بخواند.
برای خواندن کلید از تابع GetKey() استفاده شده است
این تابع چک میکند که آیا کلیدی فشار داده شده است یا خیر . در صورتی که کلید ی فشار داده شود مطابق با آن در خروجی عددی قرار میدهد .
LCD Text
این وسیله برای نمایش خروجی سیستم میباشد.که دارای دو سطر ۱۶ کاراکتری است.
فرکانس خروجی ،دامنه خروجی ونوع موج خروجی در اینLCD قابل نمایش میباشد.
دستورات مورد نیاز

lcd_init(16);
این دستور راه انداز LCD Text میباشد که چگونگی کارکرد آنرا تنظیم میکند.
lcd_gotoxy(0,3);

این دستور برای بردن خط نشان به نقطه مورد نظر میباشد به عنوان مثال مکان نما را به خط اول کاراکتر چهارم میبرد .
lcd_putchar(‘0’);
این دستور یک کاراکتر مورد نظر را در جای مکان نما قرار می دهد .
lcd_puts (str);
این دستور برای نمایش یک سری کاراکتر بر روی LCD میباشد. این دستور کاراکتر ها را از داخل حافظه RAM برداشته و بر روی LCD نشان می دهد.
lcd_putsf(“KHz “);
این دستور برای نمایش یک سری کاراکتر بر روی LCD میباشد. این دستور کاراکتر ها را از داخل حافظه Flash برداشته و بر روی LCD نشان می دهد.
این دستورات در فایل Lcd.H ذخیره شده است که با دستورinclude <lcd.h>#_ فرا خوانی میگردد .
دستور دیگری که در این برنامه استفاده شده است دستور
void define_char(char flash *pc,char char_code)
میباشد که برای ایجاد کاراکتر جدید میتوان از آن استفاده نمود.برای اطلاع بیشتر به راهنمای این برنامه مراجعه شود.

در اینجا چند دستور دیگر مورد برسی قرار میگیرد.
delay_ms(100);
این دستور برای ایجاد تاخیر در برنامه میشود .
ltoa(256,srt);
این دستور برای تبدیل عدد به کدASCII که LCD بتواند آن را نمایش بدهد.

ساختار برنامه :
این برنامه ابتدا بعد از تظیم نمودن مقادیر اولیه سیستم به داخل حلقه بی نهایت While() می افتد که اصل بر نامه در اینجا قرار دارد. سیستم منتظر میماند تا کلیدی فشار داده شود .
در صورتی که کلید Select باشد باعث تعویض متغیر سیستم می شود که بین متغیر های نوع خروجی ، دامنه خروجی و فرکانس آن در حال گردش می باشد به عنوان مثال در صورتی بروی نوع موج باشد به سراغ دامنه می رود.