Gunakan Kasus untuk ADC Eksternal

9

Kebanyakan Microcontrollers (uC) memiliki Analog to Digital Converter (ADC) sebagai bagian dari perangkat periferal mereka, yang fenomenal karena ini mengintegrasikan dua komponen ke dalam satu paket. ADC ini biasanya didaftarkan juga dipetakan, yang memungkinkan data untuk diekstraksi dengan cepat dan mudah.

Terlepas dari integrasi ketat ini, Anda masih dapat membeli ADC eksternal. Saya dapat melihat beberapa kasus untuk ini:

  • ADC perlu diisolasi dari UC.
  • Kedalaman bit sampel ADC harus lebih tinggi dari ADC uC.
  • Tegangan ke indra jauh dari mikrokontroler dan garis analog yang panjang tidak dapat diterima.
  • Tegangan ke indera berada di lingkungan yang keras yang tidak cocok untuk UC.
  • Sampel ADC eksternal jauh lebih cepat daripada ADC UC.
  • Tegangan referensi untuk beberapa sampel berbeda dari yang lain, membutuhkan beberapa pin Vref (dan dengan demikian beberapa ADC eksternal).
  • UC saat ini tidak memiliki cukup saluran ADC dan biaya pemasangan UC baru sangat mahal.
  • ADC eksternal mengkonsumsi daya lebih sedikit daripada ADC UC (saya perlu contoh untuk mempercayainya).
  • Saluran ADC harus disampel secara bersamaan (skenario langka).
  • Biaya pemrograman firmware pada waktu pembuatan lebih besar daripada biaya bagian ADC yang lebih mahal (tidak mungkin).
  • PCB memiliki batasan ruang dan tidak ada UC yang dapat ditampung (tidak mungkin).

Ini semua baik dan bagus, tetapi yang menurut saya aneh adalah bahwa ADC eksternal biasanya sedikit lebih mahal daripada rekan UC mereka, namun menyediakan fungsionalitas yang setara. Misalnya, Anda dapat membeli bagian EFM32Z dengan 12bit 1Msps ADC (dengan referensi internal) sekitar $ 1 , atau Anda dapat membeli ADC 12bit 200ksps setara dengan sekitar $ 3,50 (kecepatan yang sama (ish), nomor daya yang relatif sama, dll) dan melakukan tugas yang sama (mengekstraksi data ADC).

Pertanyaannya kemudian menjadi: apakah ada alasan kuat mengapa seorang insinyur lebih menyukai ADC eksternal daripada ADC UC ketika yang terakhir dapat melakukan fungsi yang sama?

TRISAbits
sumber
1
Sampling simultan sebenarnya adalah skenario yang cukup umum di beberapa ruang aplikasi, seperti pemrosesan sinyal.
Jason R

Jawaban:

12

Jika ADC internal mikrokontroler Anda melakukan pekerjaan yang Anda perlukan lalu tidak, tidak perlu ADC eksternal. Tapi kemudian, itu bukan yang mereka tuju.

Anda telah membahas sebagian besar alasan untuk ADC eksternal, tetapi ada beberapa alasan lagi, dan menurut saya, itu adalah beberapa alasan paling penting:

  1. Anda memerlukan teknologi pengambilan sampel yang berbeda - misalnya ADC internal adalah SAR, tetapi Anda perlu melakukan Delta Sigma.
  2. ADC internal, karena internal, dan berbagi cetakan yang sama dengan MCU utama, tidak akan pernah 100% bebas dari kebisingan MCU lainnya, sehingga yang eksternal dimungkinkan untuk menghasilkan noise ultra rendah
  3. Mikrokontroler / SoC / FPGA pilihan Anda tidak memiliki ADC. Dua yang terakhir kemungkinan besar - SoC dan FPGA yang paling umum tidak memiliki ADC sama sekali. Ya, Anda dapat memperolehnya, tetapi banyak yang tidak. Jadi, Anda menambahkan yang eksternal.

Untuk poin 3, ambil Raspberry Pi misalnya. Itu tidak memiliki ADC tersedia sama sekali, Anda harus menambahkan yang eksternal untuk melakukan pekerjaan analog sama sekali.

