การใช้งาน Data logger

Download all demo files: datalogger.7z

Contents

บทนำ

ในบทความที่แล้ว กล่าวถึงการอ่านและบันทึกข้อมูลในหน่วยความจำแบบ Flash ที่อยู่ภายใน Microcontroller ซึ่งมีข้อจำกัดคือ ขนาดความจุ (<1MB) จึงไม่เหมาะกับการใช้งานเก็บข้อมูลที่มีจำนวนมากๆ และไม่สามารถถอดเปลี่ยนเพื่อดูข้อมูลด้วยอุปกรณ์ชนิดอื่นๆ ได้

SD Card เป็นหน่วยความจำแบบ Non-volatile กล่าวคือ ข้อมูลยังถูกเก็บรักษาไว้แม้ไม่มีไฟเลี้ยง ซึ่งปัจจุบันนิยมใช้ในอุปกรณ์สำหรับพกพาเช่น สมาร์ทโฟน กล้องดิจิตอล SD Card ที่ขายตามท้องตลาดมีอยู่หลายชนิด หากแบ่งตามช่วงความจุข้อมูลที่แตกต่างกันจะมีอยู่ 3 ชนิด ซึ่งผู้ใช้งานสามารถสังเกตสัญลักษณ์บนอุปกรณ์ได้ ดังรูป 1‑1

รูป 1-1 เครื่องหมายการค้าที่ระบุประเภทของ SD Card

รูป 1-1 เครื่องหมายการค้าที่ระบุประเภทของ SD Card

SD Card ยังมี Class สำหรับบ่งบอกความเร็วในการรับส่งข้อมูล ดังรูป 1‑2 แสดง Class ที่ระบุบนตัวอย่าง SD Card และการใช้งาน SD Card ให้เหมาะสมเช่น การใช้งานเพื่อบันทึกวิดีโอความละเอียดสูง (HD) หรือใช้งานเก็บข้อมูลทั่วไป

รูป 1-2 ข้อมูลทั่วไปบน SD และ MicroSD Card

รูป 1-2 ข้อมูลทั่วไปบน SD และ MicroSD Card

เนื่องจากมีขนาดเล็ก การใช้งาน SD Card จึงนิยมใช้ในระบบสมองกลฝังตัว เพื่อใช้เก็บข้อมูลเป็นจำนวนมาก ช่วงเริ่มต้นจะใช้การติดต่อสื่อสารแบบ SPI เพื่อรับส่งข้อมูลจาก SD Card แต่ในบอร์ด STM32F4DISCOVERY ที่ใช้ไมโครคอนโทรลเลอร์ STM32F407VG เป็นตัวประมวลผล มีส่วนจัดการ Secure digital input/output interface (SDIO) โดยเฉพาะ [1] ซึ่งรองรับการทำงานแบบ 1 บิต (เป็นค่าเริ่มต้น), 4 บิต และ 8 บิต โดยมีสายสัญญาณที่ใช้งานใน SDIO interface แสดงในรูป 1‑3

รูป 1-3 พอร์ตอินพุตเอาน์พุตที่ใช้งานใน SDIO Interface

รูป 1-3 พอร์ตอินพุตเอาน์พุตที่ใช้งานใน SDIO Interface

ซึ่งในแต่ละสายสัญญาณมีหน้าที่ดังนี้

  • ขา SDIO_CMD ใช้สำหรับส่งชุดคำสั่งตามมาตรฐาน CE-ATA ไปยัง SD Card รวมถึงตั้งค่าเริ่มต้นของ SD Card
  • ขา SDIO_CK ใช้สำหรับส่งสัญญาณนาฬิกา ซึ่งมีความถี่ระหว่าง 0MHz ถึง 25 MHz สำหรับ SD Card
  • ขา SDIO_D[7:0] สามารถตั้งค่าเพื่อเลือกขนาดของบัสได้ ถ้าเลือกแบบ 4 บิต ข้อมูลจะรับส่งผ่านสายสัญญาณ SDIO_D[3:0] หากเลือกแบบ 8 บิต ข้อมูลจะรับส่งผ่านสายสัญญาณ SDIO_D[7:0] ถ้าไม่มีการตั้งค่า ข้อมูลจะรับส่งผ่านสายสัญญาณแบบ SDIO_D0 เท่านั้น [2, p. 720]

จากที่กล่าวมา SDIO interface มีสายสัญญาณสำหรับส่งชุดคำสั่งโดยเฉพาะ และมีสายสัญญาณรับส่งข้อมูลหลายบิต ดังนั้น SDIO interface จึงรับส่งข้อมูลได้รวดเร็วกว่าการใช้งาน SPI interface รูป 1‑4 แสดง Pin Layout ของ SD Card ขนาดต่างๆ เมื่อทำการสื่อสารแบบ SDIO interface 4 บิต

รูป 1-4 Pin Layout ของ SD, MiniSD และ MicroSD Card ในโหมดการทำงานแบบ SDIO [3]

รูป 1-4 Pin Layout ของ SD, MiniSD และ MicroSD Card ในโหมดการทำงานแบบ SDIO [3]

การทดลองใช้งาน Data logger เบื้องต้น

บทนำ

Data logger คือ อุปกรณ์ใช้สำหรับเก็บข้อมูลที่ได้จากเซนเซอร์ต่างๆ โดยทั่วไป อุปกรณ์ Data logger สามารถต่อกับเซนเซอร์ได้โดยตรง จากนั้นบันทึกค่าที่อ่านได้รวมถึงเวลาที่บันทึกลงในหน่วยความจำเช่น SD Card ซึ่งผู้ใช้งานสามารถนำข้อมูลที่บันทึกใน Data logger มาอ่านหรือวิเคราะห์ภายหลังได้ โดยใช้คอมพิวเตอร์อ่านข้อมูลจากหน่วยความจำแล้วแสดงผลในรูปแบบต่างๆ ได้ เช่น รูปแบบตาราง (Table) และรูปแบบกราฟ เป็นต้น อุปกรณ์ Data logger บางรุ่น ยังสามารถต่อพ่วงกับคอมพิวเตอร์ได้โดยตรง

รูป 2-1 การประยุกต์ระบบสมองกลฝังตัวให้เป็นอุปกรณ์ Data logger

รูป 2-1 การประยุกต์ระบบสมองกลฝังตัวให้เป็นอุปกรณ์ Data logger

อุปกรณ์ Data logger สามารถใช้งานได้หลายประเภทเช่น ใช้บันทึกอุณหภูมิและรอบของเครื่องยนต์ บันทึกข้อมูลการเคลื่อนที่และตำแหน่ง GPS ของยานพาหนะ บันทึกอุณหภูมิและความชื้นของอากาศ เป็นต้น จะสังเกตได้ว่า การใช้งานอุปกรณ์ Data logger จะเป็นในลักษณะ Stand alone คือ สามารถอ่านสัญญาณจากเซนเซอร์ และบันทึกข้อมูล ณ เวลาจริงลงในหน่วยความจำได้ด้วยตัวเอง โดยไม่ต้องมี Software หรือต่อพ่วงกับคอมพิวเตอร์ จึงง่ายต่อการติดตั้งตามที่ต่างๆ

การประยุกต์ระบบสมองกลฝังตัวให้เป็นอุปกรณ์ Data logger จึงเป็นอีกทางเลือกหนึ่ง เนื่องจากมีขนาดเล็ก และ Microcontroller อย่างตระกูล STM32F4 สามารถรับสัญญาณจากเซนเซอร์ได้หลายทาง เช่น โมดูลแปลงสัญญาณอนาล็อกเป็นดิจิตอล การสื่อสารอนุกรมแบบ UART, I2C และ SPI สามารถประมวลผลข้อมูลดิติจอลให้เป็นข้อความแบบตัวอักษร และมีส่วนการจัดการรับส่งข้อมูลกับ SD Card

ในบทเรียนนี้ จะกล่างถึงวิธีการใช้ Data logger block เพื่อบันทึกค่าแรงดันไฟฟ้าที่อ่านได้จากโมดูล ADC ลงในหน่วยความจำแบบ SD Card รวมถึงการอ่านข้อมูลแบบต่างๆจาก SD Card ในคอมพิวเตอร์ ด้วยโปรแกรม Excel, Notepad++ และ MatLAB เพื่อนำมาแสดงผลแบบตาราง หรือกราฟได้

อุปกรณ์ที่ใช้ในการทดลอง

ในการทดลอง Data logger ผู้ใช้งานต้องมีชุด Socket สำหรับอ่าน MicroSD Card ซึ่งติดตั้งอยู่บนบอร์ด aMG F4 Connect และ aMG CLCD2 แสดงดังรูป 2‑2

รูป 2-2 Socket สำหรับใส่ MicroSD Card ที่ใช้ในการทดลอง

รูป 2-2 Socket สำหรับใส่ MicroSD Card ที่ใช้ในการทดลอง

หากผู้ใช้งานมีชุด Socket สำหรับอ่าน SD Card แยกต่างหาก ผู้ใช้งานสามารถเชื่อมขาต่อกับ STM32F4DISCOVERY ได้ดังรูป 2‑3

รูป 2-3 วงจรสำหรับเชื่อมต่อ MicroSD Card

รูป 2-3 วงจรสำหรับเชื่อมต่อ MicroSD Card

หมายเหตุ Waijung blockset ไม่รองรับการทำงานของ SD Card แบบ SPI ดังนั้น ผู้ใช้งานไม่สามารถใช้ร่วมกับโมดูลอ่านเขียน SD Card ที่ทำงานแบบ SPI Interface ได้

วิธีการใช้งาน Data logger block

ใน Simulink library >> Waijung Blockset >> STM32F4 target >> On Peripheral Chip >> SDIO ประกอบด้วย Blockset สำหรับบันทึกข้อมูลใน SD Card

รูป 2-4 ลักษณะและคุณสมบัติของ Data Logger Block แบบ Ascii

รูป 2-4 ลักษณะและคุณสมบัติของ Data Logger Block แบบ Ascii

ข้อควรระวังและข้อจำกัดการใช้งาน

  1. เหมาะสำหรับงานเก็บข้อมูลที่มีอัตราสุ่มต่ำ เช่นบันทึกข้อมูลทุกๆ 5 วินาที หากต้องการบันทึกข้อมูลด้วยอัตราสุ่มสูงๆ ควรใช้ High speed SD card block ซึ่งจะแนะนำวิธีใช้งาน ในบทถัดไป
  2. Data logger block ไม่มีส่วนหยุดการบันทึกข้อมูล ผู้ใช้งานอาจใช้ Enable subsystem block เพื่อเริ่มต้นหรือหยุดการบันทึกข้อมูล
  3. การถอด SD Card ระหว่างบันทึกข้อมูลสามารถทำได้ แต่ข้อมูลช่วงสุดท้ายอาจจะสูญหายได้

การทดลองใช้งาน Data logger แบบ Ascii

จุดประสงค์

  • เพื่อให้ผู้ใช้งานสามารถเก็บข้อมูลลงใน SD Card ด้วย Data Logger Block ได้
  • เพื่อให้ผู้ใช้งานสามารถเรียกดูข้อมูลจาก SD Card บนคอมพิวเตอร์ได้
รูป 2-5 Simulink Model สำหรับบันทึกข้อมูลใน MicroSD Card

รูป 2-5 Simulink Model สำหรับบันทึกข้อมูลใน MicroSD Card

ตัวอย่างนี้จะทำการทดลองใช้งาน Data logger โดยบันทึกข้อมูลแบบ Ascii ซึ่งเป็นค่าระดับสัญญาณที่อ่านได้จากขา PA5, PA6 และ PA7 ลงใน SD Card ทุกๆ 0.5 วินาที เมื่อ Download Model ลงใน STM32F4DISCOVERY หลอดไฟสีแดงจะกระพริบ (Error) หากไม่ได้ใส่ SD Card

รูป 2-6 วิธีใส่ SD Card ใน Socket ที่ติดตั้งบนบอร์ด aMG F4 Connect

รูป 2-6 วิธีใส่ SD Card ใน Socket ที่ติดตั้งบนบอร์ด aMG F4 Connect

เมื่อผู้ใช้ใส่ SD Card ลงในบอร์ด aMG F4 Connect หรือ aMG CLCD2 ดังรูป 2‑6 เมื่อมีการบันทึกข้อมูลบน SD Card หลอดไฟสีเขียวจะกระพริบ (Success) เมื่อนำ SD Card มาต่อกับ Computer หรือ Laptop แล้วเปิดไฟล์ด้วย Microsoft Excel ผู้ใช้งานสามารถเรียกดูข้อมูลที่เก็บบันทึกดังรูป 2‑7 ข้อควรระวัง ควรปิดไฟเลี้ยงของบอร์ดก่อนใส่หรือถอด SD Card ทุกครั้ง

รูป 2-7ผลการบันทึกข้อมูล โดยแสดงในหน้าต่างของโปรแกรม Microsoft Excel

รูป 2-7 ผลการบันทึกข้อมูล โดยแสดงในหน้าต่างของโปรแกรม Microsoft Excel

อย่างไรก็ตาม เนื่องจากไม่ได้ระบุเวลาที่บันทึกที่แน่นอน ดังนั้น การวิเคราะห์ข้อมูลอาจจะได้ผลที่คาดเคลื่อน ผู้ใช้งานสามารถนำค่าเวลาจริงจากโมดูลนาฬิกาดิจิตอลเช่น วันที่ และมาบันทึกพร้อมกับข้อมูลได้ ดัง Simulink Model ในรูป 2‑8

รูป 2-8 Simulink Model สำหรับเก็บข้อมูลและค่าเวลาจริงใน MicroSD Card

รูป 2-8 Simulink Model สำหรับเก็บข้อมูลและค่าเวลาจริงใน MicroSD Card

Data/time Subsystem Block ใช้สำหรับอ่านค่านาฬิกาจากโมดูลนาฬิกาดิจิตอล DS3231 โดยใช้การสื่อสารอนุกรมแบบ I2C ค่าเวลาจริงที่อ่านได้จะถูกแปลงในรูปแบบข้อความ String

รูป 2-9 Subsystem Block สำหรับอ่านค่าเวลาจากโมดูลนาฬิกาดิจิตอล

รูป 2-9 Subsystem Block สำหรับอ่านค่าเวลาจากโมดูลนาฬิกาดิจิตอล

รูป 2-10 อุปกรณ์ที่ใช้ในการทดลองบันทึกข้อมูลใน SD card และโมดูลนาฬิกาดิจิตอล

รูป 2-10 อุปกรณ์ที่ใช้ในการทดลองบันทึกข้อมูลใน SD card และโมดูลนาฬิกาดิจิตอล

เมื่อนำ SD Card มาต่อกับ Computer หรือ Laptop แล้วเปิดไฟล์ด้วย Microsoft Excel ผู้ใช้งานสามารถเรียกดูข้อมูลที่เก็บบันทึกรูป 2‑11 โดย Column ที่ 1 และ 2 เป็นลักษณะข้อความแสดงวันที่ และเวลา

รูป 2-11 ข้อมูลและค่าเวลาที่บันทึกใน SD Card โดยแสดงในหน้าต่างของโปรแกรม Microsoft Excel

รูป 2-11 ข้อมูลและค่าเวลาที่บันทึกใน SD Card โดยแสดงในหน้าต่างของโปรแกรม Microsoft Excel

การทดลองใช้งาน Data logger ในโหมดความเร็วสูง

บทนำ

การเก็บข้อมูลที่มี Bandwidth สูงเช่น สัญญาณจากสมองและกล้ามเนื้อ หรือสัญญาณจากการกระแทก จำเป็นต้องใช้อัตราสุ่มที่สูง (มากกว่า 1kHz ขึ้นไป) เพื่อให้ได้ข้อมูลที่ครบถ้วนและสามารถนำมาวิเคราะห์ให้ถูกต้อง การใช้งาน Data logger ในโหมดความเร็วสูงจึงมีความจำเป็น แต่การใช้งานในลักษณะนี้ต่างจากการใช้งาน Data logger ทั่วไป เช่น การส่งข้อมูลของ SD Card เอง ต้องเร็วเพียงพอ (Class 4 ขึ้นไป) และมีการใช้หน่วยความจำภายในหรือ RAM ของ Microcontroller เพื่อรองรับการส่งผ่านข้อมูลที่จำนวนมาก และในบางครั้งการเก็บข้อมูลแบบตัวอักษรหรือ Ascii อาจจะไม่เหมาะ เพราะ CPU ต้องใช้เวลาประมวลผลมากขึ้น

ดังนั้น ใน Waijung Blockset ส่วนของ SDIO จึงมี Block พิเศษ สำหรับรองรับการบันทึกข้อมูลใน SD Card ด้วยความเร็วสูง โดยสามารถบันทึกข้อมูลแบบ Ascii และ Binary เช่นกัน ในเบื้องต้นจะแนะนำการติดตั้งโปรแกรม Notepad++ เพื่อให้ผู้ใช้งานสามารถดูข้อมูลในรูปแบบ Binary ได้

การติดตั้งโปรแกรม Notepad++

