มาทำความรู้จักกับโพรโทคอล Controller Area Network

CAN หรือ Controller Area Network [1] นั้นเป็นโพรโทคอลสื่อสารที่มีความสำคัญและถูกนำมาใช้ในระบบอิเล็กทรอนิกส์โดยเฉพาะในอุตสาหากรรมยานยนต์รวมไปถึงอุตสาหกรรมต่าง ๆ โพรโทคอลนี้ถูกพัฒนาขึ้นโดยบริษัท Bosch ในช่วงปี ค.ศ. 1980 โดยมีแนวความคิดที่ว่าเพื่อจัดการกับปัญหาความซับซ้อนและปริมาณสายไฟที่จำเป็นในการสื่อสารระหว่างหน่วยควบคุมอิเล็กทรอนิกส์ (ECU) ในรถยนต์

ที่มาของโปรโตคอล CAN bus นั้นเกิดจากความต้องการในการลดน้ำหนัก ลดต้นทุน และลดความซับซ้อนของระบบการเชื่อมต่อด้วยสายไฟแบบจุดต่อจุด (point-to-point) ก่อนหน้านี้การเชื่อมต่ออุปกรณ์ต่าง ๆ ในรถยนต์ใช้สายไฟหลายเส้นในการเชื่อมต่อ ซึ่งสร้างความยุ่งเหยิงและความซับซ้อนในการติดตั้ง การบำรุงรักษา และการขยายตัวของระบบ

รูปที่ 1 แสดงตัวอย่างการใช้ CAN bus ในการลดความซับซ้อนของระบบ [2]

CAN bus นั้นได้รับการพัฒนาอย่างต่อเนื่องตั้งแต่ที่ได้มีการเปิดตัวโพรโทคอลออย่างเป็นทางการในช่วงปี ค.ศ. 1980 อย่างมีนัยยะสำคัญ ทำให้ในปัจจุบัน CAN นั้นมีหลายรูปแบบให้เลือกใช้ได้อย่างเหมาะสมกับสภาพแวดล้อมอุตสาหากรรมที่แตกต่างกันไป ตัวอย่างเช่น

  • CAN สำหรับรถยนต์ (CAN for Automotive): CAN เวอร์ชันนี้ถูกพัฒนาและปรับแต่งเฉพาะสำหรับใช้ในระบบอิเล็กทรอนิกส์ของรถยนต์ ถือเป็นเวอร์ชันที่นิยมนำมาประยุกต์ใช้กันอย่างแพร่หลายและได้รับการใช้งานอย่างกว้างขวางในอุตสาหกรรมยานยนต์ ความสามารถในการรับส่งข้อมูลความเร็วสูง อีกทั้งยังมีความน่าเชื่อถือสูง สามารถสื่อสารระหว่างส่วนประกอบในรถยนต์ได้อย่างเสถียรและมีประสิทธิภาพ
  • CAN สำหรับระบบอุตสาหกรรม (CAN for Industrial Systems): เป็นเวอร์ชันของ CAN ที่ออกแบบมาเพื่อใช้ในระบบอุตสาหกรรม โดยเฉพาะในงานผลิตและออโตเมชัน ปัจจุบันมีการใช้งานที่แพร่หลายในอุตสาหกรรมเพื่อใช้ในการสื่อสารระหว่างอุปกรณ์ต่าง ๆ เพื่อควบคุมกระบวนการผลิตและเพิ่มประสิทธิภาพ
  • CAN สำหรับระบบเครื่องจักร (CAN for Machinery): เป็นเวอร์ชัน CAN ที่เหมาะสำหรับการใช้งานในเครื่องจักรต่าง ๆ เช่น เครื่องจักรจัดเรียง ซึ่งจะทำให้ตัวเครื่องจักรสามารถเชื่อมต่อและสื่อสารกับอุปกรณ์ต่าง ๆ ในตัวเครื่องจักรเพื่อควบคุมและจัดการกระบวนการทำงานได้อย่างเหมาะสม มีประสิทธิภาพ

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

มารู้จักประวัติโดยย่อของ CAN bus กัน

  • ก่อนจะเป็น CAN: อุปกรณ์ควบคุมอิเล็กทรอนิกส์ในรถยนต์ใช้การเชื่อมต่อแบบ point-to-point
  • 1986: Bosch พัฒนาโปรโตคอล CAN เป็นแนวทางแก้ปัญหา ลดความซับซ้อนของระบบ
  • 1991: Bosch เปิดตัว CAN 2.0 (CAN 2.0A: แบบ 11 บิต และ 2.0B: แบบ 29 บิต)
  • 1993: CAN ได้รับการรับรองให้เป็นมาตรฐานสากล (ISO 11898)
  • 2003: ISO 11898 กลายเป็นชุดมาตรฐาน (Standard series)
  • 2012: Bosch ปล่อยตัว CAN FD 1.0 (Flexible Data rate)
  • 2015: โปรโตคอล CAN FD ได้รับมาตรฐาน (ISO 11898-1)
  • 2016: Physical CAN layer ถูกพัฒนาให้สามารถส่งข้อมูลได้ความเร็วสูงสุดที่ 5 Mbit/s รับรองโดยมาตรฐาน ISO 11898-2

รูปที่ 2 สถาปัตยกรรมมาตรฐาน OSI Layer ของโพรโทคอล CAN เป็นไปตาม ISO 11898 [3]

มาตรฐาน CAN bus

จากที่ได้กล่าวไปก่อนหน้านี้ ปัจจุบันโพรโทคอล CAN bus นั้นอยู่ในมาตรฐาน ISO (International Organization for Standardization) ซึ่งว่าด้วยเรื่องของบัสการสื่อสารที่พัฒนาขึ้นสำหรับอุตสาหกรรมยานยนต์เป็นหลัก เพื่อแก้ไขปัญหาการเชื่อมต่อแบบจุดต่อจุดที่มีความซับซ้อนของสายไฟ ให้เหลือเพียงแค่สายไฟสื่อสาร 2 เส้น นอกจากนี้ยังสามารถทนทานต่อสัญญาณรบกวนต่าง ๆ สามารถวินิจฉัย (Self-diagnose) รวมถึงสามารถแก้ไขการผิดพลาดของข้อมูลได้อีกด้วย

หากพูดในด้านเทคนิคให้มากขึ้น โพรโทคอล CAN bus นั้นจะสามารถอธิบายได้ด้วยแบบจำลองของการเชื่อมต่อระหว่างระบบ 7 ชั้น หรืออาจรู้จักในชื่อ Open System Interconnection (OSI Layer) ซึ่งจะอยู่ในชั้นของ Data Link Layer และ Physical Layer เป็นหลักดังตัวอย่างในรูปที่ 2 โดยที่ Data Link Layer ซึ่งเป็นมาตรฐาน ISO 11898-1 จะว่าด้วยเรื่องของรูปแบบการส่งข้อมูล (High speed CAN) ในขณะที่ Physical Layer ซึ่งเป็นส่วนของชั้นกายภาพนั้นจะเป็นมาตรฐานที่กำหนดในเรื่องของชนิดของสายไฟ (Cable types) ระดับสัญญาณ (Signal Levels) ข้อกำหนดของโหนด (Node requirements) ความต้านทานภายในของสาย (Cable impedance) และอื่น ๆ ที่เกี่ยวข้อง ซึ่งจะเป็นไปตามมาตรฐาน ISO 11898-2 ตัวอย่างเช่น

  • Baud rate: โหนด CAN นั้นจะต้องเชื่อมต่อกันผ่านบัสสื่อสารสองเส้นด้วย baud rate สูงสุดที่ 1 Mbit/s สำหรับ CAN classic หรือที่ 5 Mbit/s สำหรับ CAN FD
  • ความยาวของสาย: ควรอยู่ระหว่าง 500 เมตร สำหรับ 125 kbit/s ถึง 40 เมตร สำหรับ 1 Mbit/s
  • ความต้านทานส่วนปลายของ CAN bus: จะต้องมีความต้านทานระหว่างสองสายขนาด 120 โอห์ม ทั้งสองฝั่งดังตัวอย่างในรูปที่ 3 เพื่อช่วยลดการพุ่งเกิน (Overshoot) ของสัญญาณ และลดสัญญาณรบกวนใน CAN bus ได้

รูปที่ 3 แสดงการเชื่อมต่อโหนดบน CAN bus [3]

มาดูโครงสร้างของ CAN โหนด

โหนด หรืออุปกรณ์ที่เชื่อมต่อเข้ากับ CAN bus นั้น ภายในจะมีส่วนประกอบที่สำคัญได้แก่

CPU (Central Processing Unit) หรือ MCU (Microcontroller)

  • เป็นส่วนประกอบหลักที่ทำหน้าที่ประมวลผล ตัดสินใจในการรับหรือส่งข้อมูลในการสื่อสาร

CAN Controller

  • เป็นส่วนประกอบที่ทำหน้าที่ควบคุมการรับส่งข้อมูล CAN โดยเฉพาะ (CAN Tx / CAN Rx)
  • มักจะถูกใส่เป็น build-in อยู่ภายใน MCU ที่มีสเปคสูง หรือ MCU ที่ถูกสร้างขึ้นมาเพื่องานด้านยานยนต์โดยเฉพาะ

CAN Transceiver

  • เป็นส่วนที่ทำหน้าที่แปลงสัญญาณลอจิก 0 หรือ 1 ให้เป็นสัญญาณที่ใช้ในการสื่อสารบน CAN bus นั่นคือ CANH (CAN High) และ CANL (CAN Low) โดยที่ CAN Transceiver นั้นมักจะเป็นส่วนที่ต้องต่อพ่วงเพิ่มเข้าไปกับตัว MCU อีกที (โมดูลแยก)

ระดับของสัญญาณและการรับส่งข้อมูลของโพรโทคอล CAN bus

อย่างที่ทราบกันแล้วว่าชั้น Physical Layer ของโพรโทคอล CAN bus นั้นจะมีสายไฟจำนวนสองเส้นที่ใช้สำหรับการสื่อสารข้อมูลเป็นหลัก ได้แก่ CANH (CAN High) และ CANL (CAN Low) โดยคุณลักษณะระหว่าง CANH และ CANL นั้นจะใช้การสื่อสารข้อมูลแบบความแตกต่างของสัญญาณ (Differential signal) ระหว่างทั้งสองเส้น ในการแสดงถึงค่าสถานะลอจิก สามารถจำแนกได้เป็น

  • Dominant: เป็นสถานะในจุดที่แรงดันระหว่าง CANH และ CANL นั้นมากกว่า threshold ซึ่งสามารถแทนสถานะลอจิกได้เท่ากับ 0
  • Recessive: เป็นสถานในจุดที่แรงดันระหว่าง CANH และ CANL นั้นน้อยกว่า threshold ซึ่งสามารถแทนสถานะลอจิกได้เท่ากับ 1

รูปที่ 4 แสดงความแตกต่างของแรงดันระหว่าง CANH และ CANL [4]

โดย CAN สามารถจำแนกกรอบการส่งข้อความ (Message frames) ออกเป็น 4 แบบ ได้แก่

  • Data frame: ใช้ในการสื่อสารข้อมูลไปยังโหนดต่าง ๆ
  • Remote  frame: ใช้ในการร้องขอข้อมูลจากโหนดอื่น
  • Error frame: ใช้สำหรับรายงานความผิดปกติบนบัส
  • Overload frame: ใช้รายงาน Overload conditions บนบัส

แต่สำหรับการใช้งานจริงนั้นจะมีเพียง Data frame และ Remote frame เท่านั้นที่ผู้ใช้สามารถนำไปประยุกต์ใช้งานในการเขียนโปรแกรมเพื่อสื่อสารกับบัส ส่วน Error frame และ Overload frame นั้น CAN controller จะเป็นตัวที่ดูแลในส่วนนี้ให้

ในส่วนของ Data frame และ Remote frame นั้นจะมีลักษณะการใช้งานที่เหมือนกัน เนื่องจากทั้งสองชุดข้อมูลนั้นใช้โครงสร้างของกรอบข้อความเดียวกัน ซึ่งกรอบข้อความที่กล่าวถึงนี้ยังสามารถแบ่งออกเป็นได้อีก 2 ประเภทได้แก่

  • Standard frame (CAN 2.0A) ซึ่งจะมี 11-bit identifier สามารถพบเห็นได้ในรถทั่วไป และ
  • Extended frame (CAN 2.0B) ซึ่งมี 29-bit identifier สามารถพบได้ในรถแบบ Heavy-duty

สำหรับ Standard frame นั้น จะมีคุณลักษณะดังรูปที่ 5 ดังนี้

รูปที่ 5 แสดงโครงสร้างของ Standard CAN frame [5]

  • SOF (Start of Frame: 1-bit) คือ บิทที่ใช้ในการแสดงถึงการเริ่มต้นของชุดข้อมูล รวมถึงใช้ในการ synchronize กับโหนดอื่นบนบัส
  • ID (Identifier: 11-bit) คือ หมายเลขเฉพาะของชุดข้อมูล โดยที่ Standard CAN frame นั้นจะมี 11-bit identifier นอกจากนี้หมายเลขนี้ยังเป็นตัวบ่งบอกความสำคัญของชุดข้อมูลอีกด้วย โดยที่ค่ายิ่งน้อย ยิ่งมีความสำคัญสูง
  • RTR (Remote Transmission Request: 1-bit) คือ บิทที่กำหนดว่าเป็น Remote frame หรือเป็น Data frame โดยปกติแล้วจะมีสถานะเป็น Dominant (ลอจิก 0) แต่หากต้องการร้องขอข้อมูล บิทนี้จะถูกเซ็ทให้เป็น Recessive (ลอจิก 1)
  • Control (6-bit) ประกอบด้วย
    – IDE (Identifier Extension: 1-bit) คือ บิทที่กำหนดว่าเป็น Standard frame โดยจะมีสถานะเป็น Dominant (ลอจิก 0)  หรือกำหนดว่าเป็น Extended frame โดยจะมีสถานะเป็น Recessive (ลอจิก 1)
    – R0 (Reserved: 1-bit) คือ บิทที่ถูกจองไว้โดยโพรโทคอล
    – DLC (Data Length Code: 4-bit) คือ บิทที่กำหนดความยาวข้อมูลโดยจะสัมพันธ์กับ RTR บิทคือ เมื่อ RTR บิทถูกกำหนดว่าเป็น Remote frame บิท DLC จะบ่งบอกถึงความยาวของข้อมูลที่ร้องขอ ในทางกลับกันหาก RTR บิทถูกกำหนดว่าเป็น Data frame บิท DLC จะบ่งบอกถึงความยาวของข้อมูลที่ส่ง
  • Data (64-bit) คือ ชุดข้อมูลที่ต้องการส่ง
  • CRC (Cyclic redundancy check: 16-bit) คือ ชุด Check sum เพื่อยืนยันความถูกต้องของชุดข้อมูลที่ส่ง โดยที่แบ่งได้เป็น 15-bit สำหรับ CRC และ 1-bit สำหรับ CRC delimiter ซึ่งมีสถานะเป็น Recessive (ลอจิก 1) เสมอ
  • ACK (Acknowledges: 2-bit) คือ บิทที่ใช้ยืนยันความถูกต้องของข้อมูลของฝั่งรับ ประกอบด้วย
    – ACK (1-bit) – โดยฝั่งที่ส่งนั้นจะส่งบิทนี้ออกไปเป็น Recessive (ลอจิก 1) ส่วนฝั่งที่รับนั้น หลังจากที่ได้ตรวจสอบความถูกต้องของข้อมูลแล้วจะทำการ Overwrite บิทนี้ด้วย Dominant (ลอจิก 0) ในทางกลับกัน หากฝั่งรับพบความผิดปกติของชุดข้อมูลดังกล่าว ฝั่งรับจะไม่ทำการ Overwrite และจะไม่สนใจข้อมูลชุดนั้น
    – ACK delimiter (1-bit) – ตัวคั่น มีค่าเป็น Recessive (ลอจิก 1) เสมอ
  • EOF (End of frame: 7-bit) คือ ชุดบิทที่บ่งบอกจุดสิ้นสุดของชุดข้อมูล

รูปที่ 6 แสดงโครงสร้างของ Extended CAN frame [5]

ในส่วนของ Extended frame นั้นจะมี 29-bit identifier และมีบิทเพิ่มเติมขึ้นมาจาก Standard frame เล็กน้อย ได้แก่

  • SRR (Substitute Remote Request: 1-bit) บิทนี้จะมาแทนที่ในตำแหน่งของ RTR ใน Standard frame ทำหน้าที่ในการรักษาโครงสร้างของชุดข้อมูลให้เป็นแบบเดียวกันกับ Standard frame
  • ID (Identifier: 18-bit) คือ ส่วนต่อขยายของหมายเลขเฉพาะของชุดข้อมูล และ
  • R1 (Reserved: 1-bit) คือ บิทที่ถูกจองไว้โดยโพรโทคอล

รูปที่ 7 แสดงภาพรวมทั้งหมดของการส่ง Standard CAN frame 1 ครั้ง [6]

ประโยชน์ของโพรโทคอล CAN

