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)
พี่คะคือว่าหนูจะเขียนโปรแกรมวัดความเร็วภาษาCคะ แต่หนูเริ่อมต้นใช้อินเตอร์รัพพ์ไม่ถูก ช่วยแนะนำหน่อยนะคะ
ReplyDeleteใน Source Code พี่มีให้แล้วครับ ใช้ Interrupt ทั้ง 2 แหล่ง คือจาก timer และ External ที่ได้จากสัญญาณ Sensor ครับ แต่ใช้ Keil เป็น Compiler ครับ
Deleteอ่อคะ แล้วไม่ทราบว่าหนูจะสามารถแทรการคำนวณได้ส่วนไหนของโปรแกรมคะ เมื่อเซนเซอร์มีค่าเป็น1
Deleteไม่ทราบว่าดู Source Code แล้วหรือยังครับ ผมแทรกการคำนวณไว้แล้วครับ
Deleteปล. ที่ผมคำนวณคือหน่วย rpm นะครับ
ดูแล้วคะ หนูทำได้แล้วคะพี่ ขอบคุณมากๆๆน่ะคะ ถ้าไม่ได้Source Code ของพี่ หนูคงแย่ แน่ๆค่ะ ขอบคุณมากๆๆน่ะคะ
Deleteพี่คะ ถ้าต้องการลดค่าDelay ให้มันนับไวขึ้น ควรจะลดที่ฟังก์ชันไหนคะ
Deleteฟังก์ชัน update_time ครับมี comment ประกอบแล้ว
Deleteซอสโค้ด เอามาประยุกต์ใช้กับ MCS-51 ได้มั๊ยคับ
Deletesource code เป็น 8051 อยู่แล้วครับ
Deleteถ้าแปลงเป็น miKroC มันจะแตกต่างกันไหมคะ
ReplyDeleteFor Pic หรือเปล่าครับ ถ้าใช่ ก็แปลงแค่ register ครับ กับรูปแบบการเขียนฟังก์ชัน Interrupt ที่ต่างกัน
Deleteพี่คับคือผมจะเอาไปวัดความเร็วรอบจักรยานเอา วงจรสมบูรณ์ของ MCS-51 Based Tachometer ไปใช้ได้เลยป่ะคับ
ReplyDeleteแล้วถ้าผมใช้เป็น ตัว arduino ต่อกับ วงจรปรับสัญญาณของ Photo Interrupter แล้วใใช้จอแสดงผลแบบ Dot-Matrix ได้ป่าวคับ
Deleteต่อเข้ากับขา Interrupt ของ Arduino ได้เลยครับ
Deleteพี่ครับ ถ้าทำเป็นเครื่องนับเหรียญต้องเปลี่ยนตรงไหนมั้ยครับ พอดีผมใช้ADuC842 โดยให้เซ็นเซอร์แสงเป็นอินพุตส่งเข้า MCU แล้วไปแสดงผลที่จอ LCD แต่มันไม่ยอมนับอ่ะครับ
ReplyDeleteถ้าใช้ Source code นี้แล้ว มันไม่นับก็เป็นธรรมดาครับ
Deleteก่อนอื่นต้องเข้าใจก่อนครับ ว่า RPM Meter คือการนับจำนวนต่อหน่วยเวลา ดังนั้นมันไม่ใช่การนับธรรมดาครับ มันมีการคำนวณเพื่อเทียบบอกรอบด้วย
ส่วนเครื่องนับเหรียญมันเป็นการนับธรรมดาตรงๆครับ ผมแนะนำนะครับ ถ้านับอย่างเดียวจริงๆ ใช้ ADuC842 ผมว่ามันเกินไปหน่อยนะครับ จริงๆ ใช้ Counter Circuit ธรรมดา โดยไม่ต้องเขียนโปรแกรมยังได้เลยครับ
เหตุที่ใช้ ADuC 842คือผมต้องใช้นับเหรียญ 6 ชนิดแล้วนำจำนวนที่ได้มารวมกัน และก็ใช้สั่งให้หยุดมอเตอร์ หน่วงเวลาประมาณ10วินาทีเมื่อเหรียญหมดแล้วครับ
Deleteหยอดทีละเหรียญใช่ไหมครับ ถ้าหยอดทีละเหรียญ จับสัญญาณจาก Opto Sensors มารวมกันเข้า Interrupt ได้เลยครับ
Deleteคือจับเหรียญทั้งหมดใส่ลงไปทีเดียวน่ะครับ ของผมเป็นเครื่องคัดแยกเหรียญและนับเหรียญอัตโนมัติ ตรงจับInterruptรวมกันนี่ ถ้าเหรียญผ่านเซนเซอร์พร้อมกันพร้อมกันทั้ง2ตัว จะจับทันมั้ยครับ แล้วก็ตรงวงจรผมต้องต่อ C7และ r7เพิ่มเป็นจำนวน6ตัวหรือสามารถตัวเดียวใช้ได้6ตัวเลยครับ
ReplyDeleteรางที่รับเหรียญหยอด เป็นแบบไหนครับ ไหลมาทีละเหรียญแล้วมีช่องให้เหรียญตกตามขนาดของเหรียญใช่ไหมครับ ผมไม่รู้ว่า ADuC842 มี External Interrupt กี่แหล่ง ถ้ามี 6 แหล่งก็จับแยก 6 แหล่งได้เลยครับ ถ้าไม่มีก็ต้องใช้วิธีอื่นครับ แล้ววงจรภาคปรับสัญญาณของ Photo Interrupter ก็ต้องมีด้วยกันถึง 6 ชุดครับ
ReplyDeleteใช่ครับเป็นแบบตกตามขนาดเหรียญครับ External Interrupt จะมี1ตัวครับ ส่วนภาคปรับสามารถใช้op-ampทั้ง4ตัวได้เลย แต่แค่ต่อเพิ่ม R7กับC7 เพิ่มเข้าไป ใช่มั้ยครับ
ReplyDeleteADuC842 มี External Interrupt 2 แหล่งนะครับ C7 เป็น Bypass capacitor ครับ ถ้า IC มี Op-Amp ภายใน 4 ตัวก็ใช้แค่ตัวเดียวโดยวางใกล้ๆ IC ส่วน R7 ทำหน้าที่เป็น Voltage Reference (วงจร Comparator) ถ้ามั่นใจว่าสัญญาณจาก Photo Interrupter มาเท่าๆกัน ก็สามารถใช้ R7 เพียงตัวเดียวได้ครับ(การวางตำแหน่งต่างๆ) หรือไม่ก็คำนวณหา R7 เอา โดยการทดลองวัดสัญญาณที่ได้จาก Detector หลังจากการ Setup แล้ว
Deleteวันนี้ผมลองเอา วงจรปรับสัญญาณของ Photo Interrupter ทดลองทำเป็นลายปริ้นน่ะครับ ปรากฎว่า ลองเอามิเตอร์จับที่ขา C ของsensor แสง ขึ้นที่ 5V แล้วลองเอาวัตถุบัง มันลดเหลือแค่4 Vน่ะครับ ก่อนหน้าที่ผมจะต่อ op-amp ใช้ sensor แสงจับดู คือ มันลงไปถึง0 V น่ะครับ อันนี้ ยังถูกอยู่มั้ยครับ แล้วก็ R7 พอปรับเทียบกับระยะวัตถุ ใช้มิเตอร์จับที่ขา C ยิ่งใกล้แรงดัน จะลดลงเหลือ4 V พอจับที่output ของ op-amp แรงดันคงที่ 4 V
ReplyDeleteขา C ขา C ของตัว C หรือของเซนเซอร์ครับ ถ้าเป็นเซนเซอร์นี่ ใช้ตัวไหนครับ
Deleteขา C ของ เซ็นเซอร์ครับ ใช้ TCRT5000 ครับ
ReplyDeleteขา C ที่เป็นขา Collector ของ Transistor ที่ไม่ใช่ขา C ของฝั่ง Infared LED นะครับ
Deleteถ้าขา Collector จริง ยังไงสัญาณที่ได้ก็ขึ้นอยู่กับค่าของความเข้มแสงนะครับ ถ้าไม่มีแสงมากระทบ detector สัญญาณที่ขา Collector จะสูงถึง 5V นะครับ แต่ถ้ามีแสงมากระทบ มันจะไล่ลดระดับลดลงนะครับ ไม่เกี่ยวกับ Op-amp นะครับ
คือของผมลองเอาวัตถุไปใกล้เซ็นเซอร์มากที่สุดมันลดลงเหลือที่4โวลท์ พอค่อยๆเลื่อนวัตถุออกห่างจากเซ็นเซอร์ทีละนิด ค่าแรงดันก็ค่อยๆเพิ่มน่ะครับจนMAX 5V คือลักษณะอย่างนี้ มันใช้ได้หรือยังครับก่อนที่จะเอาไปเข้า MCUน่ะครับ
ReplyDeleteได้แล้วครับ ที่เหลือก็ไปปรับ Voltage Reference ให้ได้ตามระยะที่ต้องการครับ
Deleteขอบคุณครับ ถ้ามีติดขัดไรเดี๋ยวผมมาถามอีกนะครับ
ReplyDeleteโค๊ตที่ให้ มันไม่ตรงกับใน YouTube รึเปล่าครับ
ReplyDeleteอุปกรณ์ ในการทำชิ้นนี้ มีอะไรบ้าง ครับ อยากลองทำดูครับ ขอบคุณครับ
ReplyDeleteWperfisac_ni Vicky Mirda https://www.riversidetackshack.com/profile/Why-Men-Lie-And-Women-Cry-Pdf-Free-Download-Zip-LINK/profile
ReplyDeleteroochesnibbchi