Bagikan melalui


Menggunakan ADC dalam aplikasi tingkat tinggi

Topik ini menjelaskan cara menggunakan konverter analog-ke-digital (ADC) dalam aplikasi tingkat tinggi. Lihat Menggunakan periferal dalam aplikasi berkemampuan real-time untuk informasi tentang penggunaan ADC di RTApps.

Azure Sphere mendukung konversi analog ke digital. ADC mengonversi input analog ke nilai digital terkait. Jumlah saluran input dan resolusi (sebagai jumlah bit output ADC) bergantung pada perangkat.

Contoh ADC_HighLevelApp menunjukkan cara mengakses ADC di perangkat MT3620.

Potongan ADC Peripheral menunjukkan dua cara untuk berinteraksi dengan ADC menggunakan fungsi yang disederhanakan atau tingkat lanjut .

MT3620 berisi ADC 12-bit dengan 8 saluran input. ADC membandingkan tegangan input dengan tegangan referensi dan menghasilkan nilai antara 0 dan 4095 sebagai outputnya. Saluran input ADC dan GPIO menyematkan GPIO41 hingga GPIO48 memetakan ke pin yang sama pada MT3260. Namun, jika aplikasi Anda menggunakan ADC, semua 8 pin dialokasikan untuk digunakan sebagai input ADC. Tidak ada yang dapat digunakan untuk GPIO.

Persyaratan ADC

Aplikasi yang berkomunikasi dengan ADC harus menyertakan file header adc.h dan menambahkan pengaturan ADC ke manifes aplikasi.

Semua aplikasi harus mengatur perangkat keras target mereka dan menyertakan file header definisi perangkat keras yang terkait.

File Header

 #include <applibs/adc.h>
 #include "path-to-your-target-hardware.h"

Ganti "path-to-your-target-hardware.h" dengan jalur ke file header untuk perangkat keras Anda.

Pengaturan manifes aplikasi

Pengaturan ADC dalam manifes aplikasi mencantumkan pengontrol ADC yang diakses oleh aplikasi. Untuk mengonfigurasi pengaturan ini, tambahkan Adc kapabilitas ke manifes aplikasi, lalu tambahkan setiap pengontrol ADC ke kapabilitas. Topik manifes aplikasi Azure Sphere memiliki detail selengkapnya.

Dalam kode Anda, gunakan konstanta yang ditentukan untuk perangkat keras Anda untuk mengidentifikasi pengontrol ADC. Kompiler akan menerjemahkan nilai ini ke nilai mentah saat Anda menyusun aplikasi.

Misalnya, berikut ini adalah kutipan dari manifes aplikasi untuk aplikasi yang menargetkan papan pengembangan referensi MT3620 (RDB).

   "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]

Kutipan berikut ini memperlihatkan cara menentukan pengontrol ADC yang sama dalam aplikasi yang menargetkan Avnet MT3620 Starter Kit:

   "Adc": [ "$AVNET_MT3620_SK_ADC_CONTROLLER0" ]

Gambaran umum implementasi

Untuk menerapkan aplikasi Anda untuk mengakses ADC, gunakan salah satu dari dua pendekatan:

Topik ini menjelaskan kedua metode. Anda dapat menemukan kode sampel lengkap untuk setiap metode di sini:

Akses ADC dengan fungsi yang disederhanakan

Aplikasi tingkat tinggi Azure Sphere dapat mengakses ADC dengan menghubungi API ADC Applibs.

Membuka pengontrol ADC

Untuk membuka pengontrol ADC untuk akses, hubungi ADC_Open dan berikan ID pengontrol sebagai parameter. Deskriptor file akan dikembalikan jika panggilan berhasil. Jika tidak, nilai kesalahan akan dikembalikan.

int ADC_Open(ADC_ControllerId id);

Membaca dari ADC

Untuk membaca dari ADC, hubungi ADC_Poll. Anda meneruskan parameter berikut ini ke ADC_Poll: deskriptor file yang dikembalikan oleh ADC_Open, saluran ADC, dan penunjuk ke tempat nilai ADC akan disimpan.

Untuk mendapatkan jumlah bit (resolusi) valid yang dikembalikan oleh fungsi ADC_Poll, hubungi ADC_GetSampleBitCount.

Mengatur tegangan referensi ADC

Hubungi ADC_SetReferenceVoltage untuk mengatur tegangan referensi ADC.

MT3620 memiliki referensi on-chip 2.5 volt. Atau, dapat dihubungkan ke referensi tegangan eksternal yang kurang dari atau sama dengan 2,5 volt.

Akses ADC dengan fungsi tingkat lanjut

Sebagai alternatif fungsi sederhana tingkat tinggi untuk berinteraksi dengan periferal, Anda dapat memanfaatkan pustaka ioctl untuk membuka fungsionalitas. Bagian ini menjelaskan cara melakukan itu dan cara menggunakan ioctls berbeda dari penggunaan fungsi Linux generik.

Snippet Fungsi Tingkat Lanjut ADC memperlihatkan cara membaca ADC menggunakan fungsi tingkat lanjut Azure Sphere.

Sebagai contoh, Anda bisa melihat perbandingan berdampingan membaca ADC dengan implementasi sysfs linux yang disederhanakan, tingkat lanjut, dan linux:

Membuka saluran ADC

Untuk membuka pengontrol ADC untuk akses, gunakan panggilan Linux open yang melewati jalur ke direktori yang akan dimulai dengan /dev/adc<number> di mana 'number' adalah ID pengontrol. Deskriptor file dikembalikan jika panggilan berhasil. Jika tidak, nilai kesalahan akan dikembalikan.

Lihat Contoh Implementasi untuk parameter, izin, dan pemeriksaan kesalahan.

Dapatkan spesifikasi saluran

Saat menggunakan fungsi tingkat lanjut, dapatkan spesifikasi saluran dengan menggunakan panggilan ioctl sebelum pemungutan suara, mengatur tegangan referensi atau mendapatkan sampel hitungan bit. Langkah ini dapat dilewati dengan mengoding keras beberapa nilai yang diperoleh, tetapi tidak disarankan. Perhatikan bahwa langkah ini ditangani oleh kode yang disertakan dalam fungsi sederhana.


// Used to get the size of the buffer to allocate for the channel specification

IIO_GET_CHANNEL_SPEC_BUFFER_TOTAL_SIZE_IOCTL
// Used to get the channel specification and set the ‘iio_ioctl_chan_spec_buffer’ struct properly

IIO_GET_CHANNEL_SPEC_BUFFER_IOCTL

Mengatur tegangan referensi

Untuk mengatur tegangan referensi saluran menggunakan API tingkat lanjut:

  1. Atur informasi ADC yang diisi dalam iio_ioctl_chan_spec_buffer struktur yang diambil dalam spesifikasi Get Channel.

  2. Dapatkan indeks properti properti untuk mengatur saluran.

  3. Tulis tegangan referensi menggunakan indeks properti dan informasi spesifikasi saluran.

Untuk mendapatkan indeks properti tegangan referensi:

  1. Dari struktur yang iio_ioctl_chan_spec_buffer diambil dalam spesifikasi Get Channel, gunakan nilai dari channel bidang dan, dari channel bidang, gunakan nilai dari bidang.ext_info Bidang ext_info adalah struct iio_ioctl_chan_spec_ext_info yang merupakan kepala daftar deskriptor properti yang ditautkan untuk saluran.

  2. Mulai dari 0, menelusuri daftar yang menghitung simpul hingga name bidang cocok dengan reference_voltage string.

    • Setiap simpul dalam daftar memiliki bidang "berikutnya" yang mengarah ke simpul berikutnya dalam daftar. Titik terakhir menunjuk ke NULL.
    • Penghitung yang dihasilkan adalah indeks properti.
  3. Untuk mengatur tegangan referensi, gunakan IIO_WRITE_CHANNEL_EXT_INFO_IOCTL ioctl yang mengambil tipe struct iio_ioctl_write_chan_ext_info, yang berisi data yang relevan (dalam hal ini tegangan), saluran untuk diatur, dan properti tertentu (tegangan referensi) yang diatur untuk saluran tersebut.

Dapatkan sampel hitungan bit

Untuk mengatur tegangan referensi menggunakan API tingkat lanjut:

  1. Pastikan Anda mendapatkan informasi saluran ADC yang tepat. Informasi ini diisi dalam iio_ioctl_chan_spec_buffer struktur yang diambil di bagian Dapatkan Spesifikasi Saluran.

  2. Dapatkan indeks properti properti yang ingin Anda baca untuk saluran, yang dalam hal ini adalah jumlah bit sampel.

  3. Gunakan ioctls Linux untuk mendapatkan bit count sampel menggunakan indeks properti dan spesifikasi saluran.

Untuk mendapatkan indeks properti dari sampel hitungan bit, gunakan proses yang identik dengan Atur tegangan referensi. Namun, saat berulang di atas daftar tertaut yang disebut ext_info tipe iio_ioctl_chan_spec_ext_info, cocok dengan string current_bits.

Hubungi ioctl IIO_READ_CHANNEL_EXT_INFO_IOCTL untuk mengisi struct tipe iio_ioctl_read_chan_ext_info dengan data yang diperlukan dalam bufferbidang.

Membaca saluran ADC

Untuk membaca saluran ADC, polling menggunakan panggilan IIO_READ_RAW_CHANNEL_INFO_IOCTLioctl , yang masuk dalam struct iio_ioctl_raw_channel_info yang akan diisi dengan data dari saluran ADC.

Contoh implementasi

Untuk membaca ADC menggunakan implementasi tingkat lanjut Azure Sphere, lihat cuplikan di sampel aplikasi Adc Advanced.

Untuk membandingkan perbedaan semantik antara berinteraksi dengan periferal saat pengodean untuk Azure Sphere dan pengodean untuk sistem Linux generik, lihat LinuxSysfsNodes.

Dukungan MT3620

Fitur ADC yang didukung untuk MT3620 tercantum dalam Status Dukungan MT3620. Panduan pengguna papan pengembangan MT3620 menjelaskan tata letak pin dan fungsi pin.

Folder HardwareDefinitions di direktori penginstalan SDK Microsoft Azure Sphere berisi definisi untuk papan pengembangan, modul, dan chip Azure Sphere yang umum. Ini berisi file header dan JSON yang menentukan antarmuka master untuk MT3620, MT3620 RDB, bersama dengan perangkat keras MT3620 lainnya. Lokasi default untuk folder HardwareDefinitions ada C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions di Windows dan /opt/azurespheresdk/HardwareDefinitions Linux.