Სარჩევი:

PID კონტროლერი VHDL: 10 ნაბიჯი
PID კონტროლერი VHDL: 10 ნაბიჯი

ვიდეო: PID კონტროლერი VHDL: 10 ნაბიჯი

ვიდეო: PID კონტროლერი VHDL: 10 ნაბიჯი
ვიდეო: PID Controller • PID კონტროლერი 2024, ნოემბერი
Anonim
PID კონტროლერი VHDL
PID კონტროლერი VHDL
PID კონტროლერი VHDL
PID კონტროლერი VHDL

ეს პროექტი იყო ჩემი საბოლოო პროექტი კორკის ტექნოლოგიის ინსტიტუტის ბაკალავრის ხარისხის დასასრულებლად. ეს გაკვეთილი იყოფა ორ ნაწილად, პირველი მოიცავს PID კოდის ძირითად ნაწილს, რომელიც არის პროექტის მთავარი მიზანი და მეორე ნაწილი მოიცავს კოდის ურთიერთკავშირს, რომელიც განხორციელდა Basys 3 – ის განვითარების დაფაზე და შემდეგ დაუკავშირდა პინგ -პონგის ბურთს ლევიტაციის გაყალბება. თეორიული და აშენებული გაყალბება ნაჩვენებია თანდართულ სურათებში.

მარაგები

სიმულაცია

Vivado Design Suite

განხორციელება (ფრჩხილებში არის ის, რაც გამოყენებული იყო ჩემი პროექტისთვის)

  • FPGA დაფა, რომელსაც შეუძლია ციფრული/ანალოგური სიგნალების შეყვანა და გამოტანა (Basys 3)
  • სისტემა, რომელიც კონტროლირებადია ერთი უკუკავშირის წყაროსთან ერთად (პინგ -პონგის ბურთის ლევიტაციის რიგი)

რიგი

  • პოლიკარბონატის მილი
  • 5V ვენტილატორი
  • IR სენსორი
  • 3D ნაბეჭდი ბაზა (ეს სახელმძღვანელო ასახავს გაყალბების კონსტრუქციას, რომელსაც სენსორი დაემატა უკუკავშირის უზრუნველსაყოფად, მაგრამ გაყალბება ზოგადად იგივე იყო)
  • 1k რეზისტორები
  • პურის დაფა 5V და GND რკინიგზით

ნაბიჯი 1: ძირითადი კონტროლის თეორია

ძირითადი კონტროლის თეორია
ძირითადი კონტროლის თეორია

მე ვფიქრობდი, რომ კონტროლის ზოგიერთი ძირითადი თეორიის დამატება მისცემდა ყველას, ვისაც სურს სცადოს და გამოიყენოს ეს კოდი, კარგი საფუძველი იყოს დასაწყებად.

თანდართული დიაგრამა არის ერთი მარყუჟის კონტროლერის განლაგება.

r- არის მითითება. ეს განსაზღვრავს სად უნდა წავიდეს კონტროლერი.

e-Is შეცდომა. ეს არის განსხვავება თქვენს სენსორზე და თქვენს მითითებაზე. მაგალითად. e = r- (d+სენსორის გამომავალი).

K- ეს არის კონტროლერი. კონტროლერი შეიძლება შედგებოდეს სამი ტერმინისგან. ეს ტერმინებია P, I და D. სამივე ტერმინს აქვს მულტიპლიკატორები Kp, Ki და Kd. ეს მნიშვნელობები განსაზღვრავს კონტროლერის პასუხს.

  • P- პროპორციული. მკაცრად P კონტროლერს ექნება გამოსავალი მიმდინარე შეცდომის პროპორციული. P კონტროლერი არის მარტივი განსახორციელებლად და სწრაფად მუშაობს, მაგრამ ვერასოდეს მიაღწევს თქვენს მიერ მითითებულ მნიშვნელობას (მითითება).
  • მე-ინტეგრალი. მკაცრად ინტეგრალური კონტროლერი შეაჯამებს წინა შეცდომას, რომელიც საბოლოოდ მიაღწევს სასურველ მითითებას. ეს კონტროლერი ზოგადად ძალიან ნელია განსახორციელებლად. P ტერმინის დამატება შეამცირებს მითითების მისაღწევად საჭირო დროს. დრო, რომლის დროსაც ხდება შეყვანის ნიმუშის აღება, გასათვალისწინებელია, რომ ინტეგრალური ტერმინი ინტეგრირებულია დროის მიმართ.
  • დ-წარმოებული. წარმოებულ ტერმინს ექნება გამოსავალი, რომელიც დამოკიდებულია შეცდომის შეცვლის სიჩქარეზე. ეს ტერმინი ჩვეულებრივ გამოიყენება P ტერმინთან ან PI ტერმინთან ერთად. ვინაიდან ეს პროპორციულია შეცდომის შეცვლის სიჩქარესთან, მაშინ ხმაურიან სინგლს გააძლიერებს ხმაური, რამაც შეიძლება გამოიწვიოს სისტემის არასტაბილურობა. დრო ასევე უნდა იქნას გათვალისწინებული, რადგან წარმოებული ტერმინი ასევე ეხება დროს.

U- ეს არის საკონტროლო სიგნალი. ეს სიგნალი არის შეყვანის გაყალბება. ამ პროექტის შემთხვევაში u არის PWM სიგნალის შეყვანა ვენტილატორზე სიჩქარის შესაცვლელად.

G- ეს არის სისტემა, რომელიც კონტროლდება. ამ სისტემის მათემატიკური მოდელირება შესაძლებელია S ან Z დომენში. სისტემები შეიძლება იყოს რიგით მეოთხეზე, მაგრამ ვიღაცისთვის, ვინც კონტროლს იწყებს, პირველი წესრიგის სისტემა უნდა ვივარაუდოთ, რადგან ამის გამოთვლა გაცილებით ადვილია. ეს არის უამრავი ინფორმაცია მოდელირების სისტემის შესახებ, რომელიც შეიძლება მოიძებნოს ინტერნეტში. სენსორის შერჩევის დროდან გამომდინარე, სისტემის მოდელი არის დისკრეტული ან უწყვეტი. ეს მკვეთრ გავლენას ახდენს მაკონტროლებელზე, ამიტომ რეკომენდებულია ორივეზე კვლევა.

დ- ეს არის დარღვევა, რომელიც ემატება სისტემას. დარღვევა არის გარე ძალები, რომლებსაც სისტემის მოდელი არ ითვალისწინებს. ამის მარტივი მაგალითი იქნება უპილოტო საფრენი აპარატი, რომლის გადაადგილებაც გსურთ 5 მეტრზე, ქარის ნაკადი მოდის და ჩამოაგდებს თვითმფრინავს 1 მეტრზე, კონტროლერი შეცვლის დრონს მას შემდეგ, რაც არეულობა მოხდება. ეს ცნობილია როგორც დარღვევა, რადგან ქარი განმეორებადია, ასე რომ მისი მოდელირება შეუძლებელია.

კონტროლერის დასარეგულირებლად ძალიან ბევრი წესია დასახელებული, მაგრამ ზოგიერთი კარგი, რაც მე დავიწყე, არის კოენ კუნი და ზიგერ ნიკოლსი.

სისტემის მოდელირება ზოგადად ყველაზე მნიშვნელოვანი ნაწილია ზუსტი მოდელის გარეშე, შემუშავებული კონტროლერი არ გამოეხმაურება სურვილისამებრ.

აქ უნდა იყოს საკმარისი ინფორმაცია იმის გასაგებად, თუ როგორ მუშაობს კონტროლერი ცალკეულ კვლევებთან ერთად და კონტროლერის ქვემოთ მოყვანილი კოდი სამი ტერმინის ნებისმიერი კომბინაციით შეიძლება განხორციელდეს.

ნაბიჯი 2: PID კოდის წერა

PID კოდის წერა
PID კოდის წერა

ქვემოთ მოცემულ ბმულზე ნაპოვნი კოდის ძირითადი პრინციპი იქნა აღებული და შეცვლილი, რადგან ეს კოდი არ მუშაობდა, მაგრამ მას ჰქონდა მრავალი პრინციპი, რამაც კარგი საწყისი წერტილი მისცა. ორიგინალური PID კოდს ჰქონდა რამდენიმე შეცდომა, როგორიცაა

  • უწყვეტი ოპერაცია - კონტროლერი მემკვიდრეობით არის დისკრეტული, ამიტომ კონტროლერი უნდა შეიქმნას მხოლოდ სამივე ტერმინის გამოსათვლელად, როდესაც ახალი შეყვანა იყო შესაძლებელი. ამ სიმულაციის შემუშავება იყო იმის შემოწმება, შეიცვალა თუ არა შეყვანა ბოლო დროს. ეს მხოლოდ კოდის სწორად მუშაობის სიმულაციისთვის მუშაობს.
  • საცდელი დრო გავლენას არ ახდენს ინტეგრალურ და წარმოებულ ტერმინებზე - კონტროლერმა ასევე არ გაითვალისწინა დრო, როდესაც ნიმუშის აღება მოხდა, ამიტომ დრო დაემატა მნიშვნელობას, რომელიც დაემატა დროისათვის, რათა უზრუნველყოს ინტეგრალური და წარმოებული ტერმინების სწორი მოქმედება. ინტერვალი
  • შეცდომა შეიძლება იყოს მხოლოდ პასიური - შეცდომის გამოთვლისას ასევე იყო პრობლემა, რადგან შეცდომა ვერასოდეს იქნებოდა უარყოფითი მნიშვნელობისას, როდესაც უკუკავშირის სიგნალმა გადააჭარბა საცნობარო მნიშვნელობას, რომ კონტროლერი გააგრძელებდა გამომუშავების გაზრდას, როდესაც ის უნდა შემცირდეს.
  • ღირებულებების მოპოვება 3 ტერმინისთვის იყო მთელი რიცხვი - ჩემი გამოცდილებით მე ყოველთვის ვხვდებოდი, რომ კონტროლერის 3 ტერმინის მნიშვნელობები ყოველთვის უნდა იყოს მცურავი წერტილების რიცხვი იმის გამო, რომ Basys 3 -ს არ აქვს მცურავი წერტილის ნომერი, ღირებულებებს უნდა მიენიჭოს მრიცხველის მნიშვნელობა და მნიშვნელი მნიშვნელობა, რომელიც ამ პრობლემის გადალახვას ემსახურება.

ქვემოთ მოცემულია კოდი, სადაც არის ძირითადი კოდი და საცდელი მაგიდა კოდის სიმულაციისთვის. საფოსტო საქაღალდე შეიცავს Vivado– ში უკვე არსებულ კოდს და ტესტბენჩს, რათა გაიხსნას დროის დაზოგვის მიზნით. ასევე არსებობს კოდის იმიტირებული ტესტი, რომელიც აჩვენებს გამომავალი მინიშნებას, რაც ადასტურებს, რომ კოდი მუშაობს ისე, როგორც ის იყო განკუთვნილი.

ნაბიჯი 3: როგორ შეცვალოთ თქვენი სისტემა

პირველ რიგში, ყველა სისტემა ერთნაირი არ არის, უნდა გავაანალიზოთ სისტემის შესავალი და გამოსავალი. ჩემს შემთხვევაში, ჩემი გაყალბების გამოსავალი, რომელმაც მომცა პოზიციის მნიშვნელობა, იყო ანალოგური სიგნალი, ხოლო სისტემაში შეყვანა იყო PWM სიგნალი. რაც იმას ნიშნავს, რომ ADC კონვერტაცია იყო საჭირო. საბედნიეროდ Basys 3-ს აქვს ჩაშენებული ADC, ასე რომ ეს არ იყო პრობლემა IR სენსორის გამომუშავება უნდა შემცირდეს 0V-1V– მდე, რადგან ეს არის საბორტო ADC– ის მაქსიმალური დიაპაზონი. ეს გაკეთდა ძაბვის გამყოფი მიკროსქემის გამოყენებით, რომელიც დამზადებული იყო 1k რეზისტორებისაგან, რომლებიც შეიქმნა როგორც 3k რეზისტორი სერიულად 1k რეზისტორით. ანალოგური სიგნალი ახლა ADC– ის დიაპაზონში იყო. PWM შეყვანის თაყვანისმცემელს შეუძლია პირდაპირ ამოძრავებს PMOD პორტის გამომუშავება Basys 3 -ზე.

ნაბიჯი 4: I/O უპირატესობა Basys 3 -ზე

Basys 3 -ზე არის რამდენიმე I/O შესავალი, რაც კოდის გაშვებისას უფრო ადვილია გამართვის საშუალება. I/O შეიქმნა შემდეგნაირად.

  • შვიდი სეგმენტის ჩვენება - ეს გამოიყენებოდა ADC– ზე მითითების მნიშვნელობისა და მნიშვნელობის საჩვენებლად ვოლტებში. შვიდი სეგმენტის ჩვენების პირველი ორი ციფრი აჩვენებს ორ ციფრს ADC მნიშვნელობის ათწილადის შემდეგ, რადგან მნიშვნელობა 0-1V- ს შორისაა. სამი და ოთხი ციფრი შვიდი სეგმენტის ჩვენებაზე აჩვენებს საცნობარო მნიშვნელობას ვოლტებში ეს ასევე აჩვენებს პირველ ორ ციფრს ათწილადის შემდეგ, რადგან დიაპაზონი ასევე 0-1 ვ-ს შორისაა.
  • 16 LED- ები - LED- ები გამოიყენებოდა გამომავალი ღირებულების საჩვენებლად, რომ გამომავალი გაჯერებულიყო და გამომავალი სწორად იცვლებოდა.

ნაბიჯი 5: ხმაური IR სენსორის გამომავალზე

სენსორის გამოსვლაზე იყო ხმაური ამ პრობლემის გადასაჭრელად, შეიქმნა საშუალო ბლოკი, რადგან ეს საკმარისი იყო და ძალიან ცოტა სამუშაო დასჭირდა.

ნაბიჯი 6: კოდის განლაგება

კოდის საერთო განლაგება
კოდის საერთო განლაგება

არის ერთი კოდი, რომელზეც ჯერ არ არის საუბარი. ეს კოდი არის საათის გამყოფი, რომელსაც ტრიგერი ეწოდება. ეს ცოტა კოდი იწვევს ADC კოდის შერჩევას. ADC კოდს მაქსიმუმ 2us სჭირდება, ასე რომ, მიმდინარე შეყვანისა და წინა შეყვანის საშუალო მაჩვენებელია. 1us ამის შემდეგ საშუალო კონტროლერი ითვლის P, I და D პირობებს. კოდის განლაგება და ინტერფეისი ნაჩვენებია კავშირგაბმულობის დიაგრამაში.

ნაბიჯი 7: ტესტირება

ტესტირება
ტესტირება

კოდი განლაგებულია Basys 3 -ზე და ჩაწერილია შემდეგი პასუხი. მითითება შეიცვალა 2 მნიშვნელობას შორის. რაც არის დასრულებული პროექტის კოდში თანდართული. თანდართული ვიდეო აჩვენებს ამ პასუხს რეალურ დროში. რხევები უფრო სწრაფად იშლება მილის ზედა ნაწილში, რადგან კონტროლერი შეიქმნა ამ რეგიონისთვის, მაგრამ კონტროლერი არ მუშაობს ისე ქვემოთ, როგორც სისტემა არაწრფივი.

ნაბიჯი 8: ცვლილებები პროექტის გასაუმჯობესებლად

პროექტი მუშაობდა ისე, როგორც განზრახული იყო, მაგრამ იყო რამდენიმე მოდიფიკაცია, რომელსაც მე გავაკეთებდი პროექტის გახანგრძლივების შემთხვევაში.

  • განახორციელეთ ციფრული ფილტრი ხმაურის სრულად შესამცირებლად
  • დააყენეთ ADC კოდი, საშუალო კოდი და ინტეგრაციის კოდი თანმიმდევრულად გასააქტიურებლად.
  • გამოიყენეთ განსხვავებული სენსორი უკუკავშირისთვის, რადგან ამ სენსორის არაწრფივმა პასუხმა გამოიწვია ამ პროექტში მრავალფეროვანი პრობლემა, მაგრამ ეს უფრო საკონტროლო მხარეა და არა კოდირების მხარე.

ნაბიჯი 9: დამატებითი სამუშაო

ზაფხულის განმავლობაში მე დავწერე კოდი კასკადის კონტროლერისთვის და შევიტანე ცვლილებები, რომლებიც რეკომენდირებულია ერთი მარყუჟის PID კონტროლერისთვის.

ცვლილებები PID რეგულარულ კონტროლერში

· დანერგილია FIR ფილტრის შაბლონი, კოეფიციენტები უნდა შეიცვალოს სასურველი გათიშვის სიხშირის მისაღწევად. ამჟამინდელი განხორციელება არის 5-ჩამოსასხმელი ნაძვის ფილტრი.

· კოდის დრო დაყენებულია ისე, რომ ფილტრი ავრცელებს ახალ ნიმუშს და როდესაც გამომავალი მზად იქნება ინტეგრალური ტერმინი დაიწყება, რაც ნიშნავს რომ კოდი შეიძლება შეიცვალოს სამუშაოდ სხვადასხვა დროის ინტერვალებით შეცვლის ნაკლები ძალისხმევით კოდი.

