Halo semuanya!Mungkin ada baiknya memperkenalkan diri Anda sedikit - saya seorang insinyur sirkuit reguler yang juga tertarik dalam pemrograman dan beberapa bidang elektronik lainnya: DSP, FPGA, komunikasi radio dan beberapa lainnya. Baru-baru ini, saya terjun langsung ke penerima SDR. Pada awalnya saya ingin mencurahkan artikel pertama saya (saya harap bukan yang terakhir) untuk beberapa topik yang lebih serius, tetapi bagi banyak orang itu hanya akan menjadi bahan bacaan dan tidak akan membawa manfaat apa pun. Oleh karena itu, topik yang dipilih sangat terspesialisasi dan diterapkan secara eksklusif. Saya juga ingin mencatat bahwa, mungkin, semua artikel dan pertanyaan di dalamnya akan dianggap lebih dari sisi perancang sirkuit, dan bukan dari programmer atau orang lain. Baiklah - ayo pergi!Belum lama ini, saya memesan desain "Sistem Pemantauan untuk Catu Daya Bangunan Rumah Tinggal", pelanggan terlibat dalam pembangunan rumah di pinggiran kota, sehingga beberapa dari Anda mungkin sudah melihat perangkat saya. Perangkat ini mengukur arus konsumsi pada setiap fase input dan tegangan, secara bersamaan mengirim data melalui saluran radio ke sistem Smart Home yang sudah diinstal + alat ini dapat mengurangi starter pada input ke rumah. Tetapi pembicaraan hari ini bukan tentang dia, tetapi tentang komponennya yang kecil namun sangat penting - sensor saat ini. Dan seperti yang sudah Anda pahami dari judul artikel, ini akan menjadi sensor "non-kontak" saat ini dari Allegro - ACS758-100 .________________________________________________________________________________________________________________________Lembar data, tentang yang akan saya bicarakan tentang sensor, dapat ditemukan di sini . Seperti yang Anda tebak, angka "100" di akhir penandaan adalah arus maksimum yang dapat diukur sensor. Terus terang - Saya ragu tentang hal ini, bagi saya tampaknya kesimpulannya tidak tahan 200A untuk waktu yang lama, meskipun sangat cocok untuk mengukur lonjakan arus. Di perangkat saya, sensor 100A tanpa masalah melewati setidaknya 35A dengan sendirinya + ada puncak konsumsi hingga 60A.
Gambar 1 - Tampilan sensor ACS758-100 (50/200)Sebelum pindah ke bagian utama artikel, saya sarankan Anda membiasakan diri dengan dua sumber. Jika Anda memiliki pengetahuan dasar tentang elektronik, maka mereka akan menjadi berlebihan dan merasa bebas untuk melewati paragraf ini. Saya menyarankan sisanya untuk membahas perkembangan dan pemahaman umum:1) Efek Hall. Fenomena dan prinsip operasi2) Sensor arus modern________________________________________________________________________________________________________________________Nah, mari kita mulai dengan yang paling penting, yaitu, penandaan. Saya membeli komponen dalam 90% kasus di www.digikey.com. Komponen tiba di Rusia dalam 5-6 hari, mungkin ada semua yang ada di situs, dan juga pencarian parametrik dan dokumentasi yang sangat nyaman. Jadi daftar lengkap sensor dalam keluarga dapat ditemukan di sana berdasarkan permintaan " ACS758 ". Sensor saya dibeli di sana - ACS758LCB-100B .Di dalam lembar data, semuanya dicat sesuai dengan tanda, tetapi saya masih memperhatikan titik kunci " 100V ":1) 100 adalah batas pengukuran dalam ampere, yaitu, sensor saya dapat mengukur hingga 100A;2) " B " - surat ini layak untuk diperhatikan, mungkin juga ada huruf " U " di tempatnya. Sensor dengan huruf Bmampu mengukur arus bolak-balik, dan sesuai langsung. Sensor dengan huruf U hanya dapat mengukur arus searah.Juga di awal lembar data ada piring yang sangat baik tentang topik ini:
Gambar 2 - Jenis sensor saat ini dari keluarga ACS758Juga, salah satu alasan paling penting untuk menggunakan sensor tersebut adalah isolasi galvanik . Terminal daya 4 dan 5 tidak terhubung secara listrik ke terminal 1,2,3. Dalam sensor ini, komunikasi hanya dalam bentuk bidang yang diinduksi.
Parameter penting lainnya muncul dalam tabel ini - ketergantungan tegangan output pada arus. Keindahan dari jenis sensor ini adalah ia memiliki keluaran tegangan, bukan arus, seperti transformator arus klasik, yang sangat nyaman. Misalnya, output sensor dapat dihubungkan langsung ke input ADC dari mikrokontroler dan melakukan pembacaan.sensor saya nilai ini adalah 20 mV / A . Ini berarti bahwa ketika arus 1A mengalir melalui terminal 4-5 dari sensor, tegangan pada outputnya akan meningkat sebesar 20 mV . Saya pikir logikanya jelas.Saat berikutnya, apa yang akan menjadi tegangan output? Mengingat bahwa makanan itu "manusia", yaitu, unipolar, maka ketika mengukur AC, harus ada "titik referensi". Pada sensor ini, titik referensi ini adalah 1/2 catu daya (Vcc). Solusi seperti itu sering terjadi dan nyaman. Ketika arus mengalir dalam satu arah, output akan menjadi " 1/2 Vcc + I * 0.02V ", di setengah siklus lainnya, ketika arus mengalir di arah yang berlawanan, tegangan output akan " 1/2 Vcc - I * 0.02V ". Pada output, kita mendapatkan gelombang sinus, di mana "nol" adalah 1 / 2Vcc . Jika kita mengukur arus searah, maka outputnya adalah " 1/2 Vcc + I * 0.02V ", maka ketika memproses data pada ADC, kita cukup mengurangi komponen konstan 1/2 Vccdan kami bekerja dengan data yang benar, yaitu, dengan sisa I * 0,02V .Sekarang saatnya untuk menguji dalam praktek apa yang saya jelaskan di atas, atau lebih tepatnya, dikurangi dalam lembar data. Untuk bekerja dengan sensor dan memeriksa kemampuannya, saya membangun "mini-stand" ini:
Gambar 3 - Situs untuk menguji sensor saat iniPertama-tama, saya memutuskan untuk menerapkan daya ke sensor dan mengukur outputnya untuk memastikan bahwa itu "nol" dia telah mengambil 1/2 Vcc . Diagram koneksi dapat diambil dalam lembar data, tetapi, hanya ingin berkenalan, saya tidak membuang waktu dan memahat kapasitor filter untuk daya + RC low-pass filter pada Vout pin. Di perangkat nyata, tidak ada tempat tanpa mereka! Saya mendapatkan gambar berikut pada akhirnya:
Gambar 4 - Hasil pengukuran "nol"Ketika daya diterapkan5V dari syal STM32VL-Discovery saya , saya melihat hasil ini - 2.38V . Pertanyaan pertama yang muncul: " Mengapa 2.38, dan tidak 2.5 dijelaskan dalam datasheet? " Pertanyaan itu menghilang hampir seketika - saya mengukur bus daya untuk debugging, dan ada 4.76-4.77V. Tetapi masalahnya adalah bahwa daya berasal dari USB, sudah ada 5V, setelah USB ada stabilizer linier LM7805, dan ini jelas bukan LDO dengan penurunan 40 mV. Di sini, sekitar 250 mV. Baiklah, ini tidak penting, hal utama yang perlu diketahui adalah "nol" adalah 2.38V. Konstanta inilah yang akan saya kurangi saat memproses data dari ADC.Dan sekarang kita akan melakukan pengukuran pertama, sejauh ini hanya dengan bantuan osiloskop. Saya akan mengukur arus hubung singkat catu daya yang dapat disesuaikan, yaitu 3.06A. Ini dan ammeter bawaan menunjukkan dan fluka memberikan hasil yang sama. Nah, kami menghubungkan output PSU ke kaki 4 dan 5 dari sensor (saya telah melempar koil di foto) dan melihat apa yang terjadi:
Gambar 5 - Pengukuran arus hubung singkat PSUSeperti yang dapat kita lihat, tegangan pada Vout meningkat dari 2,38V menjadi 2,44V . Jika Anda melihat ketergantungan di atas, maka kita harus mendapatkan 2.38V + 3.06A * 0.02V / A , yang sesuai dengan nilai 2.44V. Hasilnya memenuhi harapan, pada arus 3A kami mendapat peningkatan ke "nol" sama dengan 60 mV . Kesimpulan - sensor berfungsi, Anda sudah dapat bekerja dengannya dengan bantuan MK.Sekarang Anda perlu menghubungkan sensor saat ini dengan salah satu pin ADC pada mikrokontroler STM32F100RBT6. Kerikil itu sendiri sangat biasa-biasa saja, frekuensi sistem hanya 24 MHz, tetapi syal ini telah bertahan banyak dan telah terbukti dengan sendirinya. Saya sudah memilikinya, mungkin, sekitar 5 tahun, karena diterima gratis pada saat ketika ST membagikannya kanan dan kiri.Pertama, karena kebiasaan, saya ingin meletakkan op-amp dengan koefisien setelah sensor. mendapatkan "1", tetapi, melihat diagram struktural, saya menyadari bahwa dia sudah berdiri di dalam. Satu-satunya hal yang perlu dipertimbangkan adalah bahwa pada arus maksimum daya output akan sama dengan catu daya sensor Vcc, yaitu sekitar 5V, dan STM dapat mengukur dari 0 hingga 3,3V, sehingga perlu dalam hal ini untuk meletakkan pembagi tegangan resistif, misalnya, 1: 1,5 atau 1: 2. Arus saya sedikit, jadi saya mengabaikan momen ini sejauh ini. Perangkat pengujian saya terlihat seperti ini:
Gambar 6 - Menempatkan "ammeter" kamiJuga, untuk memvisualisasikan hasilnya, saya mengacaukan tampilan Cina pada pengontrol ILI9341, manfaatnya ada di tangan, tetapi tangan saya tidak mencapainya sama sekali. Untuk menulis perpustakaan lengkap untuknya, dia membunuh beberapa jam dan secangkir kopi, karena datasheetnya sangat informatif, yang jarang untuk kerajinan putra Jackie Chan.Sekarang Anda perlu menulis fungsi untuk mengukur Vout menggunakan ADC mikrokontroler. Saya tidak akan memberi tahu secara rinci, menurut STM32 sudah ada lautan informasi dan pelajaran. Jadi lihat saja:uint16_t get_adc_value()
{
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
return ADC_GetConversionValue(ADC1);
}
Selanjutnya, untuk mendapatkan hasil pengukuran ADC dalam kode yang dapat dieksekusi dari badan utama atau interupsi, Anda perlu menulis yang berikut ini: data_adc = get_adc_value();
Setelah sebelumnya mendeklarasikan variabel data_adc: extern uint16_t data_adc;
Akibatnya, kita mendapatkan variabel data_adc, yang mengambil nilai dari 0 hingga 4095, karena ADC dalam STM32 adalah 12 bit. Selanjutnya, kita perlu mengubah hasil "in beo" menjadi bentuk yang lebih akrab bagi kita, yaitu menjadi ampere. Karena itu, Anda harus terlebih dahulu menghitung harga pembagian. Setelah stabilizer di bus 3.3V, osiloskop saya menunjukkan 3.17V, saya tidak mengerti apa itu terhubung. Oleh karena itu, dengan membagi 3.17V dengan 4095, kita mendapatkan nilai 0,000774V - ini adalah harga pembagian. Artinya, mendapatkan hasil dari ADC, misalnya, 2711, saya cukup melipatgandakannya dengan 0,000774V dan dapatkan 2,09V.Dalam tugas kami, ketegangan hanyalah "mediator", kami masih perlu mengubahnya menjadi ampere. Untuk melakukan ini, kita perlu mengurangi 2.38B dari hasilnya, dan membagi sisanya dengan 0,02 [B / A]. Hasilnya adalah rumus ini:float I_out = ((((float)data_adc * presc)-2.38)/0.02);
Nah, saatnya untuk mengisi firmware ke dalam mikrokontroler dan melihat hasilnya:
Gambar 7 - Hasil pengukuran data sensor dan pemrosesan mereka, sayamengukur konsumsi sirkuit sendiri seperti terlihat 230 mA. Setelah diukur sama dengan kebetulan yang terverifikasi, ternyata konsumsinya adalah 201 mA. Nah - akurasi dengan satu tempat desimal sudah sangat keren. Saya akan menjelaskan mengapa ... Rentang arus yang diukur adalah 0..100A, yaitu, akurasi hingga 1A adalah 1%, dan akurasi hingga sepersepuluh ampere sudah 0,1%! Dan harap dicatat, ini tanpa solusi sirkuit. Aku bahkan terlalu malas untuk menggantung filter Condor untuk makanan.Sekarang Anda perlu mengukur arus hubung singkat (hubung singkat) dari sumber listrik saya. Saya memutar pegangan ke posisi maksimum dan mendapatkan gambar berikut: Gambar 8 - Pengukuran arus hubung singkat
Sebenarnya bacaan pada sumber itu sendiri dengan ammeternya sendiri:
Gambar 9 - Nilai pada skala BPSebenarnya, ia menunjukkan 3.09A, tetapi ketika saya memotret, vitukha dipanaskan dan resistannya meningkat, dan arus, karenanya, turun, tetapi ini tidak sangat menakutkan.Sebagai kesimpulan, saya bahkan tidak tahu harus berkata apa. Saya berharap bahwa artikel saya entah bagaimana akan membantu amatir radio pemula dalam kesulitan mereka. Mungkin seseorang akan menyukai bentuk presentasi materi saya, maka saya dapat terus menulis secara berkala tentang bekerja dengan berbagai komponen. Anda dapat mengekspresikan keinginan Anda pada topik di komentar, saya akan mencoba mempertimbangkan.Dan tentu saja, saya melampirkan kode sumber untuk program ini , Anda tahu siapa yang butuh perpustakaan untuk bekerja dengan tampilan atau ADC. Proyek itu sendiri di Keil 5.