บทความของ Mini OBDII
โดย Tumrobot

OBD-II ( On Board Diagnostics ) เป็นมาตรฐานที่กำหนดขี้นร่วมกันโดย SAE และ ISO โดยกำหนดมาตรฐานวิธีการแลกเปลี่ยนข้อมูลทางดิจิตอล

ระหว่างระบบคอมพิวเตอร์ที่ติดตั้งบนรถยนต์ ที่เกี่ยวข้องกับการปล่อยไอเสีย (Emission) กับเครื่องสแกนข้อมูล OBD-II ทั้งด้านฮาร์ดแวร์ ซอฟท์แวร์

ตำแหน่งการติดตั้ง รหัสบันทึกความบกพร่องที่ตรวจพบ (Malfunction Indicator Light : MIL)

โดยมีผลบังคับใช้สำหรับรถยนต์ที่จำหน่ายในอเมริกาตั้งแต่รุ่นปี 1996 เป็นต้นมา ข้อมูลที่อ่านจากระบบจะบอกให้ทราบถึงสถานะของส่วนต่างๆ

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

แผงวงจรอิเล็กทรอนิกส์นี้ใช้ควบคุมรถยนต์ และแสดงอาการผิดปกติของเครื่องยนต์

ปัจจุบันรถเกือบทั่วโลกเป็นรถที่มี OBD ซึ่งเริ่มมาตั้งแต่ปี 1996 แล้ว และถูกปรับปรุงให้ดีขึ้นมาเรื่อย ๆ จาก OBD I เป็น OBD II

ส่วนใหญ่รถในบ้านเราที่ใช้อยู่ในปัจจุบันนี้เป็น OBD II

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

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

ความผิดปกติของเครื่องยนต์ทุกอย่าง จะแสดงเป็นรูปเครื่องยนต์สีส้มเดียวกันทั้งหมด ซึ่งต้องอาศัยทางศูนย์เช็กรายละเอียดด้วยเครื่องอ่าน

จึงจะทราบได้ว่าเครื่องยนต์ที่ผิดปกตินั้นเป็นอะไร

จะรู้ได้อย่างไรว่ารถของเรามี OBD-II หรือไม่?

เราสามารถสังเกตด้วยวีธีง่าย ๆ 2 วิธี คือ

•  รถที่เป็น OBD II นั้น จะต้องมี MAF (MASS AIR FLOW SENSOR) หรือ MAP (MANIFOLD ABSOLUTE PRESSURE SENSOR) อย่างใดอย่างหนึ่ง MAF นั้น

จะติดตั้งอยู่ตรงกรองอากาศผ่านไส้กรองมาแล้ว ส่วน MAP นั้นจะอยู่แถว ๆ ก่อน THROTTLE (ลิ้นปิด-เปิดอากาศ) หรือ แถว ๆ นั้น

จะมองเห็น SOCKET ที่มีสายไฟตั้งแต่ 2 เส้น - 5 เส้นเสียบอยู่ ทั้ง 2 ชนิดนี้ เป็นระบบ FUEL INJECTION ทั้งสิ้น MAF ส่วนใหญ่มี COIL OVER PLUG

หรือตัวจุดระเบิดอยู่เหนือหัวเทียนแต่ละตัว จะมองไม่เห็นจานจ่าย ส่วน MAP นั้น คล้าย ๆ กัน แต่อาจจะเห็นตัว COIL เป็นก้อนสี่เหลี่ยมสีดำ ๆ

ติดอยู่กับข้างตัวเครื่องยนต์มีทั้ง SINGLE และ DOUBLE END COIL ที่มองไม่เห็นจานจ่ายเช่นกัน สำหรับรุ่นแรก ๆ ของ OBD นั้น

อาจมีจานจ่ายแต่ไม่สามารถปรับแต่งองศา (TIMING ADVANCE) จุดระเบิดได้ ที่แน่ ๆ รถ OBD II นั้นต้องเป็น DISTRIBUTORLESS คือไม่มีจานจ่ายให้เห็น

 

* สติ๊กเกอร์ที่อยู่ใต้พวงมาลัยคนฝั่งคนขับ

 

•  ดูที่กล่อง COMPUTOR หรือที่เราเรียกกันติดปากว่า ECU นั้นว่ามี สายพ่วงติด SOCKET ที่เอาไว้ตรวจเช็คความผิดปกติของเครื่องยนต์หรือไม่

SOCKET ตัวนี้ให้นับดูว่ามี 16 จุดต่อไหม หากเป็น 16 จุดต่อให้แน่ใจได้เลยว่าเป็นรถ OBD II อย่างแน่นอน ส่วนใหญ่จะวางตำแหน่งอยู่ใต้พวงมาลัยด้านคนขับ

แตกต่างกันออกไปแล้วแต่ยี่ห้อของรถ หรือที่เรียกเป็นภาษาอังกฤษว่า SIXTEEN PIN CONNECTOR

 

 

Pin 2
Pin 6
Pin 7
Pin 10
Pin 14
Pin 15
Protocol
X
X
J1850 PWM
X
J1850 VPW
X
อาจจะมี *
ISO9141/14230
X
X
ISO15765 (CAN)

* ขา 15 เรียกว่าขา L-Line เป็นออฟชั่นที่เสริมขี้นมาในรถยนต์รุ่นใหม่ๆ ที่ใช้โปรโตรคอล ISO9141-2 หรือ ISO14230-4

นอกเหนือจากขา 2, 7, 10, แล้ว 15 ที่ DLC คอนเนคเตอร์ขา 4 คือกราวน์ตัวถัง, ขา 5 คือกราวน์สัญญาณ และขา 16 ไฟบวกจากแบตเตอรี่

ดังนั้นสรุปเป็นโปรโตรคอลต่างๆได้ดังนี้

  • PWM DLC คอนเนคเตอร์จะต้องมีหน้าสัมผัสทีี่ขา 2, 4, 5, 10, 16
  • VPW DLC คอนเนคเตอร์จะต้องมีหน้าสัมผัสทีี่ขา 2, 4, 5, 16 แต่ไม่มีที่ขา10
  • ISO DLC คอนเนคเตอร์จะต้องมีหน้าสัมผัสทีี่ขา 4, 5, 7, 16 ส่วนขา 15 อาจมีหรือไม่มีก็ได้
  • CAN DLC คอนเนคเตอร์จะต้องมีหน้าสัมผัสทีี่ขา 4, 5, 6, 14, 16
พื้นฐานการ Interface กับ OBD-II ISO 9141-2

เนื่องจากว่า OBD-II ของรถยนต์ส่วนใหญ่นั้นจะเป็น Protocal ISO9141-2 (ค่ายญี่ปุ่น-ยุโรป) ดั้งนั้นการติดต่อ จึงจำเป็นต้องใช้ port K Line และ L line
แต่เนื่องจากว่า รถรุ่นหลังๆมานี้ L Line นั้นไม่ได้ใช้งาน เพราะว่า L Line ปกติ จะใช้ในการ Debug หรือว่า Wake up ECU เท่านั้น
ดังนั้นเราจึงสามารถ ติดต่อ ECU ด้วย K Linr interface เพียงเส้นเดียว

รายละเีอียด Connector

Pin 2 - J1850 Bus+
Pin 4 - Chassis Ground
Pin 5 - Signal Ground
Pin 6 - CAN High (J-2284)
Pin 7 - ISO 9141-2 K Line
Pin 10 - J1850 Bus
Pin 14 - CAN Low (J-2284)
Pin 15 - ISO 9141-2 L Line
Pin 16 - Battery Power



ดังนั้น Pin ที่จำเป็นต้องต่อใช้งานก็คือ Pin 7 K Line, Pin 5 Signal Ground, Pin 16 Battery Power

Protocol ของ ISO9141-2 นั้นเป็นการ รับส่งข้อมูลแบบ UART ที่ buadrate 10400 Bps.
วิธีการติดต่อ
1. Set ตัว Serial port ไปที่ buadrate 5 Bps
2. ส่งข้อมูล 0x33 ไปยัง ECU
3. ทำการเปลี่ยน Buadrate ไปที่ 10400 Bps
4. รอรับข้อมูลตอบกลับ จาก ECU 0x55 ถายใน 300 ms
5. ส่ง ข้อมูล การ Initail 0xF7 ไปที่ ECU
6. รอ ECU ตอบข้อมูล 0xCC กลับมา จากนั้นก็สามารถส่งข้อมูล เพื่อทำการติดต่อกับ ECU โดยอ้างอิงกับ PID Code

