Monthly Archives: September 2010

Zigbee API Frame (Zigbee API Packet)

วันนี้ขอมาบันทึกอะไรนิดๆหน่อยๆแล้วกัน จะถือว่าเป็นประโยชน์ให้กับคนอื่น เพราะว่าเห็นคนทำน้อยเหลือเกิน

ไหนๆก็ทำโปรเจ็กต์เรื่องนี้โดยตรง อยู่แล้ว แบ่งปันให้คนอื่นรู้มั่ง…

ของผมเป็น โมดูล Xbee Series2 จำนวน 3 ตัว และ Xbee-Pro Series2 จำนวน 1 ตัว

เรื่องแรกวันนี้ ของการเซ็ตค่า API

สำหรับโปรเจ็กต์ครึ่งปีแรกนี้ คือในโปรเจ็กต์ จะมี xbee ตอนนี้อยู่ 4 ตัว

1. ทำหน้าที่เป็น Coordinator 1 ตัว ต่ออยู่กับ ARM7 Cortex-M3

2. ทำหน้าที่เป็น Router 3 ตัว

ในส่วนของ Router นั้น สามารถแบ่งออกเป็น 3 แบบดังนี้

1. ไม่ได้ทำอะไรเลย เป็นทางผ่านส่งข้อมูลเฉยๆ 1 ตัว

2. เซ็ตค่า Pin Change Detection จำนวน 1 ตัว หน้าที่ของโหนดนี้คือ ต่ออยู่กับ PIR Sensor เวลามีอะไรผ่านหน้าเลนส์ จะยก logic ให้เป็น High เมื่อ logic เปลี่ยนก็จะทำการส่งข้อมูล API Frame ผ่าน Router ข้อ 1 ไปยัง Coordinator

3. รับค่าค่า Analog Input ทุกๆ 20 วินาที เพื่อส่งเป็น API Frame กลับไปยัง Coordinator

ในส่วนของ Coordinator นั้น ต่อกับ ARM7 ผ่านทาง UART (RS232) เมื่อรับค่าเข้ามาเป็น Packet หลักการของโปรแกรมใน ARM ทำดังนี้

หลักการเช็คข้อมูล Packet ที่ได้รับจาก Zigbee API Frame

1. รับค่า UART แล้วทำการเก็บใน DMA เพื่อหาจำนวน Bytes ทั้งหมด ว่ามีทั้งหมดกี่ bytes

2. ตรวจสอบ byte แรก ต้องเป็น 0x7E

3. byte 2-3 นั้นจะเป็นค่าความยาว Length ของขบวนข้อมูลที่รับมา ซึ่งจะสัมพันธ์กับ Bytes ทั้งหมด ที่อยู่กับด้านบน

4.ทำการตรวจสอบ byte ที่ 4 ว่าเป็น 0×92 รึเปล่า ถ้าใช่ จะเป็น Zigbee IO Data Sample RX Indicator ซึ่งเป็นการแซมปลิ้งค่าจาก Digital Input ทุกขา ของ โมดูล Xbee ซึ่งอาจจะเป็นเลขรหัสอื่น ซึ่งการตีความใน API Frame ก็จะแตกต่างกันไป แต่ในโครงงานนี้ ตีความโดย 0×92

5. ทำการบวกเลขทั้งหมด ตั้งแต่ byte ที่ 4 จนถึง byte ก่อน checksum ทั้งหมด แล้วหักด้วย 0xFF ซึ่งค่าที่ได้ byte low จะอยู่ในส่วนของ checksum (เวลาคำนวณให้ตัด byte high ออกไปได้เลย)

6. ถ้าถูกต้องทั้งหมดใน 5 ข้อที่กล่าวมาข้างต้น แสดงว่า ส่งข้อมูลรูปแบบ API Frame ถูกต้องแล้ว ให้ไปทำอะไรก็ได้หลังจากนี้

ตัวอย่าง ซึ่งเช่นข้อมูลเป็นดังนี้ (รับค่า Pin Change Detection อย่างเดียว ถูกส่งจากโหนด มายัง Coordinator) ถ้าเป็น Analog ด้วย Packet จะยาวกว่านี้ แต่สามารถส่งรวมกันได้เลยนะ

7E 00 12 92 00 13 A2 00 40 3D C7 1D 40 CB 01 01 FF FF 00 00 01 4B

เวลาตีความ จะสามารถตตีความได้ดังนี

0x7E คือ byte start ของข้อมูลขบวนรถไฟที่ถูกส่งมา

0×00 0×12 คือ จำนวน bytes ทั้งหมดตั้งแต่ byte ที่ 4 จนถึง byte ก่อนหน้า checksum ซึ่ง 0×12 แปลงเป็นฐานสิบได้ 18 ซึ่งถูกต้อง ลองนับดู (ตัวอักษรสีฟ้า)

7E 00 12 92 00 13 A2 00 40 3D C7 1D 40 CB 01 01 FF FF 00 00 01 4B

ได้ครบ 18 ตัวจริงๆด้วยอ่ะนะ…

0×92 คือ API Frame นี้ถูกส่งมาโดยข้อมูลที่ตามมาเป็น Zigbee IO Data Sample RX Indicator

0×00 0×13 0xA2 0×00 0×40 0x3D 0xC7 0x1D คือ 0013A200 403DC71D ซึ่งเป็น DH และ DL Address 64bit ของโหนดปลายทางที่ส่งข้อมูลมา (ระบุตัวตนของโหนดที่ส่งข้อมูลมา)

0×40 0xCB คือ 16bit Address อันนี้ไม่ต้องสนใจ เนื่องจากเราเช็คผ่าน 64 bit address ไปแล้ว

0×01 (byte ที่ 15) คือ Packet ACK คือ ปรกติจะมี ACK กะ NACK อ่ะนะ แปลง่ายๆ Acknowledge นั่นเอง

0×01 (byte ที่ 16) คือ Number sample sets โดยปกติแล้วจะเป็นค่านี้ตลอด

0xFF 0xFF คือ Digital Channel Mask ก็คือถ้า สอง byte นี้ มีค่าเป็น FF FF แสดงว่ามีการส่งค่าดิจิตอล Input มา ถ้าเป็น 00 00 ก็แสดงว่าไม่มีการส่งค่าดิจิตอล Input มา

0×00 (byte ที่ 19) Analog Channel Mask คือถ้าเป็น 00 แสดงว่าไม่มีการส่งค่า analog มา ถ้ามีการส่งค่า analog มา มันจะมีค่าเป็น FF

0×00 0×01 (byte ที่ 20 และ 21) อันนี้เป็น RAW Data จริงๆ คือ มันมีทั้งหมด 2byte (รองรับ 16bit) สำหรับดิจิตอล แต่จริงๆ โมดูล xbee มีไม่ถึงนะ ปกติมีแค่ 12bit โดยเรียงขาดังนี้

bit12         bit11         bit10         bit9         bit8         bit7         bit6         bit5         bit4         bit3         bit2         bit1         bit0

DIO12      DIO11      DIO10       N/A        N/A       DIO7      DIO6      DIO5      DIO4      DIO3      DIO2      DIO1       DIO0

เช่นค่าที่ได้มา 00 01 ก็จะเป็น

0             0               0               0              0              0              0               0             0               0               0              0              1

แสดงค่า DIO0 ที่ต่ออยู่กับ PIR Sensor Detect ค่าได้ว่าเป็น 1 นั่นเอง…

ต่อมา…

0x4B คือค่า Check Sum ซึ่งหาได้จาก

Check Sum = 0xFFFF – ( 0×92 + 0×00 + 0×13 + 0xA2 + 0×00 + 0×40 + 0x3D + 0xC7 + 0x1D + 0×40 + 0xCB + 0×01 + 0×01 + 0xFF + 0xFF + 0×00 + 0×00 + 0×01 )

Check Sum = 0xFFFF – 0x5B4

Check Sum = 0xFA4B ซึ่ง byte high เราไม่เอา เอาแต่ byte low ก็จะได้ 4B ดัง Packet สุดท้ายที่มันส่งมา

จบแล้ว ง่ายมั๊ย ศึกษามา 3-4 เดือน = =’ โปรเจ็กต์ยังไม่ไปไหน ฮ่าๆ

วันนี้ขอแค่นี้ก่อนละกัน รู้สึกเมื่อยๆ ^^

เมื่อคืนได้เข้าไปที่บล๊อก http://www.10logic.com/ มา พอดีสนในเรื่อง gsm module เลยไปขอวงจรจากพี่เค้ามาครับ

ไม่ถึงวัน พี่เค้าส่งให้เลย ต้องขอขอบคุณพี่ B.Uthen มากๆเลยนะครับ ที่อนุเคราะห์ให้

ซาบซึ่งๆ ^^

ไอซีเซ็นเซอร์อุณหภูมิ (Integrated – Circuit Temperature Sensors)

ที่ผ่านมาพบว่าเทอร์โมคัปเปิลมีสัญญาณทางด้านเอาต์พุตต่ำมากและมีความเป็นเชิงเส้นกับอุณหภูมิต่ำ นอกจากนี้ยังต้องมีการชดเชยค่าที่ถูกต้องให้ด้วย ส่วนอาร์ทีดีให้เอาต์พุตเป็นความต้านทานแต่จะมีค่าน้อย และเทอร์มิสเตอร์ก็จะมีความเป็นเชิงเส้นน้อยมาก
มีตัวตรวจวัดอุณหภูมิตัวหนึ่งที่เป็นทางเลือก ได้แก่อุปกรณ์ที่ประดิษฐ์จากสารกึ่งตัวนำอิเล็กทรอนิกส์ที่อยู่ในรูปของโมโนลิธิกไอซี ในที่นี้จะกล่าวถึงเบอร์ต่างๆดังนี้
ไอซีตระกูล 335
ในที่นี้จะอ้างอิงเบอร์ LM335 ส่วนตัวอื่นในตระกูลเดียวกันจะเป็นดังตารางที่ 5.9
ตารางที่…แสดงย่านวัดอุณหภูมิของ LM135/LM235/LM335
อุปกรณ์ ย่านวัด(° C) การใช้งาน
LM135
LM235
LM335 -55 ถึง +150
-40 ถึง +125
-40 ถึง +100 ทางทหาร
งานอุตสาหกรรม
เชิงธุรกิจ
ไอซีเบอร์ LM335 เป็นซีเนอร์ไดโอดที่ไวต่ออุณหภูมิ เมื่อเราจ่ายแรงเคลื่อนไบอัสกลับให้อยู่ในย่านเบรกดาวน์ จะทำให้มีความไวทางด้านเอาต์พุตเป็น 10 mV/° K หรือ
VZ = T (..)
จากที่พบว่าองศาเคลวินและองศาเซลเซียสมีค่าเหมือนกัน แต่จะมีออฟเซตเป็น 273° นั่นคือ
0° C = 273° K
ดังนั้นเอาต์พุตของ LM335 จึงกลายเป็น
VZ = 2.73 V + T (..)
กระแสจากรูปที่ 5.25 จะต้องจำกัดให้อยู่ที่
5 mA > IZ > 400 µA
ด้วยเหตุนี้จึงเห็นว่าที่กระแสสูงๆ LM335 จะร้อนเนื่องจากกำลังงาน IZVZ แต่ที่กระแสต่ำกว่า 1 mA จะทำให้ความแน่นอนลดน้อยลง
เพื่อหาค่าของตัวต้านทานที่เหมาะสมที่จะนำมาต่ออนุกรมกับรูปที่ 5.25 อันดับแรกต้องหาแรงเคลื่อนตกคร่อมซีเนอร์ไดโอดที่อุณหภูมิปกติที่ใช้งาน ซึ่งหาได้จาก
= (…)
ต้องจำว่า กระแสโหลดต้องน้อยกว่ากระแสต่ำสุดที่ไหลผ่านซีเนอร์ไดโอดจริง นั่นคือต้องแน่ใจว่า
ความเป็นเชิงเส้นของ LM335 มีค่าเท่ากับ สิ่งที่ต้องระวังในวงจรนี้คือ ออฟเซต 2.73 โวลต์อาจจะสร้างสัญญาณรบกวนให้กับวงจร จากวงจรด้านบนที่อุณหภูมิ 0° C แรงเคลื่อนทางเอาต์พุตจะมีค่าเป็น 0 โวลต์ไฟกระแสตรง
วงจรในรูปที่ 5.26 เป็นวงจรหนึ่งที่สามารถใช้ในการสอบเทียบเป็นแบบสองจุด (two – point calibration) โดยมีลำดับขั้นดังนี้คือ
1. ปรับขา (wiper) ของโพเทนชิโอมิเตอร์ศูนย์ให้ได้แรงเคลื่อน -2.73 โวลต์
2. ปรับโพเทนชิโอมิเตอร์ เป็นที่กึ่งกลาง นำตัวโพเทนชิโอมิเตอร์ไปวางที่อุณหภูมิไปวางที่อุณหภูมิต่ำสุด ณ จุดที่ต้องการใช้งาน
3. ปรับโพเทนชิโอมิเตอร์ศูนย์ใหม่เพื่อกำจัดค่าความผิดพลาดออกครึ่งหนึ่ง แล้วนำโพเทนชิโอมิเตอร์ไปวางไว้ยังจุดที่มีอุณหภูมิสูงสุดที่ต้องการใช้งาน
4. ปรับโพเทนชิโอมิเตอร์ เพื่อกำจัดค่าความผิดพลาดด้านบนออก สลับกันวางตัวเซ็นเซอร์ที่อุณหภูมิสูงและต่ำอย่างนี้แล้วปรับอย่างน้อยอีก 2 ครั้ง โดยใช้การปรับศูนย์ที่ด้านล่างและปรับค่า ที่ด้านบน
จากการทดลองด้านบน ต้องไม่ลืมช่วงเวลาที่จะทำให้ตัวเซนเซอร์เข้าสู่จุดเสถียรที่อุณหภูมิใหม่ในแต่ละครั้งก่อนที่จะทำการปรับ นอกจากนั้นต้องแน่ใจว่าจะสามารถรักษาให้ RZERO มีค่าน้อยกว่า RBIAS ซึ่งทำให้การปรับไม่มีผลกับค่า IZ
ไอซีตระกูล 34
ในที่นี้จะอ้างอิงเบอร์ LM34 จากบริษัท National Semiconductor ซึ่งอซีเบอร์ LM34 นี้ให้แรงเคลื่อนเอาต์พุตเป็นเชิงเส้นกับอุณหภูมิองศาฟาเรนไฮต์ พบว่า LM34 มีข้อได้เปรียบเหนือตัวเซ็นเซอร์อุณหภูมิแบบเชิงเส้นที่สอบเทียบกับอุณหภูมิองศาเคลวินคือ
1. ไม่ต้องลบค่าคงที่ของแรงเคลื่อนออกจากเอาต์พุตของมัน
2. ไม่ต้องสอบเทียบหรือปรับค่าใดๆจากภายนอก แต่ยังคงให้ค่าความไม่แน่นอนได้ ที่อุณหภูมิห้องและ ที่อุณหภูมิ -50 ถึง +300° F
3. อิมพีแดนซ์ทางด้านเอาต์พุตต่ำให้เอาต์พุตเป็นเชิงเส้น และให้ความเที่ยงตรงต่อการสอบเทียบทำให้สามารถเชื่อมต่อกับอุปกรณ์อ่านค่าหรือต่อกับวงจรควบคุมได้ดี
4. สามารถใช้ได้กับแหล่งจ่ายแบบแหล่งจ่ายปลายเดี่ยว หรือกับแหล่งจ่ายกำลังที่มีขั้วบวกและลบได้อีกด้วย กินกระแสที่ประมาณ 70 mA จากแหล่งจ่าย ความร้อนที่เกิดจากตัวมันเองมีค่าต่ำประมาณ 0.2° F ในอากาศนิ่ง
5. มีย่านใช้งานในช่วง -50 ถึง +300 °F หากเป็นเบอร์ LM34C จะมีย่านใช้งานจาก -40 ถึง +230° F
LM34 บรรจุในตัวถังแบบ TO-46 แบบทรานซิสเตอร์ ส่วน LM34C บรรจุในตัวถังแบบ TO-92 ซึ่งเป็นแบบทรานซิสเตอร์พลาสติกวงจรใช้งานร่วมกับ LM34 เป็นดังรูปที่ 5.27 พบว่าเอาต์พุตจะเปลี่ยนแปลงอยู่ในช่วง 50 mV ถึง 3.00 V ไฟกรแสตรง หากใช้วัดอุณหภูมิจากช่วง +5 ถึง -300°F แต่หากต้องการวัดอุณหภูมิที่ต่ำกว่ำ 0°F ต้องจ่ายแหล่งจ่ายลบให้กับตัวไอซี ดังแสดงในรูปที่ 5.27(ข) วงจรดังกล่าวนี้ที่ 300°F จะมีแรงเคลื่อนเอาต์พุตออกมา +3.00 โวลต์ ส่วนที่ -50°F จะจ่ายแรงเคลื่อนออกมา -500 มิลลิโวลต์
บ่อยครั้งที่ต้องติดตั้งเซ็นเซอร์ไกลออกไปหลายเซนติเมตรจากวงจรอิเล็กทรอนิกส์ที่ต่อร่วม จึงจำเป็นต้องพิจารณาดังต่อไปนี้
1. ต้องใช้สายตัวนำที่ต่อไปยังเซ็นเซอร์เพียงสองสายเท่านั้น (ไม่ใช่สามสาย)
2. ต้องให้สัญญาณที่ย้อนกลับมาจากเซนเซอร์เป็นกระแสไม่ใช่แรงเคลื่อน ที่เป็นเช่นนี้ก็เพื่อกำจัดผลของค่าความต้านทานที่อนุกรมอยู่ในสาย ซึ่งวงจรในรูปที่ 5.27 (ค) และ (ง) คือการต่อดังที่กล่าวไว้
3. ต้องรักษาให้สัมประสิทธิ์อุณหภูมิของตัวต้านทาน 499 ต่ำที่สุดเท่าที่เป็นไปได้ ที่เป็นเช่นนี้ก็เพราะว่า IT ไม่เปลี่ยนแปลงเฉพาะกับแต่ VT เท่านั้น แต่ยังเปลี่ยนแปลงไปกับตัวต้านทาน 499 ที่เกิดจากผลของอุณหภูมิอีกด้วย
ไอซีตระกูล 590/592
ถ้าหากต้องการส่งสัญญาณออกเป็นระยะทางไกลๆ และไม่ต้องการให้สัญญาณกระแสมีผลโดยตัวต้านทานที่อนุกรมในสาย ไอซีตระกูล 590 และ 592 ก็เป็นตัวเลือกที่ดีอีกตัวหนึ่ง ในตอนนี้จะยกตัวอย่างของบริษัท Analog Device ที่ให้เอาต์พุตออกมาเป็นแรงเคลื่อน และมีกระแสออกจาก AD590 และ AD592 ดังนี้
เมื่อ T อยู่ในหน่วย °K หรือ
เมื่อ T อยู่ในหน่วย °C AD590 ให้ความแน่นอนเท่ากับ +0.5°C เมื่ออุณหภูมิอยู่ในช่วง -55 ถึง +150°C หากเปรียบเทียบกันแล้ว AD592 จะมีราคาถูกกว่า AD590 ย่านการใช้งานของมันจะอยู่ในช่วง -25 ถึง +105°C แต่มีความแน่นอนเป็น 0.5°C ที่ 25°C ความเป็นเชิงเส้น 0.2°C ในช่วง 0 ถึง 70°C
ที่ผ่านมาพบว่าเทอร์โมคัปเปิลมีสัญญาณทางด้านเอาต์พุตต่ำมากและมีความเป็นเชิงเส้นกับอุณหภูมิต่ำ นอกจากนี้ยังต้องมีการชดเชยค่าที่ถูกต้องให้ด้วย ส่วนอาร์ทีดีให้เอาต์พุตเป็นความต้านทานแต่จะมีค่าน้อย และเทอร์มิสเตอร์ก็จะมีความเป็นเชิงเส้นน้อยมากมีตัวตรวจวัดอุณหภูมิตัวหนึ่งที่เป็นทางเลือก ได้แก่อุปกรณ์ที่ประดิษฐ์จากสารกึ่งตัวนำอิเล็กทรอนิกส์ที่อยู่ในรูปของโมโนลิธิกไอซี ในที่นี้จะกล่าวถึงเบอร์ต่างๆดังนี้
ไอซีตระกูล 335ในที่นี้จะอ้างอิงเบอร์ LM335 ส่วนตัวอื่นในตระกูลเดียวกันจะเป็นดังตารางที่ 5.9ตารางที่…แสดงย่านวัดอุณหภูมิของ LM135/LM235/LM335
อุปกรณ์ ย่านวัด(° C) การใช้งานLM135LM235LM335 -55 ถึง +150-40 ถึง +125-40 ถึง +100 ทางทหารงานอุตสาหกรรมเชิงธุรกิจไอซีเบอร์ LM335 เป็นซีเนอร์ไดโอดที่ไวต่ออุณหภูมิ เมื่อเราจ่ายแรงเคลื่อนไบอัสกลับให้อยู่ในย่านเบรกดาวน์ จะทำให้มีความไวทางด้านเอาต์พุตเป็น 10 mV/° K หรือVZ = T (..)จากที่พบว่าองศาเคลวินและองศาเซลเซียสมีค่าเหมือนกัน แต่จะมีออฟเซตเป็น 273° นั่นคือ0° C = 273° Kดังนั้นเอาต์พุตของ LM335 จึงกลายเป็นVZ = 2.73 V + T (..)กระแสจากรูปที่ 5.25 จะต้องจำกัดให้อยู่ที่5 mA > IZ > 400 µAด้วยเหตุนี้จึงเห็นว่าที่กระแสสูงๆ LM335 จะร้อนเนื่องจากกำลังงาน IZVZ แต่ที่กระแสต่ำกว่า 1 mA จะทำให้ความแน่นอนลดน้อยลงเพื่อหาค่าของตัวต้านทานที่เหมาะสมที่จะนำมาต่ออนุกรมกับรูปที่ 5.25 อันดับแรกต้องหาแรงเคลื่อนตกคร่อมซีเนอร์ไดโอดที่อุณหภูมิปกติที่ใช้งาน ซึ่งหาได้จาก= (…)

ต้องจำว่า กระแสโหลดต้องน้อยกว่ากระแสต่ำสุดที่ไหลผ่านซีเนอร์ไดโอดจริง นั่นคือต้องแน่ใจว่า

ความเป็นเชิงเส้นของ LM335 มีค่าเท่ากับ สิ่งที่ต้องระวังในวงจรนี้คือ ออฟเซต 2.73 โวลต์อาจจะสร้างสัญญาณรบกวนให้กับวงจร จากวงจรด้านบนที่อุณหภูมิ 0° C แรงเคลื่อนทางเอาต์พุตจะมีค่าเป็น 0 โวลต์ไฟกระแสตรงวงจรในรูปที่ 5.26 เป็นวงจรหนึ่งที่สามารถใช้ในการสอบเทียบเป็นแบบสองจุด (two – point calibration) โดยมีลำดับขั้นดังนี้คือ1. ปรับขา (wiper) ของโพเทนชิโอมิเตอร์ศูนย์ให้ได้แรงเคลื่อน -2.73 โวลต์2. ปรับโพเทนชิโอมิเตอร์ เป็นที่กึ่งกลาง นำตัวโพเทนชิโอมิเตอร์ไปวางที่อุณหภูมิไปวางที่อุณหภูมิต่ำสุด ณ จุดที่ต้องการใช้งาน3. ปรับโพเทนชิโอมิเตอร์ศูนย์ใหม่เพื่อกำจัดค่าความผิดพลาดออกครึ่งหนึ่ง แล้วนำโพเทนชิโอมิเตอร์ไปวางไว้ยังจุดที่มีอุณหภูมิสูงสุดที่ต้องการใช้งาน4. ปรับโพเทนชิโอมิเตอร์ เพื่อกำจัดค่าความผิดพลาดด้านบนออก สลับกันวางตัวเซ็นเซอร์ที่อุณหภูมิสูงและต่ำอย่างนี้แล้วปรับอย่างน้อยอีก 2 ครั้ง โดยใช้การปรับศูนย์ที่ด้านล่างและปรับค่า ที่ด้านบนจากการทดลองด้านบน ต้องไม่ลืมช่วงเวลาที่จะทำให้ตัวเซนเซอร์เข้าสู่จุดเสถียรที่อุณหภูมิใหม่ในแต่ละครั้งก่อนที่จะทำการปรับ นอกจากนั้นต้องแน่ใจว่าจะสามารถรักษาให้ RZERO มีค่าน้อยกว่า RBIAS ซึ่งทำให้การปรับไม่มีผลกับค่า IZ
ไอซีตระกูล 34ในที่นี้จะอ้างอิงเบอร์ LM34 จากบริษัท National Semiconductor ซึ่งอซีเบอร์ LM34 นี้ให้แรงเคลื่อนเอาต์พุตเป็นเชิงเส้นกับอุณหภูมิองศาฟาเรนไฮต์ พบว่า LM34 มีข้อได้เปรียบเหนือตัวเซ็นเซอร์อุณหภูมิแบบเชิงเส้นที่สอบเทียบกับอุณหภูมิองศาเคลวินคือ1. ไม่ต้องลบค่าคงที่ของแรงเคลื่อนออกจากเอาต์พุตของมัน2. ไม่ต้องสอบเทียบหรือปรับค่าใดๆจากภายนอก แต่ยังคงให้ค่าความไม่แน่นอนได้ ที่อุณหภูมิห้องและ ที่อุณหภูมิ -50 ถึง +300° F3. อิมพีแดนซ์ทางด้านเอาต์พุตต่ำให้เอาต์พุตเป็นเชิงเส้น และให้ความเที่ยงตรงต่อการสอบเทียบทำให้สามารถเชื่อมต่อกับอุปกรณ์อ่านค่าหรือต่อกับวงจรควบคุมได้ดี4. สามารถใช้ได้กับแหล่งจ่ายแบบแหล่งจ่ายปลายเดี่ยว หรือกับแหล่งจ่ายกำลังที่มีขั้วบวกและลบได้อีกด้วย กินกระแสที่ประมาณ 70 mA จากแหล่งจ่าย ความร้อนที่เกิดจากตัวมันเองมีค่าต่ำประมาณ 0.2° F ในอากาศนิ่ง5. มีย่านใช้งานในช่วง -50 ถึง +300 °F หากเป็นเบอร์ LM34C จะมีย่านใช้งานจาก -40 ถึง +230° F
LM34 บรรจุในตัวถังแบบ TO-46 แบบทรานซิสเตอร์ ส่วน LM34C บรรจุในตัวถังแบบ TO-92 ซึ่งเป็นแบบทรานซิสเตอร์พลาสติกวงจรใช้งานร่วมกับ LM34 เป็นดังรูปที่ 5.27 พบว่าเอาต์พุตจะเปลี่ยนแปลงอยู่ในช่วง 50 mV ถึง 3.00 V ไฟกรแสตรง หากใช้วัดอุณหภูมิจากช่วง +5 ถึง -300°F แต่หากต้องการวัดอุณหภูมิที่ต่ำกว่ำ 0°F ต้องจ่ายแหล่งจ่ายลบให้กับตัวไอซี ดังแสดงในรูปที่ 5.27(ข) วงจรดังกล่าวนี้ที่ 300°F จะมีแรงเคลื่อนเอาต์พุตออกมา +3.00 โวลต์ ส่วนที่ -50°F จะจ่ายแรงเคลื่อนออกมา -500 มิลลิโวลต์บ่อยครั้งที่ต้องติดตั้งเซ็นเซอร์ไกลออกไปหลายเซนติเมตรจากวงจรอิเล็กทรอนิกส์ที่ต่อร่วม จึงจำเป็นต้องพิจารณาดังต่อไปนี้1. ต้องใช้สายตัวนำที่ต่อไปยังเซ็นเซอร์เพียงสองสายเท่านั้น (ไม่ใช่สามสาย)2. ต้องให้สัญญาณที่ย้อนกลับมาจากเซนเซอร์เป็นกระแสไม่ใช่แรงเคลื่อน ที่เป็นเช่นนี้ก็เพื่อกำจัดผลของค่าความต้านทานที่อนุกรมอยู่ในสาย ซึ่งวงจรในรูปที่ 5.27 (ค) และ (ง) คือการต่อดังที่กล่าวไว้3. ต้องรักษาให้สัมประสิทธิ์อุณหภูมิของตัวต้านทาน 499 ต่ำที่สุดเท่าที่เป็นไปได้ ที่เป็นเช่นนี้ก็เพราะว่า IT ไม่เปลี่ยนแปลงเฉพาะกับแต่ VT เท่านั้น แต่ยังเปลี่ยนแปลงไปกับตัวต้านทาน 499 ที่เกิดจากผลของอุณหภูมิอีกด้วย
ไอซีตระกูล 590/592ถ้าหากต้องการส่งสัญญาณออกเป็นระยะทางไกลๆ และไม่ต้องการให้สัญญาณกระแสมีผลโดยตัวต้านทานที่อนุกรมในสาย ไอซีตระกูล 590 และ 592 ก็เป็นตัวเลือกที่ดีอีกตัวหนึ่ง ในตอนนี้จะยกตัวอย่างของบริษัท Analog Device ที่ให้เอาต์พุตออกมาเป็นแรงเคลื่อน และมีกระแสออกจาก AD590 และ AD592 ดังนี้
เมื่อ T อยู่ในหน่วย °K หรือ
เมื่อ T อยู่ในหน่วย °C AD590 ให้ความแน่นอนเท่ากับ +0.5°C เมื่ออุณหภูมิอยู่ในช่วง -55 ถึง +150°C หากเปรียบเทียบกันแล้ว AD592 จะมีราคาถูกกว่า AD590 ย่านการใช้งานของมันจะอยู่ในช่วง -25 ถึง +105°C แต่มีความแน่นอนเป็น 0.5°C ที่ 25°C ความเป็นเชิงเส้น 0.2°C ในช่วง 0 ถึง 70°C

ที่มา http://pronup.blogspot.com

Zigbee API Mode with AT Mode Project

ในที่สุดดด…

โปรเจ็กต์ครึ่งเทอมแรก ก็น่าจะเริ่มต้นไปได้ด้วยดี

หลังจากที่ ใช้เวลางมกับ Zigbee API Packet มาเป้นเวลา 3 อาทิตย์เต็มๆ

อันนี้คือภาพรวมของระบบที่ออกแบบไว้ เอา Xbee มาทำงานเป็นลักษณะระบบควบคุมอะไรซักอย่าง ซึ่งเป็นลักษณะ Prototype แน่นอนว่า จากในรูปปลายภาคจะต้องมี GUI ซึ่งจะต้องพึ่ง C# อีกแน่นอน = =’

แต่เทอมแรกนี้ ก็เป็นการส่งข้อมูลจาก Zigbee จาก Router ทั้งหลาย ส่งกลับมาที่ Coordinator อ่ะนะ แล้วทำ Packet ที่ได้ เนื่องจากใช้พวกพอร์ต GPIO และ ADC ของ Xbee อ่ะ ก็เลยใช้เวลานานมาก ในการอ่านข้อความ Packet ศึกษาเรื่องนี้ประมาณ 1 อาทิตย์เต็มๆอ่ะนะ

ก็ถ้า Coordinator ได้ข้อมูล Packet ขนาด 22-30 bytes ที่ตัว Zigbee Router แต่ละโหนดส่งมาให้ ก็เขียน ARM7 ให้แปรความหมายต่างๆใน Packet เหล่านั้น ซึ่งจะต้องผ่านขบวนการแปลงเช็คต่างๆ เช่นเช็ค Length หรือพวก Checksum ว่าข้อมูลที่ได้รับมานั้นถูกรึเปล่า แค่ส่วนนี้ก็เสียเวลาไปประมาณ 2-3 วันได้อีกอ่ะนะ

ในที่สุดก็ทำได้ซะที คือ การทดลองจะเป็นลักษณะ Coordinator เชื่อมต่อ Xbee Router 3 ตัว ซึ่งคุยกันแบบ API Command ทั้งหมดอ่ะนะ เวลาได้รับ Package ออกมาแล้วก็ให้มันมาโชว์ที่ ARM7 อ่ะ ซึ่ง xbee ตัวแรกต่อกับ PIR Sensor ของ Inex ต่อกับขา DIO0 ซึ่งถูกตั้งค่าเอาไว้ว่า เมื่อมีการเปลี่ยนแปลง Logic ให้ส่งข้อมูล Packet กลับมาที่ Coordinator ทันที ส่วนอีกอันนึงจะเป็นการต่อกับ R ปรับค่าได้ เปลี่ยนแปลง Analog 0-1.2V ซึ่งจะได้ค่า Analog ตั้งแต่ 0×0000 จนถึง 0x03FF อ่ะนะ ทั้งหมดก็ 10 bit ทำการส่งข้อมูลกลับมาที่ Coordinator ทุกๆ 30 วินาที

