instructables VHDL ძრავის სიჩქარის კონტროლი გადაწყვიტე მიმართულება და სიჩქარე მარცხენა და მარჯვენა სიჩქარის კონტროლერი
შენიშვნა: ეს გვერდი უფრო დიდი კონსტრუქციის ერთი ნაწილია. გთხოვთ, დარწმუნდეთ, რომ დაიწყეთ აქ, ასე რომ თქვენ გესმით, სად ჯდება შემდეგი უფრო დიდ პროექტში
დასრულდაview
ძრავის სიჩქარისა და მიმართულების კონტროლი არის ფოტოდეტექტორის რობოტის ორი ძირითადი განყოფილებიდან ერთ-ერთი, მეორე არის ფოტოდეტექტორი ან სინათლის დეტექტორის განყოფილება. მაშინ როცა ფოტოდეტექტორის განყოფილება ფოკუსირებულია რობოტის ხედვაზე, ძრავის სიჩქარისა და მიმართულების კონტროლის განყოფილება ფოკუსირებულია რობოტის მოძრაობაზე. ძრავის სიჩქარისა და მიმართულების კონტროლის მონაცემები მოცემულია ფოტოდეტექტორის განყოფილებიდან და იძლევა ფიზიკურ გამომავალს ძრავის მოძრაობის სახით.
ამ განყოფილების მიზანია გააკონტროლოს სინათლის მაძიებელი რობოტის როგორც მარცხენა, ისე მარჯვენა ძრავის სიჩქარე და მიმართულება. ამ მნიშვნელობების გადასაწყვეტად დაგჭირდებათ შუქის ზომა და მდებარეობა, რომელიც დაფიქსირდა კამერის მიერ და დამუშავებული ზღურბლით. თქვენ ასევე დაგჭირდებათ გაზომილი სიჩქარე თითოეულ ძრავზე. ამ შენატანებიდან თქვენ შეძლებთ PWM (პულსის სიგანის მოდულაცია) მნიშვნელობის გამოტანას თითოეული ძრავისთვის.
ამის მისაღწევად, თქვენ უნდა გააკეთოთ ეს VHDL მოდულები (ასევე ბმულით ქვემოთ):
- კონტროლი
- შეცდომის გაანგარიშება
- ორობითი კონვერტაცია
- სინათლის წყაროს არარსებობა
თქვენ შეგიძლიათ ნახოთ VHDL კოდი ამ განყოფილებისთვის აქ.
მარაგები
ჩვენ გირჩევთ კოდირებას ISE Design Suite 14.7-ით, რადგან ის ასევე შეიძლება გამოყენებულ იქნას VHDL კოდის შესამოწმებლად. თუმცა, კოდის BASYS 3-ში ასატვირთად, თქვენ უნდა დააინსტალიროთ Vivado (ვერსია 2015.4 ან 2016.4) და დაწეროთ შეზღუდვა .xdc გაფართოებით.
VHDL ძრავის სიჩქარის კონტროლი: გადაწყვიტეთ მიმართულება და სიჩქარე, მარცხენა და მარჯვენა სიჩქარის კონტროლერი: გვერდი 1
ინსტრუქციის ნაბიჯი
ნაბიჯი 1: კონტროლი
იმის გასაგებად, თუ როგორ უნდა აკონტროლოთ სინათლის მაძიებელი რობოტის ქცევა, ჩვენ ავხსნით რობოტის სასურველ ქცევას, როდესაც ის ხედავს სინათლის წყაროს. ეს ქცევა გაკონტროლდება სინათლის წყაროს პოზიციისა და ზომის მიხედვით.
გამოყენებული ალგორითმი არის RC რობოტის კონტროლერის ანალოგი, ერთი ბერკეტით, რომელიც შეიძლება შემობრუნდეს მარცხნივ ან მარჯვნივ, და მეორე ბერკეტი, რომელიც შეიძლება შემობრუნდეს წინ ან უკან.
სინათლის საძიებლად, თქვენ გინდათ, რომ ეს რობოტი მოძრაობდეს სწორი ხაზით, თუ სინათლის წყაროს პოზიცია რობოტის წინ არის. ამისათვის თქვენ გჭირდებათ იგივე სიჩქარე მარცხენა და მარჯვენა ძრავებზე. თუ შუქი მდებარეობს რობოტის მარცხენა მხარეს, გსურთ, რომ მარჯვენა ძრავა მოძრაობდეს უფრო სწრაფად, ვიდრე მარცხენა ძრავა, რათა რობოტმა შეძლოს მარცხნივ მოტრიალება სინათლისკენ. პირიქით, თუ შუქი მდებარეობს რობოტის მარჯვენა მხარეს, თქვენ გინდათ, რომ მარცხენა ძრავა მოძრაობდეს უფრო სწრაფად, ვიდრე მარჯვენა ძრავა, რათა რობოტმა შეძლოს მარჯვნივ გადატრიალება სინათლისკენ. ეს არის RC კონტროლერის მარცხენა ბერკეტის ანალოგი, სადაც შეგიძლიათ აკონტროლოთ, გსურთ თუ არა რობოტის გადაადგილება მარცხნივ, მარჯვნივ ან პირდაპირ.
შემდეგ, გსურთ, რომ რობოტი წინ წავიდეს, თუ სინათლის წყარო შორს არის (მცირე სინათლის წყარო), ან უკან გადავიდეს, თუ აღმოჩენილი სინათლის წყარო ძალიან ახლოს არის (დიდი სინათლის წყარო). თქვენ ასევე გინდათ, რომ რაც უფრო შორს არის რობოტი სინათლის წყაროსგან, მით უფრო სწრაფად მოძრაობს რობოტი. ეს არის RC კონტროლერის მარჯვენა ბერკეტის ანალოგი, სადაც შეგიძლიათ აკონტროლოთ, გსურთ წინსვლა თუ უკან და რამდენად სწრაფად გსურთ მისი მოძრაობა.
ამის შემდეგ შეგიძლიათ გამოიყვანოთ მათემატიკური ფორმულა თითოეული ძრავის სიჩქარისთვის და ჩვენ ვირჩევთ სიჩქარის დიაპაზონს -255-დან 255-მდე. უარყოფითი მნიშვნელობა ნიშნავს, რომ ძრავა ბრუნდება უკან, ხოლო დადებითი მნიშვნელობა ნიშნავს, რომ ძრავა შემობრუნდება წინ.
ეს არის ამ რობოტის მოძრაობის ძირითადი ალგორითმი. ამ მოდულის შესახებ მეტი ინფორმაციისთვის დააწკაპუნეთ აქ.
ნაბიჯი 2: შეცდომის გაანგარიშება
ვინაიდან თქვენ უკვე გაქვთ ძრავების მიზნობრივი სიჩქარე და მიმართულება, თქვენ ასევე გსურთ გაითვალისწინოთ ძრავების გაზომილი სიჩქარე და მიმართულება. თუ მან მიაღწია სიჩქარის მიზანს, ჩვენ გვინდა, რომ ძრავა მოძრაობდეს მხოლოდ მისი იმპულსით. თუ ეს ასე არ არის, ჩვენ გვინდა დავამატოთ მეტი სიჩქარე ძრავას. კონტროლის თეორიაში ეს ცნობილია, როგორც დახურული მარყუჟის უკუკავშირის კონტროლის სისტემა.
ამ მოდულის შესახებ მეტი ინფორმაციისთვის დააწკაპუნეთ აქ.
ნაბიჯი 3: ორობითი კონვერტაცია
წინა გამოთვლებიდან თქვენ უკვე იცით თითოეული ძრავისთვის საჭირო მოქმედება. თუმცა, გამოთვლები კეთდება ხელმოწერილი ორობითი გამოყენებით. ამ მოდულის მიზანია ამ ხელმოწერილი მნიშვნელობების გადაქცევა მნიშვნელობად, რომელიც შეიძლება წაიკითხოს PWM გენერატორის მიერ, რომელიც არის მიმართულება (საათის ისრის მიმართულებით ან საათის ისრის საწინააღმდეგოდ) და სიჩქარე (0-დან 255-მდე). ასევე, ვინაიდან ძრავიდან გამოხმაურება იზომება ხელმოუწერელ ბინარში, საჭიროა სხვა მოდული ხელმოუწერელი მნიშვნელობების (მიმართულება და სიჩქარე) ხელმოწერილ მნიშვნელობად გადასაყვანად, რომელიც შეიძლება გამოითვალოს შეცდომის გამოთვლის მოდულით. ამ მოდულის შესახებ მეტი ინფორმაციისთვის დააწკაპუნეთ აქ.
ნაბიჯი 4: სინათლის წყაროს არარსებობა
თქვენ შექმენით რობოტი, რომელიც მოძრაობს სინათლის საძიებლად, როცა რობოტი სინათლეს აღმოაჩენს. მაგრამ რა მოხდება, როცა რობოტი სინათლეს ვერ აღმოაჩენს? ამ მოდულის მიზანია უკარნახოს რა უნდა გააკეთოს ასეთი მდგომარეობის დროს.
ყველაზე მარტივი გზა და სინათლის წყაროს მოსაძებნად არის რობოტის ბრუნვა ადგილზე. რამდენიმე წამის შებრუნების შემდეგ, თუ რობოტმა ჯერ კიდევ ვერ იპოვა სინათლის წყარო, გსურთ რობოტმა შეწყვიტოს მოძრაობა, ენერგიის დაზოგვის მიზნით. წამების კიდევ ერთი მითითებული რაოდენობის შემდეგ, რობოტი კვლავ უნდა შემობრუნდეს ადგილზე, რათა ეძებოს შუქი. ამ მოდულის შესახებ მეტი ინფორმაციისთვის დააწკაპუნეთ აქ.
ნაბიჯი 5: როგორ მუშაობს
ამ განმარტებისთვის შეგიძლიათ მიმართოთ ზემოთ მოცემულ სურათს. როგორც აღინიშნა ამ ინსტრუქტაჟის დასაწყისში, თქვენ დაგჭირდებათ შეყვანები „ზომა“ და „პოზიცია“ ზღვრული განყოფილებიდან. იმისათვის, რომ დარწმუნდეთ, რომ ეს შეყვანები მართებულია (მაგampროდესაც თქვენ მიიღებთ ზომას = 0, ზომა ნამდვილად ნულია, რადგან კამერა არ ცნობს შუქს და არა იმიტომ, რომ კამერა ჯერ კიდევ ინიციალიზაციას აკეთებდა) ასევე დაგჭირდებათ რაიმე სახის ინდიკატორი, რომელსაც ჩვენ ვუწოდებთ "READY". ამ მონაცემებს დაამუშავებს კონტროლი (Ctrl. vhd) თითოეული ძრავის მიზნობრივი სიჩქარის დასადგენად (9 ბიტი, ხელმოწერილი).
ძრავზე უფრო სტაბილური გამოსავლისთვის, გსურთ გამოიყენოთ უკუკავშირი დახურულ სისტემაში. ამისათვის საჭიროა თითოეული ძრავის შეყვანა "მიმართულება" და "სიჩქარე" ძრავის სიჩქარის საზომი განყოფილებიდან. ვინაიდან გსურთ ამ შენატანების ჩართვა თქვენს გამოთვლებში, თქვენ მოგიწევთ გადააკეთოთ ეს ხელმოუწერელი მნიშვნელობები 9-ბიტიან ხელმოწერილ ორობით. ეს კეთდება ხელმოუწერელი ორობითი კონვერტორის მიერ (US2S.vhd).
რასაც აკეთებს შეცდომის გამოთვლა (შეცდომა. vhd) არის გამოკლებული გაზომილი სიჩქარე მიზნის სიჩქარეს, რათა დადგინდეს მოქმედება თითოეული ძრავისთვის. ეს ნიშნავს, რომ როდესაც ორივეს ერთი და იგივე მნიშვნელობა აქვს, გამოკლება ხდება ნულოვანი და ძრავა მოძრაობს მხოლოდ მისი იმპულსით. თქვენ ასევე შეგიძლიათ დაამატოთ გამრავლების კოეფიციენტი, რათა რობოტმა მიაღწიოს მიზანს უფრო სწრაფად.
ვინაიდან ძრავის კონტროლერს სჭირდება თითოეული ძრავის სიჩქარე და მიმართულება, თქვენ უნდა გადათარგმნოთ მოქმედების ხელმოწერილი მნიშვნელობები ორ ცალკეულ ხელმოუწერელ მნიშვნელობებად: სიჩქარე (1 ბიტი) და მიმართულება (8 ბიტი). ეს კეთდება ხელმოწერიდან ხელმოუწერელ ორობითი გადამყვანით (S2US.vhd) და გახდება ძრავის მართვის განყოფილების შეყვანა.
ჩვენ ასევე დავამატეთ მოდული იმის დასადგენად, თუ რა უნდა გავაკეთოთ, როდესაც სინათლე არ არის გამოვლენილი (შუქის მრიცხველი არ არის. Bhd). ვინაიდან ეს მოდული ძირითადად მრიცხველია, ის დათვლის რამდენ ხანს სჭირდება რობოტს ბრუნვა ან ადგილზე დარჩენა. ეს უზრუნველყოფს, რომ რობოტი "ხედავს" თავის გარემოს და არა მხოლოდ იმას, რაც მის წინ არის და დაზოგავს ბატარეის ენერგიას, როდესაც სინათლის წყარო ნამდვილად არ არის ხელმისაწვდომი.
ნაბიჯი 6: შეუთავსეთ Files
დააკავშიროთ files, თქვენ უნდა დააკავშიროთ სიგნალები თითოეული მოდულიდან. ამისათვის თქვენ უნდა შექმნათ ახალი უმაღლესი დონის მოდული file. ჩადეთ წინა მოდულების შეყვანა და გამომავალი კომპონენტებად, დაამატეთ სიგნალები კავშირებისთვის და მიამაგრეთ თითოეული პორტი შესაბამის წყვილს. შეგიძლიათ მიმართოთ კავშირებს ზემოთ მოცემულ ილუსტრაციაზე და გადახედოთ კოდს აქ.
ნაბიჯი 7: გამოცადეთ
მას შემდეგ, რაც დაასრულებთ მთლიან კოდს, თქვენ უნდა იცოდეთ მუშაობს თუ არა თქვენი კოდი დაფაზე ატვირთვამდე, განსაკუთრებით იმიტომ, რომ კოდის ნაწილები შეიძლება შედგენილი იყოს სხვადასხვა ადამიანის მიერ. ამისათვის საჭიროა ტესტის მაგიდა, სადაც თქვენ შეიყვანთ მოტყუებულ მნიშვნელობებს და ნახავთ, იქცევა თუ არა კოდი ისე, როგორც ჩვენ გვინდა, რომ მოიქცეს. შეგიძლიათ დაისვენოთ, დაიწყოთ თითოეული მოდულის ტესტირება და თუ ისინი ყველა სწორად მუშაობენ, შეგიძლიათ შეამოწმოთ უმაღლესი დონის მოდული.
ნაბიჯი 8: სცადეთ იგი აპარატურაზე
მას შემდეგ, რაც თქვენი კოდი თქვენს კომპიუტერზე შემოწმდება, შეგიძლიათ შეამოწმოთ კოდი რეალურ აპარატურაზე. თქვენ უნდა გააკეთოთ შეზღუდვა file Vivado-ზე (.xdc file BASYS 3-ისთვის) აკონტროლოს რომელი შეყვანები და გამომავალი რომელ პორტებში მიდის.
მნიშვნელოვანი რჩევა: ჩვენ ვისწავლეთ რთული გზა, რომ ელექტრო კომპონენტებს შეიძლება ჰქონდეთ დენის ან მოცულობის მაქსიმალური მნიშვნელობაtagეს. დარწმუნდით, რომ მიმართეთ მონაცემთა ცხრილს მნიშვნელობებისთვის. PMOD HB5-სთვის, აუცილებლად დააყენეთ მოცულობაtage დენის წყაროდან 12 ვოლტზე (რადგან ეს არის საჭირო მოცულობაtage ძრავისთვის), ხოლო დენი, როგორც საჭიროა ძრავის გადაადგილებისთვის.
ნაბიჯი 9: შეუთავსეთ იგი სხვა ნაწილებს
თუ წინა ნაბიჯები წარმატებული იყო, დააკავშირეთ კოდი სხვა ჯგუფებთან, რათა საბოლოო კოდი აიტვირთოს რობოტში. მაშინ, ვოილა! თქვენ წარმატებით შექმენით სინათლის მაძიებელი რობოტი.
ნაბიჯი 10: კონტრიბუტორები
მარცხნიდან მარჯვნივ:
- ანტონიუს გრიგორიუს დივენ რივალდი
- ფელიქს ვიგუნა
- ნიკოლას სანჯაია
- რიჩარდ მედიანტო
Ძალიან კარგი: VHDL ძრავის სიჩქარის კონტროლი: გადაწყვიტეთ მიმართულება და სიჩქარე, მარცხენა და მარჯვენა სიჩქარის კონტროლერი: გვერდი 6
გმადლობთ ხელახლაviewing! ეს პროექტი რეალურად არის კლასის პროექტის მხოლოდ ერთი ნაწილი (Light Seeking Robot BASYS 3 დაფით და OV7670 კამერით), ამიტომ მალე დავამატებ ლინკს კლასის ინსტრუქტაჟზე!
გასაოცარია: მოუთმენლად ველოდები ყველაფერს ერთად.
დოკუმენტები / რესურსები
![]() |
instructables VHDL ძრავის სიჩქარის კონტროლი გადაწყვიტე მიმართულება და სიჩქარე მარცხენა და მარჯვენა სიჩქარის კონტროლერი [pdf] ინსტრუქციები VHDL ძრავის სიჩქარის კონტროლი გადაწყვიტოს მიმართულება და სიჩქარის მარცხნივ და მარჯვნივ სიჩქარის კონტროლერი, VHDL ძრავის სიჩქარის კონტროლი, გადაწყვიტოს მიმართულება და სიჩქარის მარცხნივ და მარჯვნივ სიჩქარის კონტროლერი |