OBD-II Connector black OMS
เนื่องจากว่าเราต้อง การข้อมูลของ ECU ผ่านทาง connect OBD-II ดังนั้น
เราจึงต้อง จัดหา คอนเน็คเตอร์ สำหรับต่อเข้ากับหัวต่อตัวนี้
ซึ่งคอนเน็คเตอร์นี้จะเป็นไป ตามมาตรฐานของ
SAE J1962 / ISO 15031-3 สามารถใช้ได้กลับรถ ทั่วไป

เริ่มต้นที่ออกแบบไว้ก็คือ


1. ใช้ MCU เบอร์ PIC16F887-I/P ก็เพียงพอสำหรับ งานติดต่อกับ ECU
และก็แสดงผลออกมาให้กับ LCD แล้วครับ


2. L9637D เป็นตัว interface แบบ K Line นะครับ
หน้าตาของ L9637D ครับ Pin 1 อยู่มุมล่างซ้ายนะครับ



MC33290 ก็ใช้งานได้นะครับ


3. LCD ใช้แบบ 16 ตัวอักษร 2 บรรทัด สีฟ้าสวยดีครับ ส่วนใครชอบสีือื่นๆ ก็หามาเปลี่ยน ได้ครับ



4. Connector แบบตัวข้างบนนั่นแหล่ะครับ
ผมสั่้งซื้อจากนอกมาครับ ตัวนี้แพงเอาเรื่องเหมือนกัน
แต่เพื่อ safety สำหรับ OBD-II Connector ในรถยนต์ ของเรา ก็จำเป็น หล่ะครับ
เพราะ ECU ราคากล่องละ หลายหมื่นอยู่ครับ อันนี้ต้องระวัง
ดีที่สุดก็ Connector ตามมาตรฐานเค้าเนี่ยแหล่ะครับ
รวมค่าใช้จ่ายทั้งหมด ค่าโอนเงิน ค่าขนส่ง ภาษีนำเข้า ราคา ตัวละ 550 บาทได้ครับ

หลักการทำงานของโปรแกรม


1. ทำการตรวจเช็คสถานะเครื่องยนต์ เพื่อให้รู้สถานะ การติดเครื่องยนต์ หรือการดับเครื่องยนต์ ก่อนครับ
เพื่อที่จะข้อมูลมาเปิด ปิด LCD Backlight ครับ ไม่งั้นแบตเตอรี่รถยนต์ได้หมดกันก่อนพอดี
และ เพื่อที่จะนำมาเป็นตัว init OBD-II ด้วยครับ เนื่องจากว่าหลังการดับเครื่องยนต์ OBD-II
จะหยุดการส่งข้อมูล จาก ECU ดังนั้น เราต้องทำการ initail ทุกครั้ง ที่มีการติดเครื่องยนต์

2. ติดต่อ UART กับ ECU ด้วย protocol ISO-9141-2 ด้วย buadrate 10400 bps ครับ
เพื่อเข้าไปขอ initial OBD-II ในรถยนต์

3. ส่งข้อมูลที่เราต้องการทราบ ไปที่ ECU ซึ่งจะเป็น PID ของแต่ละ ข้อมูล
ศึกษาเพิ่มเติมจาก http://en.wikipedia.org/wiki/OBD-II_PIDs
คือ อยากรู้อะไรก็ เขียนข้อมูล PID ไปที่ ECU แล้วรอข้อมูลที่ได้ตอบกลับมา
โดยผม ส่ง PID ไปขอข้อมูลพื้นฐานดังนี้ครับ
- ความเร็ว รถยนต์  speed
- ความเร็วรอบ เครื่องยนต์ RPM
- อุณหภูมิน้ำหล่อเย็น หน่วยเป็น องศา C
- Engine Load หน่วยเป็น %

ส่วนค่า อื่นๆ เช่น อัตราการสิ้นเปลืองน้ำมัน และระยะทางสะสม ก็นำข้อมูล
ที่ได้มาคำนวณกันทีหลังครับ หลักการหาระยะทางคร่าวๆ ของผมก็ประมาณนี้ครับ ซึ่งความแม่นยำของระยะทางขึ้นอยู่กับค่า interval ครับ

tripdistancre = tripdistance + speed/interval;

4. นำข้อมูลที่ได้ มาแสดงผล บน LCD charactor แบบ 16 x 2 ครับ

Software

OpenOBDII.hex - สามารถทดสอบ Download Hex file ไปลองใช้งานได้ครับ

วงจร

แผ่นวงจรที่ออกแบบไว้

จอแสดงผล ด้วย LCD 16 x 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

อ่านบทความอื่นๆ