DNL, INL, dan ENOB yang buruk secara tak terduga menggunakan ADC

8

Saat ini saya mencoba untuk mengkarakterisasi MCU dan peripheralnya, khususnya ADC on-board. Namun, menjalankan prosedur tes yang biasa (yaitu gelombang sinus untuk ENOB dan gigi gergaji untuk DNL dan INL), saya menemukan bahwa hasilnya agak buruk. Singkatnya, ADC "adalah" 12 bit - artinya orang akan mengharapkan resolusi sekitar 10 bit darinya. Namun, tidak peduli apa yang saya coba, ENOB tampaknya mendatar sekitar 8,5 bit. Demikian pula dengan DNL dan INL - hasil terbaik yang saya dapatkan adalah ketika sinyal oversampled 64 kali. The datasheet pada halaman 44 yang mengatakan bahwa salah satu mungkin mengharapkan DNL sekitar ± 3 LSB - Namun, ini adalah apa yang saya dapatkan ketika saya oversample. Sinyal mentah memuncak pada sekitar 7 LSB. Ada beberapa hal yang saya coba sejauh ini:

  • Menempatkan kapasitor 10 nF di input dan ground ADC (yang berfungsi sampai batas tertentu - tanpanya ENOB adalah 7.5)
  • Mengatasi 4x, 8x dan beberapa lainnya hingga 256x. Ini - seperti yang diharapkan - juga meningkatkan hasil, meskipun tidak terlalu signifikan. Oversampling yang lebih besar menghasilkan hasil yang lebih baik sedangkan 4x hampir identik dengan tidak oversampling.
  • Memperlambat jam modul ADC dan meningkatkan jendela pengambilan sampel. Tidak ada yang efektif. Meningkatkan jendela pengambilan sampel memiliki dampak positif kecil pada ENOB dan DNL. Memperlambat jam tidak benar-benar berpengaruh.
  • Demikian pula, menggunakan referensi eksternal atau internal tampaknya tidak menghasilkan efek, walaupun saya belum melakukan banyak percobaan dengan referensi eksternal - mungkin itu yang berikutnya untuk dipertimbangkan. Sebuah suntingan kecil untuk referensi siapa pun yang mungkin membacanya suatu hari - menggunakan referensi eksternal dalam kasus saya menghasilkan hasil yang lebih buruk. Dengan kata lain, referensi internal pada MCU saya tampaknya lebih akurat - atau referensi eksternal tidak sebagus yang saya harapkan.

Sekarang, pertanyaannya adalah pada titik mana orang menerima bahwa ADC hanya berkualitas buruk atau entah bagaimana rusak? Apa tes lain yang dapat saya coba untuk meningkatkan karakteristik ADC. Perhatikan bahwa saya menghasilkan sinyal input dengan generator fungsi. Pada titik ini saya hanya terjebak - yaitu kehabisan utas forum untuk membaca - dan saya benar-benar akan menghargai saran.

fandor
sumber
Apakah Anda memeriksa PS? Apakah ini mode yang diaktifkan? Jika ya, dapatkah Anda menempatkan LDO antara PS dan ADC? Apakah Anda memeriksa kualitas jam ADC?
Claudio Avi Chami
Kesalahan ini seperti yang diharapkan. Datasheet mengatakan dalam kasus terburuk 6 LSB. Anda dapat mencoba beberapa kalibrasi atau lebih baik menggunakan ADC terpisah untuk pengukuran yang tepat.
@ClaudioAviChami Saya percaya saya adalah catu daya linier. Yang membuatnya adalah Rigol DG2041A. Bisakah Anda memberi tahu saya di mana saya bisa mulai dengan memeriksa jam ADC - pencarian Google cepat tidak terlihat menjanjikan :)
fandor
1
Impedansi sumber apa yang memberi makan ADC? Anda mungkin membutuhkan penguat buffer.
Brian Drummond
@BrianDrummond Saya akan memastikan untuk mengukur itu besok pagi ketika saya sampai pada pengaturan saya dan mempostingnya di sini. Terima kasih atas sarannya!
fandor

Jawaban:

11

Secara pribadi, saya bukan penggemar aturan main yang sangat besar, tetapi ada beberapa aturan yang sangat akurat yang bahkan saya buat pengecualian.

Salah satu aturan itu adalah sebagai berikut:

Mikrokontroler ADC peripheral selalu mengerikan.

Selalu. Bukan jenis mengerikan yang baru saja Anda derate. Jenis mengerikan yang membuat Anda menangis dalam posisi janin di kamar mandi.

Aku nak, tapi hanya sedikit. Untuk menjawab pertanyaan Anda, ya, ADC sebenarnya hanya seburuk itu, dan ya, Anda harus menerimanya. Perhatikan penafian besar yang menyatakan "Ketentuan Operasi Berlaku." dalam lembar data.

Anda harus ingat bahwa untuk bagian-bagian tertentu (seperti MCU), lembar data juga merupakan materi pemasaran, dan MCU umumnya bersaing dalam periferal, atau konsumsi daya (atau keduanya). Jadi angka untuk hal-hal seperti ADC akan sering secara teknisbenar, selama Anda menggunakan ADC dalam keadaan konyol dan tidak praktis yang sama mereka mengambil pengukuran untuk lembar data. Favorit yang sering saya lihat adalah mengukur ENOB dengan semua periferal lain serta inti prosesor yang sebenarnya sepenuhnya dimatikan dalam tidur nyenyak. Lainnya adalah menggunakan perangkat lunak pasca-pemrosesan yang signifikan dan teknik serupa seperti oversampling untuk mendapatkan pengukuran. Saya tidak berpikir saya pernah melihat lembar data MCU yang tidak menentukan ADC dalam hal 'ini adalah yang terbaik yang pernah Anda capai, dan kami mungkin atau bahkan tidak memberitahu Anda bagaimana kami mengelolanya' daripada 'Ini adalah spesifikasi sebelum Anda mencoba untuk membersihkan sinyal dalam perangkat lunak'.

Dan, untuk lebih jelasnya, sepertinya bagian ini memiliki ADC yang cukup bagus, setidaknya dibandingkan dengan semua MCC ADC mengerikan lainnya. 8,5 bit? Kemewahan seperti itu! Borjuis begitu! Sebagian besar waktu Anda mungkin akan mendapatkan 6 bit dari 10 bit ADC dalam MCU. Ingat, ketika mereka mengatakan resolusi 12-bit, artinya ada 12 bit yang dapat Anda baca dari beberapa register di suatu tempat. Tidak ada implikasi bahwa mereka tidak akan menjadi 12 bit noise yang tidak berguna. Satu-satunya janji adalah bahwa akan ada 12 bit sesuatu .

Sekarang, pada titik ini, Anda mungkin sedikit skeptis bahwa periferal analog ini akan selalu mengerikan, atau paling tidak, bertanya-tanya mengapa beberapa perusahaan chip tidak hanya merilis MCU dengan front end analog setengah jalan yang layak.

Yah, mereka tidak bisa. Tidak masalah seberapa bagus referensi itu, itu bukan masalah stabilitas. Itu kebisingan. Dan fisika.

Secara fisik tidak mungkin untuk membuat ADC kinerja tinggi (atau benar-benar hanya kinerja biasa-biasa saja) pada silikon yang sama mati sebagai MCU. Dan itu hanya membutuhkan satu gotchya untuk mengacaukan kinerja analog. Dalam hal ini, tidak ada satu gotchya, tetapi beberapa.

Pertama, hanya satu CMOS transistor switching yang akan membuang semua jenis harmonisa dan noise langsung ke, well, semuanya, dan akan memasangkan ke (Anda dapat menebaknya) semuanya, ketika switch. Kita cenderung berpikir dari CMOS sebagai daya rendah (dan itu), tetapi layak disimpan dalam pikiran bahwa kekuatan CMOS tidak digunakan secara efektif nol - kecuali ketika transistor berubah negara. Dan mereka berubah sangat cepat, dalam urutan puluhan hingga ratusan picoseconds. Ketika Anda mengambil selusin milliamp dikonsumsi oleh sesuatu yang pada dasarnya tidak mengkonsumsi daya statis, dan semua arus yang berubah sepenuhnya menjadi intens, 100ps lonjakan saat ini dari jutaan bajingan kecil kecilswitch, beralih secara agregat ... yah, itu harus membingkai ulang sedikit hal. Beberapa milliamp itu jauh lebih jahat daripada yang terlihat, setidaknya untuk barang-barang analog. Daya rendah, kebisingan rendah. CMOS adalah daya rendah karena hanya membutuhkan daya untuk beralih. Tapi itu beralih lebih keras daripada drop bass dubstep.

Paku-paku itu semua harus merobek melalui substrat, substrat yang dibagikan ADC, dan cukup resistif untuk menyebabkan pentalan ground yang terlokalisasi dalam substrat yang tidak berarti bagi sirkuit digital, tetapi memang sangat menyusahkan sirkuit analog mana pun.

Dan benar-benar tidak ada jalan lain untuk itu. Itu hanya satu masalah. Yang lain adalah bahwa sebenarnya secara fisik tidak mungkin untuk membuat tata letak analog berkinerja tinggi yang dapat hidup berdampingan dengan MCU, yang akan perlu menggunakan pin tersebut sebagai GPIO juga, dan pertimbangan lain yang fatal mengganggu peluang bagian analog yang baik tata letak.

Sekarang, ada beberapa MCU khusus dengan ADC agak ditingkatkan yang mencapai ini dengan benar-benar memiliki dua silikon mati sepenuhnya terpisah dalam satu paket, dihubungkan oleh kabel ikatan, sehingga memberikan isolasi substrat. Anda akan membayar untuk fitur ini, dan hasilnya masih akan lebih buruk daripada ADC khusus karena kedekatannya.

Oh, dan saya bahkan belum menyentuh bagaimana semua ini mengasumsikan Anda memiliki tata letak eksternal yang sempurna dan situasi pentanahan dan pelepasan dalam semua cara yang berkaitan dengan bagian analog dan digital Anda. Itu saja tidak trivial, tanyakan saja pada Henry Ott .

Jadi, sebagai kesimpulan, saya khawatir bahwa ADC pada chip Anda benar-benar mengerikan. Persis seperti setiap MCU ADC lainnya. Maaf. Entah itu cukup baik - dan untuk banyak banyak aplikasi (dibantu oleh beberapa sumber perangkat lunak yang cukup pintar - pun!) - itu. Sungguh menakjubkan apa yang benar-benar dapat dilakukan bahkan dengan kinerja analog yang buruk tersedia selama Anda pintar. Tapi pintar hanya bisa membawamu sejauh ini. jika Anda ingin dingin, jumlah bit yang efektif dan keras, Anda benar-benar hanya perlu menggigit peluru dan menggunakan ADC khusus bersama dengan tata letak dan decoupling PCB yang cermat, atau melihat menggunakan bagian yang lebih khusus (seperti paket multi-die).

metacollin
sumber
3
+1 untuk Kutipan Hari Ini: "CMOS berdaya rendah karena hanya membutuhkan daya untuk beralih. Tetapi beralih lebih keras daripada penurunan bass dubstep."
Araho
Saya Perhatikan bahwa bagian ini menggunakan gaya redistribusi biaya ADC, yang memiliki masalah unik mereka sendiri: analog.com/en/search.html?q=an-931
Peter Smith