การดูข้อมูลแบบ Binary File ควรใช้ เช่น Notepad++ ซึ่งผู้ใช้งานสามารถ Download ได้จากhttp://notepad-plus-plus.org/download/v6.6.8.html และติดตั้ง HEX-Editor plugin ซึ่งมีขั้นตอนดังนี้

  • หลังจากติดตั้งโปรแกรม Notepad++ แล้วให้เลือกเมนู Plugins >> Plugin Manager >> Show Plugin Manager ดังรูป 3‑1

    รูป 3-1 การติดตั้ง HEX-Editor plugin บนหน้าต่างโปรแกรม Notepad++

    รูป 3-1 การติดตั้ง HEX-Editor plugin บนหน้าต่างโปรแกรม Notepad++

  • บนหน้าต่าง Plugin Manager ที่ปรากฏ ให้เลือกที่ Tab Available จากนั้นเลือก Hex-Editor แล้วกดปุ่ม Install ดังรูป 3‑2 (ผู้ใช้งานควรเชื่อมต่อ Internet เพื่อ Download Plugins)

    รูป 3-2 วิธีติดตั้ง HEX-Editor.Plguin ในโปรแกรม Notepad++

    รูป 3-2 วิธีติดตั้ง HEX-Editor.Plguin ในโปรแกรม Notepad++

  • หลังจากนั้น โปรแกรมจะทำการติดตั้ง Plugin และ restart ซึ่งผู้ใช้งานสามารถเลือกใช้ HEX-Editor สำหรับดูข้อมูลแบบ Binary ได้

การใช้งานโปรแกรม Notepad++ และ HEX-Editor plugin

  • เมื่อเปิดไฟล์ Binary ในโปรแกรม Notepad++ ข้อมูลจะปรากฏดังรูป 3‑3 ซึ่งบางส่วนไม่สามารถแสดงเป็นตัวอักษรได้

    รูป 3-3 ข้อมูลแบบ Binary บนโปรแกรม Notepad++

    รูป 3-3 ข้อมูลแบบ Binary บนโปรแกรม Notepad++

  • เลือกเมนู Plugins >> HEX-Editor >> view in HEX หรือกดปุ่ม Ctrl+Alt+Shift+h ข้อมูลจะแสดงเป็นตัวเลขฐานสิบหก ดังรูป 3‑4 ข้อมูลจะมี Address กำกับและในแต่ละ Address จะมีข้อมูลอยู่ 8 บิต หรือ 1 ไบต์

    รูป 3-4 ข้อมูลแบบ Binary ในโปรแกรม Notepad++ กับ HEX-Editor plugin

    รูป 3-4 ข้อมูลแบบ Binary ในโปรแกรม Notepad++ กับ HEX-Editor plugin

วิธีการใช้งาน High speed SD Card write block

ใน Simulink library >> Waijung Blockset >> STM32F4 target >> On Peripheral Chip >> SDIO ประกอบด้วย Blockset สำหรับบันทึกข้อมูลใน SD Card แบบความเร็วสูง ซึ่งรวมส่วนแสดงสถานะการทำงานของ SD Card ไว้ในตัว

รูป 3-5 ลักษณะและคุณสมบัติของ High Speed SD Card Block แบบ Ascii

รูป 3-5 ลักษณะและคุณสมบัติของ High Speed SD Card Block แบบ Ascii

การบันทึกข้อมูลจะสิ้นสุดเมื่อ

  1. พื้นที่บน SD Card เต็ม
  2. จำนวนชุดข้อมูลที่เก็บมีค่าเท่ากับ จำนวนชุดข้อมูลที่ต้องการบันทึก
  3. เมื่อสัญญาณอินพุตที่ขา STOP ของ High Speed SD Card Write Block มีค่าเท่ากับ 1

ข้อจำกัดการใช้งาน

  1. ใช้ High Speed SD Card Write Block ได้เพียงหนึ่ง Block ต่อ Model
  2. มีการสงวนพื้นที่ของSD Cardประมาณ250 MB เนื่องจากยังมีข้อผิดพลาดทางด้านเวลามากเกินไป ในระหว่างบันทึกข้อมูลช่วง 250MBแรก
  3. ข้อมูลจะถูกแยกเป็นหลายๆ ไฟล์ หากมีขนาดมากกว่า 99 GB

ข้อควรคำนึงระหว่างการออกแบบ

ส่วนของการตั้งค่าที่เกี่ยวข้อง

  1. ความเร็วการรับส่งข้อมูลของ SD Card (ยกตัวอย่างเช่น 4MBytes/sec, 10MByte/sec หรือมากกว่านั้น)
  2. ขนาดของ Buffer (โดยทั่วไปประมาณ 32k หากใช้มากกว่านั้น ผู้ใช้งานต้องติดตั้ง SDRAM)
  3. อัตราสุ่มการเขียนข้อมูล
  4. ขนาดข้อมูลต่อหนึ่ง Sample

เงื่อนไข

  1. ขนาดของจำนวนข้อมูลที่ต้องการบันทึก ต้องน้อยกว่าขนาดของ Buffer
  2. ความเร็วในการเขียนข้อมูล ต้องน้อยกว่าความเร็วการรับส่งข้อมูลของ SD Card

ตัวอย่างการคำนวณความเร็วในการบันทึกข้อมูล

หากต้องการบันทึกข้อมูลที่ประกอบด้วย ค่า Counter ขนาด 32 บิต ข้อมูลจากการอ่านค่าแรงดันไฟฟ้า ADC 2 ช่องสัญญาณ ดังนั้น ชุดข้อมูลจะมีขนาด 8 ไบต์ (4 ไบต์ + 2 ไบต์ + 2 ไบต์) และใช้เวลาบันทึกข้อมูล 50 ไมโครวินาที ต่อหนึ่ง sample ดังนั้น ความเร็วในการบันทึกข้อมูล จะเท่ากับ 8 ไบต์ ต่อ 50 ไมโครวินาที หรือ 160000 ไบต์ต่อวินาที

การคำนวณขนาดของ File

ให้ N คือ จำนวนข้อมูลที่ต้องการบันทึก ดังนั้น ขนาดของ File = N x Record Size

การคำนวนเวลาที่ต้องใช้บันทึก

ให้ N คือ จำนวนข้อมูลที่ต้องการบันทึก ดังนั้น เวลาที่ต้องใช้บันทึก (วินาที) = N x Sample time

ส่วนแสดงสถานะ

  1. หลอดไฟแสดงสถานะ Busy จะติดเมื่อเริ่มกำหนดค่าเริ่มต้นของ Card โดยทำการ Format และเตรียมพื้นที่สำหรับบันทึกข้อมูล
  2. หลอดไฟแสดงสถานะ Progress จะกระพริบด้วยความถี่ 5 Hz ระหว่างบันทึกข้อมูล และกระพริบด้วยความถี่ 25 Hz เมื่อบันทึกข้อมูลเสร็จสิ้น โดยผู้ใข้งานสามารถถอด Card ออกได้
  3. หลอดไฟแสดงสถานะ Error จะติด เมื่อมี Error ระหว่างบันทึกข้อมูล

เมื่อเสร็จสิ้นการบันทึกข้อมูล ผู้ใช้งานสามารถดูรายละเอียดการบันทึกข้อมูล รวมถึง Error ต่างๆ ใน MSG.TXT ใน SD Card ได้

ในส่วนของ SDIO จะมี Block ที่เกี่ยวข้องกับการบันทึกข้อมูลลงใน SD Card อยู่ 2 ชุด ได้แก่ Data Logger กับ High speed SD Card write ซึ่งมีข้อแตกต่างด้านคุณสมบัติการใช้งาน สามารถสรุปได้ดังตาราง 3‑1

ข้อแตกต่างระหว่าง Data Logger กับ High speed SD card write

 Data Logger High speed SD card write
อัตราเก็บข้อมูลสูงสุด2Hz หรือบันทึกทุกๆ 0.5 วินาที1MHz หรือบันทึกทุกๆ 1 ไมโครวินาที
ชนิดของ SD Card ที่ใช้ชนิดไหนก็ได้Class 4 ขึ้นไป
กำหนดชื่อ File กำหนดได้กำหนดไม่ได้
ชนิดของ File .csv หรือ .bin.txt หรือ .bin
ชนิดของข้อมูลAscii, Binary, StringAscii, Binary
หยุดการเขียนข้อมูล ทำไม่ได้โดยตรง ส่งสัญญาณที่ขา STOP

การทดลองใช้งาน Data logger แบบ Ascii โหมดความเร็วสูง

จุดประสงค์

  • เพื่อให้ผู้ใช้งานสามารถเก็บข้อมูลแบบ ASCII ลง SD Card โดยใช้ Data logger โหมดความเร็วสูง
  • เพื่อให้ผู้ใช้งานสังเกตและเข้าใจสัญญาณไฟแสดงสถานะ ในขณะเก็บข้อมูลได้
  • เพื่อให้ผู้ใช้งานสามารถคำนวณเวลาที่ใช้ในการเก็บข้อมูลได้
รูป 3-6 Simulink Model สำหรับการทดลองบันทึกข้อมูลใน SD Card ด้วยความเร็วสูง

รูป 3-6 Simulink Model สำหรับการทดลองบันทึกข้อมูลใน SD Card ด้วยความเร็วสูง

รูป 3-7 ตำแหน่งหลอดไฟ LED สำหรับแสดงสถานะของ SD card

รูป 3-7 ตำแหน่งหลอดไฟ LED สำหรับแสดงสถานะของ SD card

เมื่อใส่ SD Card ใน Socket แล้ว Download Model ลงใน STM32F4DISCOVERY ผู้ใช้งานสามารถสังเกตจากไฟแสดงสถานะในรูป 3‑7 และผลการบันทึกข้อมูลได้ ดังนี้

  1. เมื่อเริ่มการเก็บข้อมูล LED Busy (สีฟ้า) จะติดและกระพริบในระหว่างที่มีการกำหนดค่าตั้งต้นของ SD Card ซึ่งใช้เวลาประมาณ 10 วินาที ไปจนถึง ไม่กี่นาที ขึ้นอยู่กับ จำนวนข้อมูลที่ต้องการจะบันทึก
  2. ระหว่างทำการเขียนข้อมูล หลอดไฟ LED progress (สีเขียว) จะกระพริบด้วยความถี่ 10 Hz (ติด1 วินาที ดับ 0.1 วินาที)
  3. เมื่อการเก็บข้อมูลเสร็จสิ้น หลอดไฟ LED progress (สีเขียว) จะกระพริบด้วยความถี่ 25 Hz (ติด 2 วินาที ดับ 2 วินาที) ซึ่งผู้ใช้งานสามารถถอด SD Card ออกได้ หมายเหตุ เวลาที่ใช้ในการเก็บข้อมูลสำหรับตัวอย่างนี้ (หลังจาก Initialize) ประมาณ 60000*100e-6 = 6 วินาที
  4. เมื่อนำ Card มาดูข้อมูลใน Computer หรือ Laptop ผู้ใช้งานสามารถเปิด File MSG.txt เพื่อดูข้อความยืนยันการบันทึกข้อมูล รูปแบบการบันทึกข้อมูล จำนวนชุดข้อมูลที่บันทึก รวมถึงอัตราสุ่มในการบันทึกข้อมูล

    รูป 3-8 ข้อความใน MSG.TXT หลังจากบันทึกข้อมูลเสร็จสิ้น

    รูป 3-8 ข้อความใน MSG.TXT หลังจากบันทึกข้อมูลเสร็จสิ้น

  1. ผู้ใช้งานสามารถดูข้อมูลที่บันทึกไว้ โดยอยู่ใน File ชื่อ txt (ผู้ใช้งานไม่สามารถกำหนดชื่อ File ได้)
    รูป 3-9 ข้อมูลที่บันทึก ใน Data0.txt

    รูป 3-9 ข้อมูลที่บันทึก ใน Data0.txt

    รูป 3-10 ข้อมูลที่บันทึก ใน Data0.txt ส่วน

    รูป 3-10 ข้อมูลที่บันทึก ใน Data0.txt ส่วน

  2. ในกรณีที่ผู้ใช้งานถอด SD Card ก่อนสัญญาณไฟกระพริบ 0.25 Hz จะมีข้อความในไฟล์ MSG.txt แสดงดังรูป 311

    รูป 3-11 ข้อความใน MSG.TXT ในกรณีที่มีการผิดพลาดระหว่างบันทึกข้อมูล

    รูป 3-11 ข้อความใน MSG.TXT ในกรณีที่มีการผิดพลาดระหว่างบันทึกข้อมูล

การทดลองใช้งาน Data logger แบบ Binary โหมดความเร็วสูง

จุดประสงค์

  • เพื่อให้ผู้ใช้งานสามารถเก็บข้อมูลแบบ Binary ลง SD Card โดยใช้ Data logger โหมดความเร็วสูง
  • เพื่อให้ผู้ใช้เข้าใจรูปแบบการเก็บข้อมูลแบบ Binary ได้
รูป 3-12 Simulink Model สำหรับการทดลองบันทึกข้อมูลแบบ Binary ใน SD Card ด้วยความเร็วสูง

รูป 3-12 Simulink Model สำหรับการทดลองบันทึกข้อมูลแบบ Binary ใน SD Card ด้วยความเร็วสูง

เมื่อใส่ SD Card ใน Socket แล้ว Download Model ลงใน STM32F4DISCOVERY ผู้ใช้งานสามารถดูรายละเอียดการบันทึกข้อมูลจากไฟล์ MSG.txt ดังรูป 3-13 ซึ่งมีรายละเอียดที่สำคัญเช่น รูปแบบข้อมูล Binary ที่บันทึก จำนวนข้อมูลที่บันทึก 1 ล้านชุด และเวลาในการเก็บข้อมูลแต่ละชุดทุกๆ 10 ไมโครวินาที เป็นต้น

รูป 3-13 ข้อความใน MSG.TXT หลังจากบันทึกข้อมูลแบบ Binary เสร็จสิ้น

รูป 3-13 ข้อความใน MSG.TXT หลังจากบันทึกข้อมูลแบบ Binary เสร็จสิ้น

สำหรับการเรียกดูข้อมูลแบบ Binary ที่บันทึกไว้ ผู้ใช้งานควรใช้โปรแกรม Notepad++ ที่ HEX-Editor plugin ดังรูป 3-14 ซึ่งรูปแบบการบันทึกข้อมูล Binary ในแต่ละชุด เป็นค่าที่ได้จาก ADC ทั้งหมด 4 ช่องสัญญาณ ในแต่ละช่องสัญญาณมีความละเอียด 16 บิต หรือ 2 ไบต์ (รวมเป็น 8 ไบต์) และ Index ขนาด 32 บิต (4 ไบต์) สำหรับระบุชุดข้อมูล

รูป 3-14 รูปแบบข้อมูล Binary ที่บันทึกได้ในช่วงแรก

รูป 3-14 รูปแบบข้อมูล Binary ที่บันทึกได้ในช่วงแรก

ผู้ใช้งานสามารถสังเกตข้อมูลชุดสุดท้ายที่บันทึกได้จาก index ที่ 0x0F423F หรือ 999999 แสดงดังรูป 3-15

รูป 3-15  ข้อมูล Binary ชุดสุดท้ายที่บันทึกได้

รูป 3-15 ข้อมูล Binary ชุดสุดท้ายที่บันทึกได้

idea_rzW26ชวนคิด จากตัวอย่าง ขนาดของ File มีค่าเท่าไร
N = 999,999 และขนาดของข้อมูลต่อหนึ่ง Sample = 12 ไบต์ ดังนั้น ขนาดของไฟล์มีค่าเท่ากับ 12 x 999,999 = 119,999,988 ไบต์ หรือ 11.44 เมกกะไบต์
หมายเหตุ 1 kB = 1024 Byte, 1MB = 1024 x 1024 = 1,048,576 Byte

การทดลองหยุดบันทึกข้อมูลด้วย Manual STOP

จุดประสงค์

  • เพื่อให้ผู้ใช้งานสามารถหยุดการบันทึกข้อมูล ด้วยสวิตซ์ปุ่มกดได้
  • เพื่อให้ผู้ใช้งานสามารถใช้งานสามารถปรับจำนวนชุดข้อมูลที่ต้องการบันทึกได้

ในกรณีที่ต้องการหยุดการเก็บบันทึกข้อมูล ผู้ใช้งานสามารถทำได้โดยส่งค่า เช่น สัญญาณอินพุตภายนอกจาก Digital Input Block ไปยังพอร์ต STOP ของ High Speed SD Card write block

รูป 3-16 Simulink model สำหรับการทดลองเก็บข้อมูลใน SD Card และหยุดด้วยสวิตซ์ปุ่มกด

รูป 3-16 Simulink model สำหรับการทดลองเก็บข้อมูลใน SD Card และหยุดด้วยสวิตซ์ปุ่มกด

เมื่อใส่ SD Card แล้ว Download Model ลงใน STM32F4DISCOVERY เนื่องจากมีการเก็บข้อมูลถึง 1 พันล้านชุด บอร์ดจะอยู่ในสถานะ Busy นานขึ้น จากนั้นไฟแสดงสถานะ Progress จะกระพริบด้วยความถี่ 10 Hz ซึ่งผู้ใช้งานสามารถกดปุ่มสีฟ้า (User Button) ที่อยู่บนบอร์ด STM32F4DISCOVERY ซึ่งต่อกับขา PA0 เพื่อหยุดการบันทึกข้อมูลได้ในช่วงนี้

หลังจากนั้น ไฟแสดงสถานะ Progress จะกระพริบด้วยความถี่ 0.25 Hz ผู้ใช้งานสามารถถอด SD Card เพื่อดูข้อมูลที่เก็บได้ เช่น รูป 3‑17 อย่างไรก็ตาม การหยุดเก็บข้อมูลด้วย Manual STOP จะทำให้ผู้ใช้งานไม่สามารถดูรายละเอียดการบันทึกในไฟล์ MSG.txt ได้

รูป 3-17 ผลการบันทึกข้อมูล หลังจากหยุดด้วย Manual STOP

รูป 3-17 ผลการบันทึกข้อมูล หลังจากหยุดด้วย Manual STOP

อย่างตัวอย่างที่ผ่านมาจะเห็นได้ว่า ผู้ใช้งานไม่สามารถกำหนดจำนวนชุดข้อมูลที่แน่นอนได้ (เพราะขึ้นอยู่กับช่วงเวลาที่กดสวิตซ์นั่นเอง) รูป 3‑18 แสดงวิธีการประยุกต์ใช้ค่า Index ที่ได้จาก Counter Block (ชื่อ RecordID) มาเทียบกับจำนวนชุดข้อมูลที่ตั้งไว้ ซึ่งผู้ใช้งานสามารถกำหนดได้หลายๆ ค่า แล้วเลือกด้วยการปรับ DIP Switch

รูป 3-18 Simulink model สำหรับการทดลองเก็บข้อมูลใน SD Card และหยุดด้วย DIP Switch

รูป 3-18 Simulink model สำหรับการทดลองเก็บข้อมูลใน SD Card และหยุดด้วย DIP Switch

เมื่อใส่ SD Card แล้ว ให้ทำการตั้งค่า DIP Switch ไปยังตำแหน่งที่ต้องการ เพื่อระบุจำนวนชุดข้อมูลที่บันทึก จากตัวอย่าง จำนวนชุดข้อมูลที่บันทึกขึ้นอยู่กับตำแหน่งของ DIP Switch ดังนี้

ข้อแตกต่างระหว่าง Data Logger กับ High speed SD card write

 Data Logger High speed SD card write
อัตราเก็บข้อมูลสูงสุด2Hz หรือบันทึกทุกๆ 0.5 วินาที1MHz หรือบันทึกทุกๆ 1 ไมโครวินาที
ชนิดของ SD Card ที่ใช้ชนิดไหนก็ได้Class 4 ขึ้นไป
กำหนดชื่อ File กำหนดได้กำหนดไม่ได้
ชนิดของ File .csv หรือ .bin.txt หรือ .bin
ชนิดของข้อมูลAscii, Binary, StringAscii, Binary
หยุดการเขียนข้อมูล ทำไม่ได้โดยตรง ส่งสัญญาณที่ขา STOP

ชวนคิด idea_rzW26จากตาราง 3‑2 หากข้อมูล 1 ชุดมีขนาด 12 ไบต์ จงประมาณขนาดของไฟล์ที่บันทึกได้

การใช้โปรแกรม MatLAB อ่าน Binary File

บทนำ

การเปิดไฟล์ .Bin บนโปรแกรม Notepad++ อาจเกิดปัญหาเรื่อง Memory ของโปรแกรม ในกรณีที่ไฟล์ที่ต้องการเปิดมีขนาดใหญ่มาก (> 1GB) การใช้โปรแกรม MatLAB อ่าน .Bin File ขนาดใหญ่ได้และมีข้อดี คือ สามารถแปลงข้อมูลออกเป็นตัวเลขฐานสิบ แล้วแบ่งข้อมูลให้เป็น Matrix หรือ Array ได้ ซึ่งผู้ใช้งานสามารถใช้งานต่อยอดได้ง่าย เช่น การวาดกราฟแสดงผล

ใน Matlab มีชุดคำสั่งใช้สำหรับอ่านข้อมูลจาก Binary ไฟล์ ซึ่งผู้ใช้งานสามารถอ่านเพิ่มเติมได้ที่ http://www.mathworks.com/help/matlab/low-level-file-i-o.html ตัวอย่างการอ่านข้อมูล DATA0.BIN ที่มีขนาด 1.11 GB ด้วยโปรแกรม MatLAB มีขั้นตอนแสดงดังรูป 4-1

รูป 4-1 หน้าต่างโปรแกรม Matlab และชุดคำสั่งสำหรับอ่านข้อมูลใน .bin ไฟล์

รูป 4-1 หน้าต่างโปรแกรม Matlab และชุดคำสั่งสำหรับอ่านข้อมูลใน .bin ไฟล์

การอ่านข้อมูล Binary ไฟล์ต้องใช้ชุดคำสั่งที่จำเป็น 2 ชุดคือ fopen() และ fread() ในบรรทัดแรก FileID = fopen(‘data0.bin’); เป็นการเรียกชื่อ .bin File ที่ต้องการอ่านใน MatLAB โดยค่าที่ได้จะเก็บในตัวแปรชื่อ FileID ในส่วนบรรทัดที่สอง A = fread(FileID,[6,10000000],’uint16’) เป็นการอ่านจาก data0.bin แล้วแปลงค่าอ่านได้ให้อยู่ในรูปแบบ uint16 และจัดอยู่ในรูป Matrix [6 x 10000000] แล้วเก็บในตัวแปร A นั้นหมายถึง เลือกอ่านข้อมูลเป็นจำนวน 10 ล้านชุด แต่ละชุดมี 6 ค่า (จากรูป 3 14 ข้อมูลหนึ่งชุด ประกอบด้วยค่าที่ได้จาก ADC 4 ช่องสัญญาณ และ index ขนาด 32 บิต) การเลือกชนิดข้อมูลควรเลือกให้สอดคล้องกับชนิดของข้อมูลที่บันทึกใน SD Card มิฉะนั้นค่าที่อ่านได้จะคาดเคลื่อน

รูป 4-2 คำอธิบายชุดคำสั่ง fopen และ fread สำหรับอ่านข้อมูลใน Binary File

รูป 4-2 คำอธิบายชุดคำสั่ง fopen และ fread สำหรับอ่านข้อมูลใน Binary File

ข้อมูลที่อ่านได้จากคำสั่ง fread จะเก็บในตัวแปร A ซึ่งผู้ใช้งานสามารถนำมาวิเคราะห์ หรือแสดงผลทางกราฟโดยใช้คำสั่ง Matlab plot ดังรูป 4-3 เป็นต้น

รูป 4-3 กราฟจากข้อมูลที่อ่านได้จาก ADC ช่องสัญญาณที่ 4

รูป 4-3 กราฟจากข้อมูลที่อ่านได้จาก ADC ช่องสัญญาณที่ 4

ตัวอย่างการประยุกต์ใช้งาน

จุดประสงค์

  • เพื่อให้ผู้ใช้งานสามารถเก็บข้อมูล Binary รูปแบบต่างๆ ลง SD Card โดยใช้ Data logger โหมดความเร็วสูง
  • เพื่อให้ผู้ใช้งานสามารถอ่านและจัดการข้อมูล Binary รูปแบบต่างๆ ด้วยโปรแกรม MatLab ได้

เมื่อ Download model ดังรูป 4 5 ลงในบอร์ด STM32F4DISCOVERY บอร์ดจะทำการบันทึกค่าแรงดันไฟฟ้าที่อ่านได้จากโมดูล ADC ช่องสัญญาณที่ 4 ถึง 7 ทุกๆ 10 ไมโครวินาที โดยค่าที่ได้จากช่องสัญญาณที่ 4 และ 5 จะทำการแปลงหน่วยจากเลขฐานสิบหกหรือ Raw Data ให้เป็นค่าแรงดัน (วิธีการแปลงหน่วยอ่านได้จาก ที่นี่) ส่วนค่าที่ได้จากช่องสัญญาณที่ 6 และ 7 จะบันทึกแบบ Raw Data.

รูป 4-4 Simulink model สำหรับบันทึกข้อมูล Binary ในรูปแบบต่างๆ

รูป 4-4 Simulink model สำหรับบันทึกข้อมูล Binary ในรูปแบบต่างๆ

เมื่อบันทึกครบ 1,000,000 ค่า ผู้ใช้งานสามารถถอด SD Card ออกจาก Socket และดูข้อมูลโดยใช้ โปรแกรม Notepad++ ดังรูป 4-5

รูป 4-5 ผลการบันทึกข้อมูล

รูป 4-5 ผลการบันทึกข้อมูล

ข้อมูลหนึ่งชุด ประกอบด้วยค่าที่อ่านได้จาก AN4 และ AN5 จะบันทึกแบบ single (ข้อมูลขนาด 4 ไบต์) ค่าที่อ่านได้จาก AN6 และ AN7 จะบันทึกแบบ uint16 (ข้อมูลขนาด 2 ไบต์) และค่าที่ได้จาก RecordID block จะบันทึกแบบ uint32 (ข้อมูลขนาด 4 ไบต์)
เนื่องจากข้อมูลหนึ่งชุดมีค่าที่บันทึกในลักษณะที่แตกต่างกัน รูป 4-6 แสดงตัวอย่างชุดคำสั่ง MatLAB เพื่ออ่านข้อมูลแบบต่างๆ จาก .bin ไฟล์ และเก็บในตัวแปร AN4, AN5, AN6, AN7 และ n (ค่าแรงดันจากช่องสัญญาณที่ 4 ถึง 7 และค่าจาก RecordID ตามลำดับ)

รูป 4-6 ชุดคำสั่งสำหรับอ่านข้อมูลใน .bin ไฟล์

รูป 4-6 ชุดคำสั่งสำหรับอ่านข้อมูลใน .bin ไฟล์

เมื่อผู้ใช้งานพิมพ์ชุดคำสั่งต่อไปนี้ ใน MatLAB command window เพื่อใช้สำหรับวาดกราฟ 4 ชุด โดยแสดงค่าแรงดันที่อ่านได้จากช่องสัญญาณที่ 4 ถึง 7 เทียบกับหน่วยเวลา
subplot(2,2,1),plot(n*1e-6, AN4),grid <กด Enter>
subplot(2,2,2),plot(n*1e-6, AN5),grid <กด Enter>
subplot(2,2,3),plot(n*1e-6, AN6),grid <กด Enter>
subplot(2,2,4),plot(n*1e-6, AN7),grid <กด Enter>

จากนั้นโปรแกรม MatLAB จะแสดงกราฟดังรูป 4-7 โดยแกนนอนของกราฟ มีหน่วยเป็นวินาที ซึ่งได้จากการนำค่า RecordID x Sample time

รูป 4-7 กราฟจากข้อมูลที่อ่านได้จาก ADC ช่องสัญญาณที่ 4 ถึง 7

รูป 4-7 กราฟจากข้อมูลที่อ่านได้จาก ADC ช่องสัญญาณที่ 4 ถึง 7

เอกสารอ้างอิง

  1. STMicroelectronics, “STM32 F407xx Datasheet-production data [Online],” 2013.
  2. STMicroelectronics, “User manual: STM32 ST-LINK Utility software description [Online],” 2014.
  3. Wikipedia, “Secure Digital,” [Online]. Available: http://en.wikipedia.org/wiki/Secure_Digital.STMicroelectronics, “RM0090: STM32F40xxx Reference Manual [Online],” 2013.
  4. http://www.amazon.com/gp/feature.html?ie=UTF8&docId=1000633771
  5. Wisco Industrial Instruments, “Data Logger Technical Knowledge,” 2013. [Online]. Available: http://www.wisco.co.th/main/sites/default/files/articles/Logger_Knowledge_0.pdf.
  6. http://www.mathworks.com/help/matlab/low-level-file-i-o.html
  7. http://notepad-plus-plus.org