Majenko
sumber
Nah, itu menarik. Ketika berbicara tentang kebisingan, alih-alih membayar untuk mendapatkan ADC eksternal, apakah hasil yang sama akan diperoleh dengan mendapatkan bit-kedalaman uC ADC yang lebih tinggi dan mengabaikan bit paling tidak signifikan dari hasil sampel (ini jelas mengasumsikan bahwa waktu konversi tambahan dari bit tambahan bukan merupakan faktor penghambat).
TRISAbits
3
Pemrosesan sinyal setelah fakta hanya dapat membantu kebisingan dari proses yang tidak tergantung pada waktu sampel (dan karenanya berkontribusi kebisingan "acak"). Sebagian besar kebisingan dalam sistem prosesor akan menjadi hasil dari variasi catu daya dan pemuatan ke tanah yang agak disinkronkan dengan proses pengambilan sampel; satu-satunya cara untuk menghindarinya adalah dengan meminta ADC menggunakan rel suplai sendiri yang terpisah. Perhatikan bahwa isolasi penuh tidak diperlukan, karena banyak ADC dapat dengan mudah mentolerir sekitar 100mV antara VDD / VSS analog dan digital.
supercat
9

Beberapa alasan lain untuk mendukung ADC eksternal:

  1. Banyak bagian ADC eksternal memasukkan input diferensial, sedangkan konverter bawaan mikrokontroler sering tidak. Dalam kasus di mana input memiliki banyak noise mode umum, itu bisa sangat penting.

  2. Banyak bagian ADC eksternal termasuk tahap penguat sebelum konverter itu sendiri, sehingga memungkinkan konverter untuk mengukur sinyal impedansi tinggi secara langsung. Pada banyak mikrokontroler, tindakan pengambilan sampel sinyal input dapat mengganggu itu. Bergantung pada sifat sinyal input, ini dapat sangat meningkatkan waktu akuisisi yang diperlukan untuk melakukan pengukuran yang akurat.

  3. Sekalipun ADC internal lebarnya dua belas bit, itu umumnya tidak berarti ia membutuhkan pembacaan yang akurat untuk satu bagian pada tahun 4096. ADC eksternal tipikal akan sering memiliki spesifikasi yang lebih baik daripada internal, bahkan ketika keduanya memiliki kedalaman bit yang diiklankan yang sama.

Mengintegrasikan ADC ke dalam mikrokontroler itu mudah. Mengintegrasikan ADC yang baik jauh lebih sulit. Tebak mana yang lebih umum.

supercat
sumber
1
SAR ADCs sedikit menderita karena injeksi muatan, karena sesaat menghubungkan array kapasitor sampel ke input mengganggu apa yang sedang diukur. Jika sumber input tidak pulih cukup cepat, ini menyebabkan kesalahan pengukuran. Semakin banyak resolusi biasanya memerlukan kapasitansi pengambilan sampel internal yang lebih besar. Resolusi Delta-sigma hanya bergantung pada perluasan penghitung digital. (Meskipun spesifikasi INL / DNL resolusi tinggi yang baik tidak mudah untuk dicapai.)
MarkU
@supercat: Saya tidak pernah menganggap tahap penguat sebagai bagian dari konversi. Ini membuka jalan pengambilan sampel sirkuit yang menarik.
TRISAbits
2
@ Marku: Saya telah mengamati masalah injeksi biaya di beberapa sirkuit. Anehnya, beberapa konverter tampaknya mencoba untuk mengisi input ke nilai sampel sebelumnya (dari input mana pun yang diambil sampel terakhir), beberapa mencoba untuk mengisi ke nol, dan setidaknya satu tampaknya secara sewenang-wenang ("secara acak") menagihnya ke yang lebih tinggi atau tegangan lebih rendah yang menurut saya agak mengganggu. Saya tidak mengerti mengapa bagian melakukan yang terakhir; bahkan jika itu harus dibebankan ke sesuatu, pengisian ke nol secara konsisten akan lebih baik daripada pengisian ke beberapa nilai "acak".
supercat
4

Alasan lain untuk beberapa ADC eksternal ada: mereka sudah ada jauh lebih lama daripada micros dengan ADC internal, dan dirancang menjadi banyak produk. Mungkin 20 atau 30 tahun lebih lama. (Mungkin tidak demikian halnya dengan bagian SOIC yang ditautkan, meskipun mungkin merupakan variasi die-shrunk modern dari bagian klasik)

Jika ADC tidak memiliki resolusi, keakuratan, atau kecepatan, namun memerintahkan harga premium, inilah alasannya.

Bahkan untuk desain baru mungkin lebih baik untuk menggunakan kembali blok yang berfungsi dengan baik, daripada merekayasa ulang di bagian yang lebih baru (bahkan jika integrasi yang dihasilkan mengurangi biaya BOM). Rekayasa ulang itu bisa mahal; proses persetujuan tes dan peraturan, terlebih lagi.

Sekarang jika Anda memulai dari awal, dan mikrokontroler pilihan Anda memiliki cukup saluran ADC yang memenuhi persyaratan Anda, tidak satu pun di atas yang berlaku.

Brian Drummond
sumber
2

Saya menyadari ini adalah pertanyaan yang sangat lama, tetapi ini adalah pertanyaan yang sering kami debat secara internal.

Anda benar, itu akan menjadi tidak biasa untuk memilih ADC eksternal jika versi eksternal persis sama fungsinya. Namun, dalam pengalaman saya, mikro biaya rendah biasanya memiliki ADC cukup buruk dengan suhu melayang, jumlah bit rendah (10 - 12 bit) dan kebisingan dari VCC (+/- 20mV dalam beberapa kasus) ... meskipun kebalikannya bisa benar. .. Anda dapat meningkatkan S / N jika sampel berlebihan dan ada noise. Dalam kegiatan pengembangan produk kami, sangat jarang mendasarkan pilihan MCU kami pada kualitas ADC yang ada di dalamnya. Biasanya ini lebih tentang toolchain, biaya, firmware yang ada, dll. ADC internal biasanya terbatas pada tugas-tugas yang tidak penting seperti membaca tegangan baterai.

Dengan berbagai mikroskopi, mungkin juga ada masalah dengan pengatur waktu bersama yang perlu dimonopoli untuk waktu pengambilan sampel yang cepat, tetapi mengganggu hal-hal lain di MCU (port serial perangkat lunak, ISR, dll.) Ketika mereka dimonopoli untuk ADC.

Juga, apa itu VREF? Jika Anda menggunakan VCC sebagai referensi dalam firmware, bahkan jika Anda mengkalibrasi ke VCC "nyata", nilai itu dapat berfluktuasi secara dramatis selama operasi. Jika Anda memiliki perangkat arus tinggi (radio, wifi, MCU, dll.) Dengan penggunaan arus transien yang besar, VCC mungkin turun hingga 4,8 volt selama pengiriman dan jika sampel Anda terjadi selama jendela itu, dan Anda secara naif mengubah 0-1023 Nilai baca ADC ke voltase dengan ADC_VAL / 1023 * 5.0 - Anda telah kehilangan presisi 200mV. Atau, jika Anda memiliki mode daya yang berbeda (USB, kutil dinding, baterai) - VCC di MCU dapat berubah (terutama dengan USB). ADC eksternal (bahkan dengan jumlah bit yang sama) dapat memberikan vref internal yang solid di bawah kondisi VCC yang berfluktuasi.

Resolusi cukup penting. Saya membayangkan ada beberapa penggunaan (di dunia nyata) untuk resolusi 10-12 bit, tetapi untuk semua jenis aplikasi dunia nyata (deteksi gas, pengukuran akustik, pengukuran akselerometer, pengukuran suhu presisi, dll) 16-bit biasanya resolusi minimum untuk mencapai sinyal yang memadai untuk karakteristik noise dan resolusi. Bahkan MCU 32-bit yang benar-benar bagus seperti Atmel's SAMD terbatas pada ADC internal 12-bit.

Clock jitter juga merupakan masalah dan ada juga beberapa ketidaktepatan yang melekat ketika mik 8-bit lainnya diperlukan untuk menyediakan pembacaan lebar 12-bit dan membutuhkan setidaknya 2 siklus clock untuk memanipulasi nilai 12-bit, yang mungkin tidak benar dengan ADC eksternal (karena mereka dapat memiliki osilator internal).

Ada juga saat-saat ketika kedekatan fisik dengan transduser Anda dan isolasi dari MCU itu penting. Beberapa transduser yang sangat sensitif memerlukan daya terkondisi sendiri, bidang tanah yang diisolasi, dan ampere helikopter transimpedansi yang sangat sensitif dengan 0,01% pasif.

Kadang-kadang ada alasan kuat untuk menggunakan ADC internal. DMA adalah salah satu alasan ... laju sampling adalah alasan lain. Kemudahan oversampling adalah hal lain. Menghubungkan ADC eksternal dengan kecepatan data yang tinggi dapat memakan banyak pin I / O multipleks yang berharga dan menghasilkan desain yang lebih rumit. Juga, banyak ADC yang kami gunakan berbasis I2C, sehingga laju pengambilan sampel sangat dibatasi oleh kecepatan bus I2C. Bahkan pada 1mbits / detik, pembacaan 16-bit membutuhkan waktu yang sangat lama.

ElDuderino
sumber
Ini adalah wawasan yang luar biasa! Seiring berlalunya tahun (dan pengalaman saya bertambah) saya harus setuju: MCU ADC internal bisa agak buruk.
TRISAbits