· ძირითადი მარყუჟისათვის, რომელიც პროგრამას ამოძრავებს, ასევე შემცირდა, რადგან ამ მარყუჟისათვის 7 ციკლი იყო, მანამდე შეანელა კონტროლერის მაქსიმალური მუშაობის სიჩქარე, მაგრამ მარყუჟის t 4 მდგომარეობის შემცირებით ეს ნიშნავს, რომ კოდის მთავარ ბლოკს შეუძლია მუშაობა 4 საათის ციკლის განმავლობაში.

ტესტირება

ეს კონტროლერი შემოწმდა და შესრულდა ისე, როგორც განზრახული იყო, მე არ გადავიღე ამ მტკიცებულების სურათები, რადგან პროექტის ეს ნაწილი მხოლოდ გონების აქტიური შესანარჩუნებლად იყო. ტესტირების კოდი ასევე testbench იქნება აქ, ასე რომ თქვენ შეგიძლიათ შეამოწმოთ პროგრამა განხორციელებამდე.

რატომ გამოიყენოთ კასკადის კონტროლერი

კასკადის კონტროლერი აკონტროლებს სისტემის ორ ნაწილს. ამ შემთხვევაში კასკადის კონტროლერს ექნება გარე მარყუჟი, რომელიც არის კონტროლერი, რომელსაც აქვს უკუკავშირი IR სენსორისგან. შიდა მარყუჟს აქვს უკუკავშირი ტაქომეტრის იმპულსებს შორის დროის სახით, რაც განსაზღვრავს ვენტილატორის ბრუნვის სიჩქარეს. კონტროლის განხორციელებით, უკეთესი რეაქციის მიღწევა შესაძლებელია სისტემის გარეთ.

როგორ მუშაობს კასკადის კონტროლერი?

კონტროლერის გარე მარყუჟი მიაწოდებს მნიშვნელობას პულტებს შორის შიდა მარყუჟის კონტროლერს. ეს კონტროლერი გაზრდის ან შეამცირებს სამუშაო ციკლს, რათა მიაღწიოს სასურველ დროს იმპულსებს შორის.

მოდიფიკაციის განხორციელება რიგზე

სამწუხაროდ, მე ვერ მოვახერხე ამ ცვლილებების განხორციელება გაყალბებაზე, რადგან მე მასზე წვდომა არ მქონდა. მე გამოვცადე შესწორებული ერთჯერადი მარყუჟის კონტროლერი, რომელიც მუშაობს დანიშნულებისამებრ. ჯერ არ გამომიცდია კასკადის კონტროლერი. მე დარწმუნებული ვარ, რომ კონტროლერი იმუშავებს, მაგრამ შეიძლება საჭირო გახდეს მცირედი ცვლილებები, რათა ის იმუშაოს, როგორც მიზნად ისახავს.

ტესტირება

მე ვერ შევამოწმე კონტროლერი, რადგან ძნელი იყო ორი შეყვანის წყაროს სიმულაცია. ერთადერთი პრობლემა, რასაც კასკადის კონტროლერთან ვხედავ, არის ის, რომ როდესაც გარე მარყუჟი ცდილობს გაზარდოს შიდა მარყუჟისთვის მიწოდებული მითითებული წერტილი, რომ უფრო დიდი დაყენების წერტილი რეალურად არის ქვედა RPS გულშემატკივართათვის, მაგრამ ეს ადვილად შეიძლება დაფიქსირდეს. მიიღეთ მითითებული წერტილი მითითებული წერტილის სიგნალის მაქსიმალური მნიშვნელობიდან (4095 - setpoint - tacho_result).

ნაბიჯი 10: დასკვნა

საერთო ჯამში პროექტი ფუნქციონირებს ისე, როგორც ვგეგმავდი პროექტის დაწყებისას, ასე რომ მე კმაყოფილი ვარ შედეგით. გმადლობთ, რომ გამონახეთ დრო და წაიკითხეთ ჩემი მცდელობა, განვავითარო PID კონტროლერი VHDL– ში. თუ ვინმე ცდილობს განახორციელოს ამგვარი ვარიაცია სისტემაში და მოითხოვს რაიმე სახის დახმარებას კოდის გასაგებად დამიკავშირდით, მე უმოკლეს ვადაში ვუპასუხებ. ვინც ცდილობს დამატებით სამუშაოს, რომელიც შედგენილია, მაგრამ არ განხორციელებულა, გთხოვთ დამიკავშირდეთ ნებისმიერი ხელით. მე ძალიან ვაფასებ, თუ ვინმემ, ვინც ამას განახორციელებს, გამაგებინოს როგორ მიდის.

გირჩევთ: