ADC ราคา $2.97 แย่ได้ขนาดไหน?
(excamera.substack.com)- โมดูล ADS1115 ADC ราคาถูกให้ความสามารถเกือบเหมือนสเปกทางการ
- ฟังก์ชัน programmable gain amplifier ช่วยให้วัดแรงดันช่วงเล็กมากได้อย่างแม่นยำสูง
- พบกรณีที่บอร์ดราคาถูกบางตัวมีความคลาดเคลื่อนด้าน ความเร็วในการวัด และ ความแม่นยำ
- เมื่อนำ อัลกอริทึมการคาลิเบรต แบบง่ายมาใช้ ก็ให้ผลลัพธ์ที่แม่นยำได้มาก
- ชิ้นส่วนราคาถูกอาจเป็น ของเสียจากกระบวนการผลิต หรือ ของก๊อบปี้ แต่โดยรวมก็ยังใช้งานพื้นฐานได้ไม่มีปัญหาใหญ่
การทดลองประสิทธิภาพจริงของ ADS1115 ADC ราคาถูก
ภาพรวม
- ในงาน embedded โดยทั่วไปมักใช้ ADC (ตัวแปลงสัญญาณแอนะล็อกเป็นดิจิทัล) ที่อยู่ภายในไมโครคอนโทรลเลอร์
- ADC แบบฝังตัวมีข้อดีคือราคาถูกและเร็ว แต่จำนวนบิตที่วัดได้จริง (ENOB) อยู่เพียงราว 8~9 บิต
- เมื่อไม่นานมานี้ได้ทดสอบโมดูล ADS1115 ของ Texas Instruments(TI)
- ADS1115 เป็น ADC ภายนอก ที่ให้ความแม่นยำได้สูงสุด 16 บิต
คุณสมบัติหลักของ ADS1115
- มีความสามารถในการขยาย dynamic range ทำให้การวัดแรงดันขนาดเล็กละเอียดขึ้นได้สูงสุด 20 เท่า
- ผ่าน programmable gain amplifier (PGA) จึงปรับช่วงการวัดทั้งหมดได้ตั้งแต่ ±6.144 V ถึง ±0.256 V
- LSB ต่ำสุดอยู่ที่ประมาณ 7.8 μV (0.256 V ÷ 32768) ทำให้ตรวจจับการเปลี่ยนแปลงที่เล็กมากได้
- เมื่อเทียบกับ ADC ในไมโครคอนโทรลเลอร์ทั่วไป (อ้างอิง 3.3V, 9 ENOB) ที่หนึ่งสเต็ปมีค่าประมาณ 6mV แล้ว ถือว่ามีความละเอียดสูงกว่ามาก
- ใช้ internal voltage reference จึงได้เปรียบเมื่อเทียบกับ MCU อย่าง RP2040 ที่ต้องใช้ external analog reference
ประเด็นด้านราคาและสภาพแวดล้อมการทดสอบ
- ADS1115 มีส่วนต่างราคามาก โดยที่ Digikey สำหรับจำนวน 1,000 ชิ้นอยู่ที่ราว $4 ขณะที่ LCSC อยู่ที่ $0.60
- ซื้อบอร์ด breakout ADS1115 จาก Amazon ในราคา $2.97 ต่อชิ้น (คาดว่าน่าจะใช้ชิ้นส่วนราคา $0.60)
- มีแผนซื้อบอร์ดราคาแพงกว่า (ของแท้) จาก Adafruit เพิ่มเติมเพื่อทดสอบเปรียบเทียบ
กระบวนการทดสอบจริง
-
ทดสอบบอร์ดราคาถูกด้วย I²CMini และแหล่งจ่ายแรงดัน DC ความแม่นยำสูง
-
จุดที่ตรวจสอบหลัก:
- ทำงานได้ตรงตามสเปกหรือไม่
- หรือมีการนำชิ้นส่วนที่ถูกกว่ามาขายโดยทำให้เข้าใจผิดว่าเป็น ADS1115
-
ผลการทดสอบ
- การทำงานพื้นฐาน รวมถึง เอาต์พุต 16 บิต, programmable gain amplifier, และ อัตราการสุ่มตัวอย่างหลายระดับ โดยรวมสอดคล้องกับ datasheet ของ TI
- ใน differential mode เมื่อต่ออินพุตเข้าด้วยกันจะวัดได้ 0 เสมอ, เมื่อป้อน 2.5V ก็วัดได้ถูกต้อง, และเมื่อกลับขั้วก็แสดงค่าตรงข้าม จึงไม่พบปัญหาในการทำงานพื้นฐาน
ความแม่นยำในการวัดและความคลาดเคลื่อน
- Data Rate (อัตราการสุ่มตัวอย่าง) : ตามสเปกของ TI อนุญาตให้คลาดเคลื่อนได้ภายใน ±10%
- ในโหมด 8 SPS บอร์ดสามตัวทำงานที่ 6.5~7 SPS ซึ่งช้ากว่าเล็กน้อย
- มีบอร์ดหนึ่งตัวทำงานด้วยจังหวะที่ผิดไปอย่างสิ้นเชิงที่ 300 SPS จึงถูกตัดออกจากการทดสอบหลังจากนั้น
- เมื่อวัดแรงดันแม่นยำ 2.50067V กลับแสดงผลเป็น 2.4883V เกิดความคลาดเคลื่อนประมาณ 12mV หรือ 0.5% (มากกว่าสเปกทางการของ TI)
- เมื่อนำ อัลกอริทึมการคาลิเบรตเชิงเส้น แบบง่ายไปใช้บนไมโครคอนโทรลเลอร์ ความคลาดเคลื่อนลดลงจนเหลือต่ำกว่า 10 μV
บทสรุป
- คาดว่าชิ้นส่วนที่มีตำหนิ หรือชิ้นส่วนที่สเปกต่ำกว่าของแท้ ได้ไหลเข้าสู่ช่องทางจำหน่ายราคาถูกสำหรับสายงานอดิเรก
- โดยพื้นฐานแล้วยังสามารถวัดได้ค่อนข้างแม่นยำ และหากชดเชยด้วยซอฟต์แวร์ก็ไม่มีปัญหาใหญ่ในการใช้งานจริง
- มีแผนจะนำบอร์ดราคาแพงของแท้มาเปรียบเทียบทดสอบใหม่ภายใต้เงื่อนไขเดียวกัน
ปิดท้าย
- ADS1115 ราคาถูกให้ความคุ้มค่าต่อราคาค่อนข้างโดดเด่น
- หากเพิ่ม การคาลิเบรตแบบง่าย ในระดับฮาร์ดแวร์/เฟิร์มแวร์ ก็สามารถทำให้ได้ความแม่นยำที่ใช้งานได้จริง
- ควรระวังเรื่องแหล่งซื้อและการควบคุมคุณภาพ เพื่อหลีกเลี่ยงปัญหาสินค้ามีตำหนิ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ถ้าขัดทั้งชิ้นส่วนราคาถูกและของแท้ด้วยกระดาษทรายละเอียด แล้วล้างด้วย isopropyl ก่อนนำไปดูใต้กล้องจุลทรรศน์แบบออปติคัล จะเทียบกันได้ง่ายมาก โดยไม่จำเป็นต้องไปถึงระดับมาร์กกิงที่ระบุได้หรือชั้นโลหะ ก็สามารถเห็นความเหมือนและความต่างเชิงโครงสร้างของ die ได้ทันที ชิ้นส่วนโคลนมักต่างกันชัดเจนในเรื่อง technology node, สถาปัตยกรรม, ขนาดชิป ฯลฯ เพราะโดยมากเป็นแค่การเลียนแบบฟังก์ชัน แนะนำวิธีแกะแพ็กเกจแบบโลว์เทคด้วยกระดาษทราย และมีภาพที่เกี่ยวข้องให้ดูด้วย (ภาพ 1 / ภาพ 2)
ผมเคยทำอะไรแบบนี้มาหลายครั้ง ส่วนใหญ่ใช้แก้ข้อพิพาทเรื่องที่มาของชิ้นส่วน แพ็กเกจ epoxy ส่วนมากเอาออกได้เร็วถ้าละลายในกรดซัลฟิวริก/ไนตริกที่กำลังเดือด จากประสบการณ์ของผม ส่วนใหญ่เป็นแค่การแปะฉลากใหม่, เปลี่ยน bin หรือไม่ก็เอาของตก QC แบบชัดเจนมาปลอมเป็นสินค้าที่ดูใช้ได้ และมีวิดีโอตัวอย่างจากเมื่อหลายปีก่อนด้วย (ลิงก์วิดีโอ)
อาจไม่จำเป็นต้องเป็นโคลนก็ได้ อย่างที่ผู้เขียนต้นฉบับบอกไว้ มีหลายกรณีที่สินค้าที่ถูกตัดตกจากกระบวนการผลิตถูกรีแพ็กแล้วปล่อยเข้าสู่ช่องทางจำหน่ายทั่วไป
ถ้าที่นี่มีฟีเจอร์แท็ก นี่เป็นหัวข้อที่ Ken Shirriff น่าจะชอบมาก แนะนำให้ดูบล็อกของเขา(righto.com)
ผมไม่เห็นด้วยกับคำกล่าวที่ว่า "ราคาถูกและค่อนข้างเร็ว แต่คุณภาพไม่ดีนัก และแม้สเปกจะบอกเอาต์พุต 12/16 บิต แต่ ENOB จริงอยู่แค่ราว 8~9" ถ้าเป็น MCU รุ่นใหม่ แค่ระวังเรื่องการจ่ายแรงดันอ้างอิงภายนอกให้เสถียร และปิด subsystem ที่ไม่จำเป็นบนชิป ก็สามารถรีด ENOB ได้เกิน 10 บิตสบาย ๆ แน่นอนว่า ADC ที่มากับ MCU ตัวเดียวจะไม่ดีเท่า ADC แบบสแตนด์อโลน แต่สำหรับความต้องการ ADC 90% มันก็ใช้งานได้จริงเพียงพอ ถ้าต้องการบิตมากกว่านั้นก็ต้องลงแรงด้านการออกแบบมากขึ้น ซึ่งในบทความต้นทางไม่ได้พูดถึง power supply ที่ผู้เขียนใช้, noise ของ MCU หรือการจัดการ RFI เลย จึงตัดสินยากว่านี่เป็น IC ปลอมสเปกตกจริง ๆ หรือแค่สภาพแวดล้อมการทดลองมี noise มาก
ถ้าเอา GPIO สองขามาจัดเป็น first-order sigma-delta topology ด้วยตัวต้านทานภายนอกสองตัว คาปาซิเตอร์หนึ่งตัว และปิด hysteresis จะได้ผลลัพธ์ที่น่าสนใจ ผมใช้ RP2040 กับไฟเลี้ยงจาก LDO ทำการวัดแบบ differential โดยให้หนึ่งช่องติดตามเฉพาะ threshold noise ได้ 16 ENOB ที่ 1kHz และได้ ENOB สูงกว่านั้นใน DC สิ่งสำคัญมากคืออย่าให้ชิปมีการทำงานเป็นคาบ เช่น ควรใช้ sleep แบบช่วงเวลาสุ่มเพื่อกระจายสเปกตรัม และ USB ก็ใช้งานได้ที่ noise ต่ำกว่า -100dB เรื่องความแม่นยำ DC ผมยังไม่ได้ทดสอบ แต่ถ้าใช้ช่อง GPIO คล้ายกันก็น่าจะพอเหมาะกับงานไม่วิกฤตและไม่ต้องการความเที่ยงตรงสูง เช่น การตรวจจับสาย CC หรือ analog joystick
ทั้งสองความเห็นอาจถูกพร้อมกันก็ได้ ผู้เขียนต้นฉบับอาจเขียนโดยนึกถึงเฉพาะ MCU ราคาถูก ส่วนผู้แสดงความเห็นน่าจะนึกถึง MCU ระดับสูงกว่า ADC 12 บิตของ RP2350 มีสเปกระบุไว้ที่ 9.2 ENOB ถ้า decimate จากการสุ่มหลายครั้งก็น่าจะได้สูงขึ้น แต่ datasheet นี่แหละคือหลักฐานของข้ออ้างในบทความ (ลิงก์เอกสารทางการ Raspberry Pi) ส่วน CH32V003 ซึ่งเป็น MCU ที่ถูกกว่านี้ก็มีประสิทธิภาพ ADC แย่กว่าอีก ในทางกลับกัน MCU อย่าง STM32H7 series ก็มี ADC 16 บิตที่ทำได้ 13+ ENOB แต่ H7 แพงกว่า RP2350 มากกว่า 10 เท่า เลยไม่ค่อยใช่ของที่นักทดลองจะหยิบมาเล่นกันบ่อย (STM32H7 ADC application note)
ผมทดสอบบอร์ดพัฒนา STM32F103 หลายตัวด้วยมัลติมิเตอร์ Siglent SDM3055 และ power supply Siglent SPD330X ADC แบบ 12-bit SAR ของชิปได้รับผลจาก layout และการออกแบบบอร์ดค่อนข้างมาก ตัวอย่างที่แย่สุดก็ยังได้ 10 บิต ส่วนตัวที่ดีที่สุดก็เห็นผลใกล้ 12 บิต โดยไม่ได้มีการจูนซอฟต์แวร์อะไรเป็นพิเศษ ตอนที่มีการสื่อสารกำลังทำงาน ประสิทธิภาพมักตกลงบ้าง แต่นอกเหนือจากนั้นก็ไม่ได้เจอผลกระทบจาก noise อะไรเป็นพิเศษ
เดิมทีผมตั้งใจจะใช้ ADS1115 (ของแท้) ในโปรเจกต์ แต่สุดท้ายเลือก STM32g071 เพราะถูกกว่า หาซื้อง่ายกว่าในตอนนั้น และยืดหยุ่นกว่ามาก ADC ของ STM32g/h series รุ่นหลัง ๆ ก็มีความเสี่ยงเชิงฮาร์ดแวร์/ซอฟต์แวร์น้อยกว่าตระกูล f103 เก่าอย่างชัดเจน
ผมแค่อยากชี้ว่า "ในย่อหน้านั้นที่บอกว่า 'ADC ของไมโครคอนโทรลเลอร์มีช่วงคงที่ 3.3V ดังนั้น 9 ENOB เท่ากับประมาณ 6mV' มันทำให้ดูเหมือน MCU ทุกตัวไม่มีแรงดันอ้างอิงอิสระ ทั้งที่จริงมี MCU หลายรุ่นรวมถึงของ NXP ที่รองรับแรงดันอ้างอิงแบบโปรแกรมได้ในตัว"
สำหรับความเห็นที่ว่า "ชิ้นส่วนราคาถูกส่วนใหญ่คือของลอกเลียนแบบที่ทำได้ดีมาก หรือไม่ก็เป็นของตก QC ที่หลุดเข้าช่องทางจำหน่าย" จากที่ผมเคยเห็น ชิปปลอมส่วนใหญ่เป็นกรณีของ ghost shift มากกว่า คือการผลิตลับนอกเวลางานปกติ แต่ TI ผลิตผลิตภัณฑ์อนาล็อกทั้งหมดภายในบริษัทเอง ผมจึงคิดว่าความเป็นไปได้ที่จะเป็น ghost shift หรือของตก QC น่าจะต่ำ และส่วนตัวคิดว่าน่าจะเป็น ADS1015 ที่ถูก relabel เป็น ADS1115 มากกว่า
ของปลอมที่เคยทำให้ผมเสียหายจริง ๆ (เช่น FDTI, โคลน STM32 ฯลฯ) ส่วนใหญ่เป็นของปลอมที่ทำสำเนาขึ้นมาโดยตรง ไม่ใช่ของสต๊อกล้น, ghost shift หรือการแพ็กของเสียใหม่ ผมเจอแบบนี้บ่อยกว่าในฝั่งดิจิทัลและ mixed-signal อนึ่ง ชิปโคลน STM32 มี stack-die flash เพราะทำกระบวนการแฟลชเองไม่ได้เลยต้องเอามาซ้อนเพิ่ม ดังนั้นเวลาขัดแพ็กเกจจะเห็น bonding wire เพิ่มอีกชุดหนึ่ง และยังสามารถใช้ bus นี้เพื่อข้าม read protection ได้ด้วย
ผมเป็นคนเขียนบทความนั้นเอง และผมก็ทราบว่ามีรายงานกรณี ADS1015 ถูกแปะฉลากเป็น ADS1115 เหมือนกัน ถ้าเป็น ADS1015 เอาต์พุตก็น่าจะตัดที่ 12 บิต แต่ชิ้นส่วนที่ผมทดสอบให้ค่า readout 16 บิตอย่างชัดเจน
ผมสนใจเรื่องราวและภูมิหลังของวงการ ADC มาก จริง ๆ แล้วผมเคยใช้งานแค่ความเร็วต่ำ เริ่มจาก MCP3208 (SPI) ใช้แบบ 8 ช่อง 100K samples/sec แต่เพราะมันช้าเลยเปลี่ยนไปใช้ ADS7953 ซึ่งมี 16 ช่องและเร็วขึ้น 10 เท่า ประสิทธิภาพดีกว่าอย่างชัดเจน แต่เขียนโปรแกรมยากกว่า และจะได้ความเร็วสูงสุดก็ต่อเมื่อสแกนอินพุตตามลำดับที่กำหนดไว้ ชิปพวกนี้ให้ความรู้สึกเหมือนรถยนต์สำหรับผม ADS7953 เหมือนซูเปอร์คาร์ ส่วน MCP3208 เหมือน Toyota เรียบง่าย ผมก็สงสัยเหมือนกันว่าชิป ADC แต่ละตัวไปตั้งหลักในตลาดกันอย่างไร ถูกใช้แพร่หลายแค่ไหน และมีประวัติทางอุตสาหกรรมแบบใดบ้าง
ผมเคยเห็นโปรเจกต์ที่ CERN ใช้ ADC 12 บิตที่สุ่มตัวอย่างได้เร็วระดับหลายสิบ GHz เคล็ดลับก็คือการประมวลผลแบบขนานนั่นเอง พวกเขาทำสำเนา SAR 12 บิตที่ทำงานระดับ MHz หลายชุด แล้วใช้ analog multiplexer ขนาดใหญ่กระจายสัญญาณแบบ round-robin ชิปกินพื้นที่มหาศาล แต่ก็ทำความเร็วได้จริง นอกจากวิธีสุดขั้วนี้ ยังมีการใช้ flash ADC(วิกิ Flash ADC) หรือ multi-slope ADC เพื่อความแม่นยำ(บทสอน Multi-slope ADC) ด้วย ผมก็อยากรู้เรื่องประวัติและเบื้องหลังเหมือนกัน
ขอพูดถึง AD9226 ด้วย เป็นแบบ 1 ช่อง แต่ 12 บิต และทำความเร็วได้ถึง 65MSa/s ผมซื้อจาก AliExpress มาประมาณ $12 แล้วใช้ทดลองถอดรหัสวิดีโออนาล็อกด้วยซอฟต์แวร์ ตอนผมใช้กับ Raspberry Pi Zero และ peripheral SMI ที่ระดับประมาณ 8 บิต 20MSa/s สิ่งที่เป็นคอขวดอย่างน่าประหลาดกลับเป็นการส่งข้อมูล อ้างอิงวิธีใช้ SMI นี้ได้ที่นี่ (ลิงก์ iosoft.blog)
ความเร็ว 100K samples/sec นี่ถือว่าเร็วมหาศาลในโลกของผมเลย ผมทำงานกับโปรแกรม PLC แล้วแค่ดันจากมาตรฐาน 2K samples/sec ไปเป็น 10K ก็ถือว่าเป็นประสิทธิภาพสูงมากแล้วในทางปฏิบัติ
ADC ความเร็วสูงมากนั้นยุ่งยากเกินกว่าจะให้ไมโครคอนโทรลเลอร์รับมือโดยตรง จึงมักเป็นงานของฝั่ง FPGA มากกว่า ต้องให้ FPGA รับข้อมูลจาก ADC โดยตรงแล้วแปลงให้ MCU จัดการง่ายขึ้นผ่าน bus แบบขนาน และเพราะการส่งข้อมูลความเร็วสูงต้องใช้ขาจำนวนมาก การจัดการระดับ low-level และ DMA จึงทำให้ในทางปฏิบัติรู้สึกว่ายากมาก
ตรงกันข้ามกับคำกล่าวที่ว่า "ADC 12~16 บิตมี ENOB แค่ราว 8~9" วิธีแปลงแบบ 1 บิตที่ใช้ใน SACD (สุ่มตัวอย่างระดับหลายล้านครั้งต่อวินาที) ทำ dynamic range ได้ 120dB และแบนด์วิดท์ประมาณ ~100kHz ขณะที่ CD (16-bit PCM) อยู่ที่ 96dB และช่วง 20kHz จากมุมมองของความซับซ้อนฮาร์ดแวร์อนาล็อก ตัวแปลงแบบ 1 บิต/bitstream เรียบง่ายกว่ามาก ที่ ADC 16 บิตราคาถูกก็เพราะผลิตจำนวนมากจริง ๆ แนวคิดที่เอาอัตราการสุ่มตัวอย่างมาทดแทน bit depth นั้นน่าสนใจมาก คล้ายกับที่ SSAA ในกราฟิก 3D ใช้การสุ่มพิกเซลเพิ่มเพื่อเก็บข้อมูลความถี่สูง (วิกิ 1-bit DAC, วิกิ Direct Stream Digital)
ADC ราคา $3 ไม่ได้ถูกเลย ADC ที่ถูกจริงคือพวกที่ฝังมากับ MCU ราคาถูก TI เองก็ขาย AES/ADC ราคาถูกบางตัวที่จำกัดไว้แค่ 10/12 บิตโดยตั้งใจ แต่ linearity จริงอาจเกิน 16 บิตด้วยซ้ำ ต้นทุนการผลิตของชิ้นที่มีตำหนิกับชิ้นปกติแทบไม่ต่างกัน ถ้ากระบวนการผลิตเดียวกันและการออกแบบแข็งแรงพอ ADC ราคาถูกก็ไม่ได้จำเป็นต้องมีประสิทธิภาพแย่เป็นพิเศษ
LCSC อาจถูกได้เพราะซื้อจำนวนมากตรงจาก TI และรายอื่น ๆ แล้วขายด้วย margin ต่ำ ผมเคยเห็นชิปโคลนใน LCSC อยู่บ้าง แต่ส่วนใหญ่จะขายภายใต้ชื่อแบรนด์อื่น
ราคาต่ำไม่ได้แปลว่าคุณภาพต้องต่ำเสมอไป ADC ความแม่นยำสูงถ้าไม่ต้องการอัตราการสุ่มตัวอย่างสูงก็ทำได้ง่ายด้วยเทคนิคการประมวลผลสัญญาณ และ ADC แบบ delta-sigma หรือแบบ ramp ก็วัดได้แม่นยำสูงด้วยวงจร sample-and-hold และแม้แต่ single bit เพียงแต่มันต้องใช้เวลา ถ้าคุณอยากได้ flash ADC 16 บิต 100MHz ราคาก็อาจแพงถึงขั้นต้องจำนองบ้าน
บริษัทส่วนใหญ่มีนโยบายกำหนดราคาตามภูมิภาค เช่น ค่าสมาชิก Spotify ของผมอยู่ที่ประมาณ 60% ของราคาในสหรัฐ ฝั่งอิเล็กทรอนิกส์เองก็มี price list สำหรับจีนโดยเฉพาะด้วย อนึ่ง ราคาลิสต์ทางการในฝั่งตะวันตกเป็นแค่เพดานสูงสุดเท่านั้น และในความเป็นจริง แม้จะเป็นโปรเจกต์เล็ก ถ้าติดต่อฝ่ายขายโดยตรงก็มักได้ส่วนลด
ในความเป็นจริง ADC ราคา $3 ไม่ใช่ชิ้นส่วนที่ถูกนัก และประเทศที่มีต้นทุนการผลิตต่ำกว่าก็ซื้อได้ถูกกว่านี้มาก ท้ายที่สุดสิ่งสำคัญคือ ตอนทดสอบที่โรงงานชิ้นส่วนนั้นทำงานได้ถูกต้อง และผ่านเงื่อนไขที่ test rig ของแต่ละผลิตภัณฑ์กำหนดไว้ ซึ่งในทางปฏิบัติก็เพียงพอแล้ว