creatio ex nihilo

ศล
Location :
กรุงเทพ Thailand

[Profile ทั้งหมด]

ให้ทิปเจ้าของ Blog [?]
ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 80 คน [?]




Group Blog
 
All Blogs
 
Friends' blogs
[Add ศล's blog to your web]
Links
 

 

ZigBee เบื้องต้น

เนื้อหาในตอนนี้ผมสรุปจากเนื้อหาที่ผมใช้เตรียมสอน ZigBee เบื้องต้น ซึ่งเป็นหลักสูตรอบรมสั้น ๆ แก่อาจารย์ นักศึกษา และผู้สนใจทั่วไป มีระยะเวลาบรรยายในส่วนนี้ประมาณ 3 ชั่วโมง (รวมทำ workshop) จัดโดย สวทช ภาคเหนือ ที่ ม.ช. (2552) กับ ม. เทคโนโลยีราชมงคลล้านนาภาคพายัพเชียงใหม่ (2553) อย่างไรก็ตาม ผมอยากจะขอออกตัวว่าไม่ใช่ผู้เชี่ยวชาญ เนื้อหาที่พูดถึงจึงอยากให้คิดว่าอยู่ในรูปแบบของคนที่เคยใช้เคยเล่นมาก่อนเล่าให้คนที่ไม่เคยรู้จักฟัง

เรามักจะเริ่มต้นประโยคด้วยคำพูดประมาณว่า ZigBee คือ มาตรฐานโปรโตคอลสื่อสารไร้สายสำหรับเครือข่ายที่ไม่ต้องการ data rate สูง และเน้นประหยัดพลังงาน มีนักศึกษาที่มาฝึกงานกับผมคนหนึ่ง (ผมให้เขาทำโมดูลคล้าย ๆ gateway ระหว่าง ZigBee กับ Bluetooth) เคยขึ้น status ใน msn ว่า "ผึ้งป่วย" บ้าง "ผึ้งหกตัว" บ้าง จงใจล้อเสียงคำว่า "ZigBee" นั่นแหละครับ (Sick กับ Six) ในงานอบรมครั้งหลังสุดผมจึงถามผู้เข้ารับฟังว่า มีใครคิดว่าชื่อ ZigBee เกี่ยวข้องกับผึ้ง (Bee) บ้าง? ถ้าเกี่ยว รู้มั้ยว่าเกี่ยวยังไง?



คาร์ล ริทเท่อร์ ฟอน ฟริช (Karl Ritter von Frisch) นักวิทยาศาสตร์รางวัลโนเบลปี 1973 ชาวออสเตรีย พูดอย่างเจาะจง แกเป็น ethologist (นักสัตววิทยาที่ศึกษาเกี่ยวกับพฤติกรรมของสัตว์) มีงานศึกษาการรับรู้จากอวัยวะรับสัมผัสของผึ้ง (honey bee) ซึ่งคุณผึ้งนี่เวลาพวกเธอหาอาหารจะกระจายส่งสายไปคนละทิศละทาง ใครเจอแหล่งอาหารแล้วก็กลับมาระดมพลไปขนอาหารกัน คำถามมีอยู่ว่า เธอบอกเพื่อน ๆ ของเธอด้วยวิธีการใดให้ทุกตัวรู้ว่าอาหารหรือดอกไม้อยู่ตรงไหน จากการศึกษาพฤติกรรมของหน่วยผึ้งลาดตระเวรเราพบ พอเธอกลับรังปุ๊ป เธอจะระบำให้มิตรสหายชมทันที ลักษณะระบำคล้าย ๆ กับเธอใช้ร่างกายเขียนเลข 8 แต่แทนที่จะเป็นเลข 8 ซึ่งมีจุดตัด 1 จุด ตรงส่วนที่ควรจะเป็นจุดตัดนั่นเองเธอออกสเต็ปซิกแซก (zigzag) เป็นรูปคลื่นหรือฟันปลามีลักษณะแกว่งไปมา (waggle) ดังรูปด้านล่าง เราเรียกพฤติกรรมดังกล่าวว่า waggle dance คุณคาร์ลเป็นคนแรกที่ตีความระบำดังกล่าวออกว่าผึ้งน้อยบอกอะไรแก่เพื่อน ๆ ของมัน


มีข้อมูล 2 อย่างครับ 1. ทิศทางของแหล่งอาหาร และ 2. ระยะทาง การบอกทิศทางนั้นคุณคงเข้าใจได้ว่าไม่ยากอะไร อันที่จริงถ้ามันตกลงกันดี ๆ แค่เอาขาสักขาหรือหนวดสักเส้นชี้ก็รู้แล้ว แต่วิธีนี้จะไม่บอกระยะทางและออกจะเบสิกไร้ลีลา คาร์ลพบว่าแนวซิกแซกใน waggle dance เทียบกับทิศของดวงอาทิตย์เป็นตัวบอกทิศ ถ้าแนวซิกแซกตรงกับแนวดวงอาทิตย์ นั่นมันกำลังตะโกนบอกเพื่อน ๆ ว่าจงมุ่งบินไปสู่ดวงตะวัน (ดูรูปด้านล่าง-ซ้าย จาก Erinnerungen eines Biologen ของคาร์ล) และระยะเวลาที่ใช้ในการซิกแซกจะแปรผันตรงโดยประมาณกับระยะทาง ประมาณ 1 วินาที เท่ากับ 1 กิโลเมตร



เอาล่ะ ผมเชื่อว่าจากเรื่อง waggle dance ของ honey bee คุณได้ไอเดียน่ารัก ๆ และความขี้เล่นของชื่อเจ้าโปรโตคอล ZigBee ตัวนี้แล้วนะครับ และคงย้อนกลับไปตอบคำถามเองได้ว่า ZigBee มีอะไรเกี่ยวกับ Bee มั้ย? เกี่ยวยังไง?

มาตรฐานโปรโตคอลสื่อสารไร้สายมีหลากหลายขึ้นอยู่กับความต้องการและการใช้งาน ความต้องการหลัก ๆ ก็มีในแง่ของขนาดเครือข่าย คุณต้องการใหญ่เล็กแค่ไหน กับความเร็วในการรับส่งข้อมูล (data rate) WiFi อาจต้องการถึง 100 Mbps ขณะที่ Bluetooth ต้องการแค่ 1 Mbps ภาพด้านล่างนี้แสดงตำแหน่งแห่งที่ของ ZigBee ได้ดีครับ



ก้อนสีแดง คุณเห็น ZigBee กับ 802.15.4 ตัวหลังนั้นเป็นมาตรฐานของ IEEE ชื่อเต็ม IEEE 802.15.4 แปลว่าคนที่ดูแลมาตรฐานนี้คือ working group ของ IEEE 802 กลุ่มที่ 15 (IEEE 802 เกี่ยวกับ LAN และ MAN ส่วนกลุ่มที่ 15 จะโฟกัสที่ wireless PAN และ จุด 4 เป็นการระบุ task group 4 ซึ่งสนใจ WPAN ที่ low rate จากรูปด้านบน คุณคงเดาได้ว่า ถ้าจุด 3 จะเป็น task group ที่สนใจ high rate WPAN) มาตรฐาน ZigBee เอา IEEE 802.15.4 มาใช้ใน 2 layer แรก คือ PHY (physical layer) กับ MAC (medium access control layer) (ซึ่งเจ้า 802.15.4 นิยามโครงสร้างโปรโตคอลแค่ 2 layer นี้ครับ) แล้วนิยามโปรโตคอล layer ที่สูงขึ้นไป

motivation ของ ZigBee มีอะไรบ้าง? 1. ราคาประหยัด (ทุนต่ำ) 2. กินไฟน้อย 3. ใช้ย่านความถี่วิทยุ unlicensed (หรือย่านความถี่วิทยุ ISM) 4. สามารถติดตั้งง่ายและไม่แพง 5. เป็นเครือข่ายที่มีความยืดหยุ่นและขยายได้ไม่ยุ่งยาก 6. มีความฉลาดในการ set-up เครือข่ายและการส่งข้อมูล

จาก motivation ของมัน เราน่าจะมองออกได้ไม่ยากกว่า ZigBee เหมาะกับ application ประเภทไหนบ้าง อันดับแรก งานที่อุปกรณ์เครือข่ายไม่ได้ต้องการพูดอะไรมากมาย data rate ต่ำ (ต่ำกว่า 250 kbps) ต่อมาอุปกรณ์เครือข่าย (ต่อไปเรียกว่า node) ชอบอยู่ในสถานะ idle (ไม่รับ/ส่ง ข้อมูล) นาน ๆ และงานที่ต้องการ modify (เช่น add, remove, move node) เครือข่ายขณะที่ให้บริการ รวมถึงงานที่เป็นข้อดีของการสื่อสารไร้สายทั่วไป เช่น เดินสายยากลำบากหรือแพง

IEEE 802.15.4

802.15.4 นิยามอุปกรณ์เครือข่ายไว้ 2 แบบ คือ RFD กับ FFD

• RFD (Reduced Functionality Device) ก็ตามชื่อมันนั่นแหละครับ เป็นอุปกรณ์ที่ลดความสามารถลง ฉะนั้นใช้หน่วยความจำน้อยกว่า (ตัวที่ไม่ได้ลด) การประมวลผลลดลง และใช้พลังงานในการดำเนินการต่ำลง เงื่อนไขคือ RFD สามารถคุยกับ FFD ได้เพียงตัวเดียวเท่านั้นในเครือข่ายและไม่สามารถคุยกันเองกับ RFD ได้

• FFD (Full Functionality Device) ต้องการทรัพยากรต่าง ๆ (หน่วยความจำ พลังงาน ความสามารถประมวลผล) มากกว่า RFD มันสามารถสื่อสารกับใคร เท่าไร ก็ได้ และมีความสามารถที่จะเป็นได้ทั้งตัวแม่ (coordinator) หรือตัวลูก (end-device) ของเครือข่าย

802.15.4 มีโมเดล (หรือ possible interconnections) การส่งถ่ายข้อมูล 2 แบบ คือ star กับ peer-to-peer ตามรูป แบบ peer-to-peer อุปกรณ์ FFD สื่อสารกันเองกับ FFD ที่ไม่ใช่ตัวแม่

• แบบ star



• แบบ peer-to-peer

• อุปกรณ์ในเครือข่าย ZigBee



802.15.1 กำหนดเฉพาะชั้นต่ำสุดของโมเดลสื่อสาร OSI คือ PHY (physical layer) กับ MAC (medium access control sub-layer)



MAC layer กำหนดกลไกสำหรับการสื่อสารโดยตรง (single hop) ระหว่าง node สองตัว ภารกิจหลักของมันคือ สร้าง frame ข้อมูล, ระบุที่อยู่ของ node, จัดการการติดต่อกับช่องทางสื่อสาร ส่วน PHY layer จัดเตรียมวิธีส่ง bit ไปบน physical medium ในที่นี้คือออกอากาศ ย่านความถี่ที่ใช้นั้นเป็นย่านไม่ต้องขออนุญาต แต่ละย่านก็ใช้คนละพื้นที่ คนละช่อง และคนละ data rate กัน ประเทศไทยเราใช้ย่าน 2405-2480 MHz ตั้งแต่ช่อง 11-26 (แต่ละช่องกิน bandwidth ประมาณ 5 MHz) มีอัตราส่งข้อมูลสูงสุดที่ 250 kbps (ยุโรป สามารถใช้ย่านความถี่ 868.3 MHz ช่อง 0 มี data rate สูงสุดที่ 20 kbps และอเมริกาสามารถใช้ 902-928 MHz ช่อง 1-10 - แต่ละช่องกิน bandwidth ประมาณ 2 MHz - มี data rate สูงสุดที่ 40 kbps)

ZigBee

ZigBee นิยามอุปกรณ์โดยแบ่งออกเป็น 3 ชนิด (จากฐานของ IEEE 802.15.4 ซึ่งมี 2 ชนิด) coordinator, router กับ end device และมี topology 3 แบบ ได้แก่ star, tree กับ mesh ในเครือข่ายหนึ่ง ๆ มี coordinator (ตัวแม่) ได้เพียงตัวเดียว หน้าที่ของมันประกอบด้วย 1. เลือกช่องความถี่ที่จะใช้สื่อสารในเน็ตเวิร์ก 2. เริ่มต้นเน็ตเวิร์ก 3. อนุญาต (หรือไม่อนุญาต) ให้อุปกรณ์อื่นเข้าร่วมในเน็ตเวิร์ก ฉะนั้นตัวแม่ต้องเป็น FFD ขณะที่ router ก็เป็น FFD เช่นกัน แต่ไม่มีหน้าที่ในการสร้างเน็ตเวิร์ก มันส่งต่อข้อความจากโหนดหนึ่งไปยังอีกโหนดหนึ่ง (ขยายระยะทาง) และอนุญาตให้โหลดลูก (อาจจะเป็น FFD หรือ RFD ก็ได้) เข้ามาเชื่อมต่อกับมันได้ ตัวสุดท้าย end device มีภารกิจหลังแค่รับส่งข้อมูล มันจะเป็น FFD หรือ RFD ก็ได้ ซึ่งโหนดที่เป็น end device นี้โดยทั่วไปจะหลับ (sleep mode) เกือบตลอดเวลา (นี่ไงครับ จุดแข็งหนึ่งที่ทำให้ ZigBee ประหยัดพลังงาน) เมื่อมันตื่นขึ้นมาแต่ละครั้งจะส่งข้อความไปถามแม่ (อาจจะเป็นตัวแม่หรือ router ก็ได้) ว่ามีใครส่งอะไรถึงมันมั้ย ถ้ามี มันก็จะรับมือกับสถานการณ์นั้น ถ้าไม่มีและมันเองก็ไม่มีอะไรจะคุยกับใคร มันก็จะกลับไปหลับต่อ แต่ถ้ามันมีอะไรอยากบอกหรืออยากคุยกับใคร มันก็จะส่งข้อความนั้นแล้วกลับไปหลับต่อเช่นกัน

สำหรับ topology ทั้ง 3 แบบ ก็ดูตามรูปนะครับ (อย่าลืมว่าโหนดไหนที่คุยโดยตรงกับโหนดอื่นมากกว่า 1 โหนด โหนดนั้นต้องเป็น FFD)



โครงสร้างซอฟท์แวร์

จากรูปแสดง 3 ชั้นหลัก ชั้นล่าง PHY+MAC ว่าตาม 802.15.4 (รับผิดชอบการรับส่งข้อมูลและ addressing) แล้วกลุ่มพันธมิตร ZigBee หยิบมาต่อเติมชั้นบนเป็น ZigBee Stack ซึ่งจัดเตรียมสมบัติหรือฟังก์ชั่น โครงสร้างเน็ตเวิร์ก เส้นทางการส่งข้อมูล และการรักษาความปลอดภัย (คุณมองว่ามันคือ network layer ได้เลยครับ) กับ Application level ซึ่งเป็นตัวปฏิบัติการตาม app ที่ทำงานของแต่ละโหนด








เมื่อแจกแจงให้ละเอียดกว่าเดิมอีกนิดโครงสร้างซอฟท์แวร์ของ ZigBee จะเป็นดังรูปขวามือ โดยทั่วไปโหนดอาจะมีได้หลาย app และเราเรียก app instance บนโหนดว่า endpoint (มันเป็น jargon ที่ถ้าคุณได้ใช้ก็น่าจดจำนะครับ) ซึ่งพูดง่าย ๆ endpoint เป็นที่ที่ข้อความ (message) ถูกสร้างขึ้นหรือเป็นที่ปลายทางของข้อความ หนึ่งโหนดสามารถมีได้สูงสุด 240 endpoints แต่ละ endpoint ต้องมีหมายเลขกำกับ (address) ตั้งแต่ 1 ถึง 240 (ถ้าคุณอ้างอิงหมายเลขที่อยู่ 255 มันจะตีความว่าเป็นการ broadcast) และที่อยู่หมายเลข 0 สงวนไว้สำหรับ app พิเศษตัวหนึ่งซึ่งเรียกว่า ZDO (ZigBee Device Objects)

ZDO มีหน้าที่

     1. กำหนดชนิดของโหนด
     2. เริ่มการทำงานของโหนด
     3. มีส่วนในการสร้างเน็ตเวิร์ก (กรณีที่โหนดนั้นคือตัวแม่)

ด้วยบทบาทพิเศษของ ZDO ที่ต้องเข้าไปเจรจาข้องเกี่ยวกับ layer เน็ตเวิร์ก มันจึงมี ZDO Management Plane ที่แผ่ครอบคลุมชั้น APS (Application Support Sub-layer) กับ NWK (Network layer) ซึ่งยินยอมให้ ZDO ติดต่อสื่อสารกับสองชั้นนี้ตอนที่มันทำงานประเภท internal task และยินยอมให้ ZDO รับมือกับ request จาก application สำหรับการ access เน็ตเวิร์กและฟังก์ชั่นด้านความปลอดภัยด้วยการใช้ ZDP (ZigBee Device Profile) message

ต่ำลงมา APS หรือ Application Support Sub-layer มีหน้าที่สำคัญ 2 ประการ

     1. เป็นช่องทางสื่อสารของ app โดยข้อความจะถูกส่งผ่าน SAP (Service Access Point) ที่อยู่ระหว่าง APS กับแต่ละ endpoint
     2. จัดการดูแลตาราง binding (เดี๋ยว concept ของการ binding เราจะพูดถึงอีกที) และส่งข้อความระหวางโหนดที่บายด์หรือเชื่อมพันธะถึงกัน

บริเวณนี้มี jargon อีก 2 คำ คือ Application Framework (AF) กับ SAP คำว่า AF นั้นได้แก่ส่วนที่ประกอบด้วย endpoint (ในรูปเขียน Application object) กับ ส่วนสนับสนุนการติดต่อสื่อสารระหว่าง app กับ APS โดย app จะติดต่อกับ APS ผ่าน interface ที่เรียกว่า SAP

SAP จะจัดเตรียมกลุ่มของ operation สำหรับส่ง information และ command ระหว่างชั้น มี 4 operation หลักได้แก่ 1. request ซึ่ง layer บนต้องการใช้ service บางอย่างจาก layer ล่างก็จะส่งคำสั่ง request ไปยัง layer ล่าง 2. confirm เป็นการตอบสนองกลับของ layer ล่างว่ามัน accept หรือ reject ต่อ request นั้น 3. response เป็นการตอบสนองผลลัพธ์ของ request จาก layer ล่างในแบบใดแบบหนึ่ง ซึ่งคุณ response นี้อาจจะ reponse ทันทีทันใดหรือไม่ทันทีทันใด หน่วงเวลาออกไปก็ได้นะครับ ทั้งนี้ทั้งนั้นขึ้นอยู่กับว่าสิ่งที่ layer บน request มานั้นเป็นอะไร และ 4. indication จะถูกสร้างขึ้นมาเมื่อ layer ล่างมีอะไรอยากแจ้ง layer บน พูดง่าย ๆ ว่ามันเป็น unsolicited information หรืออาจจะเป็น command ที่ต้องส่งต่อให้กับ layer บน (เช่น layer ล่างอาจ indicate ให้ layer บนรับทราบว่ามีข้อมูลบางอย่างส่งมานะ)

ถัดลงมาจาก APS คือ NWK (Network layer) จัดการเกี่ยวกับ network addressing กับ routing โดยไป invoke ให้เกิดการกระทำใน MAC layer สรุปหน้าที่สำคัญ 1. สำหรับตัวแม่ ฟังก์ชันของ layer นี้คือการเริ่มต้นเน็ตเวิร์ก จากนั้น 2. กำหนด network address 3. เพิ่มหรือลดอุปกรณ์จากเน็ตเวิร์ก 4. routing ข้อมูลไปยังจุดหมายปลายทาง 5. ใส่มาตรการรักษาความปลอดภัยให้กับข้อมูลที่จะส่งออก และ 5. implementing route discovery

Applications

Stack profile เป็นตัวกำหนด ชนิด รูปร่าง และลักษณะของเน็ตเวิร์กขึ้นอยู่กับประเภทของ application เช่น Home Controls profile ภายใต้ stack profile ก็จะมี application profile เช่นกลุ่มพันธมิตร ZigBee ได้นิยาม Home Controls-Lighting (HCL) application profile สำหรับใช้ควบคุมไฟภายในบ้าน ตัว application profile นี้จะกำหนดจำนวนอุปกรณ์และฟังก์ชั่นที่จะเป็นสำหรับควบคุมไฟ เช่น switch, dimmer, occupancy sensors และ ตัวควบคุมโหลด

Application profile ก็แบ่งออกเป็น 2 ประเภท คือ public profile กับ private profile กรณีใช้ public profile อุปกรณ์ก็จะมีสมบัติ interoperability (ใช้ข้ามยี่ห้อ)



Device Description จะถูกบรรยายไว้ในแต่ละ application profile พูดถึงชนิดของอุปกรณ์ที่ profile ดังกล่าวสนับสนุน เช่นใน HCL profile ก็จะมีอุปกรณ์พวก Switch Remote Control, Light Sensor Monochromatic, Dimmer Remote Control ให้ใช้ และแต่ละ device ใน application profile ก็จะมีตัว device identifier เฉพาะเจาะจงของมัน

ลองดูตัวอย่าง device ที่ชื่อ Switch Remote Control (SRC) ตัวมันเองก็คือ endpoint ตัวหนึ่ง ซึ่งเราบรรยายข้อมูลที่ส่งถึงกันได้ดังรูปด้านล่าง ใน ZigBee เราเรียกข้อมูลที่ส่งระหว่าง device ว่า attribute แต่ละ attribute ก็มี identifier เฉพาะ และกลุ่มของ attribute ที่จับรวมกันเราเรียกว่า cluster ซึ่งก็ต้องมี identifier เช่นกัน จากรูป ProgramSRC คือ identifier ของคลัสเตอร์ที่ประกอบด้วย 3 attribute ที่มีชื่อ (identifier) ว่า Auto, Override, FactoryDefault อันเป็นข้อมูลที่จะส่งเข้าหรือออกจาก endpoint นี้


concept ที่น่ารู้อีกอย่างของ ZigBee คือการ binding กล่าวคือ binding เป็นกระบวนการสร้างความสัมพันธ์ (establishing a relationship) ระหว่างโหนดให้สามารถสื่อสารรู้ความกัน binding นี่เป็นการดำเนินการในระดับ endpoint นะครับ คือ endpoint ไหน request ที่จะ bind กับ endpoint ไหน เช่น โหนดแรกเป็น switch unit มี 2 endpoints แต่ละ endpoints แทนสวิตช์ 1 อัน โหนดที่สองเป็น lamp unit มี 4 endpoints แต่ละ endpoint คือหลอดไฟ 1 หลอด จากรูป switch 1 บายด์กับหลอดไฟ 4 แบบ 1 ต่อ 1 ส่วน switch 2 บายด์กับหลอดไฟ 1 2 3 สร้างความสัมพันธ์แบบ one to many ซึ่งรูปแบบความสัมพันธ์ของการ bind นี้อาจเป็น 1-1, 1-many, many-1 หรือ many-many ก็ได้ทั้งนั้น

เกี่ยวกับ reliability และ security นั้น ZigBee เตรียมไว้ให้พอสมควรครับ เทคนิคที่ใช้สร้างความมั่นใจเกี่ยวกับ reliable ของการสื่อสารมี 3 เทคนิค 1. ตรวจสอบว่า channel ถูกใช้งานอยู่รึเปล่า ถ้ามีใครใช้อยู่มันก็ไม่ส่ง (อาจหน่วงเวลาด้วยเวลาสุ่ม) จากนั้นก็ตรวจสอบการใช้งานช่องสื่อสารอีกที มันจะส่งเมื่อช่องสื่อสารว่างครับ 2. การใช้ acknowledgement เพื่อยืนยันว่าข้อมูลที่ส่งไปถึงปลายทางแล้ว 3. alternative route กรณีพวก intermediate node ล่ม เน็ตเวิร์กสามารถ "discover" และกำหนดเส้นทางใหม่ได้ ด้านความปลอดภัยก็มี 3 มาตรการ 1. การเข้ารหัส (AES) ข้อมูลที่ต้นทางและถอดรหัสข้อมูลที่ปลายทาง การถอดและเข้ารหัสใช้คีย์เดียวกัน 2. message timeout มีการใส่ frame counter เข้าไปใน message เพื่อให้ตัวรับรู้ message นั้นอายุเท่าไร เก่าใหม่ timeout ไปรึยัง และ 3. access control list ก็คือการทำบัญชีของ MAC address ที่อนุญาตให้เข้ามา join ในเครือข่ายนั่นแหละครับ

ใน ZigBee นั้น เน็ตเวิร์กถูกเริ่มต้นด้วยตัวแม่ (coordinator) และมีสมบัติหลายอย่างที่สามารถ pre-configure ก่อน initialize ได้ เช่น maximum network depth หมายถึงจำนวน hop สูงสุดจากตัวแม่ไปยังลูกที่อยู่ไกลที่สุด (ดูรูป), จำนวนลูก, จำนวน routers



การ form เน็ตเวิร์กของตัวแม่ มี 3 ขั้นตอนหลัก 1. ค้นหาช่องสัญญาณวิทยุที่เหมาะสม ถ้าเราไม่ได้กำหนดเอาไว้ว่าช่องไหน มันจะเลือกช่องที่มี activity น้อยที่สุด 2. กำหนด PAN ID ซึ่ง PAN ID นี้เราจะกำหนดไว้ก่อนล่วงหน้าเองก็ได้ หรือตรวจจับเน็ตเวิร์กใกล้เคียงเพื่อไม่ให้เกิดปัญหา PAN ID ซ้ำกัน จากนั้นตัวเองจะกำหนด short address ให้กับตัวเอง (address ใน ZigBee มีแบบยาว 64 บิต คือ MAC address กับแบบสั้น short address 16 บิต ซึ่งตัวแม่เป็นตัวกำหนดให้กับตัวลูกแต่ละตัว) โดยทั่วไปตัวแม่จะมี address ที่ 0x000 สุดท้าย 3. เริ่มเน็ตเวิร์ก หมายถึงสภาวะที่พร้อมสำหรับรับการ join จากลูก ๆ

ตัวลูกนั้น ในการ join เน็ตเวิร์ก มี 4 ขั้นตอนหลัก 1. หลังจากเปิดทำงานมันจะหาค้นหาเน็ตเวิร์ก ถ้าเราไม่กำหนดช่องสัญญาณ มันจะหาช่องที่สัญญาณดีที่สุด ถึงแม้เรากำหนดช่องสัญญาณ แต่ช่องสัญญาณเดียวกันอาจมีหลายเน็ตเวิร์กก็ได้ ลูกก็จะเลือกแม่ที่แรงที่สุด ฉะนั้นหลังจากค้นหาสัญญาณมันก็ทำการ 2. เลือกตัวแม่ 3. ส่งสัญญาณขอเข้าร่วมเน็ตเวิร์กไปยังตัวแม่ 4. ถ้าตัวแม่โอเค แม่จะกำหนด short address ให้มันเพื่อให้อุปกรณ์ในเครือข่ายใช้สื่อสาร ถ้าแม่ไม่โอเค ตัวลูกจะได้รับ reject join request

เมื่อเราได้เน็ตเวิร์กแล้ว ลักษณะของการส่งข้อมูล หรือ message propagation ก็สอดคล้องกับ topology และ 802.15.4 คือ RFD คุยกับ FFD ได้เพียงตัวเดียว ส่วน FFD คุยกันเองกี่ตัวก็ไม่เป็นปัญหาแต่ประการใด



Microchip Stack for the ZigBee Protocol

ตอนอบรมผมใช้ตัวอย่าง stack ของไมโครชิพ เวอร์ชั่น 1.0-3.8 ซึ่งถ้าคุณเข้าเว็บของไมโครชิพตอนนี้คงหาโหลดไม่ได้แล้วละครับ อาจจะเจอตัว ZigBee2006 ซึ่งดูดีกว่า จากที่เคยลองเล่นมานั้น 1.0-3.8 มีปัญหาเมื่ออุปกรณ์ join เน็ตเวิร์กหลายตัว แม่ 1 ตัว รับลูก 5 ตัวก็เริ่มรู้สึกถึงความตึงเครียด และชิพเซ็ตสำหรับตัวรับส่งสัญญาณวิทยุใช้ MRF24J40MA กับ MB (ซึ่งเข้าใจว่าแรงกว่า แต่เมื่อใช้ร่วมกับ 1.0-3.8 กลับมีปัญหามากกว่า) ในช่วงเวลาอันสั้น ผมใช้ application นาฬิกา คือ ผมเซ็ตตัวแม่ และผู้เข้ารับการอบรมเซ็ตตัวลูก join เข้ามาในเน็ตเวิร์กของตัวแม่ (ผู้อบรมมีทั้งหมดประมาณ 60 คน แบ่งเป็น 20 กลุ่ม จึงต้องเซ็ตตัวแม่ไว้ 4 ตัว ตัวละช่องสัญญาณ) ตัวลูกแต่ละตัวเป็นนาฬิกาที่มี RTC ของตัวเอง ตั้งเวลาเอง จากนั้นจะมีการส่ง message ระหว่างแม่กับลูกบน topology แบบ star ผมให้ผู้อบรมแก้ไข code เพื่อส่งข้อความมาทักทายตัวแม่ ขณะที่ตัวแม่ส่งเวลาของตัวเองไปให้ตัวลูกเพื่อให้ตัวลูกปรับเวลาให้ตรงกับแม่ แบบนี้เราใช้ sync นาฬิกาได้ครับ คงไม่เป๊ะในหน่วยวินาทีเพราะ propagation ของสัญญาณ แต่เวลาก็น่าจะตรงกันในระดับที่ยอมรับได้ (คลาดเคลื่อน 1 วินาทีเป็นอย่างมาก - จากการทดลอง)

ข้อจำกัดของ stack ศึกษาได้จาก Application Note (AN) ของไมโครชิพ ถ้าคุณโหลดโค้ดมาเล่นกับฮาร์ดแวร์ของคุณเอง ขาสำคัญที่ต้องแก้ไขในโค้ดให้ตรงกับฮาร์ดแวร์ของคุณแสดงดังรูป มีส่วนหลัก 2 ส่วนคือสัญญาณควบคุม ได้แก่สัญญาณ interrupt, chip selection, wake-up pin กับ transceiver reset กับส่วนสื่อสารอนุกรม SPI ได้แก่ SCK, SDI, SDO (SPI มี 4 wires อีกขาก็คือ CS นั่นแหละครับ)



terminology ต่าง ๆ ไมโครชิพใช้คำตรงกับชื่อเรียกมาตรฐาน ถ้าคุณจำคำข้างบนอย่าง Profile, Device, Attribute, Cluster, Endpoint ได้ ก็จะช่วยให้อ่าน AN ง่ายขึ้น ภาพด้านล่างนี้ผม map ซอร์สไฟล์กับโครงสร้างสแต็กของมันให้ดู เพื่อให้เห็นภาพรวมยิ่งขึ้นและเป็นประโยชน์กรณีที่คุณต้อง debug หัวข้อสุดท้ายนี้เน้น workshop รายละเอียดผมขอข้ามไม่กล่าวถึง จึงจบ ZigBee เบื้องต้นฉบับย่นย่อด้วยประการฉะนี้




 

Create Date : 11 กุมภาพันธ์ 2554    
Last Update : 16 กุมภาพันธ์ 2554 16:04:09 น.
Counter : 5637 Pageviews.  

เต่า vs อิเล็กตรอนในลวดทองแดง

ผมช่วยออกโจทย์คำถามเล่นสนุกกับน้อง ๆ ใน YECC 2010 ข้อหนึ่ง เป็นคำถามช่วงที่พิธีกรออกมาเล่นกับผู้แข่งขัน ไม่ซีเรียสจริงจังมากนัก ปีนี้ได้โรสกับไตเติ้ลประกบคู่กัน ถามว่าเต่ากับอิเล็กตรอนในลวดทองแดงใครเคลื่อนที่เร็วกว่ากัน และเร็วกว่ากันกี่เท่า โจทย์ที่ผมเขียนส่งไปเป็นแบบนี้ครับ

น้อง ๆ เคยเห็นเต่าใช่มั้ยครับ?

(แหงล่ะ ใครจะไม่เคย ... เอ๊ะ รึไม่แน่) โดยเฉลี่ยเต่าเดินด้วยอัตราเร็ว 0.2 km/hr ซึ่งช้ามาก น้อง ๆ คิดว่าเต่าตัวนี้กับอิเล็กตรอนที่เคลื่อนที่ในลวดทองแดงตามวงจร (รูปด้านล่าง) ใครเคลื่อนที่เร็วกว่ากัน? และเร็วกว่ากันกี่เท่า? เมื่อกำหนดให้แหล่งจ่าย 100 VDC จ่ายกระแส 1 A ให้กับหลอดไฟ 100 W โดยสายทองแดงทรงกระบอกรัศมี 0.1 cm

กลัวว่าจะยากเกินไปจึงใส่ข้อมูลช่วยว่าทองแดง 1 อะตอมมีมวล 63u หรือ 1.04 x 10-25 kg และทองแดงมีความหนาแน่น 8.9 x 103 kg/m3 ซึ่งทองแดง 1 อะตอม (การจัดเรียงอิเล็กตรอนของมันคือ 2, 8, 18, 1) ให้อิเล็กตรอนอิสระ 1 ตัว ใช้แค่สูตร ม.ปลาย I = nevA (เมื่อ e = 1.6 x 10-19 C) ก็จบแล้วครับ จะลองคิดก่อนอ่านเฉลยมั้ย?


จากสูตร I = nevA (ซึ่งถ้าคุณจำฟิสิกส์ ม.4 ได้จะรู้ว่ามันมาจาก I = Q/t) เราหา v = I/neA แทนค่าต่าง ๆ ประกอบด้วย I = 1 A โจทย์บอกมา, A = Πr2 สูตรพื้นที่วงกลมธรรมดา ๆ เค้าบอก r ฉะนั้น A = Πx(0.1)2 cm2, e = 1.6 x 10-19 C, n = จำนวนอิเล็กตรอนในหน่วยปริมาตร หาได้จากข้อมูลที่เรารู้ว่าทองแดงมีความหนาแน่น 8.9 x 103 kg/m3 ดังนั้นใน 1 m3 มีทองแดงอยู่จำนวน 8.9 x 103/1.04 x 10-25 อะตอม (หรือ 8.5 x 1028 อะตอม) หรือใน 1 cm3 มีอะตอมทองแดงอยู่ 8.5 x 1022 อะตอม เนื่องจากทองแดง 1 อะตอมให้อิเล็กตรอนอิสระ 1 ตัว เราจึงรู้ว่าใน 1 cm3 มีอิเล็กตรอนอิสระ 8.5 x 1022 ตัว

v = 1/(8.5 x 1022)(1.6 x 10-19)(Π x 0.12) = 0.00234 cm/s = 8.42 cm/hr

ช้ากว่าเต่าประมาณ 2375.296 เท่า!




 

Create Date : 14 กุมภาพันธ์ 2553    
Last Update : 14 กุมภาพันธ์ 2553 22:18:42 น.
Counter : 543 Pageviews.  

OP-AMP ในอุดมคติ

มีคำถามในการแข่งขัน YECC 2009 ถามน้อง ๆ นักเรียนนักศึกษาว่าออปแอมป์ในอุดมคติมีคุณสมบัติเป็นอย่างไรบ้าง งานนี้ ดร.ปู เป็นพิธีกรคู่กับคุณโอ๊ท โดยคำตอบที่สนใจในสคริปของพิธีกรนั้นเขียนไว้ 5 ตัว คือ 1. อัตราขยายแรงดันแบบไม่มีการป้อนกลับ (AOL) 2. ความต้านทานขาเข้า (Rin) 3. ความต้านทานขอออก (Rout) 4. ช่วงความถี่ใช้งาน (bandwidth) และ 5. CMRR คำถามในรอบนี้เป็นคำถามที่แต่ละทีมต้องแย่งกันตอบ สำหรับคุณสมบัติสี่ข้อแรกนั้นไม่มีปัญหาอะไร เกนต้องสูงมาก, Rin สูงมาก, Rout ต่ำมาก และช่วงความถี่กว้างมาก มาติดปัญหาตรง CMRR นี่แหละครับ ทีมจาก KU ได้ตอบก่อน น้องเขาตอบว่า CMRR = 0 ซึ่ง ดร.ปู ให้ผิดไป (สคริปที่ผมเขียนให้เป็นแบบนั้น) ส่วนทีมต่อมาผมจำไม่ได้ล่ะว่าจากที่ไหนตอบ CMRR เท่ากับอนันต์ ก็ได้คะแนน ตรงนี้มีการประท้วงจาก KU อาจารย์ก็เดินมาถามผมว่าทำไมให้ผิด เพราะน้องเขาตอบว่า CMRR คือ ความสามารถในการขจัดสัญญาณรบกวนที่เกิดร่วมกันทางอินพุต ซึ่งคำตอบนี้ถูกต้องครับ (และดร. ปู ก็ให้คะแนนไปครึ่งหนึ่ง) หากถามว่า CMRR คืออะไร แต่ประเด็นที่ถาม เราไม่ได้ต้องการรู้ว่า CMRR คืออะไร แต่อยากจะรู้ว่า CMRR ของออปแอมป์ในอุดมคติเป็นเท่าไร



ออปแอมป์ในอุดมคตินั้นควรขยายเฉพาะสัญญาณอินพุตที่แตกต่างกัน และตัด (reject) สัญญาณอินพุตที่ร่วมกัน แต่ในความเป็นจริงมันไม่มีออปแอมป์ที่สมบูรณ์แบบขนาดนั้น มันจึงมีการขยายสัญญาณอินพุตที่ร่วมกันของขาทั้งสอง ตรงนี้เราคงเคยได้ยิน Adm กับ Acm (อัตราขยายโหมดผลต่างกับอัตราขยายโหมดร่วม) ทำให้มีการวัดปริมาณตัวหนึ่งที่ใช้บอกความไม่สมบูรณ์แบบจุดนี้ของออปแอมป์เรียกว่า common-mode rejection ratio หรือ CMRR ซึ่งหาได้จาก |Adm/Acm| ก็น่าจะชัดนะครับว่าตัวตั้งยิ่งเยอะยิ่งดีส่วนตัวหารยิ่งน้อยยิ่งดี ฉะนั้น CMRR ในอุดมคติเป็นอนันต์ ไม่ใช่ศูนย์ ดังที่อาจารย์และนักเรียนในทีมดังกล่าวแย้งมา แต่จากที่ได้พูดคุยกับน้อง ๆ และอาจารย์ ความเข้าใจเรื่องนี้ก็ต้องถือว่าตรงกันครับ เพราะยังเข้าใจตรงกันว่าออปแอมป์อุดมคติ reject สัญญาณ common-mode พลาดกันตรงนี่นิยาม CMRR เท่านั้นเอง




 

Create Date : 11 กุมภาพันธ์ 2552    
Last Update : 14 กุมภาพันธ์ 2553 22:23:47 น.
Counter : 1893 Pageviews.  

bandgap V.ref basics

หลักการง่าย ๆ ในการสร้างแหล่งจ่ายแรงดันไฟฟ้าคงที่ที่ไม่ผันตามอุณหภูมิแสดงดังรูป



เขียนสมการแรงดันไบอัสตรงตกคร่อม BE ด้วยฟังก์ชันของ JC และ T ได้




... (8.10)




เมื่อ VG0 คือ bandgap voltage ของซิลิกอนที่ 0 K (มีค่าประมาณ 1.206 V), k คือ ค่าคงที่ของ Boltzman, m คือ ค่าคงที่ประมาณ 2.3, JC คือ ความหนาแน่นกระแสคอลเล็คเตอร์ เท่ากับ IC/AE, T คือ อุณหภูมิ โดย subscript 0 หมายถึง ปริมาณที่อุณหภูมิอ้างอิง T0

สำหรับ IC ที่มีค่าคงที่ ค่าของ VBE จะผันตามอุณหภูมิโดยประมาณ -2 mV/K เราสามารถชดเชยการแปรผกผันกับอุณหภูมิได้ด้วยวงจร PTAT (proportional-to-absolute temperature) ซึ่งแปรตามอุณหภูมิ จากสมการ 8.10 นี้ ถ้าเราไบอัสตรงรอยต่อเบส-เอมิตเตอร์ 2 ตัวด้วยกระแสคงที่ J1 กับ J2จะได้ผลต่างของ VBE ในรูปสมการที่แปรตาม T




... (8.12)



เพื่อความสะดวก เราขอตั้งสมมติฐานไว้ก่อนว่า J แปรตาม T (ค่อยย้อนกลับมาพิสูจน์ภายหลัง) ดังนั้น Ji/Ji0 = T/T0 เมื่อ Ji คือค่าความหนาแน่นกระแสคอลเล็คเตอร์ของทรานซีสเตอร์ตัวที่ i และ Ji0 คือความหนาแน่นกระแสคอลเล็คเตอร์ของทรานซีสเตอร์ตัวเดียวกัน ณ อุณหภูมิอ้างอิง T0 และกำหนดให้ผลต่างของ VBE 2 ตัวถูกคูณด้วยตัวคูณ K ก่อนนำมารวมกับ VBE (ตามรูป Fig.390-01) ได้




... (8.16)



สมการ 8.16 เป็นสมการแสดงความสัมพันธ์ระหว่างแรงดัน output ของ bandgap voltage reference กับ T ถ้าเราต้องการให้ที่อุณหภูมิอ้างอิง T0 ค่า Vref ไม่ควรผันตาม T เราสามารถคำนวณได้โดยหาอนุพันธ์ของ Vref เทียบกับ T แล้วให้เท่ากับ 0 ที่ T0

อนุพันธ์ของ (8.16) แสดงได้ตาม (8.17)




... (8.17)



แทน T = T0




... (8.18)



ทางซ้ายของ (8.18) คือ Vref-0 ถ้าให้ T0 = 300 K และ m = 2.3 เราจะได้ Vref-300K = 1.24 V โดยประมาณ แต่อย่างไรก็ตาม ค่า Vref จะค่อนข้างคงที่เฉพาะในช่วงอุณหภูมิใช้งาน T0 ที่อ้างอิงเท่านั้น (ดูรูป Fig.390-03)



จากกรณีตัวอย่างที่ T0 = 300 K เรานำมาคำนวณค่าตัวคูณ K ได้ดังสมการ 8.21




... (8.21)



เมื่อนำ 8.18 ยัดกลับไปในสมการ 8.16 (จัดรูปง่าย ๆ) ได้




... (8.22)



หากต้องการรู้การเปลี่ยนแปลง Vref ที่ T อื่นนอกเหนือ T0 ให้หาอนุพันธ์เทียบ T ดังสมการ 8.23




... (8.23)







 

Create Date : 24 มกราคม 2551    
Last Update : 18 ตุลาคม 2551 20:34:27 น.
Counter : 407 Pageviews.  

rectifier Circuits

วงจรเรียงกระแส คือวงจรที่เปลี่ยนจากกระแสสลับ (ac) เป็นกระแสตรง (dc) โดยใช้คุณสมบัติยอมให้กระแสผ่านได้ทางเดียวของไดโอด



รูปข้างบนนี้เป็นวงจรเรียงกระแสอย่างง่าย เรียก half-wave rectifier circuit ไฟ ac ครึ่งซีกใดครึ่งซีกหนึ่งเท่านั้นที่สามารถไหลผ่านไดโอดได้



รูปข้างบนนี้ใช้หม้อแปลงมีแถ็บกลาง (center-tapped) ร่วมกับไดโอด 2 ตัวเรียงกระแสได้เต็มลูกคลื่นตามสัญญาณอินพุต เรียก full-wave rectifier circuit ไฟ ac ครึ่งซีกหนึ่งไหลผ่านไดโอดตัวหนึ่ง ส่วนอีกครึ่งซีกหนึ่งไหลผ่านไดโอดอีกตัว



รูปข้างบนนี้เป็นตัวอย่างการนำ full-wave center-tapped rectifier มาดัดแปลงเพื่อเรียงกระแสให้ได้ผลลัพธ์มีทั้ง 2 ขั้ว (dual polarity)



รูปข้างข้างบนนี้เป็นแบบที่นิยมที่สุด เพราะเราไม่ต้องใช้หม้อแปลงแบบมีแถ็บกลางในการเรียงกระแสเต็มคลื่น เรียกว่า full-wave bridge rectifier ข้อเสียของมันคือแรงดันเอ้าพุตจะลดทอนลงเท่ากับแรงดันไบอัสตรงไดโอด 2 ตัว




 

Create Date : 19 มกราคม 2551    
Last Update : 18 ตุลาคม 2551 20:35:26 น.
Counter : 781 Pageviews.  

1  2  3  
 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.