ตรวจวัดอุณหภูมิ ด้วยดิจิตอลเทอร์โมมิเตอร์ DS18B20 : MIND-TEK.NET

homenewsarticleproductwebboardpaymentdeliverydownloadcontact
 
 

ตรวจวัดอุณหภูมิ ด้วยดิจิตอลเทอร์โมมิเตอร์ DS18B20

DS18B20 เป็น IC วัดอุณหภูมิแบบดิจิตอล ของ Dallas Semiconductor สามารถวัดอุณหภูมิเป็นหน่วยองศา C ในช่วง -55C ถึง 125C ที่ความละเอียด 9-12 บิต และมีความแม่นยำอยู่ที่ 0.5C ในช่วง -10C ถึง 85C ในกรณีที่เป็นตัวถังแบบ TO-92 นั้นจะมีโครงสร้าง และขาดังแสดงในรูปที่ 1

ds18b20

PIN

SYMBOL

Description

1

GND

Ground

2

DQ

Data Input/ Output pin

3

Vdd

Optional Vdd pin

รูปที่ 1 โครงสร้าง และขาของ DS18B20 ตัวถังแบบ TO-92

การสื่อสารและควบคุม DS18B20 นั้นสามารถทำได้โดยใช้บัสข้อมูลแบบ 1-wire ของ Dallas Semiconductor ซึ่งใช้สายสัญญาณเพียงแค่เส้นเดียวเท่านั้น ภายใน DS18B20 แต่ละตัวมีโค๊ดประจำตัวขนาด 64 บิต ทำให้สามารถใช้งาน DS18B20 หลายตัวทำงานบนบัสแบบ 1 wire พร้อมกันได้ นอกจากนี้ DS18B20 ยังสามารถทำงานในโหมดพาราสิต (Parasite Power Mode) ซึ่งเป็นการทำงานโดยไม่ใช้ไฟเลี้ยง แต่ใช้พลังงานจากสายสัญญาณ 1-wire ซึ่งมีประโยชน์มากสำหรับการวัดอุณหภูมิระยะไกล หรือในการใช้งานในที่ ๆ มีเนื้อที่จำกัด แต่ในบทความนี้จะกล่าวถึงรายละเอียดการใช้งานขั้นพื้นฐานในโหมดธรรมดาเท่านั้น สำหรับผู้ที่สนใจสามารถหาข้อมูลเพิ่มเติมได้จาก Datasheet ของDS18B20

โครงสร้างรีจิสเตอร์ภายในของ DS18B20 มีลักษณะดังแสดงในรูปที่ 2 จะเห็นได้ว่าประกอบไปด้วย SRAM Scratchpad ขนาด 9 ไบต์ และ EEPROM ขนาด 3 ไบต์ ซึ่งใช้เก็บค่าอุณหภูมิสูงสุด (TH) ต่ำสุด (TL) สำหรับเปรียบเทียบการเกิดสัญญาณเตือน และรีจิสเตอร์ควบคุม (Configuration Register)

หน่วยความจำ ds18b20

รูปที่ 2 โครงสร้างรีจิสเตอร์ภายในของ DS18B20

ข้อมูลอุณหภูมิที่วัดได้จะถูกเก็บอยู่ในรีจิสเตอร์ Temperature ซึ่งมีขนาด 16 บิต ดังแสดงในรูปที่ 3 ถ้าข้อมูลอุณหภูมิเป็นบวก S จะเป็น “1” แต่ถ้าข้อมูลอุณหภูมิเป็นลบ S จะเป็น “0” ในกรณีที่ DS18B20 ทำงานในโหมดความละเอียด 12 บิต บิตทุกบิตในรีจิสเตอร์ Temperature จะถูกใช้หมด แต่ในกรณีที่ทำงานในโหมด 9-11 บิต บิตล่าง (บิต 0 – บิต 2) จะไม่ถูกใช้งาน ซึ่งในการกำหนดโหมดความละเอียดการทำงานของ DS18B20 นั้นสามารถกำหนดได้ที่รีจิสเตอร์ Configuration ซึ่งโดยปกติเริ่มต้น DS18B20 จะทำงานในโหมด 12 บิต

รีจิสเตอร์ ds18b20

รูปที่ 3 โครงสร้างภายในรีจิสเตอร์ Temperature LSB และ MSB

การสื่อสารแบบ 1-wire เป็นระบบบัสข้อมูลแบบ Half-duplex นั้นคือสามารถสื่อสารได้ 2 ทิศทาง แต่ไม่สามารถรับ และส่งข้อมูลพร้อมกันในช่วงเวลาเดียวกันได้ ระบบบัสมีการทำงานเป็นแบบ Master/Slave โดยอุปกรณ์ Master จะเป็นตัวควบคุมสถานะ และจังหวะการรับส่งของบัสข้อมูล ในขณะที่อุปกรณ์ Slave จะทำงานตามการควบคุมของอุปกรณ์ Master เท่านั้น

ในการใช้งานบัสแบบ 1 wire นี้ สายสัญญาณข้อมูล DQ จะต้องมีสภาวะปกติที่ลอจิกสูง สามารถทำได้โดยการต่อตัวต้านทานประมาณ 5 กิโลโอห์มพูลอั๊ปไว้กับไฟเลี้ยง หรือในกรณีที่ใช้บัสแบบ 1 wire ต่อร่วมกับอุปกรณ์ DS18B20 หลายตัว ก็สามารถทำได้ดังแสดงในรูปที่ 4

วงจร ds18b20

รูปที่ 4 การต่อใช้งาน DS18B20

รูปแบบของสัญญาณบนบัส 1-wire สามารถแบ่งออกได้เป็น 6 รูปแบบ คือ Reset pulse, Presence pulse, write 0, write 1, read 0, read 1

ในกระบวนการเริ่มต้นการสื่อสารแบบ 1-wire ทั้งหมดนั้น อุปกรณ์ Master ต้องขอเริ่มการสื่อสารด้วยการสร้าง Reset pulse ก่อน เมื่ออุปกรณ์ Slave ได้รับ Reset pulse ก็จะสร้าง Presence pulse เพื่อตอบรับการขอเริ่มการสื่อสารนั้น ซึ่งมีรายละเอียดของช่วงเวลาต่าง ๆ ดังแสดงในรูปที่ 5

initialization ds18b20

รูปที่ 5 การเริ่มการติดต่อสื่อสารแบบ 1-wire ด้วย Reset Pulse และ Presence Pulse

ในการเขียนข้อมูลแบ่งออกเป็น 2 ชนิดคือการเขียนข้อมูล “1” และการเขียนข้อมูล “0” ดังแสดงในรูปที่ 6 การเขียนข้อมูลลง DS18B20 ต้องใช้ช่วงเวลาของไทม์สล๊อตอย่างต่ำ 60 usec และต้องมีช่วงเวลาระหว่างไทม์สล๊อตอย่างต่ำ 1 usec

การเขียนข้อมูล ds18b20

รูปที่ 6 การเขียนข้อมูลลง DS18B20

การเขียนข้อมูลทั้ง 2 ชนิด เริ่มแรกอุปกรณ์ Master ต้องดึงสัญญาณบนบัส 1-wire ลงมาให้อยู่ในสถานะลอจิกต่ำก่อน ในกรณีที่ต้องการเขียนข้อมูล “0” ลงใน DS18B20 อุปกรณ์ Master ต้องดึงสัญญาณบนบัสให้เป็นลอจิกต่ำต่อ จนกว่าจะครบช่วงเวลาไทม์สล๊อต (อย่างต่ำ 60 usec) ส่วนในกรณีที่ต้องการเขียนข้อมูล “1” ลง DS18B20 อุปกรณ์ Master ต้องปล่อยบัส เพื่อให้บัสกลับไปอยู่ในสถานะลอจิกสูงก่อนการ Sampling ของ DS18B20 ซึ่งจะอยู่ในช่วง 15 usec-60 usec หลังจากที่อุปกรณ์ Master ดึงสัญญาณบัส 1-wire ลงมา

ในการอ่านค่าภายใน SRAM ของ DS18B20 สามารถทำได้ก็ต่อเมื่ออุปกรณ์ Master ได้เขียนข้อมูลเพื่อขอทำการอ่านค่าใน SRAM (Read Scratchpad) ซึ่งมีค่าเป็น 0xBE ลงไปที่ DS18B20 เสียก่อน จากนั้นจึงเริ่มอ่านข้อมูลจากบัส 1-wire โดยไทม์สล๊อตของการอ่านต้องมีช่วงเวลาอย่างต่ำ 60 ?sec และต้องมีช่วงเวลาระหว่างไทม์สล๊อตอย่างต่ำ 1 usec ดังแสดงในรูปที่ 7

การอ่านข้อมูล ds18b20

รูปที่ 7 การอ่านข้อมูลจาก DS18B20

การอ่านข้อมูลจากบัส 1-wire เริ่มแรกอุปกรณ์ Master จะต้องดึงบัส 1-wire ลงให้อยู่ในสถานะลอจิกต่ำเป็นช่วงเวลาอย่างน้อย 1 usec จากนั้นจึงค่อยปล่อยบัส ในกรณีที่ DS18B20 ส่งข้อมูล “0” DS18B20 จะดึงบัสให้เป็นลอจิกต่ำจนจนกว่าจะสิ้นสุดไทม์สล๊อตถึงจึงจะปล่อยบัสให้กลับไปอยู่ในสถานะลอจิกสูง ส่วนในกรณีที่ DS18B20 ส่งข้อมูล “1” DS18B20 จะปล่อยบัสให้อยู่ในสภานะลอจิกสูงตลอด ในการ Sample เพื่อรับข้อมูลจาก DS18B20 ควรทำภายใน 15 usec หลังจากจุดเริ่มของไทม์สล๊อตดังแสดงในรูปที่ 7

ขึ้นตอนการเข้าใช้งาน DS18B20 มี 3 ขั้นตอนด้วยกันคือ 1.Initialization 2.ROM Command 3.DS18B20 Function Command

การ Initialization ประกอบไปด้วยการส่ง Reset Pulse จากอุปกรณ์ Master ตามด้วย Presence Pulse ซึ่งตอบรับโดย DS18B20 เพื่อบ่งบอกว่าอุปกรณ์พร้อมทำงาน

หลังจากการทำ Initialization เสร็จเรียบร้อยแล้ว อุปกรณ์ Master ต้องส่ง ROM Command ไปยัง DS18B20 ROM Command นั้นแบ่งออกได้เป็น 5 คำสั่งด้วยกันคือ SEARCH ROM [F0h], READ ROM [33h], MATCH ROM [55h], SKIP ROM [CCh], ALARM SEARCH [ECh] ซึ่งในกรณีที่ต่อใช้งาน DS18B20 เพียงตัวเดียวนั้นจะใช้ ROM Command ได้แค่ 2 คำสั่งนั้นคือ READ ROM ซึ่งเป็นการอ่านค่า ROM Code ขนาด 64 บิต บนตัว DS18B20 อีกคำสั่งคือ SKIP ROM ซึ่งเป็นคำสั่งที่ใช้ในกรณีที่อุปกรณ์ Master ต้องการส่งคำสั่งควบคุม DS18B20 ทุกตัว ซึ่งไม่จำเป็นต้องระบุ ROM Code

หลังจากที่อุปกรณ์ Master ส่ง Rom Command ไปยัง DS18B20 แล้ว อุปกรณ์ Master จะสามารถใช้ Function Command เพื่อเข้าไปควบคุมการทำงานของ DS18B20  ได้ Function Command ประกอบไปด้วย CONVERT T [44h], WRITE SCRATCHPAD[4Eh], READ SCRATCHPAD[BEh], COPY SCRATCHPAD [48h], RECALL E2[B8h], READ POWER SUPPLY [B4h]

ในตัวอย่างการใช้งานได้ต่อ DS18B20 กับไมโครคอนโทรลเลอร์ P89V51RD2 โดยใช้พอร์ต P1.1 เป็นพอร์ตสื่อสารแบบ 1-wire ดังแสดงในรูปที่ 8 และแสดงผลการทำงานโดยใช้โปรแกรม HyperTerminal สื่อสารกับพอร์ตอนุกรมของไมโครคอนโทรลเลอร์ด้วยอัตราข้อมูล 9600bps

วงจร ds18b20

รูปที่ 8 การต่อวงจรทดสอบการใช้งาน DS18B20

ในส่วนโปรแกรม ไมโครคอนโทรลเลอร์จะคอยตรวจสอบพอร์ตอนุกรม ในกรณีผู้ใช้งานพิมพ์ตัวอักษร “r” ผ่านโปรแกรม HyperTerminal เข้ามาทางพอร์ตอนุกรม ไมโครคอนโทรลเลอร์จะอ่าน ROM Code จาก DS18B20 ซึ้งมีขั้นตอนการทำงานตามรูปที่ 9 จะเห็นได้ว่าไมโครคอนโทรเลอร์ซึ่งเป็นอุปกรณ์ Master จะต้องทำการ Initialization  โดยส่ง Reset Pulse ไปที่บัส 1-wire ก่อน จากนั้นจึงค่อยตรวจสอบ Presence Pulse จาก DS18B20 ในกรณีที่ได้รับ Presence Pulse แสดงว่า DS18B20 นั้นพร้อมที่จะทำงานและเป็นการสิ้นสุดกระบวนการ Initialization ไมโครคอนโทรลเลอร์จึงค่อยส่งคำสั่ง Read ROM [33h] ซึ่งเป็น ROM Command ไปยัง DS18B20 จากนั้นจึงค่อยอ่านค่า ROM Code จาก DS18B20 ซึ่งมีขนาด 8 ไบต์ (64 บิต) ที่ละไบต์ โดยไบต์แรกนั้นเป็น Family Code ไบต์ที่ 2-7 เป็น Serial Number ส่วนไบต์สุดท้ายเป็น CRC ตามลำดับ พร้อมกับส่งข้อมูล ROM Code ที่อ่านได้นั้นออกมาทางพอร์ตอนุกรมเพื่อแสดงในโปรแกรม HyperTerminal ในรูปที่ 10

การอ่าน rom code ds18b20

รูปที่ 9 ขั้นตอนการอ่าน Rom Code จาก DS18B20

ไฮเปอร์เทอร์มินอล ds18b20

รูปที่ 10 ผลการอ่าน ROM Code ขนาด 64 บิต จาก DS18B20

ในกรณีผู้ใช้งานพิมพ์ตัวอักษร “s” ผ่านโปรแกรม HyperTerminal เข้ามาทางพอร์ตอนุกรม ไมโครคอนโทรลเลอร์จะอ่านค่าอุณหภูมิจาก DS18B20 และแสดงค่าอุณหภูมิที่อ่านได้ขณะนั้นออกมาทางพอร์ตอนุกรมดังแสดงในโปรแกรม HyperTerminal ในรูปที่ 12

ขั้นตอนการอ่านค่าอุณหภูมิจาก DS18B20 นั้น แบ่งออกเป็น 2 ขั้นตอนใหญ่ ๆ คือ Converting Temperature ซึ่งเป็นการแปลงอุณหภูมิให้อยู่ในรูปข้อมูลดิจิตอลเก็บไว้ใน Scratchpad และ Read Scratchpad ซึ่งเป็นการอ่านข้อมูลที่เก็บใน Scratchpad นั้นออกมา ดังแสดงในรูปที่ 11 จะเห็นได้ว่าไมโครคอนโทรเลอร์ซึ่งเป็นอุปกรณ์ Master จะต้องทำการ Initialization จากนั้นจึงค่อยคำสั่ง SKIP ROM [CCh] ซึ่งเป็น ROM Command ที่ใช้ในกรณีที่ต่อใช้งาน DS18B20 เพียงตัวเดียวจากนั้นจึงค่อยส่ง Function Command CONVERT T [44h] เพื่อสั่งให้ DS18B20 ทำการแปลงอุณหภูมิให้อยู่ในรูปแบบดิจิตอลและเก็บไว้ใน Scratchpad กระบวนการแปลงนี้จะใช้เวลาประมาณ 750ms ซึ่งเราสามารถตรวจสอบสถานการณ์แปลงข้อมูลได้จากการเชคสถานะของบัส 1-wire ในกรณีที่ DS18B20 ยังทำการแปลงข้อมูลอยู่บัส 1-wire จะมีสถานะเป็นลอจิกต่ำ แต่ถ้า DS18B20 ได้ทำการแปลงข้อมูลเสร็จเรียบร้อยแล้วบัส 1-wire จะกลับมาอยู่ในสถานะปกติคือลอจิกสูง

การอ่านอุณหภูมิ ds18b20

รูปที่ 11 ขั้นตอนการแปลง และอ่านอุณหภูมิจาก DS18B20

เมื่อ DS18B20 แปลงข้อมูลอุณหภูมิเป็นดิจิตอลเก็บไว้ใน Scratchpad แล้ว ไมโครคอนโทรลเลอร์สามารถอ่านข้อมูลภายใน Scratchpad นั้นโดยทำการ Initialization บัส 1-wire อีกครั้ง จากนั้นจึงส่งคำสั่ง SKIP ROM [CCh] ซึ่งเป็น ROM Command และส่งคำสั่ง READ SCRATCHPAD [BEh] ซึ่งเป็น Function Commandเพื่อขออ่านข้อมูล Scratchpad ภายใน DS18B20 จากนั้นไมโครคอนโทรลเลอร์จึงค่อยทำการอ่านข้อมูลภายใน Scratchpad ของ DS18B20 มาทีละไบต์จนครบ 9 ไบต์ และแสดงผลข้อมูลอุณหภูมิที่อยู่ซึ่งเป็นข้อมูลในไบต์แรก และไบต์ 2 ที่อ่านมาจาก Scratchpad นั้นออกมาทางพอร์ตอนุกรม ดังแสดงในรูปที่ 11

 

ไฮเปอร์เทอร์มินอล ds18b20

รูปที่ 12 ผลการอ่านอุณหภูมิจาก DS18B20

ไฟล์โค๊ดภาษา C สามารถดาวน์โหลดได้ที่ http://www.mind-tek.net/c/DS18B20.c หรือดาวน์โหลด ไฟไฟล์ hex ไปทดสอบกันได้ที่ http://www.mind-tek.net/hex/DS18B20.hex ท้ายสุดนี้ หวังว่าผู้อ่านจะได้รับความรู้ ไม่มากก็น้อย และสามารถนำไปประยุกต์ใช้กับงานต่าง ๆ ได้นะครับ
 
 

73/206 Ratchathanee Paholyothin Rd. Klonghnung Klonghloung Pathumthanee 12120 Tel: 66-02516-5999 Fax:66-02516-8484 Email:webmaster@mind-tek.net