Friday, November 23, 2012

MCS-51 Based Tachometer (เครื่องวัดความเร็วรอบ)


Siwakorn Sukprasertchai , siwakorn@nablatronics.com



     เป็นโปรเจคที่ผมทำขึ้นเล่นๆ เมื่อสมัยเรียน ปี 4 ซึ่งได้ถูกนำไปใช้งานจริงเพื่อวัดความเร็วรอบของเครื่อง Spin Coater (เครื่องปลูกฟิล์มโดยใช้เทคนิคแรงหนีศูนย์กลาง) โดยการทำงานทั้งหมดจะใช้ Microcontroller ยอดฮิต 8051 เป็นตัวควบคุม

รูปที่ 1. ชุดสาธิตการทำงานของ Tachometer ที่่มี MCS-51 เป็นไมโครคอนโทรลเลอร์และใช้
Reflective Optical เป็น Sensor (นวพร เหล่าวัฒนธรรม , สุริยงค์ คำพิยะ)


เซนเซอร์อินฟราเรด
รูปที่ 2. เซนเซอร์อินฟราเรดแบบ Reflective Optical

- ความเป็นมา


Tachometer คือเครื่องมือที่ใช้ในการวัดความเร็วในการหมุนของ shaft หรือ disk ของเครื่องจักร โดยทั่วไปจะมีหน่วยของการวัดเป็น RPM (Revolution Per Minute) ซึ่งบทความนี้จะนำเสนอวิธีการสร้าง Tachometer โดยใช้เซนเซอร์แบบ Optical และใช้ไมโครคอนโทรลเลอร์ตระกูล 8051 เป็นตัวควบคุม

- หลักการทำงานของ Sensor


การทำงานของเซนเซอร์จะใช้เซนเซอร์แสง(Photo Interrupter) ซึ่งมี 2 รูปแบบคือ แบบส่องผ่าน(Transmissive) และแบบสะท้อน(Reflective) ทั้ง 2 แบบมีหลักการง่ายๆคือ มีตัวส่งและมีตัวรับ ตามรูปที่ 1. โดยตัวส่งส่วนมากแล้วจะเป็น Infared LED และตัวรับก็จะเป็น Photodetector ซึ่งส่วนมากก็จะเป็น Phototransistor (อีกแบบคือ Photodiode)
รูปที่ 3. วงจรเทียบเท่าของ Photo Interrupter

หลักการทำงานก็คือเมื่อแสงที่เกิดจาก Infared LED ตกกระทบลงบนรอยต่อ base-collector จะทำให้เกิด electron ด้วยกระบวนการ Photoelectric Effect โดย electron ที่เกิดขึ้นนี้จะถูกฉีดเข้าขา base และจะถูกขยายโดย gain (β) ของ transistor ดังนั้นแล้วจึงนำหลักการนี้ไปใช้ตรวจจับวัตถุได้ โดยหลักการตรวจจับแบ่งออกได้เป็น

- กรณีแบบส่องผ่าน

เซนเซอร์แสง
รูปที่ 4. Photo Interrupter แบบส่องผ่าน

โดยในกรณีแบบส่องผ่านนี้ วัตถุที่จะทำการตรวจจับจะต้องผ่านที่บริเวณร่องตรงกลาง ทำให้แสงจากตัวส่งไม่สามารถผ่านไปตกกระทบยังตัวรับได้ จึงทำให้ไม่เกิดกระแสไหลในฝั่งของ Detector

- กรณีแบบแบบสะท้อน

รูปที่ 5. Photo Interrupter แบบสะท้อน

สามารถตรวจจับวัตถุได้โดยใช้วิธีสะท้อน เมื่อเจอวัตถุที่มีสีขาวหรือสีอื่นๆที่ไม่ใช่สีดำจะทำให้เกิดการสะท้อนของแสงจากตัวส่ง แต่เมื่อเจอสีดำแสงจะถูกดูดกลืนทำให้ไม่สะท้อนกลับมา

สัญญาณที่ออกมาจากตัว Photodetector ควรจะต้องมีวงจรปรับสภาพสัญญาณ โดยอาจจะใช้ Schmitt trigger หรือใช้วงจร Comparator ก็ได้

รูปที่ 6. U2 เป็น Photo Interrupter ส่วน U4 คือ opamp ที่ต่อเป็น Comparator ไว้เพื่อทำการปรับสัญญาณให้เป็น TTL โดยมี R7 ทำหน้าที่เป็นตัวต้านทานปรับค่าได้เพื่อปรับแรงดันอ้างอิง โดยมีผลกับความใกล้ไกลในการตรวจจับ(Sensitivity)

รูปที่ 6. วงจรปรับสัญญาณของ Photo Interrupter

รูปที่ 7. คือวงจรสมบูรณ์ของ MCS-51 Based Tachometer โดย MCU คือ AT89S52 ตั้งแต่ P2.0-P2.7 (Port2) นั้นเชื่อมต่อกับโมดูล LCD แบบ 16x2 ไว้เพื่อเป็นส่วนแสดงผล โดยสัญญาณจากเซนเซอร์ที่ผ่านวงจรปรับแต่งแล้วจะต่อเข้ากับ P3.2 ซึ่งเป็นขา External Interrupt เพื่อนำสัญญาณที่ได้ไปเขียนโปรแกรมและคำนวณโชว์ค่าออกมา

รูปที่ 7. วงจรสมบูรณ์ของ Tachometer (คลิกเพื่อ Download)

ชุดสาธิตการทำงานของ Tachometer ที่่มี MCS-51 เป็นไมโครคอนโทรลเลอร์และใช้ Reflective Optical เป็น Sensor (นวพร เหล่าวัฒนธรรม , สุริยงค์ คำพิยะ)


Download Schematic , Sourcecode (ภาษา C)


31 comments:

  1. พี่คะคือว่าหนูจะเขียนโปรแกรมวัดความเร็วภาษาCคะ แต่หนูเริ่อมต้นใช้อินเตอร์รัพพ์ไม่ถูก ช่วยแนะนำหน่อยนะคะ

    ReplyDelete
    Replies
    1. ใน Source Code พี่มีให้แล้วครับ ใช้ Interrupt ทั้ง 2 แหล่ง คือจาก timer และ External ที่ได้จากสัญญาณ Sensor ครับ แต่ใช้ Keil เป็น Compiler ครับ

      Delete
    2. อ่อคะ แล้วไม่ทราบว่าหนูจะสามารถแทรการคำนวณได้ส่วนไหนของโปรแกรมคะ เมื่อเซนเซอร์มีค่าเป็น1

      Delete
    3. ไม่ทราบว่าดู Source Code แล้วหรือยังครับ ผมแทรกการคำนวณไว้แล้วครับ

      ปล. ที่ผมคำนวณคือหน่วย rpm นะครับ

      Delete
    4. ดูแล้วคะ หนูทำได้แล้วคะพี่ ขอบคุณมากๆๆน่ะคะ ถ้าไม่ได้Source Code ของพี่ หนูคงแย่ แน่ๆค่ะ ขอบคุณมากๆๆน่ะคะ

      Delete
    5. พี่คะ ถ้าต้องการลดค่าDelay ให้มันนับไวขึ้น ควรจะลดที่ฟังก์ชันไหนคะ

      Delete
    6. ฟังก์ชัน update_time ครับมี comment ประกอบแล้ว

      Delete
    7. ซอสโค้ด เอามาประยุกต์ใช้กับ MCS-51 ได้มั๊ยคับ

      Delete
    8. source code เป็น 8051 อยู่แล้วครับ

      Delete
  2. ถ้าแปลงเป็น miKroC มันจะแตกต่างกันไหมคะ

    ReplyDelete
    Replies
    1. For Pic หรือเปล่าครับ ถ้าใช่ ก็แปลงแค่ register ครับ กับรูปแบบการเขียนฟังก์ชัน Interrupt ที่ต่างกัน

      Delete
  3. พี่คับคือผมจะเอาไปวัดความเร็วรอบจักรยานเอา วงจรสมบูรณ์ของ MCS-51 Based Tachometer ไปใช้ได้เลยป่ะคับ

    ReplyDelete
    Replies
    1. แล้วถ้าผมใช้เป็น ตัว arduino ต่อกับ วงจรปรับสัญญาณของ Photo Interrupter แล้วใใช้จอแสดงผลแบบ Dot-Matrix ได้ป่าวคับ

      Delete
    2. ต่อเข้ากับขา Interrupt ของ Arduino ได้เลยครับ

      Delete
  4. พี่ครับ ถ้าทำเป็นเครื่องนับเหรียญต้องเปลี่ยนตรงไหนมั้ยครับ พอดีผมใช้ADuC842 โดยให้เซ็นเซอร์แสงเป็นอินพุตส่งเข้า MCU แล้วไปแสดงผลที่จอ LCD แต่มันไม่ยอมนับอ่ะครับ

    ReplyDelete
    Replies
    1. ถ้าใช้ Source code นี้แล้ว มันไม่นับก็เป็นธรรมดาครับ

      ก่อนอื่นต้องเข้าใจก่อนครับ ว่า RPM Meter คือการนับจำนวนต่อหน่วยเวลา ดังนั้นมันไม่ใช่การนับธรรมดาครับ มันมีการคำนวณเพื่อเทียบบอกรอบด้วย

      ส่วนเครื่องนับเหรียญมันเป็นการนับธรรมดาตรงๆครับ ผมแนะนำนะครับ ถ้านับอย่างเดียวจริงๆ ใช้ ADuC842 ผมว่ามันเกินไปหน่อยนะครับ จริงๆ ใช้ Counter Circuit ธรรมดา โดยไม่ต้องเขียนโปรแกรมยังได้เลยครับ

      Delete
    2. เหตุที่ใช้ ADuC 842คือผมต้องใช้นับเหรียญ 6 ชนิดแล้วนำจำนวนที่ได้มารวมกัน และก็ใช้สั่งให้หยุดมอเตอร์ หน่วงเวลาประมาณ10วินาทีเมื่อเหรียญหมดแล้วครับ

      Delete
    3. หยอดทีละเหรียญใช่ไหมครับ ถ้าหยอดทีละเหรียญ จับสัญญาณจาก Opto Sensors มารวมกันเข้า Interrupt ได้เลยครับ

      Delete
  5. คือจับเหรียญทั้งหมดใส่ลงไปทีเดียวน่ะครับ ของผมเป็นเครื่องคัดแยกเหรียญและนับเหรียญอัตโนมัติ ตรงจับInterruptรวมกันนี่ ถ้าเหรียญผ่านเซนเซอร์พร้อมกันพร้อมกันทั้ง2ตัว จะจับทันมั้ยครับ แล้วก็ตรงวงจรผมต้องต่อ C7และ r7เพิ่มเป็นจำนวน6ตัวหรือสามารถตัวเดียวใช้ได้6ตัวเลยครับ

    ReplyDelete
  6. รางที่รับเหรียญหยอด เป็นแบบไหนครับ ไหลมาทีละเหรียญแล้วมีช่องให้เหรียญตกตามขนาดของเหรียญใช่ไหมครับ ผมไม่รู้ว่า ADuC842 มี External Interrupt กี่แหล่ง ถ้ามี 6 แหล่งก็จับแยก 6 แหล่งได้เลยครับ ถ้าไม่มีก็ต้องใช้วิธีอื่นครับ แล้ววงจรภาคปรับสัญญาณของ Photo Interrupter ก็ต้องมีด้วยกันถึง 6 ชุดครับ

    ReplyDelete
  7. ใช่ครับเป็นแบบตกตามขนาดเหรียญครับ External Interrupt จะมี1ตัวครับ ส่วนภาคปรับสามารถใช้op-ampทั้ง4ตัวได้เลย แต่แค่ต่อเพิ่ม R7กับC7 เพิ่มเข้าไป ใช่มั้ยครับ

    ReplyDelete
    Replies
    1. ADuC842 มี External Interrupt 2 แหล่งนะครับ C7 เป็น Bypass capacitor ครับ ถ้า IC มี Op-Amp ภายใน 4 ตัวก็ใช้แค่ตัวเดียวโดยวางใกล้ๆ IC ส่วน R7 ทำหน้าที่เป็น Voltage Reference (วงจร Comparator) ถ้ามั่นใจว่าสัญญาณจาก Photo Interrupter มาเท่าๆกัน ก็สามารถใช้ R7 เพียงตัวเดียวได้ครับ(การวางตำแหน่งต่างๆ) หรือไม่ก็คำนวณหา R7 เอา โดยการทดลองวัดสัญญาณที่ได้จาก Detector หลังจากการ Setup แล้ว

      Delete
  8. วันนี้ผมลองเอา วงจรปรับสัญญาณของ Photo Interrupter ทดลองทำเป็นลายปริ้นน่ะครับ ปรากฎว่า ลองเอามิเตอร์จับที่ขา C ของsensor แสง ขึ้นที่ 5V แล้วลองเอาวัตถุบัง มันลดเหลือแค่4 Vน่ะครับ ก่อนหน้าที่ผมจะต่อ op-amp ใช้ sensor แสงจับดู คือ มันลงไปถึง0 V น่ะครับ อันนี้ ยังถูกอยู่มั้ยครับ แล้วก็ R7 พอปรับเทียบกับระยะวัตถุ ใช้มิเตอร์จับที่ขา C ยิ่งใกล้แรงดัน จะลดลงเหลือ4 V พอจับที่output ของ op-amp แรงดันคงที่ 4 V

    ReplyDelete
    Replies
    1. ขา C ขา C ของตัว C หรือของเซนเซอร์ครับ ถ้าเป็นเซนเซอร์นี่ ใช้ตัวไหนครับ

      Delete
  9. ขา C ของ เซ็นเซอร์ครับ ใช้ TCRT5000 ครับ

    ReplyDelete
    Replies
    1. ขา C ที่เป็นขา Collector ของ Transistor ที่ไม่ใช่ขา C ของฝั่ง Infared LED นะครับ
      ถ้าขา Collector จริง ยังไงสัญาณที่ได้ก็ขึ้นอยู่กับค่าของความเข้มแสงนะครับ ถ้าไม่มีแสงมากระทบ detector สัญญาณที่ขา Collector จะสูงถึง 5V นะครับ แต่ถ้ามีแสงมากระทบ มันจะไล่ลดระดับลดลงนะครับ ไม่เกี่ยวกับ Op-amp นะครับ

      Delete
  10. คือของผมลองเอาวัตถุไปใกล้เซ็นเซอร์มากที่สุดมันลดลงเหลือที่4โวลท์ พอค่อยๆเลื่อนวัตถุออกห่างจากเซ็นเซอร์ทีละนิด ค่าแรงดันก็ค่อยๆเพิ่มน่ะครับจนMAX 5V คือลักษณะอย่างนี้ มันใช้ได้หรือยังครับก่อนที่จะเอาไปเข้า MCUน่ะครับ

    ReplyDelete
    Replies
    1. ได้แล้วครับ ที่เหลือก็ไปปรับ Voltage Reference ให้ได้ตามระยะที่ต้องการครับ

      Delete
  11. ขอบคุณครับ ถ้ามีติดขัดไรเดี๋ยวผมมาถามอีกนะครับ

    ReplyDelete
  12. โค๊ตที่ให้ มันไม่ตรงกับใน YouTube รึเปล่าครับ

    ReplyDelete
  13. อุปกรณ์ ในการทำชิ้นนี้ มีอะไรบ้าง ครับ อยากลองทำดูครับ ขอบคุณครับ

    ReplyDelete