
สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-23 15:12

ฉันเรียน CAN มาสามสัปดาห์แล้ว และตอนนี้ฉันได้กรอกใบสมัครเพื่อตรวจสอบผลการเรียนรู้ของฉันแล้ว ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีใช้ Arduino เพื่อใช้การสื่อสาร CANBUS หากคุณมีข้อเสนอแนะใด ๆ ยินดีที่จะฝากข้อความไว้
เสบียง:
ฮาร์ดแวร์:
- Maduino Zero CANBUS
- DHT11 โมดูลอุณหภูมิและความชื้น
- 1.3" I2C OLED 128x64- สีน้ำเงิน
- สายเคเบิล DB9 ถึง DB9 (ตัวเมียกับตัวเมีย)
- ดูปองท์ ไลน์
ซอฟต์แวร์:
Arduino IDE
ขั้นตอนที่ 1: 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: แสดง


เปิดโมดูลทั้งสอง อุณหภูมิและความชื้นจะแสดงบนจอแสดงผล
แนะนำ:
นาฬิกาดิจิตอล LED Dot Matrix - แอพ ESP Matrix สำหรับ Android: 14 ขั้นตอน

Digital Clock LED Dot Matrix - แอพ ESP Matrix สำหรับ Android: บทความนี้ได้รับการสนับสนุนอย่างภาคภูมิใจโดย PCBWAY.PCBWAY สร้าง PCB ต้นแบบคุณภาพสูงสำหรับผู้คนทั่วโลก ลองด้วยตัวคุณเองและรับ 10 PCBs เพียง $5 ที่ PCBWAY ด้วยคุณภาพที่ยอดเยี่ยมมาก ขอบคุณ PCBWAY บอร์ด ESP Matrix ที่ฉันพัฒนา
สร้างสถานีอวกาศใน TinkerCad Codeblock-- บทช่วยสอนง่ายๆ: 7 ขั้นตอน (พร้อมรูปภาพ)

สร้างสถานีอวกาศใน TinkerCad Codeblock|| บทช่วยสอนง่ายๆ: ในขณะที่ความคิดที่จะอยู่ในอวกาศอาจดูเหมือนนิยายวิทยาศาสตร์ ขณะที่คุณอ่านบทความนี้ สถานีอวกาศนานาชาติโคจรรอบโลกด้วยความเร็ว 5 ไมล์ต่อวินาที โคจรรอบโลกหนึ่งครั้ง ทุกๆ 90 นาที ในโครงการนี้ คุณจะได้เรียนรู้
Flipperkonsole สำหรับ PC Flipper / Pinball Console สำหรับ PC Pinballs: 9 ขั้นตอน

Flipperkonsole สำหรับ PC Flipper / Pinball Console สำหรับ PC Pinballs: ใช้งานได้กับ USB พื้นฐาน เกมสำหรับ PC-Flipperkästen Die Spannungsversorgung erfolgt über das USB Kabel. Implementiert sind die beiden Flipper Buttons และ ein Startbutton Zusätzlich ist ein stossen von unten, von links และ von rechts implem
3.3V Mod สำหรับ Ultrasonic Sensors (เตรียม HC-SR04 สำหรับ 3.3V Logic บน ESP32/ESP8266, Particle Photon ฯลฯ): 4 ขั้นตอน

3.3V Mod สำหรับ Ultrasonic Sensors (เตรียม HC-SR04 สำหรับ 3.3V Logic บน ESP32/ESP8266, Particle Photon, ฯลฯ.): TL;DR: บนเซนเซอร์ ตัดร่องรอยไปที่ Echo pin จากนั้นเชื่อมต่อใหม่โดยใช้ a ตัวแบ่งแรงดันไฟฟ้า (Echo trace -> 2.7kΩ -> Echo pin -> 4.7kΩ -> GND) แก้ไข: มีการถกเถียงกันว่า ESP8266 นั้นทนทานต่อ GPIO 5V จริงหรือไม่ใน
MakeyMakey - บทช่วยสอนง่ายๆ และวิธีการทำงาน! ทำเปียโน!: 6 ขั้นตอน

MakeyMakey - บทช่วยสอนง่ายๆ และวิธีการทำงาน! การทำเปียโน!: *คำเตือนล่วงหน้า* ฉันถ่ายรูปด้วยโทรศัพท์แล้วจึงถ่ายรูปโทรศัพท์ด้วยคอมพิวเตอร์ ขออภัยล่วงหน้าสำหรับคุณภาพของภาพถ่ายที่แย่มาก: โครงการแนะนำ PAn สู่ MakeyMakey พร้อมกับวิธีการทำงานบางส่วน . การทำเปียโนจาก