ประโยชน์ของโพรโทคอล CAN [5]

  • ความทนทาน (Robustness): โพรโทคอล CAN bus นั้นเหมาะกับการประยุกต์ใช้ในด้านที่ต้องการความปลอดภัย ตัวอย่างเช่น อุตสาหกรรมยานยนต์ หรือ อุตสาหกรรมออโตเมชัน เป็นต้น ด้วยสาเหตุที่ว่าตัวโพรโทคอล CAN มีกลไกในการตรวจเช็คข้อผิดพลาดของข้อมูลเช่นการทำ bit stuffing, bit monitoring, frame check, acknowledgement check รวมถึง Cyclic Redundancy check
  • ราคาถูก (Low cost): แน่นอนว่าจุดประสงค์หลักของโพรโทคอล CAN bus นี้ถูกออกแบบมาเพื่อลดปริมาณของการเชื่อมต่อระหว่างจุดต่อจุด ทำให้การเชื่อมต่อสายไฟในปริมาณมากถูกลดลงไป เหลือเพียงสายไฟ 2 เส้น ทำให้การสื่อสารสะดวกมากขึ้น ลดต้นทุน ลดน้ำหนัก รวมไปถึงค่าใช้จ่ายในการเดินสายไฟในระดับอุตสาหกรรมลงได้อีกด้วย
  • รวดเร็ว (Speed): สามารถสื่อสารข้อมูลได้ด้วยความเร็วสูง (1 Mbit/s ที่ความยาว 40 เมตร)
  • ความยืดหยุ่น (Flexibility): อย่างที่ทราบกันแล้วว่า CAN bus นั้นสื่อสารด้วยข้อมูลเป็นหลัก (message-based) ทำให้สามารถมีการเพิ่มหรือลดโหนด CAN ออกจากระบบได้โดยที่ไม่จำเป็นต้องอัพเดทระบบใด ๆ ทำให้ง่ายต่อการบริหารจัดการเพิ่มลดอุปกรณ์ที่จะต่อพ่วงกับบัสได้ในทันทีที่ต้องการ
  • ประสิทธิภาพ (Efficiency): ข้อมูลที่มีลำดับความสำคัญสูง จะถูกจัดลำดับความสำคัญตาม ID โดยอัตโนมัติ เพื่อเพิ่มประสิทธิภาพในการเข้าถึงบัสได้ทันทีโดยที่ไม่ทำให้รบกวนชุดข้อมูลอื่น ๆ

เป็นอย่างไรกันบ้างครับสำหรับบนความครั้งนี้ ทางเราบริษัท NDR Solution Thailand Co., Ltd. หวังเป็นอย่างยิ่งว่าบทความครั้งนี้จะเป็นประโยชน์ต่อผู้ที่สนใจไม่มากก็น้อยนะครับ หากกล่าวโดยสรุปทิ้งท้าย โพรโทคอล CAN bus นั้น ถูกพัฒนาขึ้นมาเพื่อเพิ่มประสิทธิภาพการสื่อสารระหว่างจุดต่อจุด (point-to-point) ลดปริมาณการใช้สายไฟที่ยุ่งเหยิงให้เหลือเพียงแค่ 2 เส้น (CANH และ CANL) ทำให้ง่ายต่อการบริหารจัดการอุปกรณ์ที่มาเชื่อมต่อกับบัส รวมไปถึงการบำรุงรักษาก็สามารถทำได้สะดวกยิ่งขึ้น นอกจากนี้ CAN bus ยังมีความสามารถในการทนทานต่อสัญญาณรบกวนภายนอก มีกระบวนการรูปแบบต่าง ๆ ที่ช่วยในการตรวจสอบข้อมูลว่าถูกต้องหรือไม่ ทำให้ CAN bus นั้นมีความน่าเชื่อถือของข้อมูล จึงทำให้นิยมนำไปใช้ประยุกต์ใช้กับอุตสาหกรรมที่ต้องการความปลอดภัยสูงอย่างที่เห็นแพร่หลายในอุตสาหกรรมยานยนต์นั่นเอง

 

Content References

[1] What is the controller area network (CAN) bus ?, MICROCONTROLLERTiPS : LINK

[2] What is CAN bus protocol – CAN bus theory, 911electronic : LINK

[3] Introduction to the Controller Area Network (CAN), Texas Instruments : LINK

[4] AN228 – A CAN Physical Discussion, Microchip : LINK

[5] CAN Bus Protocol: The Ultimate Guide (2023), AutoPi.io : LINK

[6] CAN bus, Wikipedia : LINK

[7] What Is CAN Bus (Controller Area Network) and How It Compares to Other Vehicle Bus Networks, Grant Maloy Smith : LINK