اطلاعیه

Collapse
No announcement yet.

PID controler

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    PID controler

    سلام
    من می خوام یک کنترلر PID رو روی spartan3e پیاده کنم.اگر بخوام بشینم کد بنویسم خیلی زیاد میشه( نمی خوام از fix point استفاده کنم) و floating point هم که فضا زیاد می خواد.پس مجبورم بشینم floating point رو خودم اصلاحش کنم.مثلا یک core بنویسم که برای ضرب دو تا عدد اعشاری قسمت های صحیح و اعشاری رو به صورت جداگانه در هم ضرب و نتیجه ی نهایی رو در اختیارمون بگذارده.(مثال:2.75*3.5 رو به صورت 2*3 و 5 *75 ) حساب کنه و قسمت اعشاری و صحیح رو جداگانه به خروجی منتقل کنه!!!
    خوب این که یک کمی زیاد طول می کشه.تازه بعد از پیاده سازی PID می خوام servo motor رو هم باهاش کنترل کنم.اینا همش یک مقدار وقت گیره! :nerd:
    حالا من از دوستانی که تجربه دارن سوال دارم که اگر از system generator استفاده کنم و PID ام رو پیاده اش کنم می تونم باز هم به همین صورت که گفتم محاسبات رو انجام بدم؟ آخه system generator خروجی هاش fix point هستند!!!
    کسی راه حل یا پیشنهادی داره؟ :read:

    #2
    پاسخ : PID controler

    سلام،راستش من تجربه ی خاصی در کار با FPGA ندارم،ولی اینو میدونم که پیاده سازی واحد Floating Point به این راحتی ها نیست،در ضمن اصولا در مورد PID به دقت اعشاری خیلی بالایی نیاز نداری(و فکر هم نکنم خیلی قسمت integer بزرگ باشد)،بنابراین به نظر من بهترین کار پیاده سازی یک واحد fixed-point سفارشی هستش،مثلا 16:16 (16 بیت برای قسمت اعشاری و 16 بیت برای قسمت صحیح)،که ضرب یا جمع چنین اعدادی هم کار چندان سختی نیست.
    و البته fixed-point مثلا منابع کمتری مصرف میکنه.---خلاصه اینکه متناسب با دقت مورد نیازت دست به پیاده سازی یک واحد fixed-point سفارشی بزنی راه حلی عملی تر به نظر میرسه.

    دیدگاه


      #3
      پاسخ : PID controler

      نوشته اصلی توسط soleares
      سلام،راستش من تجربه ی خاصی در کار با FPGA ندارم،ولی اینو میدونم که پیاده سازی واحد Floating Point به این راحتی ها نیست،در ضمن اصولا در مورد PID به دقت اعشاری خیلی بالایی نیاز نداری(و فکر هم نکنم خیلی قسمت integer بزرگ باشد)،بنابراین به نظر من بهترین کار پیاده سازی یک واحد fixed-point سفارشی هستش،مثلا 16:16 (16 بیت برای قسمت اعشاری و 16 بیت برای قسمت صحیح)،که ضرب یا جمع چنین اعدادی هم کار چندان سختی نیست.
      و البته fixed-point مثلا منابع کمتری مصرف میکنه.---خلاصه اینکه متناسب با دقت مورد نیازت دست به پیاده سازی یک واحد fixed-point سفارشی بزنی راه حلی عملی تر به نظر میرسه.
      یک مشکلی که دارم اینه که ورودی و خروجی این pid باید به A/D و D/A وصل بشه.باید برم ببینم چه طوری با picoblaze خروجی A/D ام رو به بلوک pid میرسونم.بعدش میآم همینجا ادامه می دم بحثو. آخه خروجی A/D ام 32 بیتی tow's compliment هستش.باید ببینم چه طوری این خروجی رو با سیستم عددی PID ام وفق بدم تا بعدش بهتر تصمیم بگیرم.بازم ممنون.چند هفته دیگه این موضوع رو ادامه می دم.فعلا برم روش کار کنم ببینم چی در میآد.

      دیدگاه

      لطفا صبر کنید...
      X