การใช้งาน Analog to Digital Converter (ADC) – และ Digital to Analog Converter (DAC)

Download all demo files: AdcDac.7z

การใช้งานอนาล็อก IO

ระบบวัดคุมในภาคอุตสาหกรรม หุ่นยนต์ หรือเครื่องใช้ไฟฟ้าต่างๆ ประกอบด้วยภาคตรวจจับ และภาคควบคุมแสดงผล ในส่วนภาคตรวจจับ เซนเซอร์ (Sensor) มีบทบาทสำคัญโดยทำหน้าที่ตรวจจับหรือวัดปริมาณทางกายภาพ เช่น ระยะทาง ความเร็ว แรงกระทำ แรงดันอากาศ ความเข้มของแสง อุณหภูมิ ความชื้น เป็นต้น แล้วเปลี่ยนคุณสมบัติเหล่านี้ให้เป็นสัญญาณไฟฟ้า ซึ่งส่วนใหญ่เป็นสัญญาณอนาล็อก เช่นแรงดันไฟฟ้า (0–5 V) หรือกระแสไฟ (4-20 mA)

ในส่วนภาคควบคุมและแสดงผล นอกจากการเปิด-ปิดอุปกรณ์ซึ่งเราสามารถใช้ Digital I/O ได้ อุปกรณ์บางชนิดใช้สัญญาณแบบอนาล็อก เป็นสัญญาณอ้างอิงเพื่อกำหนดปริมาณ เช่น วาล์วควบคุม (Control Valve หรือ Proportional Valve) ชุดควบคุมเซอร์โวมอเตอร์บางประเภท และลำโพงที่แปลงสัญญาณไฟฟ้าให้เป็นเสียง เป็นต้น

จากที่กล่าวมา การนำข้อมูลจากเซนเซอร์มาบันทึก หรือประมวลผลเพื่อควบคุมอุปกรณ์หรือแสดงผล โดยใช้ระบบสมองกลฝังตัว ระบบจำเป็นต้องใช้โมดูลแปลงสัญญาณที่เรียกว่า Analog to Digital Convertor (ADC) ซึ่งทำหน้าที่แปลงสัญญาณอนาล็อกให้เป็นสัญญาณดิจิตอล เพื่อสามารถประมวลผลได้ด้วยดิจิตอลคอมพิวเตอร์ รวมถึงโมดูลแปลงสัญญาณที่เรียกว่า Digital to Analog Convertor (DAC) ซึ่งทำหน้าที่แปลงสัญญาณดิจิตอลให้เป็นสัญญาณอนาล็อกการใช้งานอนาล็อกกับ STM32F4DISCOVERY และ บอร์ด Fio2มีคุณสมบัติดังนี้

จำนวนช่องสัญญาณ

ผู้ใช้สามารถดูจำนวนช่องสัญญาณอนาล็อกจาก Datasheet ของ Microcontroller ดังรูป 1-1 และรูป 1-2 การตั้งค่าการใช้งานขาให้เป็น ADC เพื่ออ่านค่าแรงดันไฟฟ้าจากอุปกรณ์ภายนอก หรือ การตั้งค่าการใช้งานขาให้เป็น DAC เพื่อส่งค่าแรงดันไฟฟ้าให้อุปกรณ์ภายนอก

รูป 1 1 จำนวนโมดูลการใช้งานอนาล็อกและช่องสัญญาณจากภายนอกของ STM32F4DISCORVERY [1, p. 14]

รูป 1 1 จำนวนโมดูลการใช้งานอนาล็อกและช่องสัญญาณจากภายนอกของ STM32F4DISCORVERY [1, p. 14]

รูป 1-2 จำนวนโมดูลการใช้งานอนาล็อกและช่องสัญญาณจากภายนอกของ FiO-2 [2, p. 14]

รูป 1-2 จำนวนโมดูลการใช้งานอนาล็อกและช่องสัญญาณจากภายนอกของ FiO-2 [2, p. 14]

 

คุณสมบัติแรงดันไฟฟ้า

รูป 1-3 แสดงคุณสมบัติทางไฟฟ้าของโมดูล ADC โดยระดับแรงดันไฟที่ต้องการอ่าน ควรอยู่ในระหว่าง 0 ถึง VREF+ ซึ่งเป็นแรงดันอ้างอิงและขึ้นอยู่กับแรงดันไฟเลี้ยงภายนอก สำหรับ STM32F4DISCOVERY ขา VREF+ ต่อกับไฟเลี้ยง VDD [3, p. 33]

รูป 1-3 คุณสมบัติทางไฟฟ้าของโมดูลแปลงสัญญาณอนาล็อกเป็นดิจิตอล [1, p. 129]

รูป 1-3 คุณสมบัติทางไฟฟ้าของโมดูลแปลงสัญญาณอนาล็อกเป็นดิจิตอล [1, p. 129]

หากต้องการอ่านค่าแรงดันไฟฟ้าที่น้อยกว่า 0 (Negative) หรือ เกินกว่า 3.6V ซึ่งเป็นค่าแรงดันไฟฟ้าสูงสุด ควรใช้ Signal Conditioning Circuit เช่น aMG-SIGCON-A เพื่อปรับแต่งสัญญาณให้เหมาะสมก่อนเชื่อมต่อ Microcontroller[4] (ดูรายละเอียดการใช้งาน http://waijung.aimagin.com/amg_sigcon_a.htm)

คุณสมบัติทางไฟฟ้าของโมดูล DAC โดยระดับแรงดันไฟที่ Microcontroller สามารถส่งแรงดันได้ ขึ้นอยู่กับ แรงดันอ้างอิง และแรงดันไฟเลี้ยงภายนอก ดังรูป 1-4และการใช้เลือกใช้ DAC buffer รูป 1-5 มีจุดประสงค์คือลดการต่อวงจร Operational Amplifier ภายนอก เพื่อลดความต้านทานขาออก (Output Impedance)

รูป 1-4 คุณสมบัติทางไฟฟ้าของโมดูล DAC [1, pp.136-137]

รูป 1-4 คุณสมบัติทางไฟฟ้าของโมดูล DAC [1, pp.136-137]

จะสังเกตได้ว่าสัญญาณที่สร้างออกจากโมดูล DAC จะไม่สามารถเริ่มจาก 0 หรือขึ้นสูงสุดถึง VDDA ได้โดยสมบูรณ์ เมื่อใช้ Buffer จะมีช่องว่างอยู่ที่ประมาณ 200mV ซึ่งเป็นสิ่งที่แลกกับการไม่ต้องใช้ Operational Amplifier

รูป 1-5 วงจรโมดูลแปลงสัญญาณส่งสัญญาณแบบใช้ Buffer / ไม่ใช้ Buffer[1, p. 137]

รูป 1-5 วงจรโมดูลแปลงสัญญาณส่งสัญญาณแบบใช้ Buffer / ไม่ใช้ Buffer[1, p. 137]

การทดลองอนาล็อกอินพุต

วิธีการใช้งานRegular ADC Blockset

Regular ADC Blockset ทำหน้าที่แปลงสัญญาณอนาล็อกให้เป็นข้อมูลดิจิตอลโดยผู้ใช้สามารถเลือกใช้โมดูล ADC ช่องสัญญาณ และอัตราสุ่ม (Sample time) สำหรับ blockset นั้นอยู่ใน Simulink library>> Waijung Blockset>> STM32F4 target >> On Peripheral Chip >>ADC โดย Regular ADC block ซึ่งมีลักษณะและคุณสมบัติดังนี้

รูป 2-1 ลักษณะและการตั้งค่าของ Regular ADC Block

รูป 2-1 ลักษณะและการตั้งค่าของ Regular ADC Block

การทดลองควบคุมเปิด-ปิดหลอด LED โดยใช้เซนเซอร์วัดแสง

จุดประสงค์

  • เพื่อให้ผู้ทดลองสามารถอ่านค่าสัญญาณอนาล็อกโดยใช้ Regular ADC Blockset ได้
  • เพื่อให้ผู้ทดลองเข้าใจการทำงานของเซนเซอร์วัดแสง และนำมาควบคุมการเปิด-ปิดหลอด LED ได้อุปกรณ์ที่ใช้ในการทดลองนี้ ใช้เซนเซอร์วัดแสง aMG Photocell–A ดังรูป 2-2 ซึ่งใช้ Photocell ทำหน้าที่วัดความเข้มของแสง โดยค่าความต้านทานแปรผกผันตามความเข้มของแสง[5] จากวงจรไฟฟ้าของ aMG Photocell–A ความสัมพันธ์ระหว่างแรงดันตกคร่อม Vsense กับค่าความต้านทานของ Photocell R2 สามารถหาได้จากสมการดังนี้ (Voltage Divider)(ตามรูป 2-2 R1 = 2K Ohm)

Vsense = R2 x Vin / (R1+R2)

ถ้า Photocell อยู่ในที่มีแสงสว่างมาก (ความเข้มของแสงต่ำ) Photocell จะมีความต้านทานลดลงจึงทำให้ Vsense มีค่าน้อยลง ถ้า Photocell อยู่ในที่มีแสงสว่างน้อย (ความเข้มของแสงต่ำ) Photocell จะมีความต้านทานเพิ่มขึ้น จึงทำให้ Vsenseมีค่าเพิ่มขึ้นด้วย

รูป 2-2 แสดงบอร์ดและวงจรไฟฟ้าของ amG Photocell-A

รูป 2-2 แสดงบอร์ดและวงจรไฟฟ้าของ amG Photocell-A

ตาราง 2-1 แสดงการต่อขาของอุปกรณ์ในการทดลองเปิด-ปิดหลอด LED โดยใช้เซนเซอร์วัดแสง

ตาราง 2-1 แสดงการต่อขาของอุปกรณ์ในการทดลองเปิด-ปิดหลอด LED โดยใช้เซนเซอร์วัดแสง

 

การทดลองเปิด-ปิดหลอด LED โดยใช้เซนเซอร์วัดแสง จาก Simulink Modelในรูป 2-3 ข้อมูลดิจิตอลจาก Regular ADC Block จะนำมาประมวลผลให้เป็นค่าแรงดันไฟฟ้า เพื่อควบคุมการเปิดปิดหลอด LED ดังนี้

  • เมื่อค่าแรงดัน Vsense มากกว่าหรือเท่ากับจุดอ้างอิง (Threshold) หรือ 2.5 V ให้เปิดหลอด LED
  • เมื่อค่าแรงดัน Vsense น้อยกว่า 2.5 V ให้ปิดหลอด LED
รูป 2-3 Simulink Model ของการทดลองเปิด-ปิดหลอด LED โดยใช้เซนเซอร์วัดแสง

รูป 2-3 Simulink Model ของการทดลองเปิด-ปิดหลอด LED โดยใช้เซนเซอร์วัดแสง

ข้อมูลดิจิตอลจากโมดูล ADC ของ STM32F4 มีความละเอียด 12 บิตโดยมีค่าอยู่ระหว่าง 0 ถึง 212-1 (4095) ซึ่งไม่สะดวกต่อการแสดงผล หรือนำมาใช้งานโดยเฉพาะการเลือกจุดอ้างอิง เพราะหน่วยของการวัดไม่ตรงกับความเป็นจริง จึงต้องมีการเทียบหน่วยวัด และหา Transfer Function แสดงความสัมพันธ์ระหว่างข้อมูลจาก ADC และ ค่าแรงดันไฟฟ้าเป็นโวล์ต (โดยการคูณด้วย Gain 3.3/4095)

ยกตัวอย่าง ค่า ADC Value อ่านได้ 0 เมื่อขารับสัญญาณอนาล็อกต่อกับ GND และค่า ADC Value อ่านได้ 4095 เมื่อขารับสัญญาณอนาล็อกต่อกับแรงดันอ้างอิง 3.30 Vกราฟความสัมพันธ์ระหว่างข้อมูลจากโมดูล ADC กับค่าแรงดันจริง สามารถแสดงได้ ดังรูป 2-4

รูป 2-4 แสดงความสัมพันธ์ระหว่างค่าของข้อมูลดิจิตอล กับระดับแรงดันไฟฟ้าจริง

รูป 2-4 แสดงความสัมพันธ์ระหว่างค่าของข้อมูลดิจิตอล กับระดับแรงดันไฟฟ้าจริง

หลังจากหาสมการเชิงเส้นของกราฟ Voltage = (3.3 / 4095) x (ADC Value) เมื่อค่า ADC Value = 3060 แสดงว่า สัญญาณอนาล็อกที่อ่านได้มีแรงดันประมาณ 2.465 V

การใช้จอแสดงผล LCD

นอกจากการประมวลผลข้อมูลจาก ADC เพื่อควบคุมอุปกรณ์ต่างๆ ภายใน Microcontroller แล้วเรายังสามารถนำข้อมูลมาแสดงเป็นตัวเลข หรือข้อความ เพื่อให้ผู้ใช้งานทั่วไปสามารถเข้าใจได้ง่ายดังรูป 2-6

รูป 2-5 Simulink Model สำหรับแสดงค่าของเซนเซอร์วัดแสง โดยใช้จอแสดงผล LCD

รูป 2-5 Simulink Model สำหรับแสดงค่าของเซนเซอร์วัดแสง โดยใช้จอแสดงผล LCD

รูป 2-6 การทำงานควบคุมเปิด-ปิดหลอด LED โดยใช้เซนเซอร์วัดแสง

รูป 2-6 การทำงานควบคุมเปิด-ปิดหลอด LED โดยใช้เซนเซอร์วัดแสง

 

การใช้งานอนาล็อกเอาน์พุต

วิธีการใช้งานRegular DAC Blockset

Regular DAC Blockset ทำหน้าที่สร้างสัญญาณผ่าน DAC1_OUT (ขา PA4) หรือ DAC2_OUT (ขา PA5) สำหรับ Blockset ที่ใช้ควบคุม Analog Output ของบอร์ด STM32F4DISCOVERY นั้นอยู่ใน simulink library>> Waijung Blockset >> STM32F4 target >> On Peripheral Chip >> DAC โดย Regular DAC block  มีลักษณะและคุณสมบัติดังนี้

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

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

การทดลองสร้างสัญญาณมีคาบ (Periodic Signal)

จุดประสงค์ 

  • เพื่อให้ผู้ทดลองสามารถสร้างสัญญาณมีคาบหรือ Periodic Signal แบบต่างๆ ได้
  • เพื่อให้ผู้ทดลองสามารถสร้างสัญญาณมีคาบ โดยใช้  Arbitrary Waveform Generator ได้

การทดลองนี้จะใช้ STM32F4DISCOVERY สร้างสัญญาณแบบมีคาบ โดยจ่ายสัญญาณอนาล็อกแบบฟันเลื่อย หรือ Saw Tooth ที่ขา A4 หรือช่อง DAC1 โดยมีแรงดันอยู่ในช่วง 0.0 ถึง 1.0 V และสัญญาณอนาล็อกแบบคลื่นความถี่ 20 Hz ที่ขา A5 หรือช่อง DAC2 โดยมีแรงดันอยู่ในช่วง 0.5 ถึง 2.5 V

รูป 3-2 Simulink Model สร้างสัญญาณแบบคลื่น และแบบสามเหลี่ยม

รูป 3-2 Simulink Model สร้างสัญญาณแบบคลื่น และแบบสามเหลี่ยม

ผู้ทดลองสามารถวัดและสังเกตลักษณะของสัญญาณ โดยใช้เครื่อง Oscilloscope วัดที่ขา PA4  (Saw-tooth Waveform 0-1 V, 20 Hz) และขา PA5 (Sinusoidal Waveform 0.5-2.5 V, 20 Hz)

รูป 3-3 สัญญาณอนาล็อกจากการทดลองสร้างสัญญาณแบบมีคาบ

รูป 3-3 สัญญาณอนาล็อกจากการทดลองสร้างสัญญาณแบบมีคาบ

ตัวอย่างการใช้งาน RegularDAC block ข้างต้นใช้แหล่งกำเนิดสัญญาณจาก Simulink >> Source ซึ่งมีข้อจำกัดคือ  Block เหล่านี้ใช้สมการคณิตศาสตร์เช่น ฟังก์ชั่นตรีโกณมิติ ซึ่งต้องใช้เวลาในการคำนวณและประมวลผล ยกตัวอย่างเช่น สัญญาณ Sinusoidal Waveform 20 kHz ซึ่งมี Period 50 ไมโครวินาที ถ้าต้องการค่าแรงดันจำนวน 10 ค่าต่อคลื่นหนึ่งลูก ดังนั้น Microcontroller ต้องคำนวณหาค่าแรงดันทุกๆ 5  ไมโครวินาที ซึ่งทำให้ระบบไม่ทำงานอื่นๆ ได้หากมีความจำเป็นต้องสร้างสัญญาณที่มีความถี่สูงควรใช้กล่อง Arbitrary Waveform Generator แทน ดังจะได้อธิบายต่อไป

การใช้งาน Arbitrary Waveform Generator

กล่อง Arbitrary Waveform Generator ซึ่งพัฒนาโดยบริษัท Aimagin โดยผู้ใช้สามารถกำหนดชุดข้อมูล เพื่อสร้างรูปแบบของสัญญาณตามที่ต้องการ เมื่อ Download ข้อมูลเหล่านี้ถูกเก็บในหน่วยความจำของ STM32F4 ซึ่งสามารถนำมาใช้ได้เลยโดยไม่ต้องมีการคำนวณ ดังนั้น จุดเด่นของ Arbitrary Function Generator Block คือ สามารถสร้างสัญญาณที่มีความถี่สูง (ความถี่สูงสุด 2MHzตามความสามารถจริงของ ADC Module) ตัวอย่างการใช้งาน มีขั้นตอนดังนี้

  • กำหนดชุดข้อมูลโดยป้อนชุดคำสั่งใน Matlab command Window

x = 0:1:49; แล้วกด ENTER,
y1 = sin(2*pi*x/50) + 1.5; แล้วกด ENTER
y2 = 4*(sin(2*pi*x/50) + sin(3*2*pi*x/50)/3 + sin(5*2*pi*x/50)/5)/pi +1.5; แล้วกด ENTER
โดย ตัวแปร x คือ ชุดข้อมูลสำหรับสร้างรูปแบบ Waveform ซึ่งมีค่า [0, 1, …, 49]
ตัวแปร y1 คือ รูปแบบ Waveform ซึ่งเป็นสัญญาณแบบคลื่น จำนวนหนึ่งคาบ
ตัวแปร y2 คือ รูปแบบ Waveform ซึ่งเป็นสัญญาณแบบคลื่น[6]จำนวนหนึ่งคาบ

  • สร้าง Simulink Model ตามรูป 3 4 และตั้งค่าใน Arbitrary Waveform Generator Block ตามรูป 3-5
รูป 3-4 Simulink Model สำหรับการทดลองสร้างสัญญาณ โดยใช้ Arbitrary Waveform Generator

รูป 3-4 Simulink Model สำหรับการทดลองสร้างสัญญาณ โดยใช้ Arbitrary Waveform Generator

ผู้ทดลองสามารถจำลองการทำงานของ Waveform Generator เพื่อตรวจสอบความถูกต้องของรูปแบบและความถี่ของสัญญาณ โดย ก่อน Download ข้อควรระวังคือ ระดับสัญญาณของ Waveform ควรอยู่ในช่วง 0 ถึง VDD (อย่าลืมว่ามีข้อจำกัด +/- 200mV จากขอบ 0V และ VDD อยู่ด้วย)

รูป 3-5 การตั้งค่าใน Arbitrary Waveform Generator Block

รูป 3-5 การตั้งค่าใน Arbitrary Waveform Generator Block

  • หลังจาก Download โปรแกรม และใช้เครื่อง Oscilloscope วัดสัญญาณที่ขา PA4 ( Sinusoidal Waveform 10 kHz) และขา PA5 (Square Wave 10 kHz) จะได้ภาพดังนี้ จะสังเกตได้ว่าสัญญาณมีรูปที่เรียบขึ้น เนื่องจากถูกสร้างที่ความถี่สูงขึ้น โดยปกติเวลาจะสร้างสัญญาณ เราจะกำหนดให้ Sample time ของการ Update ค่าอยู่ที่ประมาณไม่น้อยกว่า 20 เท่าของความถี่สูงสุดของสัญญาณ อย่างไรก็ตาม Sample time ยิ่งมากยิ่งดี เพราะจะได้สัญญาณที่มีความเรียบมากขึ้น จึงเป็นเหตุให้อุปกรณ์ที่ทำงานที่ความถี่สูงได้ยิ่งมีราคาสูง
รูป 3-5 การตั้งค่าใน Arbitrary Waveform Generator Block

รูป 3-5 การตั้งค่าใน Arbitrary Waveform Generator Block

รูป 3-6 ผลการทดลองสร้างสัญญาณอนาล็อกความถี่สูง

รูป 3-6 ผลการทดลองสร้างสัญญาณอนาล็อกความถี่สูง

 

ชวนคิด

โมดูลสัญญาณอนาล็อกอ่านค่าจากสัญญาณดิจิตอล

จุดประสงค์ 

  • เพื่อทดสอบผลการทำงานของโมดูล ADC เมื่อมีสัญญาณดิจิตอลเข้าที่ขาอ่านสัญญาณอนาล็อก
รูป 4-1 Simulink Model การอ่านค่าสัญญาณอนาล็อกจากสัญญาณดิจิตอล

รูป 4-1 Simulink Model การอ่านค่าสัญญาณอนาล็อกจากสัญญาณดิจิตอล

จากรูป Simulink Model สำหรับการทดลองนี้ ประกอบด้วย 2 ส่วน คือ ส่วนรับสัญญาณอนาล็อกแล้วนำผลไปแสดงผลผ่านจอ LCD และส่วนสร้างสัญญาณดิจิตอล ซึ่งใช้ Pulse Generator block จำนวน 4 ชุด โดยตั้ง Period ไว้ 0.001 วินาที (ความถี่ 1 KHz) แต่ละชุดตั้งค่า Duty Cycle ต่างๆ กัน 25, 50, 75 และ 99%

สัญญาณดิจิตอลที่มีการปรับ Duty Cycle เรียกว่า Pulse Width Modulation ซึ่งเป็นนิยมในงานควบคุมความเร็วมอเตอร์ หรือปรับแสงสว่างหลอด LED (ผู้ใช้สามารถสร้างสัญญาณ PWM ได้โดยใช้ Basic PWM หรือ Advanced PWM block ซึ่งอยู่ใน simulink library>> Waijung Blockset>> STM32F4 target >> On Peripheral Chip >>TIM)

เมื่อ Download โปรแกรมลง STM32F4 ขา D15 จะส่งสัญญาณดิจิตอลโดยมีความถี่ 1 KHz ตาม Period ที่ตั้งไว้โดยผู้ใช้สามารถเลือก Duty Cycle ของสัญญาณดิจิตอลด้วยการตั้ง DipSwitch ตามตาราง 4-1 สัญญาณ Digital ที่ได้ควรต่อเข้ากับวงจร RC Circuit เพื่อกรองสัญญาณพัลส์ให้ต่อเนื่อง ดังรูป 4-2 สัญญาณผลลัพธ์ที่ได้จากการกรอง ต่อกับขารับสัญญาณอนาล็อก PA15 ซึ่งค่าที่อ่านได้จะแสดงผลทางจอ LCD

ตาราง 4-1 Dip-Switch สำหรับตั้ง Duty Cycle ของสัญญาณดิจิตอลเอาน์พุต

ตาราง 4-1 Dip-Switch สำหรับตั้ง Duty Cycle ของสัญญาณดิจิตอลเอาน์พุต

 

รูป 4-2 การทดลองรับค่าสัญญาณอนาล็อกจากสัญญาณดิจิตอล

รูป 4-2 การทดลองรับค่าสัญญาณอนาล็อกจากสัญญาณดิจิตอล

ค่าที่อ่านได้จะแตกต่างกันขึ้นอยู่กับ Duty Cycle ของสัญญาณ Digital ความถี่ของสัญญาณ รวมถึงตัวต้านทาน และตัวเก็บประจุในวงจร RC Circuit ซึ่งในการทดลองนี้เลือกค่า R = 10 kOhmและ C = 0.1 uF

ดิจิตอลอินพุตอ่านแรงดันสัญญาณอนาล็อก

วัตถุประสงค์

  • เพื่อทดสอบการทำงานของ Digital Input เมื่อต่อสัญญาณอนาล็อกเข้าขาดิจิตอลอินพุต
  • เพื่อศึกษาการแบ่งสถานะของ Digital I/O ด้วยแรงดันไฟฟ้าของ STM32F4

การทดลองนี้ใช้ Potentiometer หรือความต้านทานปรับค่าได้ สำหรับสร้างสัญญาณอนาล็อก โดยต่อเข้ากับขา PA5 ซึ่งตั้งค่าให้รับสัญญาณอนาล็อกและ ขา D15 ซึ่งตั้งเป็น Digital Inputจากรูป 4 3 แสดง Simulink Model ซึ่งประกอบด้วยส่วนแสดงผลค่าแรงดันไฟฟ้าผ่านจอ LCD โดยรับข้อมูลจากโมดูล AN15 และส่วนแสดงสถานะของดิจิตอลอินพุตด้วยการเปิด-ปิดหลอดไฟ LED3 ซึ่งต่อกับขา PD14 (รูป 4-3)

รูป 4-3 Simulink Model สำหรับการต่อสัญญาณอนาล็อกเข้าดิจิตอลอินพุต

รูป 4-3 Simulink Model สำหรับการต่อสัญญาณอนาล็อกเข้าดิจิตอลอินพุต

เมื่อ Download Program ลง STM32F4 DISCOVERY ผู้ทดลองสามารถปรับ Potentiometer แล้วสังเกตค่าแรงดันจากจอแสดงผล LCD, ความแตกต่างการติด-ดับของ LED3 และ LED4 และบันทึกค่าแรงดันไฟฟ้าในช่วงเปลี่ยนสถานะลงในตาราง 4-2

ตาราง 4-2 ผลการทดลอง

ตาราง 4-2 ผลการทดลอง

รูป 4-4 การทดลองใช้ดิจิตอลอินพุตอ่านค่าสัญญาณอนาล็อก

รูป 4-4 การทดลองใช้ดิจิตอลอินพุตอ่านค่าสัญญาณอนาล็อก

การเลือกอัตราสุ่มสัญญาณ

ในการแปลงสัญญาณอนาล็อกเป็นดิจิตอล Sampling Time หรือการนับวัดสัญญาณ คือช่วงเวลาที่สุ่มวัดสัญญาณ เพื่อแปลงค่าเป็น Digital Signal ยกตัวอย่างเช่น ตั้งค่า Sampling Time = 0.01 วินาที หมายความว่า ระบบจะทำการวัดค่าสัญญาณอนาล็อกแล้วแปลงเป็นข้อมูล Digital ทุกๆ 0.01 วินาที หรืออัตราสุ่ม (Sampling Frequency) 100 Hz เป็นต้น

การเลือกอัตราสุ่มให้เหมาะสมมีความสำคัญมาก หากสุ่มน้อยเกินไปข้อมูลที่ได้รับจะขาดรายละเอียดสำคัญๆ และทำให้เกิดข้อผิดพลาด [7] หากสุ่มมากเกินไป จะทำให้ระบบใช้เวลาในการประมวลผลสำหรับวัดค่าสัญญาณ และใช้หน่วยความจำสำหรับเก็บข้อมูล Digital มากเกินความจำเป็น ความถี่ที่ใช้สุ่มข้อมูลfsที่เหมาะสมเรียกว่า Nyquist Frequencyควรมีค่าอย่างน้อย 2 เท่าของความถี่ของสัญญาณที่ต้องการวัดซึ่งหากมีหลายความถี่ต้องเลือกความถี่สูงสุด fmax[8]

f>= 2fmax

การเลือก อัตราสุ่ม ให้เหมาะสมกับงาน สามารถพิจารณาได้จาก Bandwidth ของระบบ เช่น การวัดแรงกระแทก การควบคุมเครื่องบินหรือหุ่นยนต์ให้ทรงตัวเอง ซึ่งที่มีการเปลี่ยนแปลงแบบฉับพลัน (fmaxสูง) ดังนั้นจึงต้องมีการ Update ข้อมูลจากเซนเซอร์ที่ความถี่สูง (ใช้ Sampling time น้อย) เป็นต้น แม้ว่าทฤษฎีจะระบุว่าควรใช้ Nyquist Rate คือ 2 เท่าของความถี่สูงสุด นี่คือค่าต่ำสุดตามทฤษฎี ในทางปฎิบัติ อาจต้องใช้อย่างน้อย 20 เท่าหรือมากกว่า ถึงจะได้สัญญาณที่ใกล้เคียงกับสัญญาณจริง

การทดลองนี้ Sampling time ของโมดูล ADC ที่ 0.01 วินาที หรืออัตราสุ่ม (Sample time) 100 Hz และเลือกอ่านสัญญาณอนาล็อกแบบ Sinusoidal Waveform ที่มีความถี่ต่างกัน 5 Hz, 20 Hz, 50 Hz และ 60 Hz(ผู้ทดลองสามารถใช้เครื่อง Function Generator เพื่อสร้าง Sinusoidal Waveform แทนการใช้ Regular DAC block ได้ โดยตั้งค่าแรงดันไฟฟ้าต่ำสุดสูงสุด อยู่ในช่วง 0.5 – 2.5 V)การติดตั้งอุปกรณ์สำหรับการทดลอง มีขั้นตอนดังนี้

  1. เชื่อมต่อขา PA4 กับ ขา PC0 และต่อ aMG USB Converter-N Adapter (รายละเอียดและวิธีการใช้งาน) กับบอร์ด aMG F4 Connect ดังรูป 4-5

    รูป 4-5 การทดลองเลือกอัตราสุ่มการอ่านสัญญาณ

    รูป 4-5 การทดลองเลือกอัตราสุ่มการอ่านสัญญาณ

  2. Download Simulink Model ในรูป 4 7ลงใน STM32F4DISCOVERY ขา PA4 ใช้ส่งค่าแรงดันไฟฟ้าแบบ Sinusoidal Waveform ขา PC0 ใช้อ่านค่าแรงดันสัญญาณอนาล็อกโดยข้อมูลดิจิตอลที่ได้จะส่งผ่านสาย USBเข้าคอมพิวเตอร์หรือ Host
  3. สำหรับ Host เปิด Simulink model และตั้งค่าดังรูป 4-6 (ดูวิธีการใช้งาน Host Serial)
  4. หลังจาก Run Simulation ผู้ทดลองสามารถเลือกความถี่ได้โดยใช้ Dip SwitchSW1 และ SW2และสังเกตลักษณะของสัญญาณจาก Scope ซึ่งผลการทดลองแสดงในรูป 4-8 (รูป 4-7) (ตาราง 4-4) (รูป 4-8)
    รูป 4-6 Simulink Mode สำหรับอ่านค่าแรงดัน (ใช้สำหรับ Hostไม่ต้อง Download ลง STM32F4)

    รูป 4-6 Simulink Mode สำหรับอ่านค่าแรงดัน (ใช้สำหรับ Hostไม่ต้อง Download ลง STM32F4)

    รูป 4-7 Simulink model การทดลองเลือกอัตราสุ่ม

    รูป 4-7 Simulink model การทดลองเลือกอัตราสุ่ม

    ตาราง 4-3 Simulink block สำหรับการทดลองเลือกอัตราสุ่ม / สำหรับ Host

    ตาราง 4-3 Simulink block สำหรับการทดลองเลือกอัตราสุ่ม / สำหรับ Host

    รูป 4-8 สัญญาณ Waveform ความถี่ 5, 20, 50 และ 60 Hz ที่อ่านได้จาก ADC ด้วยอัตราสุ่ม 100Hz

    รูป 4-8 สัญญาณ Waveform ความถี่ 5, 20, 50 และ 60 Hz ที่อ่านได้จาก ADC ด้วยอัตราสุ่ม 100Hz

จากรูป 4-8 แสดงลักษณะของ Waveform ซึ่งอ่านได้จากโมดูลแปลงอนาล็อกเป็นดิจิตอล โดยใช้อัตราสุ่ม 100  Hz พบว่าถ้าอัตราสุ่มน้อยกว่า Nyquist Frequency ของสัญญาณเช่นสัญญาณอินพุต 60 Hz ผลที่ได้จะคลาดเคลื่อน ในทางปฏิบัติ อัตราสุ่มของ ADC ควรมากกว่าความถี่ของสัญญาณที่ต้องการวัด 20 เท่าหรือมากกว่าเพื่อให้ได้รูปร่างสัญญาณที่ใกล้เคียงกับสัญญาณจริงมากที่สุด

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

  1. STMicroelectronics, STM32 F407xx Datasheet-production data [Online], 2013
  2. STMicroelectronics, STM32 F417xx Product-Specification[Online], 2013
  3. STMicroelectronic, UM1472: STM32F4DISCOVERY User Manual [Online], 2012 .
  4. Aimagin,Signal Conditioning Design Guideline, [Online]. Available: http://waijung.aimagin.com/signal_conditioning_design_gui.html.
  5. Aimagin, aMG Photocell – A, [Online]. Available: https://www.aimagin.com/amg-photocell-a.html
  6. E. W. Weisstein, “Fourier Series. From MathWorld–A Wolfram Web Resource.,” [Online]. Available: http://mathworld.wolfram.com/FourierSeries.html.
  7. R. G. Lyons, Understanding Digital Signal Processing, New Jercy: Prentice Hall PTR, 2001
  8. S. J. Orfanidis, Introduction to Signal Processing [Online]. Available: www.ece.rutgers.edu/~orfanidi/intro2sp, 2010.
  9. STMicroelectronics, RM0090: STM32F40xxx Reference Manual [Online], 2013