کنترل کننده PID گسسته

بدون دیدگاه

شرکت Atmel یک یادداشت کاربردی درباره آشنایی با کنترل کننده PID منتشر کرده که در اون روابط مربوط به پیاده سازی کنترل کننده PID گسسته هم توضیح داده شده. در واقع خواننده با استفاده از این توضیحات می تونه برنامه یک کنترل کننده PID گسسته رو بنویسه که به راحتی در میکروکنترلرهای AVR هم قابل اجرا باشه. البته خود برنامه داخل این یادداشت گنجونده نشده اما کسانی که با دقت این ترجمه رو بخونند می تونند برنامه دلخواهشون رو بنویسند.

فایل PDF این ترجمه رو می تونید از انتهای همین مطلب  به طور مستقیم دانلود کنید.

استفاده از این ترجمه با ذکر نام سایت karakit.ir بلامانع است.

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

و حتما می دونید که در انواع مختلف برای انواع حالات کاری در توانهای مختلف به کار می ره. اما این وسیله با برق 220 سر و کار داره. بنابراین باید راه مطمئنی برای راه اندازی و تریگر کردنش با میکرو پیدا کرد. یکی از ساده ترین راه ها استفاده از اپتوترایاک moc3022 است. اپتوترایاکهای سری moc30xx دارای 6 پایه هستند که انواع moc302x ساده تر و ارزانتر هستند. moc 3022 می تونه تا 400 ولت رو تحمل کنه. اما این آی سی ها توانایی عبور جریانهای تا 100 میلی آمپر رو دارند و برای راه اندازی کلیدهای قوی مانند ترایاکها به کار می رن. یکی از مزایای استفاده از اونها ایزوله شدن مدار میکرو از قسمت ولتاژ بالای مداره و دیگری راه اندازی مطمئنه.
شکل کلی مدار در زیر دیده می شه

سمت چپ بین پایه 1 و 2 یه LED داخلی وجود داره که اونو با یه مقاومت به میکرو متصل می کنیم. با روشن و خاموش شدن این LED ترایاک داخلی آی سی در سمت راست که بین پایه های 4 و 6 قرار داره فعال و غیر فعال می شه. مقاومتها باید کوچیک باشند. مثلا برای راه اندازی آی سی 470 اهم و برای اتصال اون به ترایاک اصلی 1 کیلو اهم مناسبه.
نکته پایانی اینه که نصب هیت سینک بر روی ترایاک فراموش نشه

آی سی AD9850 یک تولید کننده شکل موج سینوسی و مربعی با فرکانس متغیره که به صورت ماژول آماده توی بازار پیدا می شه. این آی سی در بهترین حالت می تونه فرکانس تا 125MHz که البته در فرکانسهای بالا ممکنه Duty Cycle 50 درصد نداشته باشه.

این ماژول یک DDS Synthesizer محسوب می شه و برای راه اندازی باید از یک میکروکنترلر استفاده بشه. اگه از آردوینو استفاده می کنین احتمالا کتابخونه آماده براش بتونین پیدا کنین. اما اگه خودتون بخواین برنامه میکرو بنویسین خیلی بعیده بتونین حداقل به زبان فارسی راهنمای مناسبی پیدا کنین. به همین علت راهنمای راه اندازی این ماژول به کمک میکروکنترلر AVR آماده شده و برنامه ش هم به زبان بیسیک تحت کامپایلر BASCOM توضیح داده شده.
بهترین راه برای راه اندازی این ماژول مراجعه به دیتاشیت و بعد مثال های موجود در اینترنته. طبق گفته دیتاشیت باید 5 بایت به ماژول فرستاده بشه. دو راه سریال و موازی برای برنامه ریزی این ماژول وجود داره که در اینجا مد سریال معرفی شده.
اول باید پایه D2 رو به زمین و D0 و D1 رو به vcc وصل کنید. بعد پایه RESET رو به مدت خیلی کوتاه high و بعد low کنید. بعد همین کار رو با پایه W_CLK و بعد با پایه FQ_UD انجام بدید. بعد باید کل 40 بیت داده رو به ترتیب روی پایه DATA قرار بدید. قالب این بیتها به این صورته:

W0 W1 W2 W3 W4 W5 ————- W28 W29 W30 W31 0 0 0 0 0 0 0 0

از بیت اول تا 32 مربوط به فرکانس دلخواه شماست و W0 بیت LSB شماست و اول فرستاده می شه. اول بیت مورد نظر رو تنظیم می کنید و بعد یه پالس روی پایه W_CLK بفرستید. محاسبه این 32 بیت طبق رابطه زیر انجام می شه:

Value = Frequency * 4 294 967 296 / 125 000 000

که فرکانس مورد نظرتون رو به جای Frequency قرار می دین و با تغییر مبنا یک عدد 32 بیتی به دست میارین که بیتهای اونو باید به ترتیب طبق روال بالا به آی سی بفرستین.
دو تا بیت بعدی کنترلی هستند و حتما باید 0 باشند. بقیه بیتها رو هم 0 قرار بدید و با همون روال قبل برای هر کدوم یه کلاک بفرستین. حالا یه پالس دیگه روی FQ_UD بفرستید و دیگه برنامه باید همین جا تموم شه. می تونید نتیجه سینوسی یا مربعی رو با اسکوپ مشاهده کنید.
برای اطمینان بیشتر بین قرار دادن هر بیت روی پین DATA و ارسال کلاک به W_CLK یه تاخیر کوچیک مثلا 10 میکرو ثانیه قرار داده شده.
قابل ذکره که اگه vcc ماژول رو برابر 5 ولت قرار بدید احتمالا دامنه خروجیتون بزرگتر خواهد بود. ولی 3.3 هم می تونید بهش وصل کنید.
برنامه نمونه رو می تونین در زیر مشاهده کنین:

'Project name: ad9850
	'Author: Karakit.ir
	$regfile = "m8adef.dat"
	$crystal = 8000000
	$hwstack = 64
	$swstack = 64
	$framesize = 64

	Config Portb = Output  
	'1: W_CLK   2: FQ_UD   3: DATA   4: RESET
	Clk Alias Portb.1
	Fq Alias Portb.2
	Dta Alias Portb.3
	Rst Alias Portb.4

	Config Watchdog = 512   
	'از واچ داگ برای ریست شدن میکرو در هر 512 
	'میلی ثانیه استفاده شده تا در صورت بروز هر اختلالی ماژول متوقف نشه

	Dim W(40) As Byte
	Dim I As Byte
	Dim V As Word

	Set Rst
	Waitus 1
	Reset Rst

	Set Clk
	Waitus 1
	Reset Clk

	Set Fq
	Waitus 1
	Reset Fq

	For I = 0 To 39	'ابتدا همه بیتها رو صفر می کنیم 
		W(i) = 0
	Next I

	W(24) = 1 		'حالا بیتهای مورد نیاز رو 1 می کنیم

	V = 0

	Start Watchdog

	Do		     	'حالا همه بیتها رو به ترتیب می فرستیم به ماژول 
		For I = 1 To 40
			If W(i) = 1 Then
				Set Dta
			Else
				Reset Dta
			End If
			Waitus 10
			Set Clk
			Waitus 1
			Reset Clk
		Next I

		Set Fq
		Waitus 1
		Reset Fq

		Do

		Loop

	Loop

	End

برای اینکه فرکانس دلخواه خودتون رو داشته باشین لازمه که بیتها رو مطابق با عددی که از رابطه بدست آوردین تنظیم کنین یا حتی براش یه تابع بنویسین. با اضافه کردن دکمه یا ولوم یا انکدر به مدار و تغییر برنامه هم می تونین یه DDS با فرکانس متغیر داشته باشین.
در صورتی که دامنه ولتاژ خروجی این DDS براتون کافی نیست و یا ممکنه بار جریان زیادی بکشه باید از یک مدار تقویت کننده استفاده کنین که در همین سایت معرفی شده.