მარტივი გაკვეთილი CANBUS– ისთვის: 8 ნაბიჯი
მარტივი გაკვეთილი CANBUS– ისთვის: 8 ნაბიჯი
Anonim
მარტივი გაკვეთილი CANBUS– ისთვის
მარტივი გაკვეთილი CANBUS– ისთვის

მე ვსწავლობ CAN– ს სამი კვირის განმავლობაში და ახლა დავამთავრე რამდენიმე პროგრამა სწავლის შედეგების დასადასტურებლად. ამ გაკვეთილში თქვენ შეისწავლით თუ როგორ გამოიყენოთ Arduino CANBUS კომუნიკაციის განსახორციელებლად. თუ თქვენ გაქვთ რაიმე შემოთავაზება, გთხოვთ დატოვოთ შეტყობინება.

მასალები:

აპარატურა:

  • მადუინო ნულოვანი კანბუსი
  • DHT11 ტემპერატურისა და ტენიანობის მოდული
  • 1.3 "I2C OLED 128x64- ლურჯი
  • DB9 to DB9 კაბელი (ქალი მდე ქალი)
  • დიუპონის ხაზი

პროგრამული უზრუნველყოფა:

Arduino IDE

ნაბიჯი 1: რა არის CANBUS

რა არის კანბუსი
რა არის კანბუსი
რა არის კანბუსი
რა არის კანბუსი

CAN- ის შესახებ

CAN (Controller Area Network) არის სერიული საკომუნიკაციო ქსელი, რომელსაც შეუძლია განახორციელოს განაწილებული რეალურ დროში კონტროლი. იგი შემუშავებულია საავტომობილო ინდუსტრიისთვის, რომ შეცვალოს რთული გაყვანილობა ორ მავთულის ავტობუსით.

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

CAN პროტოკოლი არის ISO სტანდარტიზებული ISO11898 და ISO11519. ISO11898 არის CAN მაღალსიჩქარიანი კომუნიკაციის სტანდარტი, კომუნიკაციის სიჩქარით 125kbps-1Mbps. ISO11519 არის CAN დაბალი სიჩქარის კომუნიკაციის სტანდარტი, კომუნიკაციის სიჩქარით 125 კბ / წმ-ზე ნაკლები.

აქ ჩვენ ყურადღებას ვაქცევთ მაღალსიჩქარიან CAN- ს.

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

  • ავტობუსთან დაკავშირებულ თითოეულ CAN ერთეულს შეიძლება ვუწოდოთ კვანძი. ყველა CAN ერთეული უკავშირდება ავტობუსს, რომელიც მთავრდება თითოეულ ბოლოში 120 Ω რეზისტენტებით და ქმნის ქსელს. ავტობუსი შედგება CAN_H და CAN_L ხაზებისგან. CAN კონტროლერი განსაზღვრავს ავტობუსის დონეს სიმძლავრის დონის განსხვავების საფუძველზე ორივე მავთულზე. ავტობუსების დონე იყოფა დომინანტურ და რეცესიულ დონეზე, რომლებიც უნდა იყოს ერთ -ერთი მათგანი. გამგზავნი უგზავნის შეტყობინებას მიმღებს ავტობუსის დონეზე ცვლილების შეტანის გზით. როდესაც ავტობუსში ლოგიკური ხაზი "და" შესრულებულია, დომინანტური დონე არის "0" და რეცესიული დონე არის "1".
  • დომინანტურ მდგომარეობაში, CAN_H ძაბვაა დაახლოებით 3.5V და CAN_L არის 1.5V. რეცესიულ მდგომარეობაში, ორივე ხაზის ძაბვა არის დაახლოებით 2.5V.
  • სიგნალი დიფერენციალურია, ამიტომ CAN იღებს თავის ძლიერ ხმაურის იმუნიტეტს და ხარვეზებს. დაბალანსებული დიფერენციალური სიგნალი ამცირებს ხმაურის დაწყვილებას და იძლევა მაღალი სიგნალიზაციის სიჩქარეს გადახვეული წყვილის კაბელზე. თითოეული სიგნალის ხაზში თანაბარია, მაგრამ საპირისპირო მიმართულებით და იწვევს ველზე გაუქმების ეფექტს, რომელიც არის დაბალი ხმაურის ემისიის გასაღები. დაბალანსებული დიფერენციალური მიმღებების გამოყენება და გადაბმული წყვილი კაბელი აძლიერებს CAN ავტობუსის საერთო რეჟიმის უარყოფას და მაღალი ხმაურის იმუნიტეტს.

CAN გადამცემი

CAN გადამცემი პასუხისმგებელია ლოგიკურ დონესა და ფიზიკურ სიგნალს შორის გარდაქმნაზე. გადააკეთეთ ლოგიკური სიგნალი დიფერენციალურ დონეზე ან ფიზიკური სიგნალი ლოგიკურ დონეზე.

CAN კონტროლერი

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

MCU

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

ნაბიჯი 2: CAN კომუნიკაციების შესახებ

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

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

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

ნაბიჯი 3: ჩარჩოები

ჩარჩოები
ჩარჩოები

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

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

მონაცემთა ჩარჩო

არსებობს ორი სახის მონაცემთა ჩარჩო, სტანდარტული და გაფართოებული.

ფიგურის ბიტის ველების მნიშვნელობა არის:

  • SOF - ჩარჩოს ერთი დომინანტური დაწყება (SOF) ბიტი აღნიშნავს შეტყობინების დაწყებას და გამოიყენება ავტობუსში კვანძების სინქრონიზაციისათვის უსაქმოდ ყოფნის შემდეგ.
  • იდენტიფიკატორი-სტანდარტული CAN 11-ბიტიანი იდენტიფიკატორი ადგენს შეტყობინების პრიორიტეტს. რაც უფრო დაბალია ორობითი მნიშვნელობა, მით უფრო მაღალია მისი პრიორიტეტი.
  • RTR - ერთი დისტანციური გადაცემის მოთხოვნის (RTR) ბიტი
  • IDE - დომინანტური ერთჯერადი იდენტიფიკატორის გაფართოება (IDE) ნიშნავს იმას, რომ გადადის სტანდარტული CAN იდენტიფიკატორი გაფართოების გარეშე.
  • R0 - დაცულია ბიტი (მომავალი სტანდარტული ცვლილების შესაძლო გამოყენებისათვის).
  • DLC-მონაცემთა 4 ბიტიანი სიგრძის კოდი (DLC) შეიცავს გადაცემული მონაცემების ბაიტების რაოდენობას.
  • მონაცემები - შეიძლება გადაეცეს განაცხადის მონაცემების 64 ბიტამდე.
  • CRC-16-ბიტიანი (15 ბიტი პლუს განმსაზღვრელი) ციკლური გადაჭარბების შემოწმება (CRC) შეიცავს შეცდომას გამოვლენის წინა განაცხადის მონაცემების შემოწმების ჯამს (გადაცემული ბიტების რაოდენობა).
  • ACK – ACK არის 2 ბიტი, ერთი არის აღიარების ბიტი და მეორე არის გამყოფი.
  • EOF-ეს ჩარჩოს ბოლოს (EOF), 7 ბიტიანი ველი აღნიშნავს CAN ჩარჩოს (შეტყობინების) დასასრულს და ათიშავს ბიტჩამტვრევას, რაც მიუთითებს შევსების შეცდომას დომინანტის დროს. როდესაც ერთი და იგივე ლოგიკური დონის 5 ბიტი თანმიმდევრულად ხდება ნორმალური მუშაობის დროს, ცოტა საპირისპირო ლოგიკური დონე იდება მონაცემებში.
  • IFS-ეს 7 ბიტიანი ინტერფეისის სივრცე (IFS) შეიცავს დროს, რომელიც საჭიროა კონტროლერის მიერ იმისათვის, რომ სწორად მიღებული ჩარჩო გადაიტანოს შეტყობინების ბუფერულ არეალში მის შესაბამის პოზიციაზე.

არბიტრაჟი

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

ნაბიჯი 4: სიჩქარე და მანძილი

სიჩქარე და მანძილი
სიჩქარე და მანძილი

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

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

ნაბიჯი 5: აპარატურა

ტექნიკა
ტექნიკა

Maduino Zero CAN-BUS მოდული არის Makerfabs– ის მიერ შემუშავებული CANbus კომუნიკაციის ინსტრუმენტი-ის დაფუძნებულია Arduino– ზე, CAN კონტროლერთან და CAN გადამცემთან ერთად, რათა შეიქმნას მზა გამოსაყენებელი CAN-bus პორტი.

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

ნაბიჯი 6: კავშირი

კავშირი
კავშირი

შეაერთეთ DHT11 მოდული Maduino Zero CAN-BUS მოდულთან მავთულხლართებით, რომ გამოიყენოთ როგორც ინსტრუმენტი CAN კომუნიკაციის მხარდასაჭერად. ანალოგიურად, დააკავშირეთ ეკრანი მოდულთან, რომ მიიღოთ მონაცემები და აჩვენოთ იგი.

კავშირი Maduino Zero CANBUS- სა და DHT11- ს შორის

მადუინო ნულოვანი კანბუსი - DHT11

3v3 ------ VCC GND ------ GND D10 ------ მონაცემები

კავშირი Maduino Zero CANBUS– სა და OLED– ს შორის

Maduino Zero CANBUS - OLED

3v3 ------ VCC GND ------ GND SCL ------ SCL SDA ------ SDA

გამოიყენეთ DB9 კაბელი ორი Maduino Zero CANBUS მოდულის დასაკავშირებლად.

ნაბიჯი 7: კოდი

MAX3051 ასრულებს დიფერენციალური დონის გარდაქმნას ლოგიკურ სიგნალებად. MCP2515 ასრულებს CAN ფუნქციას, როგორიცაა მონაცემთა კოდირება და დეკოდირება. MCU– ს სჭირდება მხოლოდ კონტროლერის ინიციალიზაცია და მონაცემების გაგზავნა და მიღება.

  • Github:
  • დაყენებული Arduino– ს შემდეგ, არ არსებობს პაკეტი დაფის მხარდასაჭერად (Arduino zero), რომელიც საჭიროა ინსტალაციისთვის.
  • შეარჩიეთ ინსტრუმენტები -> დაფა -> დაფის მენეჯერი, მოძებნეთ "Arduino zero" და დააინსტალირეთ "Arduino SAMD დაფები".
  • აირჩიეთ ინსტრუმენტები -> დაფა -> Arduino Zero (მშობლიური USB პორტი), აირჩიეთ ინსტრუმენტები -> პორტი -> კომ…
  • GitHub– დან პროგრამის მიღების შემდეგ, თქვენ უნდა დარწმუნდეთ, რომ ყველა ფაილი არის პროექტის დირექტორიაში, რომელიც შეიცავს ბიბლიოთეკის ფაილებს, რომლებიც მხარს უჭერენ CANBUS– ს.
  • დააინსტალირეთ DHT სენსორების ბიბლიოთეკა Adafruit– ის მიერ, რომელიც გამოიყენება DHT11– ის მართვისთვის ტემპერატურისა და ტენიანობის მისაღებად.
  • გამოიყენეთ სხვადასხვა მისამართები ტემპერატურისა და ტენიანობის ცალკე გასაგზავნად კოდი Test_DHT11.ino.

CAN.sendMsgBuf (0x10, 0, stmp1.length (), stmp_send1);

დაგვიანება (500); CAN.sendMsgBuf (0x11, 0, stmp2.length (), stmp_send2); დაგვიანება (500);

"0x10" ნიშნავს შეტყობინების ID- ს, "0" ნიშნავს სტანდარტულ ჩარჩოს, "stmp1.length ()" ნიშნავს შეტყობინების სიგრძეს, "stmp_send1" არის გაგზავნილი მონაცემები.

  • კოდში Test_OLED.ino, CANBUS– ზე ყველა შეტყობინება მიიღება შეკითხვით და საჭირო ინფორმაცია ნაჩვენებია OLED– ზე.
  • ატვირთეთ პროგრამა Maduino-CANbus-RS485/Test_DHT11_OLED/Test_DHT11/Test_DHT11.ino სენსორთან დაკავშირებულ მოდულში და ატვირთეთ პროგრამა Maduino-CANbus RS485/Test_DHT11_OLED/Test_OLED/Test_OLED.

ნაბიჯი 8: ჩვენება

ჩვენება
ჩვენება
ჩვენება
ჩვენება

ორი მოდულის ჩართვა, ტემპერატურა და ტენიანობა გამოჩნდება ეკრანზე.

გირჩევთ: