PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : طراحی کنترلر موتور حلقه بسته با pid



alimf931
30-12-2012, 18:08
دوستان سلام
من میخواستم برای کنترل حلقه بسته موتور dc با برنامه کدویژن یک کدی براش شروع کنم به نوشتن و آخر هم در همین جا کد رو بذترم تا همه استفاده کنن و یک تاپیک جامع باشه برای همه مراجعه کنندگان... اولا از آی سی L298 استفاده شده که تا 4 امپر و 40 ولت به خوبی کار میکنه البته نیاز به هیت سینک هم داره.
برای شروع چند تا سوال وجود داره:
1- چرا پایه enable به کجا باید وصل باشه
2- پالس های اینکودر به پایه B.1 ترانزیستور که همون تایمر خارجی وصل شده استفاده از تایمر خارجی به چه نحوه؟

esisafa
30-12-2012, 21:50
این مدار برای کنترل سرعت موتور هست یا هدف دیگه ای داره مثل درجه و ...؟
پایه en به اینتراپت وصل هست ولی به عنوان یک خروجی io وصل شده
با استفاده از تایمر کانتر تعداد پالسهای اینکدر رو میشمارن و سرعت موتور رو تشخیص میدن.
بعد از فهمیدن سرعت موتور و داشتن سرعت مرجع و با یک کنترلر pid میشه سیگنال pwm رو ایجاد کرد و سرعت موتور رو با سرعت مرجع تنظیم کرد.
البته تا حدودی به محاسبات کنترلی هم نیاز داره ولی با آزمایش و خطا هم میشه تا حدودی تنظیم کرد

alimf931
30-12-2012, 22:18
سلام ممنون از پاسخ شما
این کنترلر، یک کنترلر PID هست که ضرایب P، I و D توسط یک ولوم به صورت دستی قابل تغییرند.


پایه en به اینتراپت وصل هست ولی به عنوان یک خروجی io وصل شده
طبق فرمایش شما پایه EN به عنوان یک خروجی io وصل شده پس احتمالا کنترل PWM مثل کد زیر اعمال شده باشه درست میگم:



if(Direct==1){
OCR1A=pwm_sig
OCR1B=0
}
if(Direct==0){
OCR1B=pwm_sig
OCR1A=0
}




که اگر DIRECTION راست گرد بود اولی و اگر چپ گرد بود دومی عمل میکنه.


با استفاده از تایمر کانتر تعداد پالسهای اینکدر رو میشمارن و سرعت موتور رو تشخیص میدن.
یک سوال این تایمر یک رو میشه با خواندن رجیستر TCNT0 مقدار تعداد پالسهای اینکودر رو به دست آورد؟

esisafa
30-12-2012, 23:28
بله . برای شمارش پالس باید در یک زمان مشخص تعداد پالس رو بشمارین.
چپ گرد و راست گرد هم درسته ولی من خودم pwm رو به en میدم و چپ و راست با io کنترل میکنم.

اگه میتونید لطفا همون برنامه ی قسمت pid رو قرار بدین که چطور تقسیم و مشتق و انتگرال رو با توجه به ضرایبشون حساب میکنید. ممنون میشم.

alimf931
01-01-2013, 11:03
سلام
من یک L298 را با ENA یک و تغذیه VS 12 ولت مدارشو بستم ولی خروجی OUT1 و OUT2 بیشتر از 2.5 ولت نیست درصورتی که DROP-OUT
برای L298 نهایت سه ولته پس من در خروجی پس از اعمال PWM باید 9 ولت داشته باشم درسته؟



اگه میتونید لطفا همون برنامه ی قسمت pid رو قرار بدین که چطور تقسیم و مشتق و انتگرال رو با توجه به ضرایبشون حساب میکنید. ممنون میشم.

بله حتما تنظیم ضرایب pid به این صورته که شما اول فقط kp را تغییر میدهید و بقیه ضرایبو صفر میکنید , بعد یک سیگنال رمپ میدین و اگه خوب دنبال کرد این عدد kp شماست و برای به دست اوردن ki هم یک سیگنال سینوسی میدین به همراه KP قبلی که به دست اوردین باز اونو بدست میارین و...

esisafa
01-01-2013, 11:37
خروجی های آیسی باید یا نزدیک صفر باشن یا نزدیک ولتاژ تغذیه. عدد 2.5 درست نیست. البته بدون pwm.
اگه pwm بدین که قطعا ولتاژ باید بین دو مقدار باشه و ممکنه 2.5 درست باشه. 9 ولت بستگی به دیوتی سایکل شما داره و قرار نیست همیشه 9 باشه. در ضمن حتما با یک بار ولتاژ خروجی رو آزمایش کنید و باز نباشه.
از گفتن نحوه ی تنظیم ممنون ولی منظورم اگه ممکنه برنامه ی قسمت pid رو قرار بدین. من خودم یک برنامه قرار میدم ولی میخوام با الگوریتم های دیگه هم آشنا بشیم. ( هدف کل انجمن هست )

previous_error = 0
integral = 0
start:
error = setpoint - measured_value
integral = integral + error*dt
derivative = (error - previous_error)/dt
output = Kp*error + Ki*integral + Kd*derivative
previous_error = error
wait(dt)
goto start

منبع: فکر کنم ویکی پدیا

alimf931
01-01-2013, 21:45
از گفتن نحوه ی تنظیم ممنون ولی منظورم اگه ممکنه برنامه ی قسمت pid رو قرار بدین.من خودم یک برنامه قرار میدم ولی میخوام با الگوریتم های دیگه هم آشنا بشیم. ( هدف کل انجمن هست )
سلام
من در این باره یه فایلی دارم که چند روششو رو مثال زده که ضمیمه میکنم.

فقط یه سوالی من دو تا کانال انکودر رو دادم به پایه T1 و T2 میکرو Atmega32 حالا مشکل من روی خواندن پالسهاست آیا پایه T1 همون تایمر صفر و پایه T2 همون تایمر یک هستش؟

esisafa
01-01-2013, 23:34
مشخصه دیگه. T0 ورودی کانتر صفر و بقیه هم همینطور. شماره ها با هم ارتباط دارن. البته توجه کنید که به تایمر 2 میتونه که کریستال ساعت هم وصل بشه و اسیلاتور داره ولی کانتر هم میشه.
در ضمن شما به فرکانس دکودر و تایمر هم دقت کنید که سرریز نداشته باشه
در pdf هم از همون الگوریتم استفاده شده ولی خوب توضیح داده که چطور تنظیم کنیم

alimf931
01-01-2013, 23:58
در ضمن شما به فرکانس دکودر و تایمر هم دقت کنید که سرریز نداشته باشه

سلام به فرض یک موتور3000rpm با انکودر 400cpr داریم که 400 پالس در هر دور میده، خوب اینجا در واقع در هر دقیقه 3000*400=1200000 پالس در دقیقه داریم پس در هر ثانیه 1200000/60=20000 پالس دارم خوب حالا اگه کریستال میکرو هم 8 مگاهرتز باشه فرکانس pwm چند باشه خوبه تا سرریز نداشته باشم

Amirkhan_0o0
25-08-2013, 15:16
سلام دوستان آيا مي شه زمين l293 که با 12 ولت کار مي کنه، رو به يه ولتاژ 6 ولت وصل کرد؟ که حروجي بين 6 و 12 سوئيچ کنه؟

avr_rva
19-12-2013, 17:21
سلام
یکی برا ما pid رو توضیح میده که اصلا چیه؟
خواهش میکنم به این متن های بی در و پیکر من رو ارجا ندید
یه جور ساده بگید تا بفهمم