หน้าแรก
วิธีการสั่งซื้อสินค้า
แจ้งชำระเงิน
บทความ
เว็บบอร์ด
เกี่ยวกับเรา
ติดต่อเรา
หน้าแรก
>
บทความ
>
Pull-Up & Pull-Down
ค้นหาบทความที่นี่
บทความทั้งหมด
Pull-Up & Pull-Down
5 ปีที่ผ่านมา
โดย
เจ้าของร้าน
Publish : 31 July 2020
หัวข้อในบทความนี้
- ทำไมต้องต่อ Pull-Up , Pull-Down
- Pull-Up
- Pull-Down
- Internal Pull-Up
- สรุป
ใน Arduino พื้นฐานนั้นเราจะคุ้นเคยกับการอ่านค่าสถานะของปุ่มกด และในการต่อปุ่มกดก็จะมีการต่อกับตัวต้านทาน มักได้ยินชื่อว่า Pull Up ไม่ก็ Pull Down ซึ่งบางคนที่ไม่ได้เรียนอิเล็กทรอนิกส์มาโดยตรงก็อาจงงว่าทำไมต้องต่อ และการต่อต่างกันมันมีผลอย่างไร วันนี้เรามาลองดูมาวิเคราะห์กันครับ (ปล.ในภาพตัวอย่างจะใช้ 5V แต่การเขียนขอใช้ VCC นะครับ เนื่องจากบางคนอาจใช้เป็น 3.3V 24V ใช้ VCC มันจะได้ไม่ดูบังคับเกินไปว่าต้อง 5V เท่านั้น)
ทำไมต้องต่อตัวต้านทาน? มี VCC กับ GND ก็พอรึเปล่า?
จริงอยู่ครับที่ว่าไฟฟ้าจะไหลจากความต่างศักย์สูงไปยังความต่างศักย์ต่ำเสมอ แต่อย่าลืมว่าเรามีสูตรพื้นฐานทางไฟฟ้า V=IR หากเราไม่ต่อตัวต้านทาน R ลงไป สูตรจะเป็น I=V/0 ซึ่งทางคณิตศาสตร์ไม่นิยาม ไม่สามารถคิดค่าคำตอบออกมาได้ ในทางปฏิบัติหากต่อแบบนี้แล้วนำสัญญาณเข้าไปใส่ Arduino (หรือ MCU ใด ๆ ก็ตาม) จะเกิดสถานะที่เรียกว่า "Floating" เป็นสถานะที่ขาของ MCU ไม่ได้ต่อกับ GND หรือ VCC ใด ๆ เลย หากเราเขียนโปรแกรมให้อ่านค่า Floating นี้ ค่าที่อ่านได้จะเป็นค่าที่กระโดดไปมา สุ่ม ๆ ออกมาเรื่อย ๆ นั่นเอง
Pull-Up
เรามาเริ่มกันที่ Pull-Up กันก่อน ก็ตามชื่อครับ ผู้เขียนเองจะจำว่า Up ก็ข้างบน เป็นการต่อตัวต้านทานไว้ด้านบน คือติดกับแหล่งจ่ายไฟ (ยกเว้นใครจะเอาแหล่งจ่ายไฟไว้ด้านล่างนะครับ อันนี้จำตามการเขียน Diagram ทั่ว ๆ ไปมักเอา VCC ไว้ด้านบน) เมื่อต่อวงจรเสร็จก็พิจารณาตามภาพด้านล่างนี้ (1) วงจรสวิตช์เปิดอยู่ (2) ไฟฟ้าไหลผ่าน Pull-Up Resistor ลงมา (3) แต่เนื่องจากสวิตช์เปิดวงจรอยู่ ทำให้ไฟฟ้าไหลไปยัง GND ไม่ได้ ตรงจุด Signal ที่เราต่อเข้าไปใช้งานจึงมีแรงดันไฟฟ้าเท่ากับ VCC เมื่อเทียบกับ GND (การวัดทางไฟฟ้าตามปกติจะวัดเทียบกับ GND เสมอ ต่อไปในบทความนี้หากพูดถึงการวัดก็คือเทียบ GND เข้าใจกันนะครับ เว้นว่าจะบอกเป็นอย่างอื่น)
เมื่อเรากดสวิตช์ปิดวงจร พิจารณาคือ (1) วงจรกับ GND ต่อกัน (2) ไฟฟ้าจะไหลไปในที่ที่มันไปได้สะดวกที่สุด และ GND ก็เป็นจุดรับที่ไม่มีทางเต็ม จึงไหลลง GND (3) พิจารณาจุดที่เราต่อสัญญาณออกไปใช้งาน จะเห็นว่ามันได้เชื่อมกับ GND กันแบบตรง ๆ แล้ว เมื่อเราวัดแรงดันที่จุดนี้ ก็จะมีแรงดันไฟฟ้าเป็น GND คือ 0 นั่นเอง
Pull-Down
ทีนี้มาดูกันที่ Pull-Down ก็จะตรงข้ามกับ Pull-Up จะต่อตัวต้านทานไว้กับ GND แทน ส่วนอื่น ๆ ก็จะคล้าย ๆ กัน โดยพิจารณาการทำงานดังรูปด้านล่างตามนี้ (1) เมื่อวงจรสวิตช์เปิดอยู่ ไฟฟ้าจาก VCC ไหลผ่านมาไม่ได้ (2) สังเกตจุดที่ต่อสัญญาณออกมาจะถูกเชื่อมอยู่กับ GND ฉะนั้นเมื่อลองใช้เครื่องมือวัดดูจะมีความต่างศักย์เท่ากับ 0
คราวนี้มาพิจารณาเมื่อเรากดปุ่ม (1) สวิตช์เชื่อมวงจรทำให้วงจรปิด (2) ไฟฟ้าไหลจาก VCC ลงไปยัง GND แต่ทางลงไป GND มีตัวต้านทานต้านอยู่ ทำให้ไฟฟ้าไหลไม่สะดวก (3) ตามนิสัยของไฟฟ้าที่จะไหลไปยังทางที่สะดวกเสมอ แต่เมื่อทางไป GND ที่สะดดวกที่สุดดันมีตัวต้านทานมาขวางความสะดวกในการไหล ทำให้เหมือนไฟฟ้าโดนกักอยู่ตรงจุดที่เราจะต่อสัญญาณออกไปใช้งาน (4) จุดสังเกตอีกอย่างคือดูดี ๆ จะเห็นจุดที่เรานำสัญญาณไปใช้ได้ต่ออยู่กับ VCC โดยตรง เมื่อวัดตรงจุดนี้ก็จะพบว่ามีแรงดันเท่ากับ VCC
หลังจากที่รู้กันแล้วว่า Pull-Up และ Pull-Down มันต่างกันตรงไหน และแต่ละอันมันทำงานแบบใด ทีนี้ก็สามารถนำไปใช้งานและออกแบบโปรแกรมได้แล้ว สำหรับค่าของตัวต้านทานที่ใช้ในวงจรก็ใช้ระหว่าง 4.7k ถึง 10k ใช้ค่าใดก็ได้ที่อยู่ในช่วงนี้ หยิบมาใช้งานได้เลยหนึ่งค่า
Internal Pull-Up
นอกจากการต่อวงจรจากภายนอกแล้ว ใน MCU ต่าง ๆ ทั้ง PIC, AVR, และอื่น ๆ ก็จะมีตัวต้านทานติดตั้งกับขา I/O ไว้ภายในตัวชิปแล้ว ช่วยให้เราสามารถต่อกับสวิตช์ได้ทันทีโดยไม่ต้องมีตัวต้านทาน เพราะเราจะใช้ตัวต้านทานที่ติดตั้งอยู่ภายในตัวชิปแทนนั่นเอง สำหรับ MCU ตระกูล AVR ที่นำมาใช้ในบอร์ด Arduino นั้นจะมีตัวต้านทานติดตั้งมาเป็นแบบ Pull-Up ตามภาพด้านล่างเป็น Diagram I/O ของ ATmega328p ที่ใช้ใน Arduino UNO, NANO จะเห็น Pull-Up Resistor แสดงอยู่ในวงกลมสีแดง
เราสามารถเรียกใช้ Internal Pull-Up Resistor นี้ได้ด้วยการตั้ง pinMode ใน ArduinoIDE ดังนี้
pinMode(pin, INPUT_PULLUP);
นอกจากนี้ ใน MCU ตระกูล STM32 และตระกูล ESP ก็จัดเต็มมาให้ทั้ง Pull-Up และ Pull-Down แล้วแต่เราจะเลือกใช้เลยครับ
อย่างไรก็ดี แม้ Hardware จะมีมาให้ แต่ใน ArduinoIDE ได้ตัดฟังก์ชั่นนี้ออกไปแล้วนะครับ ในอดีตนั้นเคยมี INPUT_PULLDOWN ให้ใช้งาน แต่ปัจจุบันได้ถูกตัดออกจาก Firmware เรียบร้อยแล้ว(ด้วยเหตุผลต่าง ๆ) หากใครต้องการใช้งานก็ต้องหาวิธีกันเองครับ อาจไปเขียน C++ ในโปรแกรมอื่น ๆ แล้วเบิร์นลงชิปโดยตรง?
สรุปเนื้อหาบทความ
@
Pull-Up Resistor
- เมื่อ
ไม่ได้กดปุ่ม
= สัญญาณที่ได้มีสถานะ "HIGH"
- เมื่อ
กดปุ่ม
= สัญญาณที่ได้มีสถานะ "LOW"
@
Pull-Down Resistor
- เมื่อ
ไม่ได้กดปุ่ม
= สัญญาณที่ได้มีสถานะ "LOW"
- เมื่อ
กดปุ่ม
= สัญญาณที่ได้มีสถานะ "HIGH"
@ เราสามารถเรียกใช้ Internal Pull-Up Resistor ที่อยู่ภายใน MCU ได้โดยใช้คำสั่ง pinMode(pin, INPUT_PULLUP); ใน ArduinoIDE
สำหรับวันนี้ก็คงเข้าใจเรื่อง Pull-Up กับ Pull-Down กันแล้วนะครับ หวังว่าจะเป็นประโยชน์กับมือใหม่ที่ยังไม่รู้ ส่วนมือเก่าที่รู้แล้วก็สามารถช่วยกันตรวจสอบ ผิดตรงไหนก็แจ้งได้ยินดีรับฟังและแก้ไข อย่างที่บอกประจำว่าผู้เขียนก็ไม่เก่งรอบด้านทุกอย่าง มีเรื่องไม่รู้บ้าง มีเรื่องผิดพลาดบ้าง ตรงไหนผิดช่วยกันท้วงก็เป็นการเรียนรู้ไปพร้อม ๆ กันครับ ซึ่งจริง ๆ แล้วผู้เขียนได้เขียนอีกบทความหนึ่ง แต่มีการอ้างถึง Pull-Up Resistor เลยปิ๊งได้ว่าเรายังไม่เคยเขียนเรื่องนี้เลยนี่นา จึงหยิบเรื่องนี้มาไว้ก่อน เดี๋ยวถึงเรื่องต่อไปจะได้ไม่งง สำหรับวันนี้ก็แวะมาแค่นี้ครับ เหลือบดูระบบนับคำศัพท์ก็ 2000 กว่าคำเข้าไปแล้วสำหรับบทความนี้ ซึ่งบทความของร้านเราจะอยู่ที่ 1500-2000 คำ เมื่อมาถึงจุดที่ความยาวกำลังพอดี และเนื้อหาก็หมดพอดีเช่นกัน ก็ขอลาไปก่อนครับสำหรับวันนี้ พบกันครั้งต่อไป สวัสดีจ้า
tutorial
,
Arduino
,
resistor
,
pull-up
,
pull-down
,
pullup
,
pulldown
Share
Share :
COPY
Privacy Policy
|
Cookie Policy
|
Copyright © 2025
fitrox.lnwshop.com
All rights reserved.
ตะกร้า
(
0
)
▲
▼
รายการสั่งซื้อของฉัน
เข้าสู่ระบบด้วย
เข้าสู่ระบบ
สมัครสมาชิก
ยังไม่มีบัญชีเทพ
สร้างบัญชีใหม่
ไม่มีค่าใช้จ่าย
สมัครสมาชิก (ฟรี)
รายการสั่งซื้อของฉัน
ข้อมูลร้านค้านี้
Fitrox Electronics
ไฟทร็อก อิเล็กทรอนิกส์ จำหน่ายอุปกรณ์อิเล็กทรอนิกส์ บอร์ดไมโครคอนโทรลเลอร์ และอุปกรณ์สำหรับโปรเจคต่างๆ อ.เมือง จ.เชียงใหม่ (หลัง มช.)
เบอร์โทร :
0897245633
อีเมล :
fitrox.electronics@gmail.com
ส่งข้อความติดต่อร้าน
เกี่ยวกับร้านค้านี้
ค้นหาสินค้าในร้านนี้
ค้นหา
หรือค้นหาอย่างละเอียด
ค้นหาสินค้า
สินค้าที่ดูล่าสุด
{{pdata.name}}
ดูสินค้าทั้งหมดในร้าน
สินค้าที่ดูล่าสุด
บันทึกเป็นร้านโปรด
Join เป็นสมาชิกร้าน
แชร์หน้านี้
แชร์หน้านี้
↑
TOP
เลื่อนขึ้นบนสุด
คุณมีสินค้า
0
ชิ้นในตะกร้า
สั่งซื้อทันที
สินค้าในตะกร้า ({{total_num}} รายการ)
ขออภัย ขณะนี้ยังไม่มีสินค้าในตะกร้า
ราคาสินค้าทั้งหมด
฿ {{price_format(total_price)}}
- ฿ {{price_format(discount.price)}}
ราคาสินค้าทั้งหมด
{{total_quantity}} ชิ้น
฿ {{price_format(after_product_price)}}
ราคาไม่รวมค่าจัดส่ง
ดูสินค้าในตะกร้า
เริ่มการสั่งซื้อ
➜
เลือกซื้อสินค้าเพิ่ม
พูดคุย-สอบถาม
อีเมล fitrox.electronics@gmail.com
โทร 0897245633
channel/UCnHfpCdqN1RkzAfEH_lRLvw?
1924052434588436
Add @zpq2828r