สารบัญ:

บทช่วยสอนง่ายๆ สำหรับ CANBUS: 8 ขั้นตอน
บทช่วยสอนง่ายๆ สำหรับ CANBUS: 8 ขั้นตอน

วีดีโอ: บทช่วยสอนง่ายๆ สำหรับ CANBUS: 8 ขั้นตอน

วีดีโอ: บทช่วยสอนง่ายๆ สำหรับ CANBUS: 8 ขั้นตอน
วีดีโอ: CAN BUS Tutorial PT1. How to get started with the KS0411 CAN BUS shield from Inland. 2024, กรกฎาคม
Anonim
บทช่วยสอนง่ายๆ สำหรับ CANBUS
บทช่วยสอนง่ายๆ สำหรับ CANBUS

ฉันเรียน CAN มาสามสัปดาห์แล้ว และตอนนี้ฉันได้กรอกใบสมัครเพื่อตรวจสอบผลการเรียนรู้ของฉันแล้ว ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีใช้ Arduino เพื่อใช้การสื่อสาร CANBUS หากคุณมีข้อเสนอแนะใด ๆ ยินดีที่จะฝากข้อความไว้

เสบียง:

ฮาร์ดแวร์:

  • Maduino Zero CANBUS
  • DHT11 โมดูลอุณหภูมิและความชื้น
  • 1.3" I2C OLED 128x64- สีน้ำเงิน
  • สายเคเบิล DB9 ถึง DB9 (ตัวเมียกับตัวเมีย)
  • ดูปองท์ ไลน์

ซอฟต์แวร์:

Arduino IDE

ขั้นตอนที่ 1: CANBUS คืออะไร

CANBUS คืออะไร
CANBUS คืออะไร
CANBUS คืออะไร
CANBUS คืออะไร

เกี่ยวกับ CAN

CAN (Controller Area Network) เป็นเครือข่ายการสื่อสารแบบอนุกรมที่สามารถรับรู้การควบคุมแบบเรียลไทม์แบบกระจาย ได้รับการพัฒนาสำหรับอุตสาหกรรมยานยนต์เพื่อแทนที่ชุดสายไฟที่ซับซ้อนด้วยบัสแบบสองสาย

โปรโตคอล CAN กำหนด Data Link Layer และส่วนหนึ่งของ Physical Layer ในโมเดล OSI

โปรโตคอล CAN เป็นมาตรฐาน ISO ที่มี ISO11898 และ ISO11519 ISO11898 เป็นมาตรฐานการสื่อสารความเร็วสูง CAN ด้วยความเร็วในการสื่อสาร 125kbps-1Mbps ISO11519 เป็นมาตรฐานการสื่อสารความเร็วต่ำ CAN ที่มีความเร็วในการสื่อสารน้อยกว่า 125kbps

ที่นี่เรามุ่งเน้นไปที่ CAN ความเร็วสูง

ISO-11898 อธิบายว่าข้อมูลถูกส่งผ่านระหว่างอุปกรณ์บนเครือข่ายอย่างไรและสอดคล้องกับ Open Systems Interconnection model (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 Transceiver มีหน้าที่ในการแปลงระหว่างระดับลอจิกและสัญญาณทางกายภาพ แปลงสัญญาณลอจิคัลเป็นระดับดิฟเฟอเรนเชียลหรือสัญญาณฟิสิคัลเป็นระดับลอจิคัล

ตัวควบคุม CAN

ตัวควบคุม CAN เป็นองค์ประกอบหลักของ CAN ซึ่งรับรู้ฟังก์ชันทั้งหมดของดาต้าลิงค์เลเยอร์ในโปรโตคอล CAN และสามารถแก้ไขโปรโตคอล CAN ได้โดยอัตโนมัติ

MCU

MCU มีหน้าที่ควบคุมวงจรฟังก์ชันและตัวควบคุม CAN ตัวอย่างเช่น พารามิเตอร์ตัวควบคุม CAN จะเริ่มต้นเมื่อโหนดเริ่มทำงาน เฟรม CAN จะถูกอ่านและส่งผ่านตัวควบคุม CAN เป็นต้น

ขั้นตอนที่ 2: เกี่ยวกับ CAN Communications

เมื่อบัสไม่ได้ใช้งาน โหนดทั้งหมดสามารถเริ่มส่งข้อความได้ (การควบคุมแบบหลายมาสเตอร์) โหนดที่เข้าถึงบัสก่อนจะได้รับสิทธิ์ในการส่ง (โหมด CSMA/CA) เมื่อหลายโหนดเริ่มส่งพร้อมกัน โหนดที่ส่งข้อความ ID ที่มีลำดับความสำคัญสูงจะได้รับสิทธิ์ในการส่ง

ในโปรโตคอล CAN ข้อความทั้งหมดจะถูกส่งในรูปแบบคงที่ เมื่อบัสไม่ได้ใช้งาน ทุกยูนิตที่เชื่อมต่อกับบัสสามารถเริ่มส่งข้อความใหม่ได้ เมื่อมีเซลล์มากกว่าสองเซลล์เริ่มส่งข้อความพร้อมกัน ลำดับความสำคัญจะถูกกำหนดตามตัวระบุ ID ไม่ได้แสดงถึงที่อยู่ปลายทางของการส่ง แต่เป็นลำดับความสำคัญของข้อความที่เข้าถึงรถบัส เมื่อเซลล์มากกว่าสองเซลล์เริ่มส่งข้อความพร้อมกัน แต่ละบิตของ ID ปลอดดอกเบี้ยจะถูกตัดสินทีละตัว หน่วยที่ชนะอนุญาโตตุลาการสามารถส่งข้อความต่อไปได้ และหน่วยที่แพ้การอนุญาโตตุลาการจะหยุดส่งและรับงานทันที

CAN บัสเป็นบัสประเภทออกอากาศ ซึ่งหมายความว่าโหนดทั้งหมดสามารถ 'ได้ยิน' การส่งสัญญาณทั้งหมดได้ โหนดทั้งหมดจะรับทราฟฟิกทั้งหมดอย่างสม่ำเสมอ ฮาร์ดแวร์ CAN จัดให้มีการกรองในเครื่องเพื่อให้แต่ละโหนดสามารถตอบสนองต่อข้อความที่น่าสนใจเท่านั้น

ขั้นตอนที่ 3: เฟรม

เฟรม
เฟรม

อุปกรณ์ CAN ส่งข้อมูลผ่านเครือข่าย CAN ในแพ็กเก็ตที่เรียกว่าเฟรม CAN มีสี่ประเภทเฟรม:

  • กรอบข้อมูล: กรอบที่มีข้อมูลโหนดสำหรับการส่ง
  • เฟรมระยะไกล: เฟรมที่ร้องขอการส่งตัวระบุเฉพาะ
  • กรอบข้อผิดพลาด: เฟรมที่ส่งโดยโหนดใด ๆ ที่ตรวจพบข้อผิดพลาด
  • โอเวอร์โหลดเฟรม: เฟรมเพื่อฉีดการหน่วงเวลาระหว่างข้อมูลหรือเฟรมระยะไกล

กรอบข้อมูล

data frames มีสองประเภทคือแบบมาตรฐานและแบบขยาย

ความหมายของฟิลด์บิตของรูปคือ:

  • SOF–บิตเริ่มต้นของเฟรมเดียวที่โดดเด่น (SOF) ทำเครื่องหมายจุดเริ่มต้นของข้อความ และใช้เพื่อซิงโครไนซ์โหนดบนบัสหลังจากไม่ได้ใช้งาน
  • ตัวระบุ-ตัวระบุมาตรฐาน CAN 11 บิตกำหนดลำดับความสำคัญของข้อความ ยิ่งค่าไบนารีต่ำ ลำดับความสำคัญก็จะยิ่งสูงขึ้น
  • RTR–บิตคำขอส่งระยะไกลเดียว (RTR)
  • IDE–บิตส่วนขยายตัวระบุเดี่ยวที่โดดเด่น (IDE) หมายความว่าตัวระบุ CAN มาตรฐานที่ไม่มีส่วนขยายกำลังถูกส่ง
  • R0–บิตสงวนไว้ (สำหรับการใช้งานที่เป็นไปได้โดยการแก้ไขมาตรฐานในอนาคต)
  • DLC–รหัสความยาวข้อมูล 4 บิต (DLC) มีจำนวนไบต์ของข้อมูลที่ส่ง
  • ข้อมูล – ข้อมูลแอปพลิเคชันสามารถส่งข้อมูลได้สูงสุด 64 บิต
  • CRC– การตรวจสอบแบบวนซ้ำแบบวนซ้ำ (CRC) แบบวนซ้ำ 16 บิต (15 บิตบวกตัวคั่น) มีการตรวจสอบ (จำนวนบิตที่ส่ง) ของข้อมูลแอปพลิเคชันก่อนหน้าสำหรับการตรวจจับข้อผิดพลาด
  • ACK–ACK คือ 2 บิต บิตหนึ่งคือบิตการตอบรับ และบิตที่สองเป็นตัวคั่น
  • EOF– ฟิลด์ end-of-frame (EOF) 7 บิตนี้ทำเครื่องหมายจุดสิ้นสุดของเฟรม CAN (ข้อความ) และปิดใช้งาน bitstuffing ซึ่งบ่งชี้ว่ามีข้อผิดพลาดในการบรรจุเมื่อโดดเด่น เมื่อระดับตรรกะเดียวกัน 5 บิตเกิดขึ้นต่อเนื่องกันระหว่างการทำงานปกติ ระดับตรรกะที่ตรงกันข้ามจำนวนเล็กน้อยจะถูกยัดเข้าไปในข้อมูล
  • IFS– พื้นที่ระหว่างเฟรม 7 บิต (IFS) นี้มีเวลาที่คอนโทรลเลอร์ต้องการเพื่อย้ายเฟรมที่ได้รับอย่างถูกต้องไปยังตำแหน่งที่เหมาะสมในพื้นที่บัฟเฟอร์ข้อความ

อนุญาโตตุลาการ

ในสถานะไม่ได้ใช้งานของบัส หน่วยที่เริ่มส่งข้อความก่อนจะได้รับสิทธิ์ในการส่ง เมื่อหลายหน่วยเริ่มส่งพร้อมกัน แต่ละหน่วยที่ส่งจะเริ่มที่บิตแรกของส่วนอนุญาโตตุลาการ หน่วยที่มีจำนวนสูงสุดของระดับที่โดดเด่นของเอาต์พุตต่อเนื่องสามารถส่งต่อไปได้

ขั้นตอนที่ 4: ความเร็วและระยะทาง

ความเร็วและระยะทาง
ความเร็วและระยะทาง

CAN บัสเป็นบัสที่เชื่อมต่อหลายยูนิตพร้อมกัน ในทางทฤษฎีไม่มีการจำกัดจำนวนยูนิตที่สามารถเชื่อมต่อได้ อย่างไรก็ตาม ในทางปฏิบัติ จำนวนยูนิตที่สามารถเชื่อมต่อได้นั้นถูกจำกัดด้วยการหน่วงเวลาบนบัสและโหลดไฟฟ้า ลดความเร็วในการสื่อสาร เพิ่มจำนวนยูนิตที่สามารถเชื่อมต่อได้ และเพิ่มความเร็วในการสื่อสาร จำนวนยูนิตที่สามารถเชื่อมต่อได้ลดลง

ระยะการสื่อสารสัมพันธ์ผกผันกับความเร็วในการสื่อสาร และยิ่งระยะการสื่อสารไกล ความเร็วในการสื่อสารก็จะยิ่งน้อยลง ระยะทางที่ไกลกว่านั้นอาจเป็น 1 กม. ขึ้นไป แต่ความเร็วนั้นน้อยกว่า 40kps

ขั้นตอนที่ 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:

Maduino Zero CANBUS -- 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"
  • เลือก Tools ->Board -> Arduino Zero (Native USB Port) เลือก Tools -> Port -> com…
  • หลังจากได้รับโปรแกรมจาก 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” หมายถึงรหัสข้อความ, “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.ino ไปยังโมดูลอื่นที่เชื่อมต่อกับ OLED

ขั้นตอนที่ 8: แสดง

แสดง
แสดง
แสดง
แสดง

เปิดโมดูลทั้งสอง อุณหภูมิและความชื้นจะแสดงบนจอแสดงผล

แนะนำ: