Dalam dua artikel terakhir saya, saya berbicara tentang modul daya dan papan kontrol berdasarkan mikrokontroler STM32F334R8T6, yang dirancang khusus untuk penerapan sistem kontrol untuk konverter daya dan drive listrik. Contoh konverter DC / AC juga dipertimbangkan, yang merupakan demonstrasi, bukan konstruksi yang selesai. Sekarang saatnya untuk melakukan sesuatu yang sederhana, tetapi bermanfaat, dan yang paling penting selesai.
Sebagian besar masalah yang terkait dengan proyek dan elektronik daya terkait dengan topologi spesifik: seseorang tertarik mempelajari algoritma kontrol PFC, seseorang ingin belajar bagaimana membangun LLC setengah jembatan, tetapi topologi yang paling populer tidak diragukan lagi adalah tanggung jawab. Bagaimanapun, buck converter (alias buck converter) adalah yang utama untuk proyek paling menarik: ini adalah driver untuk lampu LED, dasar dari pengontrol MPPT untuk panel surya, charger dan banyak lagi.
Jaringan memiliki banyak informasi tentang buck, termasuk lembar data, tetapi tersebar dan saya pribadi belum menemukan materi yang menjelaskan secara rinci proses membuat konverter buck dengan kontrol digital. Saatnya memperbaikinya. Praktis tidak ada matematika, penjelasannya adalah "di jari", sehingga akan menarik bagi semua orang yang entah bagaimana terhubung dengan elektronik.

Pendahuluan
Pertama, Anda perlu memahami apa yang ingin kami dapatkan pada akhirnya dan pengantar apa yang kami miliki. Topologi buck adalah step-down, artinya, Anda dapat membuat konverter tegangan step-down. Seperti yang akan Anda lihat nanti, tegangan pada output buck converter hampir secara linear tergantung pada tegangan pada input, jadi Anda perlu menambahkan umpan balik. Hari ini saya akan berbicara tentang umpan balik tegangan sederhana, yang merupakan yang paling intuitif dan akan memungkinkan Anda untuk memahami prinsip operasi, sementara umpan balik ini cukup bagi Anda untuk melaksanakan sebagian besar tugas.
Pada akhir artikel kita akan mendapatkan sumber tegangan yang distabilkan sesuai dengan topologi “sinkron uang”, beroperasi pada frekuensi yang cukup tinggi dengan kontrol digital, diimplementasikan pada STM32F334R8T6 menggunakan High Resolution PWM (HRPWM). Kisaran tegangan input adalah 15 ... 60V, tegangan output 12V, dan arus output maksimum adalah 2A.
Bab 1. Prinsip dari topologi buck
Saya akan mulai memberi tahu mulai dari yang paling dasar dan secara bertahap akan meningkatkan konverter kami, sebagai "Sinkron uang" adalah versi versi yang disempurnakan dengan peningkatan efisiensi dan kompleksitas kontrol. Versi dasar dari topologi yang mungkin Anda gunakan adalah sebagai berikut:

Topologi ini digunakan pada konverter tegangan daya rendah, misalnya, untuk menghidupkan sirkuit digital dan perangkat berdaya rendah lainnya. Menurunkan dc / dc yang Anda gunakan di perangkat Anda mungkin diterapkan pada sirkuit mikro menurut topologi ini. Contoh dari chip tersebut adalah
LMR16006 .
Prinsip operasi rangkaian ini sangat sederhana, sinyal PWM dipasok ke transistor VT1, pekerjaan itu sendiri dibagi menjadi 2 tahap, yang bergantian satu sama lain:
- Tahap penyimpanan energi di sirkuit LC. Pada tahap ini, transistor VT1 terbuka dan arus mengalir melalui transistor ke beban, secara bersamaan menyimpan energi dalam induktor dan kapasitansi keluaran:

- Tahap pelepasan. Pada tahap ini, transistor VT1 menutup dan kemudian kesenangan dimulai. Throttle - ini adalah hal yang mengakumulasi energi jika potensi diterapkan padanya (VT1 terbuka) dan memberikannya jika potensi menghilang (VT1 ditutup). Pada saat yang sama, ia berusaha tidak hanya untuk memberikan energi, tetapi untuk menghemat nilai arus dan arahnya, oleh karena itu, untuk menggunakan properti ini, Anda perlu menambahkan dioda VD1 untuk menutup rangkaian, karena arus hanya mengalir dalam sirkuit tertutup:

Ketika saya berkenalan dengan topologi ini di kelas 6-7, saya tidak segera mengerti mengapa dioda tidak melakukan arus pada tahap 1, sekarang sepertinya biasa, tapi saya pikir itu layak disebutkan. Ketika VT1 terbuka, maka potensial + VIN, misalnya, + 20V, diterapkan pada katoda dioda VD1, dan potensial bumi, masing-masing, pada anoda dioda. Agar arus mengalir melalui dioda, itu harus persis sebaliknya: potensi di anoda harus lebih besar daripada potensi di katoda, oleh karena itu, dalam buck-e, pada tahap penyimpanan energi, dioda "ditutup". Pada tahap pelepasan, dioda sudah menutup sirkuit, potensial + VIN tidak bekerja pada katoda dan tidak "menguncinya". Saya harap saya menjelaskan dengan jelas.
Maka Anda harus memiliki pertanyaan: "Dan tegangan apa yang akan ada di output, jika kita menerapkan 20V ke input?". Seperti biasa, semuanya sederhana:

Seperti dapat dilihat dari rumus, tegangan keluaran secara linear tergantung pada faktor tugas sinyal PWM yang kami suplai ke transistor VT1. Jika seseorang tidak tahu atau lupa "faktor tugas", ini adalah rasio waktu transistor dalam keadaan terbuka dengan lamanya periode. Koefisien ini dapat mengambil nilai dari 0 hingga 1 atau dari 0 hingga 100%. Lebih lanjut, kami akan beroperasi dengan angka khusus ini ketika mengendalikan konverter, tetapi untuk memahami esensi, mari gantikan hubungan ini ke dalam rumus:

Frekuensi operasi buck converter adalah konstan dan dipilih selama desain, tidak berubah selama operasi, dan karenanya periode (T) konstan. Ternyata tegangan output secara langsung tergantung pada dua kuantitas fisik:
- dari waktu kita membuka transistor atas (VT1) - semakin lama terbuka, semakin banyak energi yang terakumulasi dalam filter LC dan, karenanya, tegangan output lebih tinggi;
- dari tegangan input, misalnya, jika kita memperbaiki pengisian sebesar 50% dan mengubah Vin dari 20 ke 40V, maka tegangan output juga akan berubah dari 10 menjadi 20V.
Saya pikir gambaran umum dan prinsip kerja sudah mulai menarik Anda, mari kita perbaiki sekarang dan lihat osilograms yang sebenarnya dan periksa perbandingan ini dalam praktik. Saya telah menyusun tata letak uang yang dimuat dengan LED 10 W. Saya menggunakan 3 saluran osiloskop, yang termasuk dalam poin-poin berikut:
Pengalaman No. 1 - Tegangan input (Vin) konstan 20V, siklus tugas berubah- Vin = 20V, D = 25%, Vout = D * Vin = 0.25 * 20V = 5V

- Vin = 20V, D = 50%, Vout = D * Vin = 0,5 * 20V = 10V

Seperti yang Anda lihat pada bentuk gelombang, hubungan antara tegangan output dan siklus kerja sudah benar. Tentu saja, ini adalah percobaan "ideal", dalam kenyataannya, tegangan input tidak stabil dan mengapung dalam kisaran yang cukup luas. Mari kita lihat ketergantungan pada tegangan input pada pengisian yang tetap.
Pengalaman No. 2 - Tegangan input (Vin) berubah, siklus tugasnya konstan dan sama dengan 50%- Vin = 15V, D = 50%, Vout = D * Vin = 0,5 * 15V = 7.5V

- Vin = 20V, D = 50%, Vout = D * Vin = 0,5 * 20V = 10V

- Vin = 30V, D = 50%, Vout = D * Vin = 0,5 * 30V = 15V

Sekarang kita telah melihat dalam prakteknya bahwa tegangan keluaran juga secara linear tergantung pada tegangan input pada siklus tugas tetap. Apakah Anda sudah mengerti bagaimana ini akan menstabilkan output? Prinsip stabilisasi sederhana seperti rumus itu sendiri - Vout adalah 12V dan konstan, kita dapat mengubah siklus tugas dengan bantuan mikrokontroler, jadi jika Vin meningkat, tegangan output juga meningkat dan pada saat ini kita mengurangi faktor tugas hingga menjadi 12V lagi. Dengan demikian, ketika Vin menurun, kita mulai meningkatkan siklus tugas sampai lagi tegangan Vout menjadi 12V.
Apa lagi yang ingin saya perhatikan di bagian teoretis ... Ah, ya! Tentunya Anda bertanya-tanya bagaimana sebuah PWM dengan amplitudo 20V setelah sebuah transistor akhirnya berubah menjadi tegangan konstan dengan riak minim? Memang, jika kita meletakkan probe merah osiloskop pada sumber transistor VT1, probe hijau setelah filter LC, kita akan melihat gambar berikut:

Anda dapat melihat bagaimana filter LC “melumasi” tegangan bolak-balik menjadi tegangan konstan, tetapi masalahnya adalah bahwa energi yang disimpan dalam induktansi dan kapasitansi tidak dapat dikonsumsi secara instan, oleh karena itu tegangan tidak dapat berubah secara instan. Kami mendapatkan bahwa pada saat ketika PWM di depan induktor menjadi 0V, tegangan output disediakan oleh energi yang tersimpan dalam filter, yang tidak menyerap segera dan cukup untuk mempertahankan tegangan pada saat VT1 ditutup. Semuanya ada di jari, tentu saja, jika menarik untuk menggali lebih dalam, maka seperti biasa saya menyarankan
B. Yu. Semenova "Power Electronics: dari yang sederhana sampai yang kompleks" , ada bab lengkap tentang uang (perajang).
Perjuangan untuk efisiensi
Seperti yang saya tulis sebelumnya, ini adalah versi dasar dari topologi. Kerugian utamanya adalah kerugian tinggi pada dioda penguncian. Apa arus dalam sistem sederhana yang beroperasi pada MK dan CPLD? Biasanya dalam 1A, kadang-kadang 2A, jika ada semacam layar TFT. Dalam hal ini, kerugian bahkan saat menggunakan dioda Schottky adalah 0,4V * 2A = 0,8 watt. Pada prinsipnya, lumayan untuk menghilang begitu banyak pada paket SMA / SMB tanpa masalah, meskipun dengan tegangan 3,3V dan 2A, kehilangan 0,8V masih merupakan efisiensi 12%!
Sekarang bayangkan kasus saat ini yang kita miliki adalah 20A. Ini bisa menjadi pengontrol MPPT, sistem daya FPGA besar, dan banyak lagi. Dalam hal ini, kerugiannya adalah 0.4V * 20A = 8 W! Apa artinya ini? Misalnya, dalam kasus MPPT, Anda akan memiliki lebih sedikit energi yang tersimpan dalam baterai, dalam kasus daya FPGA itu akan menjadi tambahan 8 watt panas, yang harus dihamburkan di suatu tempat dan dalam kedua kasus ini tidak diragukan lagi adalah kehilangan efisiensi keseluruhan. Apa yang bisa dilakukan? Dan mari kita ganti dioda VD1 dengan N-channel Mosfet lain dan dapatkan sirkuit ini:

Sekarang transistor VT2 bertindak sebagai dioda, yaitu melakukan arus ketika VT1 ditutup. Dioda, yang berada di versi dasar, tidak memerlukan kontrol, sekarang kami dipaksa untuk membayar saluran kontrol tambahan dengan sinyal PWM untuk meningkatkan kinerja.
Pertama, mari kita hitung berapa banyak kerugian yang telah kita kurangi. Hambatan saluran MOSFET modern adalah beberapa megohms. Sebagai contoh, mari kita ambil transistor dari modul power saya, yang saya bicarakan di artikel sebelumnya -
IPP083N10N5AKSA1 dengan hambatan saluran sebesar 8,3 mOhm. Kami mendapatkan kerugian statis sama dengan 0,0083 * 20A * 20A = 3,32 watt. Tentu saja, akan ada kerugian dinamis, yang dengan driver yang dirancang memadai tidak akan lebih dari 20%, yaitu, total kerugian bagi kita adalah 4 watt. Kami mendapatkan bahwa transisi dari uang konvensional ke yang sinkron dapat mengurangi separuh hilangnya dioda.
Sekarang mari kita lihat manajemen yang lebih rumit. Seperti yang sudah kita pahami, dioda penguncian sedang mengalirkan arus ketika VT1 ditutup. Dari sini dapat dikatakan bahwa VT2 harus ditutup ketika VT1 terbuka dan, karenanya, VT2 terbuka ketika VT1 ditutup. Jika lebih sederhana, transistor bekerja secara bergantian: salah satu terbuka atau yang lain, jika kedua transistor terbuka, akan ada arus yang lewat, karena mereka saling terhubung antara VIN dan GND. Mari kita lihat apa sinyalnya, di mana "saluran kuning" adalah transistor VT1 dan "saluran hijau" adalah transistor VT2:

Seperti yang Anda lihat, jika "1" logis diatur di saluran kuning (di VT1), maka pada saat itu logis "0" harus diatur di saluran hijau (di VT2). Kami mendapatkan bahwa VT1 memompa energi ke dalam filter LC, dan VT2 menutup sirkuit pada tahap pelepasan.
Ada satu hal lagi yang sudah Anda dengar atau baca di atas -
sampai saat ini . Faktanya adalah bahwa nyata, bukan transistor ideal (MOSFET) memiliki kapasitansi tertentu di gerbang, yaitu, pada kenyataannya itu tidak langsung pergi dari log.0 ke log.1, dan energi dalam transistor tidak larut secara instan, menghasilkan transistor untuk waktu yang singkat pada saat peralihan, keduanya mungkin terbuka. Hal ini dapat mengarah pada peningkatan kerugian, yang berarti pemanasan dan, paling buruk, ke babah, karena melalui arus adalah hubungan pendek yang umum (hubungan pendek). Untuk menghindari hal ini, penundaan atau apa yang disebut dead time diperkenalkan antara mematikan satu transistor dan menghidupkan yang lain. Ini terlihat seperti ini:

Saya pikir Anda memperhatikan bahwa ada celah kecil di batas sinyal switching. Saya menginstalnya dengan sengaja besar (sekitar 3%) sehingga Anda bisa melihatnya, pada kenyataannya jauh lebih kecil. Secara umum, waktu mati (selanjutnya dt) diatur sesingkat mungkin, tetapi pada saat yang sama cukup untuk memungkinkan transistor untuk menutup. Itu dapat dihitung, atau dapat dipilih secara empiris, saya pribadi berpikir bahwa opsi ini dan itu adalah normal, tetapi Jedi yang berjanggut mungkin akan memberi tahu Anda: "Ini perlu untuk dipertimbangkan, tetapi lebih baik untuk memodelkannya!" Ini memang benar, tetapi putuskan sendiri - jika Anda tidak terlalu malas, model dalam LTspice dengan mempertimbangkan induktansi dan kapasitansi konduktor dan komponen yang menyimpang.
Untuk stand di artikel ini, saya atur dt ke ~ 100 ns (sebenarnya 104). Modul saya memungkinkan Anda untuk menginstalnya lebih sedikit, karena drivernya sangat keras diterapkan, tetapi yang pasti banyak dari Anda akan membangun tata letak Anda tanpa modul saya, yang berarti bahwa kemungkinan besar akan ada ingus. Agar saya tidak terjebak karena ingus, saya akan meninggalkan dt dengan margin dan jika Anda memiliki kabel normal di papan tulis, maka Anda sendiri dapat menguranginya - maka pada bab tentang kode Anda akan melihat caranya, untuk saat ini, kita melihat apakah memang ada dt:

Dapat dilihat bahwa dt berlangsung 2,5 divisi dan setiap divisi adalah 40 ns, yang berarti durasinya ~ 100 ns, seperti yang dimaksudkan. Saya harap Anda mengerti mengapa dt diperlukan, berapa lama durasinya, dan bagaimana konverter bekerja sesuai dengan topologi buck. Jika Anda tidak mengerti, maka seperti biasa, pertanyaan dalam komentar, PM dan surat diterima, sementara saya sepertinya menjawab semua orang.
Bab 2. Perhitungan komponen utama
Pada bagian artikel ini, saya akan menunjukkan cara cepat dan mudah menghitung komponen daya utama untuk konverter buck sinkron, yaitu: induktor, kapasitor input dan output, transistor.
Biarkan saya mengingatkan Anda input data:- Tegangan input: 15 ... 30V
- Tegangan output: 12V
- Nilai arus keluaran: 2A
- Frekuensi switching: 100 kHz
Tegangan output 12V dipilih karena Saya berencana untuk menggunakan LED 12V 20W sebagai beban, yang ternyata sudah dekat dan merupakan beban yang sangat jelas. Mengantisipasi pertanyaan "pakar" dalam komentar - ya, saya sadar bahwa LED membutuhkan stabilisasi saat ini, tetapi kami kemudian melakukan stabilisator tegangan dan LED hanya memuat.
Tegangan input dipilih dari bulldozer, Anda dapat melakukan 15 ... 60V, jadi jika Anda tertarik pada rentang yang berbeda, maka Anda dapat menghitung nilai komponen untuk itu sendiri. Arus pengenal 2A dipilih untuk mendapatkan daya output 12V * 2A = 24 W, yaitu, sedikit lebih banyak dari yang dibutuhkan untuk LED. LED itu sendiri pada 12V mengkonsumsi sekitar 1,82 ... 1,9A.
Parameter yang paling menarik tetap - frekuensi operasi konverter. Apa yang seharusnya? Anda harus menjawab sendiri di sini, dalam kasus saya 100 kHz. Pilihannya didasarkan pada dua poin:
- Peningkatan frekuensi menyebabkan penurunan induktansi yang diperlukan dari induktor, input dan output kapasitor. Sederhananya - dengan peningkatan frekuensi, dimensi perangkat berkurang. Dengan penurunan frekuensi, dimensi bertambah.
- Penurunan frekuensi menyebabkan peningkatan efisiensi, karena kerugian dinamis ketika berpindah transistor dikurangi. Meningkatkan frekuensi meningkatkan komponen dinamis dari transistor dan karenanya mengurangi efisiensi.
Sekarang saya tidak akan membahas pilihan frekuensi, anggap saja 100 kHz. Setelah saya menunjukkan metodologi perhitungan, kami akan kembali ke pertanyaan ini, karena menurut formula, ketergantungan peringkat komponen utama pada frekuensi operasi akan lebih jelas terlihat.
Langkah 1. Memilih TransistorKami terutama akan tertarik pada 3 parameter: "sumber-drain" tegangan maksimum, resistansi saluran dalam keadaan terbuka dan kapasitansi gerbang. Potensi penuh dari sumber tegangan (Vin) diterapkan pada transistor, dan ada juga lonjakan pada saat switching. Anda memiliki 2 opsi: ambil transistor VT1 dan VT2 dengan margin tegangan atau kisah snubber RC pada VT2. Dalam kasus saya, modul daya memiliki 100V transistor, dan dengan input 30V ini adalah margin tegangan yang sangat besar, bahkan 60V sudah cukup untuk dilakukan tanpa snubber dan melindungi transistor dari gangguan.
Resistansi saluran - semakin kecil semakin baik, tetapi ada satu TAPI. Dengan penurunan tahanan saluran, kami mengurangi kerugian statis (I
2 * R), tetapi teknologinya sedemikian rupa sehingga kapasitansi gerbang meningkat, dan ini mengarah pada peningkatan kerugian dinamis. Anda harus menemukan jalan tengah antara "tahanan saluran" dan "kapasitas rana". Untuk voltase hingga 100V, saya sarankan Anda memperhatikan transistor seri Infineon OptiMOS, sudah lihat sendiri voltase tinggi dengan pencarian parametrik atau bahkan terhadap transistor IGBT. Yang terakhir ini juga didukung oleh modul daya saya dan tidak memerlukan perubahan apa pun pada driver.
Langkah 2. Perhitungan induktansi induktorPenting untuk menghitung nilai minimum induktansi, yang akan memungkinkan konverter dc / dc kami bekerja dalam mode arus kontinu (
Lmnt ):

Dalam hal variabel, saya pikir semuanya jelas kecuali - k
ind . Ini adalah arus riak yang diizinkan dalam induktor, mereka biasanya memilih nilai 20 ... 50%, tapi saya hampir selalu menetapkan 30%. Semakin kecil riak arus, semakin jauh kita akan dari batas saturasi inti di mana induktor dilukai, tetapi seperti yang dapat dilihat dari rumus, induktansi besar dari induktor diperlukan.
Sekarang kita menghitung nilai minimum induktansi, yang akan diperlukan untuk data input saya, riak saya akan meletakkan 30% seperti yang saya tulis di atas:

Harus dipahami bahwa ini adalah induktansi minimum yang diperlukan untuk buck converter untuk beroperasi dalam mode arus yang tidak dapat dipisahkan, tetapi sekali lagi ada nuansa. Dalam proses meningkatkan arus yang bekerja dalam belitan, permeabilitas inti dan induktansi induktor TANPA arus dan Dengan arus yang agak berbeda, ketergantungannya berbeda untuk bahan yang berbeda.
Untuk menghindari situasi ketika, dengan peningkatan arus dalam induktor, induktansi berkurang di bawah L min dan dc / dc tidak masuk ke mode melanggar arus, perlu untuk meningkatkan induktansi agak, yaitu, tambahkan beberapa putaran tambahan selama belitan. Peningkatan induktansi 10-15% akan cukup untuk bahan Kool Mu, dan choke saya akan di atasnya.Langkah 3. Perhitungan dan pembuatan induktorSaya ingin menjelaskan prosedur ini di bagian "prototyping", tetapi kemudian langkah menghitung induktansi akan tetap kurang jelas bagi Anda, dan saya mungkin melewatkan gambar yang menarik, jadi saya akan menjelaskan semuanya di sini. Untuk pembuatan throttle saya akan mengambil throttle R26 / 14/11 (R adalah cincin, dan angka adalah dimensi) dari bahan Kool Mu dengan permeabilitas 60, Anda dapat mengunduh dokumentasi untuk itu dan membelinya di sini -Lepkos .
Sekarang Anda perlu menghitung berapa belokan dan kawat mana yang Anda butuhkan untuk berputar. Mari kita mulai dengan jumlah belokan mungkin. Ada parameter yang mudah digunakan dalam dokumentasi untuk core - A L , yang sama dengan 75 nH / turn 2 . Di sini dengan hati-hati - berubah dalam kotak! Untuk menemukan induktansi inti, kalikan AL dengan jumlah putaran di kotak. Dari sini rumus untuk menemukan jumlah putaran tampak seperti ini:
Untuk mendapatkan induktansi minimum yang diperlukan, perlu memutar 40 putaran, tetapi seperti yang telah kita bahas, perlu sedikit meningkatkan induktansi, mari kita tambahkan 3 putaran. Kami mengambil cincin dan memutar 43, kami mendapatkan throttle seperti:
Sekarang, demi kepentingan, kami menghitung induktansi apa yang harus dihasilkan:
Dan untuk keandalan, kami memeriksa induktansi induktor dengan pinset:
137 μH, bagus! Hasil berkumpul, kesalahan dalam ± 8% ke A L . Layak disebutkan bahwa jika Anda tidak memiliki kemampuan untuk mengukur induktansi, jangan membeli core untuk aliexpress, di ChiD, komputer, insinyur elektronik dan "restoran" lainnya - ada peluang untuk mendapatkan inti dari bahan lain atau dengan permeabilitas yang salah, tetapi dengan penandaan yang benar - diverifikasi. Tanpa kemampuan untuk mengukur induktansi, Anda tidak akan dapat memeriksa A L dan Anda akan dapat menyiksa diri sendiri dalam mencari penyebab "babakh" konverter Anda.Ini menimbulkan pertanyaan yang masuk akal - “akankah kita memiliki inti yang cukup dan dimensinya? Mungkin itu perlu lagi? " Untuk material Kool Mu, batas induksi magnetik adalah 0,5 T, dalam praktiknya, lebih baik tidak merangkak melampaui ambang batas di atas 0,45 T tanpa perlu jelas. Ternyata luka berliku pada inti tidak harus membuat induksi pada setiap titik inti lebih dari 0,45 T, jadi kami memeriksa:
Seperti yang Anda lihat, nilai induksi magnetik 0,06 T jauh lebih rendah daripada batas 0,5 T. Dua kesimpulan dapat ditarik dari ini: pertama, throttle tidak akan masuk ke saturasi, dan kedua, inti sangat besar dan kuat untuk mengambil cincin yang jauh lebih kecil. Saya mengambil cincin R26 hanya karena saya memiliki seluruh kotak mereka, tidak ada makna rahasia lainnya.Masih menentukan bagian mana dari kawat yang akan diambil untuk induktor. Pertama, saya sangat menyarankan Anda untuk tidak mengambil kawat dengan diameter lebih dari 1 ... 1,2 mm pada frekuensi tinggi, karena efek kulit sudah memiliki efek signifikan dan mengurangi penampang yang efektif. Kedua, kerapatan arus pada kawat harus dipilih berdasarkan kondisi pendinginan dan daya. Pada daya rendah (hingga 10-20 W), Anda dapat dengan aman meletakkan kerapatan arus 8,10 A / mm 2 bahkan tanpa aliran udara. Pada daya hingga beberapa kilowatt, lebih baik untuk meletakkan kerapatan arus di kisaran 5 ... 6 A / mm 2 , dan pada daya dari 10 kW dan seterusnya akan masuk akal untuk mengurangi kerapatan arus menjadi 3 ... 4 A / mm 2 .Di ujung jari saya ada kawat yang dipernis dengan diameter 0,8 mm. Potongan melintangnya masing-masing adalah ~ 0,5 mm 2 . Pada arus 2A, kami memperoleh kerapatan arus dalam belitan sekitar 4 A / mm 2 . Saya bisa menggunakan kawat dengan setengah bagian melintang, tetapi inti saya cukup besar, sehingga kawat yang lebih besar cocok tanpa masalah. Ketika Anda mengoptimalkan perangkat Anda, pertama-tama Anda harus menghitung, dan kemudian membeli kawat dari penampang yang diinginkan, maka Anda bisa mendapatkan dimensi optimal dari induktor.Langkah 4. Perhitungan kapasitor outputPada tahap ini, seperti dalam kasus induktansi, kami akan mempertimbangkan nilai minimum kapasitansi yang harus dipasang di filter LC pada output buck converter. Dengan demikian, jika Anda menginstal lebih banyak, itu akan lebih baik dan kemudian lihat alasannya. Mari kita hitung kapasitasnya:
Tentu saja, kapasitasnya juga harus diberi margin, terutama jika Anda hanya menggunakan keramik di outlet, karena kapasitasnya sangat berkurang tergantung pada tegangan yang diberikan padanya. Perlu juga diperhatikan ketergantungan pada denyut nadi - variabel V pulsa. Ini adalah nilai maksimum dari riak pada output, yaitu, idealnya, dengan kapasitansi 147,8 μF, amplitudo riak akan 0,2V, yaitu, tegangan output akan mengambang di kisaran 11,9 ... 12.1V. Ingin mengurangi riak? Kemudian kurangi dalam rumus dan nilai kapasitas yang dihasilkan akan meningkat sesuai, tentu saja, Anda tidak akan mendapatkan catu daya laboratorium hanya dengan meningkatkan kapasitas output. Penting juga untuk memperhitungkan kebutuhan akan ESR rendah, untuk ini mereka biasanya menempatkan 1-2 elektrolit secara paralel dan menggantung keramik pada beberapa mikrofarad dengan dielektrik X7R, lebih disukai. Jika anggaran memungkinkan, maka mungkin untuk mengganti kapasitor elektrolitik dengan polimer tantalum (seperti pada GPU), dan karena itu keramik tidak diperlukan, mereka memiliki ESR yang kecil.Pertimbangan frekuensiSekarang, seperti yang saya katakan, kita akan kembali ke pertanyaan memilih frekuensi operasi konverter. Biarkan saya membagi kesimpulan menjadi beberapa pemikiran:- Seperti yang Anda lihat dalam rumus, frekuensi muncul, semakin tinggi frekuensi operasi, semakin rendah induktansi dari induktor akan diperlukan dan semakin sedikit belokan harus terluka - kami menghemat tembaga dan menyederhanakan pembuatan produk berliku
- Induktansi dan jumlah belokan ada dalam rumus untuk menghitung induksi magnetik, meskipun seperti yang Anda ingat, induktansi memiliki ketergantungan kuadrat pada belokan, yang berarti bahwa ketika jumlah putaran berkurang 2 kali, induktansi berkurang 4 kali. Dari sini dapat disimpulkan bahwa dengan meningkatnya frekuensi, induktansi dan nilai induksi magnetik berkurang, yang berarti bahwa inti yang lebih kecil dapat digunakan, yaitu, kita mengurangi dimensi
- , — , , . !
- … , . buck- mosfet- 200 . ( ) ? GaN
Saya pikir dari tesis ini menjadi jelas bagi Anda apa yang mempengaruhi frekuensi switching, sekarang Anda perlu belajar bagaimana menemukan "makna emas" antara kerugian pada transistor dan ukuran perangkat sendiri. Dalam salah satu artikel berikut ini saya akan mengajarkan Anda untuk mengoptimalkan frekuensi operasi untuk efisiensi maksimum, hal utama adalah jangan lupa bahwa saya akan melakukannya.Bab 3. Merakit tata letak buck converter
Jadi, bagian yang paling membosankan, tetapi penting, sudah berakhir, sekarang perangkat keras dan kode akan hilang. Mari kita susun tata letak di mana kita akan menerapkan perhitungan teoritis. Untuk melakukan ini, Anda akan memerlukan dua modul yang saya bicarakan di artikel sebelumnya: modul daya dan modul kontrol pada STM32F334 . Anda juga dapat merakit setengah jembatan sendiri dari sampah improvisasi tipe IR2110 pada papan tempat memotong roti, dan menggunakan MK apa pun sebagai kontrol: STM32-Discovery, LaunchPad, Arduino dan hanya mengadaptasi logika kerja dan kode ke MK favorit Anda, tidak ada yang rumit jika Anda mengerti dari dua bab pertama cara kerja konverter uang.Sekarang mari kita buat diagram buck kita lebih "realistis" dengan menambahkan nilai-nilai semua komponen ke dalamnya dan dengan benar mencerminkan jumlah kapasitor, serta perhatikan bagian apa yang dapat disadari oleh modul daya saya:
Seperti yang dapat Anda lihat dari diagram, modul sudah berisi setengah jembatan (dua transistor) untuk menerapkan buck sinkron dan kapasitor input, omong-omong, modul ini berdiri di modul dengan margin besar - masing-masing ada 3 elektrolit 1000 uF dan 100V, ini cukup untuk dengan mudah mengumpulkan uang seharga 500 -800 watt Tetap bagi kami untuk menambahkan choke, yang telah kami produksi dan output kapasitor, yang terakhir juga dengan cara dengan margin, karena Saya hanya menemukan 4700 uF 25V untuk tegangan rendah, tetapi mereka adalah semacam Cina, jadi saya juga memutuskan untuk memparalelkan pasangan. Faktanya, ada cukup 470 uF di sana, tetapi saya tidak memiliki hal sepele dalam versi output. Ternyata desain ini:
Seperti disebutkan sebelumnya, LED 20 W yang kuat digunakan sebagai beban. Saya tidak tahu berapa banyak cahaya bersinar, dan itu tidak terlalu menarik, tetapi hanya mengkonsumsi 21 ... 22 W pada 12 V di mana konverter uang saya dirancang. LED itu sendiri melapisi KPT-8 dan memasangnya ke radiator, tentu saja itu tidak cukup, tetapi berlangsung selama 5-7 menit tanpa masalah (memanas hingga +40 ... 50 o C), dan saya tidak perlu lagi. Kami menghubungkan 2 HRPWM, sinyal GND dari modul kontrol dan, melalui pembagi, kami menghubungkan output uang ke ADC, sebagai hasilnya, kami memiliki pendirian:
Bab 4. Menulis perangkat lunak dan memulai konverter
Sekarang kita memiliki semua yang kita butuhkan untuk mulai menulis kode dan merevitalisasi konverter uang kita. Pertama, mari kita lihat pin-out untuk mikrokontroler STM32F334R8T6, yang terletak di modul kontrol:

Sekarang kita mengerti pin mikrokontroler mana yang akan digunakan. Pada modul itu sendiri, saya hanya perlu 1 dari 5 saluran untuk mengontrol unit daya, kita akan menggunakan saluran "A". Saluran ini, seperti yang lainnya, memiliki 2 output PWM presisi tinggi (HRPWM), 1 input kesalahan (kami tidak menggunakannya), GND untuk menggabungkan ground board dan 2 saluran ADC (kami hanya akan menggunakan satu untuk voltase).
Sedikit tentang HRPWMDalam perluasan segmen bahasa Rusia di Internet, saya hampir tidak memenuhi materi pelatihan tentang HRPWM dan sama sekali tidak bertemu materi tentang bekerja dengan HRPWM berdasarkan mikrokontroler STM32, dan ini adalah perangkat yang sangat berguna.
Saya tidak akan mempelajari teori pinggiran ini dalam kerangka artikel ini, jadi saya akan menjelaskan esensinya. HRPWM atau High Resolution PWM adalah modul PWM kami yang biasa, yang memiliki resolusi lebih tinggi untuk pengaturan faktor tugas dan juga biasanya memiliki pengaturan yang lebih fleksibel.

- Mikrokontroler STM32F334R8T6 memiliki 10 saluran HRPWM, yang digabungkan menjadi 5 grup dengan 2 saluran. 2 saluran dalam kelompok ini dapat bekerja secara mandiri dan membentuk pasangan yang saling melengkapi - kita membutuhkan yang terakhir;
- Di dalam pasangan komplementer antara 2 sinyal PWM, dimungkinkan untuk menginstal waktu mati perangkat keras untuk perlindungan terhadap arus pass-through;
- Semua 10 saluran di-clock dari satu pengatur waktu - Pengatur waktu, sehingga semuanya disinkronkan satu sama lain dan Anda tidak harus secara manual mengkonfigurasi rangkaian pengatur waktu. Cukup menyalakan master dan Timer A ... E timer untuk di-clocked darinya;
- Frekuensi di HRPWM digandakan, yaitu pada frekuensi inti 72 MHz, di HRPWM adalah 144 MHz setelah pengali tambahan (x2) dengan PLL. Ini memungkinkan untuk mengontrol konverter pada frekuensi ratusan kHz;
- Banyak pengaturan untuk kontrol PWM, misalnya, bersama dengan kemampuan untuk mengikat generasi PWM ke awal dan akhir periode, ada 4 peristiwa yang lebih dapat dikonfigurasi (comp) yang memungkinkan Anda untuk menerjemahkan PWM ke 0 atau 1 pada titik mana pun pada periode selain awal / akhir periode;
- Ada mode untuk topologi tertentu, misalnya, mode push-pull, yang memungkinkan Anda untuk mengimplementasikan banyak topologi push-pull.
Dan ini hanya sebagian kecil dari fitur, pada diagram perangkat HRPWM Anda dapat melihat kemampuan sinkronisasi dengan banyak peristiwa, DAC, pembanding yang dibangun ke dalam MK, dan bersama dengan diagram blok ini ada banyak kemungkinan yang lebih banyak didokumentasikan.
Masih ada pertanyaan terakhir yang perlu ditangani - "mengapa PWM ini bit-tinggi?". Untuk melakukan ini, perhatikan contoh sederhana. Bayangkan kita memutuskan untuk menggunakan MK tanpa HRPWM, katakanlah STM32F103C8T6, yang juga berfungsi pada frekuensi 72 MHz. Kita perlu mengontrol setengah jembatan pada frekuensi 70 kHz, kami mempertimbangkan langkah regulasi apa yang bisa kami dapatkan: 72 000 000/1025 langkah = 70 243 Hz. Ya, kami memiliki 1025 langkah dan ketika menyesuaikan kami dapat mengubah tegangan output dengan langkah teoritis 1/1025 = ~ 0,1%. Sekarang kita ambil STM32F334, dengan frekuensi clock 144 MHz dan lebar shift timer 32 bit, kita mendapatkan frekuensi setara 144 MHz * 32 = 4,608 GHz. Bagi mereka yang merasa takut dan meragukan sosok itu:

Tidak, ini bukan frekuensi operasi, ini adalah frekuensi yang setara. Apa yang ini berikan pada kita? Kami mengambil frekuensi yang setara 4 4608 000 Hz / 70 300 Hz = 65.535 langkah. Sekarang kita dapat menyesuaikan tegangan (atau arus) pada output dengan peningkatan 1/65 535 = ~ 0,001%, yaitu, 100 kali lebih akurat!
Dan sekarang mari kita lakukan - kita memiliki frekuensi 700 kHz, yang normal untuk uang banyak, misalnya. F103 akan mendapatkan 72.000.000 Hz / 700.000 Hz = 102 langkah, yang memungkinkan Anda untuk mendapatkan 1% regulasi terbaik, tetapi ini adalah 1% untuk tugas, yaitu, pada kenyataannya dengan begitu banyak langkah Anda akan memiliki tegangan mengambang pada output seolah menstabilkan dan tidak juga. Sedangkan untuk F334 jumlah langkah akan menjadi sekitar 6500, yang masih memungkinkan Anda untuk membangun regulator tegangan atau arus yang sangat akurat. Kami mendapatkan bahwa resolusi (langkah) dari pengaturan siklus kerja jauh lebih tinggi / lebih sering daripada dengan MK konvensional dengan modul PWM standar di dalamnya.
Pengaturan sistem jamSaya menggunakan TrueSTUDIO sebagai lingkungan pengembangan dalam artikel ini, karena gratis, tidak sesedih Keil atau IAR
ya ya, ceritakan tentang debugger yang luar biasa , cross-platform dan mungkin solusi terbaik untuk pemula dan tidak hanya. Pada akhir artikel akan ada arsip dengan proyek khusus untuk IDE ini. Saya tidak akan memberi tahu Anda cara membuat dan mengkonfigurasi proyek, saya hanya akan meninggalkan tautan ke video di mana semuanya ditampilkan secara detail -
tonton .
Setelah Anda membuat proyek dan mengedipkan LED, Anda harus mengonfigurasi sistem jam, yaitu, dari 8 MHz naikkan frekuensi menjadi 72 MHz dan terapkan ke inti, lalu sesuaikan pembagi untuk mengurangi frekuensi yang dipasok ke ADC:
void StartInitClock (void) { RCC->CR |= RCC_CR_HSEON;
Di sini, saya hanya berpikir, algoritma tuning adalah sebagai berikut:
ia beralih ke kuarsa eksternal (HSE) -> kami menunggu ketika transisi selesai dan bendera siap diatur -> kami mengirim sinyal dari kuarsa ke input PLL -> kami mengalikan 8 MHz dengan 9 -> kami membagi frekuensi dengan 72 MHz oleh 10 untuk clock ADC -> nyalakan PLL -> tunggu sampai nyala dan atur flag ready -> kirim sinyal dari PLL ke bus sistem dan core -> tunggu sampai switch selesai -> selesai.Pengaturan HRPWMDi sini semuanya agak lebih rumit, karena Modul ini memiliki banyak fungsi, banyak pengaturan dan jumlah dokumentasi yang sangat besar, tetapi ini adalah minus dan pada saat yang sama ditambah - Anda harus membayar untuk fleksibilitas.
RCC->CFGR3 |= RCC_CFGR3_HRTIM1SW_PLL; RCC->APB2ENR |= RCC_APB2ENR_HRTIM1EN;
Anda perlu menentukan bahwa HRTIM adalah clock dari PLL, pengali x2 sudah diaktifkan secara default. Kemudian kita cukup menyalakan jam untuk HRTIM, berikut ini adalah fitur pertama - seperti yang kita pahami pengatur waktu jam dari PLL, tapi kita nyalakan untuk APB2. Ini tidak sepenuhnya logis, tetapi mudah dicari dalam file dengan CMSIS atau dalam dokumentasi.
RCC->AHBENR |= RCC_AHBENR_GPIOAEN; GPIOA->MODER &= ~GPIO_MODER_MODER8; GPIOA->MODER |= GPIO_MODER_MODER8_1;
PA8 dan PA9 adalah output dari Timer A, yang pada modul saya masuk ke saluran No. 1, yang dapat Anda lihat pada diagram dan pin-out. Kaki dikonfigurasikan sebagai push-pull dengan fungsi alternatif, jumlah fungsi itu sendiri untuk kedua kaki adalah yang ke-13. Penting juga untuk menyetel ke frekuensi GPIO maksimum, jika tidak akan ada penyumbatan depan sinyal yang jatuh, yang sangat penting untuk elektronika daya.
HRTIM1->sCommonRegs.DLLCR |= HRTIM_DLLCR_CAL | HRTIM_DLLCR_CALEN; while ((HRTIM1->sCommonRegs.ISR & HRTIM_ISR_DLLRDY) == RESET);
Sebelum Anda mulai, Anda perlu mengkalibrasi timer, karena Ia bekerja dengan penundaan minimal, kemudian hanya menunggu bendera siap.
HRTIM1->sTimerxRegs[0].PERxR = PeriodTimerA;
Itu fleksibilitas. Pertama, kita dapat mengatur frekuensi kita sendiri untuk setiap timer A ... E, di sini kita cukup mencatat periode PWM kita. Kedua, secara default kita memiliki penyelarasan PWM di awal periode, yaitu sinyal masuk ke log.1 di awal periode baru, dan sekarang kita harus memilih kapan akan kembali ke log.0, dalam hal ini, oleh pembanding No. 1, yaitu Saya bertanya di dalamnya pada dasarnya faktor tugas.
Misalnya, Anda dapat menerjemahkan PWM bukan pada awal periode, tetapi dengan komparator No. 1, dan kembali ke log.0 oleh komparator No. 2 dan dengan demikian fase memindahkan perangkat keras.
Pada tahap ini, kami mengaktifkan waktu mati dan mengkonfigurasinya, pada prinsipnya, komentar berisi semua rumus, mereka juga dapat ditemukan di manual referensi. DT dengan durasi ~ 100 n yang telah Anda lihat pada bentuk gelombang di bab teoritis artikel ini. Waktu mati dapat diatur secara terpisah di tepi dan pada penurunan sinyal. Ngomong-ngomong, [0] adalah Timer A, masing-masing [1] adalah Timer B dan seterusnya.
Bagi saya, ini bukan momen yang paling jelas. Intinya adalah - Saya ingin memastikan bahwa selama 10% dari durasi Timer, periode dihasilkan peristiwa yang akan memicu konversi ADC dan mengukur sinyal umpan balik. Mengapa 10%? Secara sederhana, idealnya, pengukuran tidak boleh terjadi pada saat transisi PWM dari 0 ke 1 atau sebaliknya, karena pada saat ini di unit daya ada transien dan gangguan, tetapi kita tidak perlu mengukurnya. Oleh karena itu, 10% dalam kasus saya optimal, karena pada output 12V dan 30V, tegangan input dari faktor tugas tidak akan turun hingga 10% dan momen switching transistor tidak akan sama persis dengan pengukuran ADC.
Sekarang Anda perlu melihat sistem komunikasi acara antara HRTIM dan ADC:

Di baris pertama, kami memilih kapan pembanding akan dipicu, dalam kasus saya ini adalah 10% dari periode timer A. Selanjutnya, kami memilih pemicu khusus di ADC yang akan menghubungi MK, kami memiliki akses ke 1 atau 3. Sekarang ini hanya menunjukkan acara mana yang akan mengirim sinyal ke ADC, dalam kasus saya ini adalah pembanding No. 2.
Dan akord terakhir! Kami mengizinkan HRTIM untuk mengeluarkan sinyal dari Timer A ke GPIO kami. Sekarang kita memilih mode, itu terjadi tanpa akhir (saya memilikinya), tetapi itu terjadi bahwa timer dihidupkan selama 1 periode dan setelah itu perlu dimulai lagi. Selanjutnya, atur periode untuk timer utama dan nyalakan sebagai langkah terakhir, itu mulai untuk clock timer saluran dan sinyal PWM muncul di output.
Itu adalah fungsi tuning, masih membuat fungsi yang akan mengatur faktor tugas, dengan itu kita akan bekerja saat membuat controller:
void SetDutyTimerA (uint16_t duty) { HRTIM1->sTimerxRegs[0].CMP1xR = duty; }
Mendaftarkan pengaturan fungsi dan mengatur siklus tugas Sekarang mari kita cari tahu apakah kita bergerak dengan cara yang benar. Pada fungsi
utama , inisialisasi pengaturan HRTIM dan atur siklus kerja, katakan 22500. Dengan tegangan input 20V dan periode 45000, siklus tugas kami akan menjadi 50% dan output akan menjadi sekitar 10V. Ini tidak cukup untuk memperluas LED menjadi penuh, tetapi harus menyala dan kita akan mengerti jika bagian daya berfungsi, apakah semuanya baik-baik saja dengan dt dan seterusnya. Saya memulai semuanya pertama kali:
Anda dapat melihat bahwa semua perhitungan teoritis sebelumnya telah dikonfirmasi. Dengan faktor tugas tetap 50%, tegangan output dibagi dengan 2: 20V -> 10V, 22V -> 11V, 18V -> 9V. Sekarang mari kita buat tegangan keluaran stabil dan independen dari input, yaitu, tambahkan umpan balik.
Penyesuaian ADC dan pengontrolBanyak yang telah ditulis tentang ADC di STM32 sebelum saya, saya hanya memikirkan pengaturan pemicu yang terkait dengan pembanding HRTIM. Saya akan berbicara singkat tentang pengaturan ADC lainnya. Kami melihat fungsi inisialisasi:
void InitBasicADC (void) { RCC->AHBENR |= RCC_AHBENR_ADC12EN; RCC->AHBENR |= RCC_AHBENR_GPIOCEN; ADC2->CR &= ~ADC_CR_ADVREGEN; ADC2->CR |= ADC_CR_ADVREGEN_0;
Saya menggunakan mode saluran reguler, saya hanya punya satu saluran dan itu dipilih dalam register
SQR1 . ADC nomor 2 yang dilibatkan, yaitu input IN5, cepat dan dapat beroperasi pada frekuensi pengambilan sampel maksimum, tetapi tidak kali ini. Frekuensi sampling sama dengan frekuensi PWM, karena 1 periode = 1 sampel, pada prinsipnya, ini lebih dari cukup.
Juga, dalam register
CFGR ,
kita perlu memilih acara di mana konversi akan dimulai, yaitu,
Peristiwa 7 , mengapa tepatnya? Kami melihat RM:

Pemicu 1 dari modul HRPWM datang ke Acara 7 untuk ADC No. 2 kami, yang dalam hal ini berfungsi sebagai budak, kemudian dikendalikan dari modul HRPWM. Saya pikir sekarang sudah jelas bagaimana menghubungkan 2 modul, pada prinsipnya, algoritma ini sama untuk setiap perangkat dan timer, hanya nama register yang akan berbeda.
Ketika penghitung periode pengatur waktu tercapai, konversi akan dimulai, yang setelah sekitar 15 siklus (untuk seberapa banyak yang terlihat di RM) akan menyebabkan interupsi dan Anda dapat mengambil hasilnya. Dalam gangguan inilah kami mengatur algoritma kontrol. Ya, di dalam interupsi, sesuatu yang masif lebih baik untuk tidak melakukannya, lebih baik untuk mengatur bendera dan meneruskan eksekusi, tetapi saya akan membiarkan diri saya menyederhanakan, karena dalam hal ini pengontrol saya tidak dimuat secara khusus dan akan berhasil menghitung dan keluar dari interupsi dengan probabilitas 146% untuk munculnya yang baru.
Sedikit tentang manajemenBayangkan Anda memasuki kamar mandi dan memutuskan untuk mencuci tangan di wastafel. Anda sedikit membuka air, menyentuhnya dengan tangan Anda, dingin? Tambahkan lebih banyak air panas, lebih hangat? Bagus! Tambahkan lebih banyak air panas? Hampir apa yang kamu butuhkan? Bagus! Tambahkan lebih banyak air panas, coba dengan tangan Anda, bakar diri Anda sendiri? Mari kita sedikit panaskan sekarang. Oke Dan hingga tak terbatas, Anda akan memutar keran hingga suhu air menjadi ideal. Ini adalah tombol paling mudah!
Hanya saja kita tidak mengatur jumlah air panas, tetapi siklus tugas PWM. Alih-alih tangan, kami memiliki ADC dengan hasil yang diukur. Tetap hanya menerapkan logika. Kami akan menghitung apa yang harus dihasilkan ADC pada output 12V, dan kemudian menggunakan kondisi
if , kami akan memaksa controller kami untuk mempertahankan nilai ini dengan mengubah faktor tugas.
Untuk memulai, mari kita gantung pembagi tegangan untuk mengurangi 12V menjadi 2-2.5V, misalnya, karena ADC dapat mengukur dari 0 hingga + 3.3V dan jika 12V diberikan, maka mikrokontroler akan terbakar dengan mudah. Oleh karena itu, saya akan meletakkan pembagi dengan nilai nominal 10 kOhm dan 2 kOhm, yang akan memberikan rasio pembagian 6 dan, dengan demikian, + 12V kami akan berubah menjadi + 2V. ADC kami akan menghasilkan hasilnya: adcResult = (V
out / k) / V
ref * 2
12 = (12V / 6) / 3.3 * 4095 = 2481. Sekarang kita menulis kode untuk interrupt handler:
void ADC1_2_IRQHandler (void) { ADC2->ISR |= ADC_ISR_EOC; adcResult = ADC2->DR; if (adcResult > 2480) { dutyControl = dutyControl - 10; } else { dutyControl = dutyControl + 10; } SetDutyTimerA(dutyControl); }
Pertama-tama, setelah masuk ke interrupt handler, Anda perlu menghapus bendera interupsi ini, jika tidak kedua kalinya Anda tidak akan masuk ke dalamnya. Kemudian kami membaca hasilnya dan menyimpannya sebagai variabel
adcResult . Sekarang, mengetahui tegangan pada output, Anda perlu menyesuaikan siklus tugas untuk PWM, saya menerapkan ini hanya melalui kondisi
if . Dalam setiap periode PWM, kami melakukan pengukuran, menambah atau mengurangi siklus tugas dan mengatur hasilnya untuk periode berikutnya. Semuanya sederhana, cepat dan esensi terlihat. Kami melihat hasil kerja:
Seperti yang Anda lihat, semuanya berfungsi dan ketika voltase input berubah, outputnya sendiri tetap stabil pada 12V. Sangat penuh perhatian dapat melihat jarum kecil menyelinap, maka Anda hanya perlu menggantung keramik X7R pada output 1-10 mikrofarad dan mereka akan pergi, saya terlalu malas untuk mencarinya dan menyoldernya. Sekarang osilogram itu sendiri, agar tidak merusak mata:

Di sini Anda dapat melihat bagaimana tegangan output naik. Faktanya adalah bahwa karena algoritma kontrol, agar pengisian mencapai nilai dari 0 hingga 10.000, misalnya, seribu periode atau sekitar 10 ms diperlukan. Ini cocok untuk saya karena permulaan yang lembut, jika Anda ingin mengurangi waktu naik, mempersulit algoritma sedikit dan menambahkan +1000, bukan +10, dan semakin dekat Anda ke 12V yang ditentukan, semakin sedikit regulasi yang Anda lakukan hingga Anda mencapai +10 . Secara umum, banyak hal dapat dilakukan dalam hal manajemen, sehingga Anda memiliki bidang untuk eksperimen.
Poin menarik lainnya adalah osilasi pada saat shutdown, seperti "harmonika". Faktanya adalah bahwa setelah mematikan daya, bagian digital saya terus bekerja dari PSU lain dan mencoba untuk menjaga nilai yang diinginkan pada output. Dari mana energi itu berasal? Ya, dari kapasitor input, ini adalah 1000 mikrofarad yang sudah 3 buah, ini adalah fenomena yang menarik.
Kesimpulan
Artikel itu tidak kecil, tetapi Anda menginginkan segalanya dan segera mereka mengatakan mari kita siapkan besi - dapatkan. Saya harap Anda menikmati artikel ini, saya mencoba membuatnya tidak ilmiah, tetapi sains populer, sehingga materi dapat diakses oleh orang-orang dengan berbagai tingkat pengetahuan dan pengalaman. Mungkin di masa depan saya akan menganalisis topologi serupa lainnya seperti boost, full bridge dan lainnya.
By the way, artikel dan kode ini akan berfungsi untuk pengontrol MPPT baru pada 20A, yang saya rancang. Sekarang saya sedang menunggu
papan PCBway , yang sebenarnya menawarkan diri untuk mensponsori proyek open source saya dengan papan sirkuit cetak, sumber MPPT juga akan terbuka untuk semua modul saya.
Saya lupa hal yang paling penting! Simpan proyek dengan kode untuk TrueSTDIO -
RAR .