CAN bus จึงเปลี่ยนวิธีการอิงจาก 0v เป็นอิงจาก "ผลต่างแรงดันระหว่างสายสองเส้น" โดยสายสองเส้นเรียกว่า CAN High และ CAN Low โดยปกติทั้งสองเส้นจะมีแรงดันที่ 2.5v เมื่อมีการส่งข้อมูล สายที่เป็น CAN High จะมีแรงดันเพิ่มขึ้นเป็น 3.75V และสายที่เป็น CAN Low จะมีแรงดันลดลงเป็น 1.25V เมื่อคิดแรงดันผลต่างระหว่างเส้น จะกลายเป็น 2.5V ดังรูป
แล้วมันแก้ปัญหาเรื่องระยะทางอย่างไรล่ะ? คือเมื่อสายแต่ละเส้นมีแรงดันที่ลดลงจากระยะทางที่มากขึ้นของสายไฟเช่น ลดลงไป 1.2v เท่าๆกัน CAN High จะเหลือ 2.55 CAN Low จะเหลือ 0.05V ผลต่างแรงดันทั้งคู่ก็ยังคงเป็น 2.5V เท่าเดิม
มาลองดูความยาวสายไฟที่ CAN Bus สามารถทำได้กัน จะเห็นว่าที่ความถี่ข้อมูลต่ำๆ สามารถส่งไปได้ไกลถึง 1000m เลยทีเดียว ซึ่งเมื่อเทียบกับ I2C bus ที่ให้ความเร็วที่ 100Kbps ที่ 1m และ 10Kbps ที่ 10m เท่านั้นเอง
ความเร็ว bit rate
ความยาวสายไฟสูงสุด (in m)
1Mbit/s
25
800Kbit/s
50
500Kbit/s
100
250Kbit/s
250
125Kbit/s
500
50Kbit/s
1000
นอกจากข้อดีเรื่องระยะความยาวสายไฟที่เหนือกว่าการสื่อสารแบบ I2C CAN bus ยังมีความสามารถสื่อสารระหว่างอุปกรณ์ใดๆ โดยทุกอุปกรณ์สามารถเป็นได้ทั้ง Master และ Slave ในตัวเดียวกัน ซึ่งแต่ละอุปกรณ์จะกรองข้อมูลที่วิ่งผ่านสาย CAN bus เพื่อนำไปใช้ประโยชน์เท่าที่ตัวเองต้องการ และยังมีระบบป้องกันการชนกันของข้อมูลด้วยการจัดลำดับความสำคัญของข้อมูลนั้นๆ ทำให้มั่นใจได้ว่าข้อมูลถูกส่งไปอย่างถูกต้อง
รูปด้านล่างแสดงให้เห็นว่า จากเดิมเมื่ออุปกรณ์แต่ละอุปกรณ์ต้องสื่อสารกัน การใช้ CAN Bus ช่วยลดความยาวสายไฟจากการใช้สายไฟร่วมกันได้อย่างง่ายดาย
ในบทความนี้จะสาธิตการใช้ CAN Bus กับ Arduino สองบอร์ด เพื่อส่งตัวเลขกันครับ แต่เนื่องจาก Arduino เดิมๆ ไม่สามารถสื่อสารด้วย CAN Bus ได้ เพราะมีแต่ I2C/Uart/SPI โมดูล MCP2515 จึงถูกใช้เป็นสื่อการที่แปลง SPI เป็น CAN bus โดยโมดูลตัวนี้จะรองรับ CAN protocal เวอร์ชัน 2.0B สามารถสื่อสารได้เร็วถึง 1Mbps
โมดูล MCP2515 ภายในจะมี ic ย่อยอยู่ 2 ตัว คือ MCP2515 ic ทำหน้าที่รับ SPI แปลงเป็น Uart ส่งต่อให้ TJA1050 ic ที่ทำหน้าที่แปลง Uart เป็น CAN bus ดังรูปด้านล่าง
สรุปการตั้งค่า Arduino IDE สำหรับ esp32-s3 ที่มี 2 usb port!? 4 months ago ถ้าพูดถึงบอร์ด esp32 devkit ต่าง ๆ ที่มีพอร์ต USB ให้ใช้ เรามักเห็นพอร์ต USB ที่มีจุดประสงค์เพื่อการอัพโหลดโปรแกรมเข้าไป จนกระทั่งการมาของ esp32-s3 เราพบว่า Third party board หลายๆอันทำออกมามี 2 USB แล้วนักพัฒนาอย่างเราต้องใช้อันไหน เปิดไปใน Tools ขอ…
วิธีคำนวณ mAh แบตที่ต้องใช้ใน ESP32 สำหรับทำอุปกรณ์ IoT 8 months ago ESP32 เป็นไมโครคอนโทรลเลอร์ที่ได้รับความนิยมสูงเนื่องจากความสามารถในการเชื่อมต่อไร้สายและประสิทธิภาพการทำงานที่ดี อย่างไรก็ตาม การจัดการพลังงานเป็นสิ่งสำคัญ โดยเฉพาะเมื่อต้องการให้ ESP32 ทำงานได้นานขึ้นโดยใช้พลังงานจากแบตเตอรี่ หลักการคำนวณระยะเวลาใช…