รูปข้างบนนี้เป็นส่วนของที่ทำในเทอมนี้อ่ะนะ

สิ่งที่ได้ความรู้เพิ่มขึ้นเกี่ยวกะ ARM ตอนนี้คือ สามารถใช้ไอตัวลำโพงมันได้หละ คือตอนแรกไม่รู้เว้ยว่ามันใช้อะไรยังไง แต่พอปรึกษาอาจารย์ว่าลำโพงแบบนี้ทำงานยังไง ก็ทำจนออกเลย คือต้องใช้ PWM ส่ง Pulse ออกไปที่ตัว IC drive ลำโพงของบอร์ด ARM อ่ะ ซึ่งความถี่ที่มันใช้ Support ในการส่ง Pulse ออกไปนั้นอ่ะ รองรับตั้งแต่ 100Hz จนถึง 10kHz รู้สึกว่าลำโพงแบบนี้ใช้เปิดเพลงพวก MP3 ไม่ได้อ่ะนะ มันเป็นพวกเปียโซ ธรรมดานี่เองแหละ

มาดูชิ้นงานกันดีกว่า

รูปแรกนี่เป็น Coordinator ตัวนึงที่ต่ออยู่กับ ARM7 แสดงผลผ่านจอ LCD ซึ่งก็จะมีข้อมูลส่งมาจาก Xbee โหนดต่างๆอ่ะนะ เห็นได้จากไฟแวบๆ

อุปกรณ์ที่ทำออกมาทั้งหมด สำหรับเทอมนี้

ก็ใช้ Xbee ทั้งหมด 4 ตัวอะนะ มีเยอะกว่านี้ได้จนแน่ๆ 55+

จริงๆมันมีฝาปิดด้านบนอีกนะ รู้สึกว่าอาจารย์บอกว่าปิดได้เลยไม่เป็นไร การลดทอนของมันไม่ค่อยมีผลกับพวกพลาสติดเท่าไหร่ เพราะว่ามันเป็นไดอิเล็กตริกอะนะ สนามไฟฟ้าผ่านได้สบายๆ

อะไรจะเยอะแยะ ขนาดเน้

ถ้าถามว่า ทำออกมายากที่อะไร

บอกได้เลยว่า ยากที่ Zigbee API เนี่ยแหละ แต่พอได้ทำจริงๆแล้วสนุกดีอ่ะนะ

คือข้อมูลที่ได้มามันจะยาวเป็นขบวนรถไฟจริงๆ มีหลายๆส่วน ทั้งเชค ทั้งบอกหน้าที่ ทั้งบอก address ทั้งหมดข้อมูล อะไรแบบนี้ ซึ่งจะเป็นหน้าที่ของ ARM7 ที่จะรับค่าข้อมูลเหล่านี้มาตีความ ปลอกเปลือก ให้เหลือเฉพาะ Raw Data จริงๆ เพื่อที่จะนำไปตีความและแสดงผลอีกทีนึง

ปัญหาต่อไปที่เจอแน่ๆก็คือ เทอมสอง ต้องมีการโต้ตอบระหว่าง GUI กับ ARM กับ Xbee แต่ละโหนด ซึ่งตอนนี้จาก PC ส่งไปคุยกับ Xbee ได้แล้วในรูปแบบ API Packet Frame แต่ว่า ยังคิดไม่ออกว่า จะให้มันเป็นทางผ่าน ส่งไปที่ ARM7 ก่อนยังไง ต้องมีปัญหาในเรื่อง function ของ ARM อ่ะนะ function uart ของมันส่งเป็นพวก char กับ string แต่ที่เราจะส่งเนี่ย เป็นข้อมูล 8 บิตล้วนๆเลย ซึ่งจะส่งในรูปแบบของ เลขฐาน 16 อ่ะ

คงไม่น่ายากมาก อาจจะกังวลไปเอง คงทำได้แหละ ไม่น่ามีปัญหา

คนไทย ไม่ค่อยมีคนทำ API Packet เลย ที่เป็นของ Xbee Series2 หาไม่ได้เลยอ่ะ ต้องไปอ่านจากหลายๆเวบ แต่ก็ไม่ค่อยมีเท่าไหร่ ต้องอ่านเองใน datasheet ของมันเลย เซงมากๆ กว่าจะแกะได้ เหอๆ นั่งงมหลายวันเลย = =’

วันนี้อัพแค่นี้แหละ ไว้ถ้ามีอะไรเพิ่มเติมจะมาอัพเพิ่ม