01076051Lecture 07

Analog-to-Digital Converter (ADC)

บทที่ 7: การแปลงสัญญาณอนาล็อกเป็นดิจิทัล (ADC)

โลกจริงรอบตัวเราเป็นสัญญาณอนาล็อกที่ต่อเนื่อง เช่น อุณหภูมิ แสง เสียง แรงดันไฟฟ้า. แต่ไมโครคอนโทรลเลอร์ประมวลผลได้เฉพาะตัวเลขดิจิทัล. บทนี้อธิบายว่า Analog-to-Digital Converter (ADC) ซึ่งเป็นวงจรที่ใช้แปลงแรงดันอนาล็อกให้เป็นเลขฐานสอง ทำงานอย่างไร, คำนวณค่าที่อ่านได้อย่างไร, มีโครงสร้างแบบใดบ้าง และ ADC ในชิป STM32F767 ใช้งานจริงอย่างไร.

ผลการเรียนรู้ (Learning Outcomes)

  • อธิบายความต่างของสัญญาณ analog (continuous) กับ digital (discrete) และบอกหน้าที่ของ ADC/DAC
  • คำนวณค่า digital output, แรงดัน input, resolution (1 LSB) จากจำนวนบิตและ V_reference ได้
  • อธิบายทฤษฎี Nyquist (sampling ≥ 2 เท่าของความถี่สูงสุด) และปัญหา aliasing
  • เปรียบเทียบโครงสร้าง Flash ADC กับ Successive Approximation (SAR) ADC ในด้านความเร็ว/พื้นที่/จำนวนบิต
  • อธิบายโหมดการทำงานของ ADC ใน STM32F767 (single/continuous/scan, regular/injected) และขา V_REF+/V_REF-
  • ออกแบบการอ่านเซนเซอร์ analog จริง (potentiometer, LDR, LM35) พร้อมเทคนิค moving average

§7.1 สัญญาณ Analog vs Digital และหน้าที่ของ ADC/DAC

สัญญาณในโลกจริง (Real World) เป็นสัญญาณต่อเนื่อง (continuous signal) ค่ามันไล่ต่อเนื่องได้ไม่ขาดช่วง จึงมีค่าที่เป็นไปได้แบบไม่จำกัด (infinite). ตัวอย่างคือ แรงดันจากเซนเซอร์ที่เปลี่ยนเรียบ ๆ ตามอุณหภูมิ.

สัญญาณดิจิทัล (digital signal) เป็นค่าไม่ต่อเนื่อง (discrete) มีเป็นขั้น ๆ เช่น 0, 1, 2, 3 โดยไม่มีค่าตรงกลางระหว่างขั้น. คอมพิวเตอร์ประมวลผลได้เฉพาะค่าดิจิทัลแบบนี้.

ADC ย่อมาจาก Analog-to-Digital Converter (บางครั้งเขียน A/D หรือ A2D) คือวงจรอิเล็กทรอนิกส์ที่วัดค่า input ซึ่งหลัก ๆ เป็นแรงดันไฟฟ้า แล้วให้ output เป็นเลขฐานสอง (binary) ที่แปรผันตรงกับขนาดของแรงดันนั้น. ทุกสัญญาณจากโลกจริงที่ต้องการให้ MCU ประมวลผล ต้องผ่าน ADC ก่อน.

DAC ย่อมาจาก Digital-to-Analog Converter คือวงจรที่ทำตรงกันข้าม คือแปลงข้อมูลดิจิทัลกลับเป็นแรงดันอนาล็อก. ตัวอย่างที่คุ้นเคยคือเครื่องเสียง: ไฟล์เพลงเป็นดิจิทัล ต้องผ่าน DAC จึงจะได้สัญญาณเสียงออกลำโพง และคุณภาพ DAC มีผลต่อคุณภาพเสียง.

การแปลงของ ADC ต้องใช้เวลา (conversion time) แม้จะสั้นมากในระดับไมโครวินาที ก็ไม่ใช่ได้ทันที. เมื่อแปลงเสร็จ ADC จะตั้ง flag บอกว่า conversion เสร็จสมบูรณ์ (เช่น EOC = End Of Conversion) เราต้องรอ flag นี้ก่อนจึงอ่านค่าไปใช้ได้ ถ้ายังไม่ตั้งแปลว่า ADC ยัง busy อยู่.

หัวข้อAnalogDigital
ความต่อเนื่องต่อเนื่อง (continuous)ไม่ต่อเนื่อง (discrete)
จำนวนค่าที่เป็นไปได้ไม่จำกัด (infinite)จำกัดเป็นขั้น ๆ
ตัวอย่างแรงดันเซนเซอร์, เสียงเลขฐานสองในหน่วยความจำ
วงจรแปลงไปADC (analog→digital)DAC (digital→analog)
เปรียบเทียบสัญญาณ analog กับ digital
VIZ-31Analog → Digital staircase
8 samples
แรงดัน (y) เทียบกับเวลา (x)
V_ref0เวลา →

สัญญาณ analog ต่อเนื่อง (เส้นเทา) ถูกสุ่มเป็นขั้นบันได (sample-and-hold, เส้น accent). ยิ่ง sample rate สูง ขั้นยิ่งถี่และเกาะเส้นจริงได้ดีขึ้น — ลด quantization/sampling error.

§7.2 Quantization, Resolution และสูตรการคำนวณ

ADC แบ่งช่วงแรงดันออกเป็นขั้นเท่า ๆ กันตามจำนวนบิต. ตัวอย่าง ADC ขนาด 4 บิต ที่ V_reference = 7.5V จะแบ่งช่วง 0–7.5V เป็นขั้นละเท่า ๆ กัน. เพราะ 4 บิตมี 16 ระดับ แต่ละ 1 บิตจึงกินช่วงประมาณ 0.5V. การปัดค่า input ให้เข้าขั้นที่ใกล้ที่สุดเรียกว่า quantization.

เพราะค่า output เป็นขั้น ๆ ถ้า input ตกตรงกลางระหว่างขั้น เช่น 4.25V ADC ก็ต้องเลือกปัดลงหรือปัดขึ้นเป็นขั้นใดขั้นหนึ่ง (เช่น 4.0V หรือ 4.5V) นี่เป็นธรรมชาติของวงจร. ความสัมพันธ์จริงอาจไม่เป็นเส้นตรงเป๊ะ จึงต้องมีการ calibrate.

ความสัมพันธ์เป็นสัดส่วนตรง (proportional) ระหว่าง digital output (D) กับ input voltage. สูตรหลักคือ D / 2^n = V_in / V_reference. เมื่อ n = จำนวนบิต, V_reference = แรงดันอ้างอิงสูงสุด (เมื่อวัดจาก 0 ขึ้นมา range ก็จะเท่ากับ V_reference).

Resolution หรือความละเอียด คือค่า analog ที่น้อยที่สุดที่ทำให้ output เปลี่ยน 1 บิต. จากตัวอย่าง 4 บิตข้างบนคือ 0.5V อีกชื่อหนึ่งคือ 1 LSB (Least Significant Bit). คำนวณจาก 1 LSB = V_reference / 2^n.

ยิ่งจำนวนบิต (n) มาก ยิ่งละเอียด เพราะ 1 LSB เล็กลง (sensitivity สูงขึ้น). นี่คือเหตุผลที่ ADC 12 บิตละเอียดกว่า 8 บิตมาก. บางตำราใช้ 2^n − 1 แทน 2^n ในตัวหาร ซึ่งต่างกันเล็กน้อยและขึ้นกับธรรมชาติของ ADC ตัวนั้น ควรตรวจสอบกับงานจริง.

ตัวอย่างคำนวณ: ADC 10 บิต (2^10 = 1024), V_reference = 5V, output code = 0x12A (hex) = 298. ได้ V_in = (298/1024) × 5 ≈ 1.46V. และกลับกัน ถ้า V_reference = 4V, V_in = 2.35V, ADC 8 บิต (256) จะได้ code = (2.35/4) × 256 ≈ 150 (ปัดทศนิยมทิ้ง).

V_in (โดยประมาณ)ปัดเข้าขั้นdigital code
~2.1V2.0V0100
~3.2V3.0V0110
4.25V4.0V หรือ 4.5V1000 หรือ 1001
ตัวอย่าง quantization ของ ADC 4 บิต, V_ref = 7.5V (1 LSB ≈ 0.5V)
สูตรสำคัญของ ADCtext
D / 2^n = V_in / V_reference
V_in = (D / 2^n) x V_reference
1 LSB (resolution) = V_reference / 2^n
VIZ-32Quantization ladder + 1 LSB
1111101011000110100010003.30
รหัสที่ได้ (code)
100
= 4 / 7
1 LSB = V_ref / 2^n = 3.3 / 8 = 412.5 mV

bits มากขึ้น → 1 LSB เล็กลง (ละเอียดขึ้น)

แกนแรงดัน 0→V_ref ถูกแบ่งเป็น 2^n ช่องเท่า ๆ กัน แต่ละช่องมีรหัสไบนารี. แรงดัน input จะถูก snap เข้าช่องที่ใกล้ที่สุด. bits มากขึ้น → 1 LSB เล็กลง (ละเอียดขึ้น).

§7.3 Sampling, ทฤษฎี Nyquist และ Aliasing

การแปลงสัญญาณต่อเนื่องเป็นดิจิทัล ต้องมีการ sampling คือการเก็บค่าสัญญาณ ณ จังหวะเวลาต่าง ๆ. คำถามคือต้อง sampling ถี่แค่ไหน.

ยิ่ง sampling ถี่ ยิ่งได้ค่าที่แม่นยำ เพราะได้ข้อมูลใกล้ชิดกับสัญญาณจริง แต่ก็กินเวลาประมวลผลและใช้พลังงานมากขึ้น. ถ้า sampling น้อยเกินไปแล้วต้องการสร้างสัญญาณกลับ (reconstruct) จะได้สัญญาณผิดเพี้ยน.

ทฤษฎี Nyquist ระบุว่า ถ้าต้องการสร้างคลื่น output กลับคืนได้ถูกต้อง ต้อง sampling ที่ความถี่อย่างน้อย 2 เท่าของความถี่สูงสุดของ input. ถ้าไม่ถึงเกณฑ์นี้จะเกิด aliasing คือได้คลื่นใหม่ที่มีความถี่ต่ำกว่าเดิม ทำให้ข้อมูลเพี้ยน.

ผลของ aliasing สำคัญมากกับงานที่ต้อง reconstruct คลื่น เช่น เสียงหรือภาพ เพราะความถี่คือคุณลักษณะของคลื่น (เช่นสีหรือโน้ตดนตรี) ถ้าความถี่เพี้ยนก็ผิดทั้งหมด. แต่ถ้าเราแค่ต้องการวัดค่า (เช่นวัดอุณหภูมิ) ไม่ได้สร้างคลื่นกลับ ก็อาจไม่ต้อง sampling ถี่มาก ขึ้นกับงาน.

ตัวอย่างงานที่ใช้ ADC: Data Acquisition (อ่านเซนเซอร์แล้วเก็บ/ส่งต่อ, งาน IoT), signal processing (เสียง/วิดีโอ เช่น Siri, Google Assistant, กีตาร์เอฟเฟกต์, กล้องถ่ายรูปที่เซนเซอร์ CCD เปลี่ยนแสงเป็นแรงดันแล้วผ่าน ADC).

VIZ-33Sampling & Aliasing (Nyquist)
Nyquist OK
เวลา →
fs = 12 | 2·fin = 6 | fs ≥ 2·fin → OK

เมื่อ sample rate (fs) ต่ำกว่า 2× ความถี่สัญญาณ (Nyquist) เส้นที่สร้างคืนจากจุด sample จะกลายเป็นคลื่นความถี่ต่ำกว่า (alias) ที่ผิดจากของจริง.

§7.4 โครงสร้าง ADC: Flash ADC vs SAR ADC

Flash ADC สร้างจากตัวเปรียบเทียบแรงดัน (comparator) หลายตัวพร้อม ladder ของตัวต้านทานที่แบ่งแรงดันอ้างอิงเป็นสัดส่วน (เช่น 1/4, 1/2, 3/4 ของ V_reference). comparator แต่ละตัวเทียบ V_in กับแรงดันประจำหลักของมัน แล้วเอาท์พุตผ่านวงจร encoder ลดรหัสให้เหลือจำนวนบิตที่ต้องการ.

ADC 2 บิตแบบ Flash ต้องใช้ comparator 3 ตัว. จุดเด่นคือเร็วมาก เพราะ comparator เป็นวงจรอิเล็กทรอนิกส์ที่ delay แค่หลักนาโนวินาที การแปลงจึงแทบจะทันที. จุดด้อยคือใช้ transistor จำนวนมาก (comparator เยอะ) จึงเปลืองพื้นที่บนชิปและราคาแพง. ด้วยเหตุนี้ Flash ADC จึงไม่นิยมฝังในไมโครคอนโทรลเลอร์.

SAR ADC (Successive Approximation Register) ใช้ comparator เพียงตัวเดียว ร่วมกับ DAC ภายในและ register. มันหาค่าทีละบิตแบบ binary search เริ่มจากบิตสูงสุด (MSB) ลงมา. นี่คือชนิดที่ฝังอยู่ใน MCU ส่วนใหญ่ รวมถึง STM32F767.

หลักการ SAR: เดาว่า MSB เป็น 1 (ครึ่งหนึ่งของ full scale) ส่งค่าเข้า DAC ได้ V_DAC แล้วเอามา compare กับ V_in. ถ้า V_in มากกว่า V_DAC ยืนยันบิตเป็น 1; ถ้าน้อยกว่าเปลี่ยนเป็น 0. จากนั้นเดาบิตถัดไปแบบเดียวกัน ทำครบทุกบิตจึงได้คำตอบ. จึงใช้เวลาประมาณ 1 clock ต่อ 1 บิต — ช้ากว่า Flash แต่ประหยัดวงจรมาก.

ตัวอย่าง SAR: V_reference = 15V (full scale), 4 บิต, V_in = 5V. รอบแรก V_DAC = 7.5V (ครึ่งหนึ่ง) → 5 < 7.5 บิตบน = 0. รอบต่อไปลงมาครึ่งล่าง V_DAC = 3.75V → 5 > 3.75 บิตนี้ = 1. ทำต่อไปเรื่อย ๆ จนครบบิต.

หัวข้อFlash ADCSAR ADC
จำนวน comparatorมาก (หลายตัว)1 ตัว
ความเร็วเร็วมาก (ทันที)ช้ากว่า (~1 clock/บิต)
พื้นที่/transistorเปลือง (แพง)ประหยัด (ถูก)
ใช้ใน MCUไม่นิยมนิยม (STM32 ใช้)
เปรียบเทียบ Flash ADC กับ SAR ADC
VIZ-34Flash ADC comparator ladder
output code = 10
V_ref2.47V01.65V10.82V1V_inencoder10
2-bit flash → 2^2−1 = 3 comparators | แพงแต่เร็ว (1 clock)

resistor ladder สร้างแรงดันอ้างอิงที่ 1/4, 1/2, 3/4 V_ref ป้อนเข้า comparator แต่ละตัว. comparator ที่ threshold < V_in จะ fire (ติด). encoder ยุบ thermometer code เป็นไบนารี. n-bit flash ต้องใช้ 2^n−1 comparator — แพงแต่เร็ว 1 clock.

VIZ-35SAR binary-search steps
bit 0/4 reg = ····
3.30V_intrial
·MSB
·
·
·LSB
register = ····

1 comparator ใช้ซ้ำทุกบิต → 4 clock

SAR ลองทีละบิตจาก MSB: ตั้งบิตเป็น 1 สร้างแรงดันทดลอง (trial) เทียบกับ V_in ถ้าเกินก็ปัดเป็น 0 แล้วลงบิตถัดไป — เหมือน binary search. ใช้ comparator ตัวเดียวซ้ำทุกบิต → n clock.

§7.5 ADC ใน STM32F767 และขา V_REF

ADC ใน STM32F767 เป็นชนิด SAR ขนาดสูงสุด 12 บิต. ตั้งค่าให้แปลงที่ 12, 10, 8 หรือ 6 บิตได้ (งานที่ไม่ต้องละเอียดใช้บิตน้อยลงเพื่อให้เร็วขึ้น). มี ADC ให้ใช้ 3 โมดูล และแต่ละโมดูลมีหลาย channel ย่อย.

Data register จัดเก็บได้ 16 บิต แต่ output สูงสุดแค่ 12 บิต จึงให้เลือกจัดชิดขวา (right-aligned) หรือชิดซ้าย (left-aligned). การจัดชิดซ้ายเหมือนเติม 0 อีก 4 บิตฝั่ง LSB ซึ่งมีผลกับการคำนวณ code ต้องระวังให้ตรง.

โหมดการแปลง: Single conversion (สั่งทีเดียวแปลงครั้งเดียว ต้องสั่งใหม่ถ้าจะแปลงอีก), Continuous conversion (แปลงวนไปเรื่อย ๆ แต่ต้องอ่านให้ทันก่อนเขียนทับ มิฉะนั้นเกิด Over Run), Scan conversion, Discontinuous mode.

โหมดลำดับ channel มีสองแบบ: Regular คือลำดับที่เราตั้งไว้ปกติ (เช่นแปลง channel 0, 1, 3 ตามลำดับ). Injected คือการแทรกการแปลงพิเศษเข้ามาก่อน regular เมื่อมี event สำคัญ เช่นตรวจพบไฟเลี้ยงกำลังจะดับก็ save ตัวแปรลง Flash ทันที.

ขา V_REF+ และ V_REF- กำหนดช่วงแรงดันที่วัดได้ — V_in ที่จะวัดต้องอยู่ในช่วงนี้. บนบอร์ด NUCLEO-F767ZI ต่อ V_REF- = 0V และ V_REF+ = 3.3V ดังนั้นวัดได้ช่วง 0–3.3V. ADC มีขาจ่ายไฟของตัวเอง ถ้าจ่าย 2.4–3.6V ทำงานที่ full speed, ถ้าลดเหลือ ~1.8V จะทำงานช้ากว่า.

เทคนิคลด Over Run: ใช้ DMA ย้ายข้อมูลแทนการ polling/interrupt, หรือใช้ double buffer (ping-pong buffer) ให้ DMA เติมครึ่งหนึ่งขณะ CPU ประมวลผลอีกครึ่ง. และยืดเวลา sampling (default 3 cycles ขยายเป็น 15 cycles) เพื่อให้อ่านทันก็ช่วยได้.

โหมดพฤติกรรม
Singleแปลงครั้งเดียว ต้องสั่งใหม่
Continuousแปลงวนไปเรื่อย ๆ
Regular sequenceลำดับ channel ที่ตั้งไว้ปกติ
Injectedแทรกแซงลำดับเมื่อมี event พิเศษ
โหมดการทำงานของ ADC ใน STM32F767
VIZ-36ADC modes & Over-Run
DR = CH0
ลำดับการแปลง (sequencer)
CH0
CH1
CH3
CH7
OVR flag = 0 (อ่านทัน)

sequencer แปลงช่อง regular เรียงกัน (CH0, CH1, …). injected conversion แทรกคิวได้. single = จบรอบเดียว, continuous = วนซ้ำ. ถ้าผลใหม่มาทับก่อนอ่านผลเก่า จะเกิด Over-Run.

§7.6 การอ่านเซนเซอร์ Analog จริง และ Moving Average

เซนเซอร์ที่ใช้ทดลองกับ ADC บ่อยที่สุดคือ potentiometer (ตัวต้านทานปรับค่าได้) ใช้เป็น voltage divider เพื่อปรับแรงดัน input ให้ ADC. อีกตัวคือ LDR (Light Dependent Resistor) ความต้านทานลดลงเมื่อแสงสว่างขึ้น; ต้องต่อตัวต้านทานค่าคงที่อนุกรมไว้กันช็อตตอนค่าความต้านทานต่ำมาก.

เซนเซอร์อุณหภูมิ LM35 ให้ output แบบอนาล็อก 10 mV ต่อ 1 องศาเซลเซียส. วัดได้สูงสุด ~110°C และต้องใช้ไฟเลี้ยงอย่างน้อย ~4V (ใช้ 3.3V ไม่พอ ต้องต่อ 5V บนบอร์ด). อ่านแรงดันเข้า ADC ได้ digital แล้วคำนวณกลับเป็นแรงดัน แล้วหารด้วย 10 mV ได้องศา.

ค่าที่ ADC อ่านได้มักแกว่ง (noise) เช่นแกว่งไปมาประมาณ 90 ค่า. ถ้าเขียนเงื่อนไข if เปรียบเทียบค่าโดยตรง การแกว่งตรงรอยต่ออาจทำให้สลับไปมา. วิธีแก้คือ Moving Average คือเก็บค่า N ครั้งล่าสุดแล้วเฉลี่ย เลื่อนหน้าต่างไปเรื่อย ๆ.

ยิ่งเฉลี่ยหลายค่า (เช่น 16 ค่า) ยิ่งราบเรียบ (smooth) แต่จะ response ช้าลง เพราะต้องรอเก็บค่าหลายครั้ง. ต้องเลือกให้เหมาะกับงาน — ถ้างานไม่ไวต่อความหน่วงก็ smooth มากได้ แต่ถ้าต้องตอบสนองเร็วต้องเฉลี่ยน้อยลง. อีกมุมคือมองเป็น low-pass filter กำจัดความถี่สูง (noise) ออก.

ในงานอุตสาหกรรมมักใช้ ADC ที่รับกระแส (เช่นมาตรฐาน 0–20 mA) แทนแรงดัน เพราะถ้าส่งแรงดันผ่านสายยาว ความต้านทานสายทำให้แรงดันดรอปและค่าเพี้ยน ส่วนกระแสไม่ sensitive ต่อความยาวสายเท่าแรงดัน.

Moving average อย่างง่าย (เฉลี่ย 8 ค่า)c
// buf[] เก็บค่า ADC 8 ค่าล่าสุด
uint32_t sum = 0;
for (int i = 0; i < 8; i++) {
    sum += buf[i];
}
uint16_t avg = sum >> 3;   // หาร 8 = เลื่อนขวา 3 บิต
// เฉลี่ย 16 ค่า: sum >> 4 (หาร 16)
VIZ-37Analog sensor wiring
+3.3VGNDPOTRADC IN
V ที่ขา ADC IN
1.65 V

การต่อ sensor แบบ voltage divider เข้าขา ADC: โพเทนฯ, LDR+ตัวต้านทานอนุกรม, และ LM35 (10 mV/°C). แรงดันที่โหนด ADC IN แปลงเป็นค่าที่อ่านได้.

VIZ-38Moving-average smoothing
smooth ↑ lag ↑
step changeเวลา →
raw (noisy)moving average (N = 8)

สัญญาณ ADC ที่มี noise (เส้นเขียว) เทียบกับค่าเฉลี่ยเคลื่อนที่ N ตัว (เส้น accent). N มากขึ้น → เรียบขึ้นแต่หน่วง (lag) มากขึ้น เห็นได้จากเส้นเรียบตามหลังจุดที่สัญญาณเปลี่ยนระดับ.

แบบฝึกหัด

12 ข้อ — แต่ละข้อมีชนิดและระดับความยากกำกับ กดปุ่ม "ดูเฉลย" เพื่อดูคำตอบและคำอธิบาย

  1. 1.ปรนัยง่าย

    ADC ทำหน้าที่อะไร

  2. 2.ปรนัยง่าย

    ข้อใดอธิบายสัญญาณ analog ถูกต้อง

  3. 3.เติมคำง่าย

    วงจรที่แปลงข้อมูลดิจิทัลกลับเป็นแรงดันอนาล็อก เรียกว่าอะไร (ตอบตัวย่อ)

  4. 4.ปรนัยกลาง

    ADC 8 บิต, V_reference = 4V, อ่านได้ code = 150 แรงดัน input ประมาณเท่าใด

  5. 5.ปรนัยกลาง

    ADC 10 บิต, V_reference = 5V ค่า resolution (1 LSB) เท่ากับเท่าใด

  6. 6.ปรนัยกลาง

    ถ้าต้องการให้ ADC มี resolution ละเอียดขึ้น (sensitivity สูงขึ้น) ควรทำอย่างไร

  7. 7.ปรนัยยาก

    ตามทฤษฎี Nyquist ต้อง sampling ที่ความถี่อย่างน้อยเท่าใดจึง reconstruct คลื่นได้ถูกต้อง

  8. 8.เติมคำยาก

    เมื่อ sampling ช้ากว่าเกณฑ์ Nyquist จะได้คลื่นใหม่ที่มีความถี่ต่ำกว่าเดิม ปรากฏการณ์นี้เรียกว่าอะไร

  9. 9.ปรนัยยาก

    เหตุใด Flash ADC จึงไม่นิยมฝังในไมโครคอนโทรลเลอร์ ทั้งที่แปลงเร็วมาก

  10. 10.ปรนัยกลาง

    ADC ชนิด SAR หาค่าทีละบิตด้วยวิธีใด

  11. 11.ถูก/ผิดง่าย

    บน NUCLEO-F767ZI ต่อ V_REF- = 0V และ V_REF+ = 3.3V ดังนั้นวัดแรงดัน input ได้ในช่วง 0–3.3V

  12. 12.วิเคราะห์ยาก

    อ่านค่าจาก potentiometer ผ่าน ADC แล้วค่าแกว่งตลอดเวลา จึงทำ moving average 16 ค่า. ทำไมค่าจึงเรียบขึ้นแต่ตอบสนองช้าลง และจะปรับอย่างไรถ้างานต้องการตอบสนองเร็วกว่านี้