หน้าเว็บ

วันศุกร์ที่ 19 กันยายน พ.ศ. 2557

CMPS10 Compass Sensor with UNICON

รู้ทิศและความเอียงด้วย CMPS10 โมดูลเข็มทิศอิเล็กทรอนิกส์

รูปหัวเรื่อง
<อ้างอิงจากวารสาร The Prototype Electronics ฉบับที่ 40>

เบื้องต้นกับ CMPS10 

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

    โมดูล CMPS10 มีหน้าตา, การจัดขา และการกำหนดทิศทางหลักจากผู้ผลิตแสดงในรูปที่ 1 โดยตำแหน่งดังกล่าวจะอ้างอิงกับขั้วของแม่เหล็กโลกหรือเป็นทิศเหนือ อย่างไรก็ตาม ผู้ใช้งานสามารถกำหนดทิศอ้างอิงใหม่ได้ โดยไม่จำเป็นต้องเป็นทิศเหนือเสมอไป ด้วยกระบวนการทางซอฟต์แวร์และขั้นตอนทางฮาร์ดแวร์เล็กน้อย   

รูปที่ 2
รูปที่ 2 แสดงที่มาของค่าที่อ่านได้จากโมดูลเข็มทิศ CMPS10

    CMPS10 ใช้ไฟเลี้ยงในช่วง +3.6 ถึง +5V การเชื่อมต่อกับ CMPS10 ทำได้ 3 วิธีคือ โหมดบัส I2C, โหมดอนุกรมหรือ Serial และโหมด PWM ค่าที่ได้เลือกได้ทั้งแบบ Bearing, Pitch และ Roll โดย Bearing เป็นค่าทิศทางรอบตัวในแนวแกนนอน มีค่าระหว่าง 0 ถึง 359.9 องศา ส่วน Pitch เป็นมุมยกมีค่าระหว่าง -85 ถึง 85 องศาเทียบกับแนวระนาบ และ Roll เป็นมุมเอียงมีค่าระหว่าง -85 ถึง 85 องศาเทียบกับแนวระนาบ ดูรูปที่ 2 ประกอบ


การติดต่อในโหมดบัส I2C

    ในมินิโปรเจ็กต์นี้เลือกติดต่อกับโมดูล CMPS10 ผ่านทางบัส I2C เนื่องจากช่วยลดจำนวนพอร์ตที่ใช้งานได้ เพราะด้วยการใช้บัส I2C ผู้ใช้งานสามารถต่อพ่วงขาพอร์ต SDA และ SCL ของบอร์ด Unicon เพียง 2 ขากับตัวตรวจจับที่ใช้บัส I2C ได้หลายตัวร่วมบนบัสเดียวกัน นอกจากนั้น จากการทดสอบพบว่า การติดต่อกับโมดูล CMPS10 ในโหมดบัส I2C สะดวกกว่าแบบอนุกรมและแบบ PWM Mode
    สำหรับ CMPS10 มีแอดเดรสสำหรับเชื่อมต่อผ่านระบบบัส I2C อยู่ที่ 0x60 มีรีจิสเตอร์เก็บค่าต่างๆ รวม 22 ตัว ดังแสดงในตารางที่ 1

ตารางที่ 1 
ตารางที่ 1 รายละเอียดของรีจิสเตอร์ทั้งหมดของโมดูลเข็มทิศ CMPS10

 หากส่งข้อมูลคำสั่งเป็น 0x00 จะเป็นการอ่านค่าเวอร์ชันเฟิร์มแวร์ของโมดูล CMPS10
    หากส่งข้อมูลคำสั่งเป็น 0x02 จะเป็นการอ่านข้อมูล โดย CMPS10 จะส่งข้อมูลกลับมา 4 ไบต์ ไบต์แรกเป็นไบต์สูงของค่ามุมทิศ (bearing), ไบต์ที่สองเป็นไบต์ต่ำของค่ามุมทิศ, ไบต์ที่สามจะเป็นค่ามุมยก (pitch) และไบต์สุดท้ายจะเป็นค่ามุมเอียง (roll) โดยค่ามุมทิศที่อ่านได้มีค่าระหว่าง 0 ถึง 3599 (16 บิต) จึงต้องหารด้วย 10 เพื่อให้ได้ค่ามุมทิศที่มีค่าระหว่าง 0 ถึง  359.9 องศา

การต่อวงจรเพื่อใช้งานกับบอร์ด Unicon

    เตรียมอุปกรณ์ทั้งหมดดังรูปที่ 3 ใช้สาย JST3AC-8 จำนวน 2 เส้นต่อระหว่างบอร์ด Unicon และโมดูล CMPS10 ดังรูปที่ 4 โดยปลายสายด้านหัวต่อ IDC ตัวเมียของสาย JST3AC-8 เส้นที่ 1 ต่อกับคอนเน็กเตอร์ของ CMPS10 ที่ขาไฟเลี้ยง (+V), กราวด์ (GND)และ SDA ส่วนเส้นที่ 2 ให้ต่อสายสัญญาณ (สีขาว เส้นกลาง) กับขา SCL ส่วนหัวต่อ IDC ตัวเมียของสายสีแดงและดำที่เหลือให้ปล่อยลอยไว้ ส่วนปลายสายด้านที่เป็นหัวต่อ JST ให้นำไปเสียบจุดต่อพอร์ต SDA และ SCL บนบอร์ด Unicon

รูปที่ 3 อุปกรณ์ทั้งหมดที่ต้องใช้ในการใช้งานโมดูลเข็มทิศ CMPS10 กับบอร์ด Unicon

UniconProject04-fig19_CO-[Converted]

รูปที่ 4 วงจรเชื่อมต่อเพื่อใช้งานโมดูลเข็มทิศ CMPS10 กับบอร์ด Unicon


    หากต้องการติดตั้งโมดูลเข็มทิศ CMPS10 เข้ากับแท่นหรือฐานยึดใดๆ จะต้องใช้สกรูและนอตพลาสติกในการติดตั้งเพื่อลดผลกระทบจากโลหะที่อาจมีต่อการตรวจจับแม่เหล็กขั้วโลกของตัวตรวจจับภายใน CMPS10 (ในชุดอุปกรณ์ของ CMPS10 มีเตรียมไว้ให้แล้ว - ดูได้จากรูปที่ 3)
UniconProject04-Program04
โปรแกรมที่ 1 ไฟล์ Unicon_CMPS10_Button.ino สำหรับอ่านค่าจากโมดูลเข็มทิศ CMPS10 ของบอร์ด Unicon


เขียนโค้ด

    โค้ดตัวอย่างสำหรับอ่านค่าของโมดูลเข็มทิศ CMPS10 แสดงในโปรแกรมที่ 1 จากนั้นนำค่าที่ได้มาแสดงผลที่จอ GLCD-XT ที่ติดตั้งบนบอร์ด Unicon
    ฟังก์ชั่นหลักๆ ของโปรแกรมมี 3 ตัวคือ measurement();, display_data(); และ calibration(); โดยฟังก์ชั่นแรกเป็นฟังก์ชั่นติดต่อเพื่ออ่านค่าจาก CMPS10 ผ่านรูปแบบการสื่อสารข้อมูลระบบบัส I2C ค่าที่ได้มี 3 ค่าคือ bearing, pitch และ roll จากนั้นนำค่าทั้งหมดมาแสดงผลที่ GLCD-XT ด้วยฟังก์ชั่น display_data();
    ส่วนฟังก์ชั่น calibrate(); ใช้ปรับเทียบทิศอ้างอิงให้แก่โมดูล CMPS10 โดยทำการเขียนค่า 0xF0 ไปยังรีจิสเตอร์ 22 ของโมดูล CMPS10 เพื่อเริ่มต้นการปรับเทียบ จากนั้นเมื่อกำหนดทิศอ้างอิงเริ่มต้นได้ ให้เขียนข้อมูล 0xF5 ไปยังรีจิส
เตอร์ 22 ของโมดูล CMPS10 โดยในการเขียนแต่ละครั้งจะเกิดขึ้นเมื่อมีการกดสวิตช์ที่ต่อกับขาพอร์ต 30 ในการปรับแต่งต้องทำทั้งสิ้น 4 ครั้งตามทิศหลัก แต่ละทิศจะมีมุมต่างกัน 90 องศา 

ทดสอบวัดทิศทาง

    หลังจากอัปโหลดโปรแกรมไปยังบอร์ด Unicon ระบบจะทำงานทันที Unicon จะติดต่อกับโมดูล CMPS10 เพื่ออ่านค่าและแสดงผลดังรูปที่ 5 หากไม่มีการกำหนดทิศทางอ้างอิงเป็นอย่างอื่น ตำแหน่ง 0 องศาจะหมายถึง ทิศเหนือ ซึ่งจะอ้างอิงกับขั้วแม่เหล็กโลก โดยทิศอ้างอิงหลักที่กำหนดมาจากโรงงานของโมดูล CMPS10 แสดงในรูปที่ 2
    หากมีการหมุนหรือบิดตัวโมดูลไปมา ค่าของมุมยก (pitch) และมุมเอียง (roll) จะเปลี่ยนแปลง เป็นการแสดงให้เห็นว่า
โมดูล CMPS10 สามารถวัดความเอียงได้ด้วย
UniconProject04-fig20-[Converted]
รูปที่ 5 ผลการทำงานของโมดูล CMPS10 ที่แสดงค่ามุมของทิศ (Bearing), มุมยก (Pitch) และมุมเอียง (Roll) ผ่านทางบอร์ด Unicon
 

การปรับแต่งทิศอ้างอิง

    อย่างไรก็ตาม ในการใช้งานจริง ควรมีการปรับแต่งทิศอ้างอิงให้ถูกต้องเพื่อขจัดหรือลดผลจากสนามแม่เหล็กที่อาจค่างอยู่ภายในตัวตรวจจับสนามแม่เหล็กของโมดูล CMPS10 มีขั้นตอนโดยสรุปดังนี้
    (1) เริ่มต้นด้วยการกดสวิตช์ที่ต่อกับพอร์ต 30 เพื่อเข้าสู่โหมดปรับทิศอ้างอิง จอแสดงผล GLCD-XT แสดงข้อความ Calibrate Start ตามด้วยข้อความ Turn module to North. ทำการหมุนตัวโมดูล CMPS10 ไปยังทิศที่กำหนดให้เป็นทิศเหนือ (อาจเป็นทิศเหนือจริงๆ หรือทิศใดๆ ที่ต้องการอ้างอิงก็ได้) แล้วกดสวิตช์ที่ต่อกับพอร์ต 30 เพื่อกำหนดทิศอ้างอิงครั้งที่ 1 จะเห็น LED ที่โมดูล CMPS10 ติดสว่าง
    (2) ที่จอแสดงผล GLCD-XT แสดงข้อความ Turn module to East. หมุนตัวโมดูล CMPS10 ไปทางขวาในทิศทางตามเข็มนาฬิกา 90 องศา แล้วกดสวิตช์ครั้งที่ 2 อันการกำหนดทิศตะวันออก
    (3) จอแสดงผล GLCD-XT แสดงข้อความ Turn module to South. หมุนตัวโมดูล CMPS10 ไปทางขวาในทิศทางตามเข็มนาฬิกาไปอีก 90 องศา แล้วกดสวิตช์ครั้งที่ 3 เพื่อกำหนดเป็นทิศใต้
    (4) จอแสดงผล GLCD-XT แสดงข้อความ Turn module to West. จากนั้นหมุนโมดูลไปทางขวาในทิศทางตามเข็มนาฬิกาอีก 90 องศา แล้วกดสวิตช์ครั้งที่ 4 เป็นครั้งสุดท้าย LED ของโมดูล CMPS10 จะดับลง เป็นอันสิ้นสุดการปรับแต่งทิศอ้างอิงของโมดูล CMPS10
    ในรูปที่ 6 แสดงขั้นตอนการปรับแต่งทิศอ้างอิงของโมดูล CMPS10

UniconProject04-fig21_CO-[Converted]
รูปที่ 6 การปรับแต่งทิศอ้างอิงของโมดูล CMPS10

 


แก้โค้ดลดอุปกรณ์

    จากโปรแกรมที่ 1 เป็นตัวอย่างที่นำไปใช้กับบอร์ด Arduino ได้ทุกแบบ โดยอาจแก้โค้ดเพื่อเปลี่ยนอุปกรณ์แสดงผลเป็น
โมดูล LCD 16 ตัวอักษร 2 บรรทัด หรือ LED รวมถึงแสดงผ่าน Serial Monitor ของ Arduino IDE สำหรับผู้ใช้งานบอร์ด Unicon และใช้การแสดงผลผ่านจอ GLCD-XT สามารถใช้สวิตช์ OK ในการเข้าสู่โหมดปรับเทียบทิศอ้างอิงแทนการใช้สวิตช์ภายนอกได้ โดยดูตัวอย่างโค้ดในโปรแกรมที่ 2
UniconProject04-Program05
โปรแกรมที่ 2 ไฟล์ Unicon_CMPS10_SW_OK.ino สำหรับอ่านค่าจากโมดูลเข็มทิศ CMPS10 ของบอร์ด Unicon และใช้สวิตช์ OK บนบอร์ดแสดงผล GLCD-XT ในการปรับแต่งทิศอ้างอิง







ไม่มีความคิดเห็น: