การใช้งานพอร์ตสื่อสาร SPI

download all demo files:SPI.7z

บทนำ

รู้จักกับ SPI

SPI หรือ Serial Peripheral Interface เป็นวิธีการสื่อสารอนุกรมแบบ Synchronous อีกรูปแบบหนึ่ง ซึ่งทำงานในรูปแบบที่ให้อุปกรณ์ตัวหนึ่งทำหน้าที่เป็น Master ในขณะที่อีกตัวหนึ่งทำหน้าที่เป็น Slave และสามารถส่งข้อมูลในโหมด Full-duplex นั่นหมายความว่า สัญญาณสามารถส่งหากันได้ระหว่าง Master และ Slave ได้อย่างต่อเนื่อง รูปแบบข้อมูลการสื่อสารหรือ Protocol ของแบบ SPI นี้ ไม่ได้มาตรฐานกำหนดตายตัว ว่าข้อมูลที่ส่งหากันต้องอยู่ในรูปแบบหรือ Format แบบไหน เป็นการคิด Protocol การสื่อสารกันเอาเอง หรือดูจาก Datasheet ของอุปกรณ์

ยกตัวอย่างอุปกรณ์ที่ใช้การสื่อสารแบบ SPI ได้แก่

    • โมดูลแปลงสัญญาณอนาล็อกเป็นดิจิตอล และโมดูลแปลงสัญญาณดิจิตอลเป็นอนาล็อก
    • การติดต่อกับหน่วยความจำ EEPROM และ FLASH
    • โมดูลนาฬิกาดิจิตอล หรือ Real Time Clock : RTC
    • เซ็นเซอร์วัดอุณหภูมิ และความดัน

อุปกรณ์อื่น ๆ เช่น signal mixer , Potentiometer , LCD controller , USART , CAN controller , USB controller , Amplifier

รูป 1-1  การเชื่อมต่อการสื่อสารแบบ SPI ระหว่างอุปกรณ์ Master – Slave

รูป 1-1 การเชื่อมต่อการสื่อสารแบบ SPI ระหว่างอุปกรณ์ Master – Slave

รูป 1‑1 แสดงการเชือมต่อการสื่อสารแบบ SPI ระหว่างอุปกรณ์ Master – Slave โดยมีสายสัญญาณ สี่เส้น หรือ Four Wire ประกอบด้วย

  • SCLK (Serial Clock) ใช้ส่งสัญญาณนาฬิกาจากอุปกรณ์ Master ไปยังอุปกรณ์ Slave เพื่อกำหนดจังหวะการรับส่งข้อมูล
  • MOSI (Master Out Slave In) ใช้ส่งข้อมูลจากอุปกรณ์ Master ไปยังอุปกรณ์ Slave
  • MISO (Master In Slave Out) ใช้รับข้อมูลจากอุปกรณ์ Slave
  • \SS (Slave Select) หรือ ขา CS (Chip Select) ใช้ส่งสัญญาณ Low ไปยังอุปกรณ์ Slave ที่ต้องการรับส่งข้อมูล

อุปกรณ์ Master ทำหน้าที่เป็นตัวควบคุมการสื่อสารทั้งหมด โดยควบคุมการสื่อสารตามสัญญาณนาฬิกา และสายสัญญาณ SS ตัวมาสเตอร์จะเป็นตัวที่ตัดสินใจเลือก รับ หรือ ส่งข้อมูลไปยังอุปกรณ์ Slave

สัญญาณเส้น SS หรือ Slave select ในกรณี ที่มีตัว Slave มากกว่า 1 ตัว โดยการทำให้เส้น SS มีระดับสัญญาณเป็น Low เมื่อต้องการติดต่อกับ Slave ตัวใด จากรูป 1‑2 หากต้องการติดต่อสื่อสารกับอุปกรณ์ Slave ตัวใด ก็เพียงทำให้สัญญาณ SS ของ Slave ตัวนั้น มีระดับสัญญาณเป็น Low

รูป 1-2 การเชื่อมต่อการสื่อสารแบบ SPI ระหว่างอุปกรณ์ Master – Slave หลายตัว

รูป 1-2 การเชื่อมต่อการสื่อสารแบบ SPI ระหว่างอุปกรณ์ Master – Slave หลายตัว

เมื่อเปรียบเทียบระหว่างการสื่อสาร SPI กับ I2C เป็นการสื่อสารอนุกรมแบบ Synchronous เหมาะสำหรับการสื่อสารข้อมูลความเร็วต่ำ เช่น หน่วยความจำ EEPROM หรือโมดูลนาฬิกาดิจิตอล

ข้อดีของการสื่อสารแบบ SPI คือ สามารถสื่อสารแบบ Full Duplex กล่าวคือสามารถรับและส่งข้อมูลได้พร้อมๆ กัน เพราะมีสายสัญญาณรับและส่งข้อมูลโดยเฉพาะ รูปแบบการสื่อสารของ SPI ไม่ต้องกำหนด Address เพื่อระบุอุปกรณ์ที่ต้องการสื่อสารเหมือน I2C เนื่องจากใช้สายสัญญาณ SS เป็นตัวควบคุม จึงมีอัตราการรับส่งข้อมูลสูงกว่า I2C และเหมาะสำหรับการรับส่งข้อมูลแบบต่อเนื่อง หรือ Streaming อย่างไรก็ตาม หากมีอุปกรณ์ Slave หลายตัวดังรูป การสื่อสารแบบ SPI ต้องใช้สายสัญญาณมากกว่า I2C

การใช้งาน SPI Blockset

ใน Waijung SPI Blockset ประกอบด้วย SPI Master Setup Block แสดงในรูป 1‑3 ทำหน้าที่ตั้งค่า Register ต่างๆ ที่เกี่ยวกับการสื่อสาร SPI ได้แก่ เลือกใช้งาน SPI Module ใน STM32F4DISCOVERY ได้ถึง 3 ชุด เลือกใช้งานขา MOSI/MISO/SS และตั้งค่าความถี่สัญญาณนาฬิกาในขา SCLK

รูป 1-3 ลักษณะและการตั้งค่าของ SPI Master Setup Block

รูป 1-3 ลักษณะและการตั้งค่าของ SPI Master Setup Block

การสื่อสารแบบ SPI ไม่มีรูปแบบที่แน่นอน ดังนั้นกำหนดรูปแบบการสื่อสารของอุปกรณ์ Master ให้ตรงกับอุปกรณ์ Slave โดยมีรายละเอียดที่สำคัญ ดังนี้

  1. กำหนดทิศทางการสื่อสาร Full Duplex (รับส่งข้อมูลได้พร้อมกัน) Half Duplex_Tx ส่งข้อมูลอย่างเดียว Half Duplex_Rx รับข้อมูลอย่างเดียว
  2. รูปแบบการรับส่งข้อมูล 8บิต หรือ 16บิต โดยสามารถเลือกส่งบิตนัยะสำคัญสูงสุด (MSB) หรือ บิตนัยะสำคัญต่ำสุด (LSB) ก่อน
  3. ลักษณะของขอบสัญญาณนาฬิกา เพื่อกำหนดจังหวะการรับ-ส่งข้อมูล สามารถเลือกได้สี่แบบ ดังนี้

Clock polarity Low และ Clock phase 1st edge (CPOL_Low/CPHA_1Edge) ในสถานะเริ่มต้น สัญญาณนาฬิกาจะอยู่ในสถานะ Low ระบบจะเริ่มอ่านข้อมูลบิตแรก เมื่อพบขอบแรกของสัญญาณซึ่งเป็นลักษณะขอบขาขึ้น ดังรูป 1‑4

รูป 1 4 การรับส่งข้อมูลเมื่อเลือก CPOL = 0 และ CPHA = 0 [1, p. 800]

รูป 1-4 การรับส่งข้อมูลเมื่อเลือก CPOL = 0 และ CPHA = 0 [1, p. 800]

Clock polarity Low และ Clock phase 2st edge (CPOL_Low/CPHA_2Edge) ระบบจะเริ่มอ่านข้อมูลบิตแรก เมื่อพบขอบที่สองของสัญญาณซึ่งเป็นลักษณะขอบขาลง ดังรูป 1‑5

รูป 1 5 การรับส่งข้อมูลเมื่อเลือก CPOL = 0 และ CPHA = 1 [1, p. 800]

รูป 1-5 การรับส่งข้อมูลเมื่อเลือก CPOL = 0 และ CPHA = 1 [1, p. 800]

Clock polarity High และ Clock phase 1st edge (CPOL_High/CPHA_1Edge) ในสถานะเริ่มต้น สัญญาณนาฬิกาจะอยู่ในสถานะ High ระบบจะเริ่มอ่านข้อมูลบิตแรก เมื่อพบขอบแรกของสัญญาณซึ่งเป็นลักษณะขอบขาลง ดังรูป 1‑6

รูป 1-6 การรับส่งข้อมูลเมื่อเลือก CPOL = 1 และ CPHA = 0 [1, p. 800]

รูป 1-6 การรับส่งข้อมูลเมื่อเลือก CPOL = 1 และ CPHA = 0 [1, p. 800]

Clock polarity High และ Clock phase 2st edge (CPOL_High/CPHA_2Edge) ระบบจะเริ่มอ่านข้อมูลบิตแรก เมื่อพบขอบที่สองของสัญญาณซึ่งเป็นลักษณะขอบขาขึ้น ดังรูป 1‑7

รูป 1 7 การรับส่งข้อมูลเมื่อเลือก CPOL = 1 และ CPHA = 1 [1, p. 800]

รูป 1-7 การรับส่งข้อมูลเมื่อเลือก CPOL = 1 และ CPHA = 1 [1, p. 800]

SPI Master Read/Write Block แสดงในรูป 1‑8 ทำหน้าที่รับหรือส่งข้อมูล ไปยังอุปกรณ์ Slave ผ่าน SPI โดยให้ STM32F4DISCOVERY เป็นอุปกรณ์ Master โดยผู้ใช้งานสามารถกำหนดจำนวนไบต์ที่ต้องการรับส่ง

รูป 1 8 ลักษณะและการตั้งค่าของ SPI Master Read/Write Block

รูป 1-8 ลักษณะและการตั้งค่าของ SPI Master Read/Write Block

 ตัวอย่างการใช้งาน DAC ผ่านการสื่อสาร SPI

ในบทนี้แสดงวิธีการใช้งานการสื่อสารแบบ SPI เพื่อควบคุมอุปกรณ์ต่างๆ โดยตัวอย่างนี้ใช้ไอซี LTC1661  ของบริษัท Linear Technology โมดูลแปลงสัญญาณดิจิตอลขนาด 10 บิตเป็นสัญญาณอนาล็อก 2 ช่องสัญญาณ แม้ว่า STM32F4Discovery มี DAC ให้ใช้งานได้ 2 ช่องสัญญาณ ผู้ใช้งานสามารถใช้อุปกรณ์นี้ได้ หากต้องการเพิ่มจำนวนช่องจ่ายแรงดันอนาล็อกได้

รูป 2-1 แสดงขาของไอซี LTC1661  [2]

รูป 2-1 แสดงขาของไอซี LTC1661 [2]

รูป 2‑2 แสดงการรับข้อมูลของ LTC1661 ผ่าน SPI จาก Microcontroller เพื่อต้องการปรับแรงดันไฟฟ้า เมื่อสังเกตลักษณะสัญญาณนาฬิกา เมื่ออยู่ในสถานะ Idle ค่าของสัญญาณมีสถานะ Low และอ่านบิตข้อมูลที่อยู่บน MOSI เมื่อพบขอบขาขึ้น (1st Edge Capture) ข้อมูลหนึ่งชุดมีขนาดจำนวน 16 บิต ซึ่งประกอบด้วยค่าดิจิตอล 10 บิต ที่ต้องการแปลงเป็นค่าแรงดันไฟฟ้า และ Control Code จำนวน 4 บิตสำหรับควบคุมการทำงานไอซี LTC1661ดังรูป 2‑3 สำหรับความถี่ของสัญญาณนาฬิกาสูงสุดที่ไอซี LTC1661 สามารถทำงานได้คือ 16.7 MHz [2, p. 3]

รูป 2-2 รูปแบบการสื่อสารแบบ SPI ของไอซี LTC1661 [2, p. 9]

รูป 2-2 รูปแบบการสื่อสารแบบ SPI ของไอซี LTC1661 [2, p. 9]

รูป 2-3 ตารางแสดงคำอธิบายของ Control Code ของไอซี LTC1661 [2, p. 9]

รูป 2-3 ตารางแสดงคำอธิบายของ Control Code ของไอซี LTC1661 [2, p. 9]

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

รูป 2-4 การติดตั้งอุปกรณ์สำหรับการสร้างสัญญาณอนาล็อกด้วยไอซี LTC1661

รูป 2-4 การติดตั้งอุปกรณ์สำหรับการสร้างสัญญาณอนาล็อกด้วยไอซี LTC1661

รูป 2‑4 แสดงการเชื่อมต่อระหว่าง STM32F4DISCOVERY กับไอซี LTC1661 บนบอร์ด aMG F4 Connect มีพอร์ตสำหรับเชื่อมต่ออุปกรณ์แบบ SPI โดยตั้งค่าใช้งานขา PA15 เป็น Slave Select (nSS) ขา PB3 เป็น SCLK ขา PB4 เป็น MISO และขา PB5 เป็นขา MOSI ไอซี LTC1661 รับข้อมูลจากอุปกรณ์ Master เท่านั้น ผู้ใช้งานเพียงเชื่อมสายส่งข้อมูล MOSI เท่านั้น

ตาราง 2‑1 แสดงการเชื่อมต่อระหว่าง STM32F4DISCOVERY กับไอซี LTC1661

LTC1661STM32F4DISCOVERYaMG F4 Connect
ขาที่ 1 (CS)PA15NSS
ขาที่ 2 (SCLK)PB3SCK
ขาที่ 3 (DIN)PB5MISO
ขาที 4 (Vref)3.3V3.3V
ขาที 6 (Vcc)3.3V3.3V
ขาที่ 7 (GND)GNDGND

 การทดลองใช้ไอซี LTC1661 ผ่านการสื่อสาร SPI

จุดประสงค์

  • เพื่อให้ผู้ใช้งานสามารถตั้งค่าการใช้งาน SPI ให้ตรงกับอุปกรณ์ได้
  • เพื่อให้ผู้ใช้งานสามารถสร้างสัญญาณแรงดันไฟฟ้า ด้วยไอซี LTC1661 ได้
รูป 2-5 Simulink Model สำหรับสร้างสัญญาณอนาล็อกหนึ่งช่อง ด้วยไอซี LTC1661

รูป 2-5 Simulink Model สำหรับสร้างสัญญาณอนาล็อกหนึ่งช่อง ด้วยไอซี LTC1661

รูป 25 แสดง Simulink Model สำหรับสร้างสัญญาณอนาล็อกหนึ่งช่อง ด้วยไอซี LTC1661 ผ่านการสื่อสาร SPI เมื่อ Download Model ลงใน STM32F4DISCOVERY ค่าของ Control Code = 1001 และค่าจาก Counter Limited Block จะถูกส่งออกไป Counter Limited Block จะเริ่มนับจาก 0 ถึง 1023 ทุกๆ 0.1 ms เพื่อส่งค่า DAC ให้กับอุปกรณ์ Slave เมื่อครบ 0.1 วินาทีค่าของ Counter จะเริ่มจาก 0 อีกครั้ง (ดังนั้น ความถี่ของสัญญาณ 10 Hz) รูป 26 แสดงสัญญาณที่วัดจากขาที่ 8 หรือ Vout A ของไอซี LTC1661 ด้วย Oscilloscope

จากรูป 26 จะเห็นได้เครื่องวัดแสดงค่าความถี่ของสัญญาณได้ 9.766 Hz หรือมีคาบของสัญญาณ 0.102 วินาที และค่าสูงสุดของสัญญาณได้ประมาณ 3.04 V

รูป 2-6 ผลการทดลองสร้างสัญญาณแรงดันอนาล็อกจากไอซี LTC1661

รูป 2-6 ผลการทดลองสร้างสัญญาณแรงดันอนาล็อกจากไอซี LTC1661

รูป 27 แสดง Simulink Model สำหรับสร้างสัญญาณอนาล็อก 2 ช่อง โดยเพิ่ม Control Code = 10 เพื่อส่งค่า DAC ไปที่ข่อง B และใช้ PulseGenerator Block เพื่อเลือกข้อมูลที่จะส่งไปยัง SPI

เมื่อค่าของ Pulse Generator  Block เท่ากับ 0 ค่าของ Control Code = 1010 และค่าคงที่ 256 จะถูกส่งออกไป ดังนั้น VoutB เท่ากับ = (259 / 1023) x 3 = 0.826V (สามารถวัดได้ด้วย Digital Multimeter) เมื่อค่าของ Pulse Generator  Block เท่ากับ 1 ค่าของ Control Code = 1010 และค่าของ Counter จะถูกส่งออกไป สลับกันทุก ๆ 0.05 ms

รูป 2-7 Simulink Model สำหรับสร้างสัญญาณอนาล็อกสองช่อง โดยใช้เทคนิค Multiplexer

รูป 2-7 Simulink Model สำหรับสร้างสัญญาณอนาล็อกสองช่อง โดยใช้เทคนิค Multiplexer

การอ่านค่าจากเซนเซอร์วัดความเร่งเชิงเส้น LIS302DL

ปัจจุบันมีการนำเซนเซอร์วัดความเร่งเชิงเส้นมาใช้ในระบบสมองกลอัจฉริยะมากมาย เช่น ส่วนปรับหน้าจอ LCD ใน Smartphone และโน้ตบุค  ระบบตรวจการสั่นไหว ระบบกันขโมย และเป็นส่วนหนึ่งของอุปกรณ์นำทางในเครื่องบินไร้คนขับหรือ UAV ด้วย

เมื่อเราอยู่บนพื้นผิวโลกและปล่อยวัตถุกลางอากาศ วัตถุชิ้นนั้นจะเคลื่อนที่ลงสู่พื้นโลกด้วยความเร่งคงที่ เราเรียกว่า ความเร่งเนื่องจากแรงโน้มถ่วงของโลก โดยใช้ g เป็นหน่วยย่อ ซึ่ง 1g มีค่าประมาณ 9.8 m/s2 ตัวอย่างเช่น เมื่อวัดความเร่งได้ 3g นั้นหมายถึง วัตถุมีการเคลื่อนที่ด้วยความเร่งเป็นสามเท่าของแรงโน้มถ่วงของโลก

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

การทดลองนี้ใช้ STM32F4DISCOVERY ดังรูป 3‑1 ซึ่งติดตั้งเซนเซอร์วัดความเร่ง LIS302DL ซึ่งพัฒนาโดยบริษัท STMicroelectronics คุณสมบัติของเซนเซอร์ LIS302DL มีดังนี้

  • วัดความเร่งเชิงเส้นในแนวแกน X, Y, Z
  • ช่วงในการวัดสามารถเลือกได้ระหว่าง ±2g หรือ ±8g
  • ส่งค่าที่อ่านได้ผ่านการสื่อสารแบบอนุกรม I2C หรือ SPI
  • อัตราการส่งข้อมูล สามารถเลือกได้ระหว่าง 100Hz หรือ 400Hz
รูป 3-1 การติดตั้งอุปกรณ์สำหรับการทดลองอ่านค่าจากเซนเซอร์ LIS302DL ผ่านการสื่อสาร SPI

รูป 3-1 การติดตั้งอุปกรณ์สำหรับการทดลองอ่านค่าจากเซนเซอร์ LIS302DL ผ่านการสื่อสาร SPI

เมื่อต้องการอ่านข้อมูลจากเซนเซอร์ด้วย SPI ผู้ใช้ต้องศึกษารูปแบบการสื่อสารของเซนเซอร์ LIS302DL จาก Datasheet [3] รูปแบบการอ่านข้อมูลจากเซนเซอร์ LIS302DL สามารถอ่านได้สองวิธีคือ อ่านทีละไบต์ (จำนวนข้อมูล 8 บิต) และอ่านหลายไบต์ โดยจำนวนข้อมูลขึ้นอยู่กับคำสั่งที่อ่าน รูป

รูป 3-2 รูปแบบการอ่านข้อมูลของ LIS302DL  ผ่านการสื่อสาร SPI แบบอ่านทีละไบต์  [3, p. 22]

รูป 3-2 รูปแบบการอ่านข้อมูลของ LIS302DL ผ่านการสื่อสาร SPI แบบอ่านทีละไบต์ [3, p. 22]

การอ่านหลายไบต์ สามารถทำได้โดยตั้งค่าบิต M/S เท่ากับ 1 จากนั้นระบุ Address เริ่มต้น ข้อมูลจาก LIS302DL จะส่งไปยังอุปกรณ์ Master ตามจังหวะของสัญญาณ SCLK เมื่อครบ 8 บิตแล้ว LIS302DL จะส่งข้อมูลที่อยู่ใน Address ถัดไปจนกว่าอุปกรณ์ Master จะยุติการรับข้อมูล

รูป 3-3 รูปแบบการอ่านข้อมูลของ LIS302DL  ผ่านการสื่อสาร SPI แบบอ่านหลายไบต์ (ตัวอย่างนี้ 2 ไบต์)

รูป 3-3 รูปแบบการอ่านข้อมูลของ LIS302DL ผ่านการสื่อสาร SPI แบบอ่านหลายไบต์ (ตัวอย่างนี้ 2 ไบต์)

การเขียนข้อมูลไปยังเซนเซอร์ LIS302DL สามารถเขียนได้สองวิธี เช่นกัน รูป 3‑4 และรูป 3‑5 แสดงเขียนข้อมูลไปยังเซนเซอร์ LIS302DL แบบทีละ Byte และหลายๆ Byte ซึ่งอุปกรณ์ Master ต้องส่งคำสั่งเขียนและระบุ Address รีจิสเตอร์ภายในของ LIS302DL จากนั้นจึงส่งข้อมูลเพื่อกำหนดค่าใน Register นั้นๆ

รูป 3-4  รูปแบบการเขียนข้อมูลของ LIS302DL ผ่านการสื่อสาร SPI แบบอ่านทีละไบต์ [3, p. 22]

รูป 3-4 รูปแบบการเขียนข้อมูลของ LIS302DL ผ่านการสื่อสาร SPI แบบอ่านทีละไบต์ [3, p. 22]

รูป 3-5 รูปแบบการเขียนข้อมูลของ LIS302DL ผ่านการสื่อสาร SPI แบบอ่านหลายไบต์ [3, p. 23]

รูป 3-5 รูปแบบการเขียนข้อมูลของ LIS302DL ผ่านการสื่อสาร SPI แบบอ่านหลายไบต์ [3, p. 23]

รูปแบบการสื่อสารแบบ SPI ของเซนเซอร์ LIS302DL ทั้งการอ่านและการตั้งค่า Register ต่างๆ ซึ่งจำเป็นต้องระบุ Address รูป 3‑6 แสดงแผนผัง Address ของ Register ภายในของ LIS302DL โดย Register แต่ละตัวทำหน้าที่แตกต่างกันเช่น ควบคุมการทำงานของเซนเซอร์ เก็บตัวแปรต่างๆ และเก็บค่าความเร่งเชิงเส้นที่อ่านได้

 

รูป 3-6 แผนผัง Address ของ Register ภายในของ LIS302DL [3, p. 24]

รูป 3-6 แผนผัง Address ของ Register ภายในของ LIS302DL [3, p. 24]

 Simulink Model สำหรับอ่านค่าความเร่งทั้งสามแกนของเซนเซอร์ LIS302DL แสดงดังรูป 3‑7 ใน Model มีการทำงานหลักๆ สามส่วน คือ

  • LIS302DL Initialize Subsystem ใช้สำหรับตั้งค่าเริ่มต้นให้กับเซนเซอร์
  • LIS302DL Read Subsystem ใช้สำหรับอ่านค่าความเร่งในแนวแกน X, Y และZ
  • UART Tx ใช้สำหรับส่งค่าความเร่งที่อ่านผ่านการสื่อสาร UART Tx

 

รูป 3-7 Simulink Model สำหรับการอ่านค่าจากเซนเซอร์ LIS302DL ผ่านการสื่อสารแบบ SPI

รูป 3-7 Simulink Model สำหรับการอ่านค่าจากเซนเซอร์ LIS302DL ผ่านการสื่อสารแบบ SPI

เมื่อ Download Model ลง STM32F4DISCOVERY โปรแกรมจะเริ่มอ่านสถานะการตั้งค่าเริ่มต้นของ LIS302DL โดย Subsystem ดังรูป 3‑8 ซึ่งเป็นการอ่านข้อมูลแบบ SPI จำนวนหนึ่งไบต์จาก CTRL_REG Register ที่ (Address 0x20) หากค่าที่อ่านได้ไม่เท่ากับ 0xC7 จึงทำการเขียนข้อมูลแบบ SPI ที่ CTRL_REG  Register.

 

รูป 3-8 Subsystem Model สำหรับตั้งค่าเริ่มต้นของ LIS302DL

รูป 3-8 Subsystem Model สำหรับตั้งค่าเริ่มต้นของ LIS302DL

จากนั้น LIS302DL Read Subsystem เริ่มอ่านค่าความเร่งทั้งสามแกน ซึ่งข้อมูลทั้งหมดอยู่ใน Out_X, Out_Y และ Out_Z Register (Address 0x29, 0x2A และ 0x2D) ตามลำดับ รูป 3‑9 แสดงการอ่านค่าแบบ SPI เป็นจำนวน 6 Bytes โดยให้ Out_X Register เป็น Address เริ่มต้น

รูป 3-9 Subsystem Model สำหรับอ่านค่าความเร่งทั้งสามแกน จาก LIS302DL

รูป 3-9 Subsystem Model สำหรับอ่านค่าความเร่งทั้งสามแกน จาก LIS302DL

ค่าที่อ่านได้เป็นตัวแปรชนิด int8 ซึ่งเป็นจำนวนเต็มแบบที่เครื่องหมาย ขนาด 8 บิต (มีค่า -127 ถึง 127) จากนั้น นำไปแสดงผลผ่านการสื่อสาร UART ทุกๆ 0.02 วินาที หริอ 50Hz ในรูป 3‑8 แสดงการตั้งค่า Full Scale selection (FS) เท่ากับ 0 ซึ่งหมายถึงค่าการวัดความเร่งเชิงเส้นอยู่ในช่วง ±2g ดังนั้นค่าความเร่งเชิงเส้น (หน่วย g m/s2) สามารถคำนวนได้จากสมการ

ค่าความเร่งที่อ่านได้   = 2 x ค่าที่อ่านได้ / 127

เมื่อแกน Z ของเซนเซอร์อยู่แนวเดียวกับแรงโน้มถ่วงของโลก ค่าความเร่งที่อ่านได้ 1g หรือค่าเท่ากับ 64

รูป 3‑10 แสดงค่าความเร่งเชิงเส้นผ่านโปรแกรม TeraTerm เมื่อวาง STM32F4DISCOVERY ค่าความเร่งในแนวแกน Z จะมีค่ามากที่สุดเนื่องจากความเร่งเนื่องจากแรงโน้มถ่วงของโลก ในขณะที่ค่าแนวแกน X-Y จะมีค่าน้อยเนื่องจากอยู่แนวขนานกับพื้นโลก

รูป 3-10 ผลการทดลองการอ่านค่าความเร่งเชิงเส้น

รูป 3-10 ผลการทดลองการอ่านค่าความเร่งเชิงเส้น

ตัวอย่างตรวจจับความเร่งที่เกิดจากการแรงกระแทก

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

รูป 311 แสดง Simulink Model สำหรับแสดงผลการอ่านความเร่งเชิงเส้น ณ เวลาจริง ซึ่ง Model นี้ทำงานบนคอมพิวเตอร์ (ไม่ต้อง Download ลงใน STM32F4DISCOVERY)  เมื่อเชื่อมต่อ STM32F4DISCOVERY ผ่าน USB และกด IconRun โปรแกรมนี้จะทำการอ่านค่าความเร่งเชิงเส้นจากบอร์ด STM32F4DISCOVER ซึ่งส่งมาทางสาย USB

รูป 3-11 Simulink Model สำหรับการแสดงผลการอ่านค่าความเร่งเชิงเส้น ณ เวลาจริง

รูป 3-11 Simulink Model สำหรับการแสดงผลการอ่านค่าความเร่งเชิงเส้น ณ เวลาจริง

หมายเหตุ ควรปิดการทำงานของโปรแกรมสื่อสารแบบอนุกรมทุกชนิดก่อน Run Model นี้

รูป 3-12 การเตรียมอุปกรณ์สำหรับการทดลองอ่านค่าความเร่งเชิงเส้น ณ เวลาจริง

รูป 3-12 การเตรียมอุปกรณ์สำหรับการทดลองอ่านค่าความเร่งเชิงเส้น ณ เวลาจริง

เมื่อ Double Click Scope Block กราฟจะแสดงผลค่าความเร่งเชิงเส้นทั้งสามแกน ณ เวลาจริง นั้นหมายถึงลักษณะของกราฟจะเปลี่ยนแปลง เมื่อมีการขยับหรือเคลื่อนไหวบอร์ด STM32F4DISCOVERY ดังรูป 3‑13

รูป 3-13 กราฟค่าความเร่งเชิงเส้นที่วัดด้วยเซนเซอร์ LIS302DL ณ เวลาจริง

รูป 3-13 กราฟค่าความเร่งเชิงเส้นที่วัดด้วยเซนเซอร์ LIS302DL ณ เวลาจริง

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

  1. STMicroelectronics, “RM0090: STM32F40xxx Reference Manual [Online],” 2013.
  2. STMicroelectronic, “LIS302DL MEM motion sensor,” 2008.
  3. Linear Technology, “LTC1661 Micropower Dual 10-Bit DAC in MSOP,” 1999.
  4. D. K. a. R. Kalinsky, “Introduction to Serial Peripheral Interface,” Embedded.com, UBM Electronics, 2002. [Online]. Available: http://www.embedded.com/electronics-blogs/beginner-s-corner/4023908/Introduction-to-Serial-Peripheral-Interface.
  5. Wisit. P., “การติดต่อสื่อสารด้วย SPI : Serial Peripheral Interface,” [Online]. Available: http://www.123microcontroller.com/Hardware-Interfacing/SPI-Serial-Peripheral-Interface-communication. [Accessed 27 February 2014].