Სარჩევი:

გამოიყენეთ Arduino ძრავის RPM– ის საჩვენებლად: 10 ნაბიჯი (სურათებით)
გამოიყენეთ Arduino ძრავის RPM– ის საჩვენებლად: 10 ნაბიჯი (სურათებით)

ვიდეო: გამოიყენეთ Arduino ძრავის RPM– ის საჩვენებლად: 10 ნაბიჯი (სურათებით)

ვიდეო: გამოიყენეთ Arduino ძრავის RPM– ის საჩვენებლად: 10 ნაბიჯი (სურათებით)
ვიდეო: როგორ მოვახდინოთ სარეცხი მანქანის ძრავა / უნივერსალური ძრავის მუდმივი სიჩქარისა და ბრუნვის კონტროლის 2024, ნოემბერი
Anonim
გამოიყენეთ Arduino ძრავის RPM– ის საჩვენებლად
გამოიყენეთ Arduino ძრავის RPM– ის საჩვენებლად
გამოიყენეთ Arduino ძრავის RPM– ის საჩვენებლად
გამოიყენეთ Arduino ძრავის RPM– ის საჩვენებლად
გამოიყენეთ Arduino ძრავის RPM– ის საჩვენებლად
გამოიყენეთ Arduino ძრავის RPM– ის საჩვენებლად

ეს სახელმძღვანელო ასახავს იმას, თუ როგორ გამოვიყენე Arduino UNO R3, 16x2 LCD დისპლეი I2C– ით და LED ზოლები, რომლებიც გამოიყენება როგორც ძრავის სიჩქარის საზომი და სინათლის გადასაადგილებლად ჩემს Acura Integra– ში. იგი დაწერილია ვიღაცის გამოცდილების ან Arduino პროგრამული უზრუნველყოფის ზემოქმედების ან ზოგადად კოდირების, მათემატიკური პროგრამული უზრუნველყოფის MATLAB და ელექტრული სქემების შექმნის ან შეცვლის თვალსაზრისით. მომავალში ეს შეიძლება გადაისინჯოს, რათა გაუადვილდეს გაგებას ვინმესთვის, ვისაც მცირე გამოცდილება აქვს ამ თემებთან დაკავშირებით.

ნაბიჯი 1: შეარჩიეთ სიგალის მავთული

შეარჩიეთ სიგალის მავთული
შეარჩიეთ სიგალის მავთული

თქვენ უნდა მიიღოთ სიგნალი, რომელიც შეესაბამება ძრავის სიჩქარეს. შესაძლებელია სისტემის დამატება, რომელიც ზომავს ძრავის სიჩქარეს, მაგრამ გაცილებით პრაქტიკულია შეხება არსებულ მავთულზე, რომელიც ატარებს ძრავის სიჩქარის ინფორმაციას. ერთ მანქანას შეიძლება ჰქონდეს მრავალი წყარო ამისათვის და ის შეიძლება მნიშვნელოვნად განსხვავდებოდეს წლიდან წლამდე ერთი მანქანის მოდელზე. ამ გაკვეთილის გულისთვის მე ვიყენებ ჩემი მანქანის მაგალითს, ტრასაზე შეცვლილია 2000 Acura Integra LS. ჩემს ძრავზე აღმოვაჩინე (B18B1 OBD2– ით) არის გამოუყენებელი ძაბვა, რომელიც არის 12V მაღალი და ეცემა 0V– მდე სრული რევოლუციის დასრულების შემდეგ.

ის, რაც ხელს შეუწყობს ძრავის სიჩქარის პოტენციური სიგნალის იდენტიფიცირებას:

  • გაყვანილობის სქემა თქვენი მანქანისთვის
  • მოძებნეთ თქვენი ავტომობილის ფორუმები ძრავის/ECU სიგნალების ჩათვლით
  • მეგობრული მექანიკოსი ან მანქანის მოყვარული

ნაბიჯი 2: გააგრძელე მავთული არდუინოს დაფაზე

გააგრძელე მავთული არდუინოს დაფაზე
გააგრძელე მავთული არდუინოს დაფაზე
გააგრძელე მავთული არდუინოს დაფაზე
გააგრძელე მავთული არდუინოს დაფაზე

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

ნაბიჯი 3: სიგნალის ანალიზი

სიგნალის ანალიზი
სიგნალის ანალიზი

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

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

ჩემი სიგნალი ჩვეულებრივ 12 ვ -ია და ეცემა 0 ვ -მდე ერთი სრული ბრუნვის დასრულებისას. თუ თქვენ იცით ერთი სრული ბრუნვის, ან ერთი სრული ციკლის დასრულების დრო, ეს მარტივად შეიძლება ითარგმნოს რევოლუციებად/წთ რამოდენიმე ძირითადი ცნების გამოყენებით.

1 / (წამი ციკლზე) = ციკლი წამში, ან ჰერცი

რევოლუციები წუთში = Hz * 60

ნაბიჯი 4: კოდირება თქვენი სიგნალის ანალიზი

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

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

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

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

შენიშვნა: ცდისა და შეცდომის შემდეგ აღმოვაჩინე, რომ დისტრიბუტორი ასრულებს ორ ბრუნვას ძრავის ამწე ლილვის თითოეული ბრუნვისათვის, ამიტომ მე უბრალოდ პასუხი გავყავი 2 -ით ამის გათვალისწინებით.

ნაბიჯი 5: იდენტიფიცირება ფილტრი

იდენტიფიცირება ფილტრი
იდენტიფიცირება ფილტრი

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

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

დაბალი გავლის ფილტრი საშუალებას იძლევა დაბალი სიხშირეები (სასურველი) გაიაროს და ასუსტებს მაღალ სიხშირეებს (არასასურველი).

ნაბიჯი 6: გაფილტვრა: ნაწილი 1

გაფილტვრა: ნაწილი 1
გაფილტვრა: ნაწილი 1
გაფილტვრა: ნაწილი 1
გაფილტვრა: ნაწილი 1
გაფილტვრა: ნაწილი 1
გაფილტვრა: ნაწილი 1

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

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

ფუნქციის ერთადერთი ცვლადია tau. ტაუ უდრის 1 / ომეგას, სადაც ომეგა არის თქვენთვის სასურველი გათიშვის სიხშირე (უნდა იყოს რადიანებში წამში). შეწყვეტის სიხშირე არის ის ზღვარი, სადაც მასზე მაღალი სიხშირეები მოიხსნება და მასზე დაბალი სიხშირეები შენარჩუნდება.

მე ვაყენებ ჩამკეტის სიხშირეს RPM– ის ტოლი, ჩემი ძრავა ვერასოდეს მიაღწევს (990 RPM ან 165 Hz). FFT გრაფიკები აჩვენებს უხეშად რა სიხშირეებს ატარებდა ჩემი ნედლეული სიგნალი და სიხშირეები, რომლებიც გამოდიოდა ფილტრიდან.

ნაბიჯი 7: გაფილტვრა: ნაწილი 2

გაფილტვრა: ნაწილი 2
გაფილტვრა: ნაწილი 2
გაფილტვრა: ნაწილი 2
გაფილტვრა: ნაწილი 2

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

ნაბიჯი 8: გაფილტვრა: ნაწილი 3

გაფილტვრა: ნაწილი 3
გაფილტვრა: ნაწილი 3
გაფილტვრა: ნაწილი 3
გაფილტვრა: ნაწილი 3

MATLAB– ს აქვს ბრძანება, რომელიც გადააქცევს უწყვეტ ფუნქციას (სიხშირის დომენი) დისკრეტულ ფუნქციად (დროის დომენი). ამ ბრძანების გამომუშავება უზრუნველყოფს განტოლებას, რომლის ადვილად შეყვანა შესაძლებელია Arduino IDE კოდში.

ნაბიჯი 9: გაფილტვრა: ნაწილი 4

გაფილტვრა: ნაწილი 4
გაფილტვრა: ნაწილი 4
გაფილტვრა: ნაწილი 4
გაფილტვრა: ნაწილი 4

არდუინოს ესკიზში ჩართეთ ცვლადები u და y დაყენებამდე. Float ბრძანება უბრალოდ განსაზღვრავს, თუ როგორ შეინახავს ცვლადი მონაცემებს (ისეთებს, როგორიცაა მაქსიმალური მნიშვნელობა, ათწილადი და ა. /ვარია…

მარყუჟში, სადაც ხდება ნედლი სიგნალიდან ძრავის სიჩქარეზე გარდაქმნა, შეიტანეთ u ცვლადი და y მრავალჯერადი განტოლება. ამის გამოყენების მრავალი გზა არსებობს, მაგრამ ცვლადი u უნდა იყოს თანაბარი გაზომვის ნედლეული შეყვანის სიგნალის და ცვლადი y იქნება გაფილტრული მნიშვნელობა.

გირჩევთ: