TinyFL - driver senter mikrokontroler

Hai Habr!


Saya ingin menceritakan sebuah kisah tentang bagaimana saya sampai ke tangan seorang headlamp China pada Cree XM-L LED dan apa yang terjadi selanjutnya.



Latar belakang


Sekali waktu, saya memesan senter dengan LED terang dari satu situs berbahasa Mandarin. Senter ternyata cukup ergonomis (meskipun bisa lebih mudah), tetapi pengemudinya meninggalkan banyak hal yang diinginkan.


Itu bersinar cukup terang, tetapi pengemudi hanya memiliki 3 mode - sangat terang, cerah dan strobo, beralih di antaranya dilakukan dengan satu sentuhan tombol. Untuk hanya menyalakan dan mematikan lampu senter, perlu memilah-milah 3 mode ini setiap kali. Selain itu, senter ini, ketika dinyalakan, mengosongkan baterai hingga yang terakhir - sehingga sepasang 18650 kaleng saya habis.


Semua ini tidak nyaman dan menjengkelkan, jadi pada titik tertentu saya memutuskan untuk membuat driver untuk itu, yang akan menjadi cerita selanjutnya.


Senter dengan driver lama

Ini lampu senter, mungkin banyak yang pernah menangani hal serupa


Sepertinya driver asli


Kerangka Acuan


Seperti yang Anda ketahui, untuk mencapai hasil yang baik, pengembangan apa pun harus memiliki spesifikasi teknis yang baik, jadi saya akan mencoba merumuskannya sendiri. Jadi, pengemudi harus:


  • Untuk dapat menghidupkan / mematikan dengan menekan sebentar tombol (tombol tanpa memperbaiki). Mungkin inilah alasan utama mengapa semua ini dimulai.
  • Memiliki kontrol kecerahan yang mulus (tanpa langkah), dari yang paling terang - "turbo" ke "cahaya bulan" ketika dioda hampir tidak menyala. Kecerahan harus berubah secara merata.
  • Ingat kecerahan yang diatur untuk waktu istirahat.
  • Pantau pengisian daya baterai, beri peringatan saat hampir habis (sekitar 3,3V) dan matikan saat sudah benar-benar habis (sekitar 2,9V). Untuk baterai yang berbeda, parameter ini mungkin berbeda. Dengan demikian, tegangan operasi harus berada dalam kisaran 2,7 ~ 4,5V.
  • Memiliki 2 mode khusus - suar darurat dan strobo (yah, mengapa tidak?)
  • Untuk dapat menyalakan / mematikan LED bagian belakang (ini benar ketika mengendarai sepeda di malam hari, ternyata mirip lampu penanda).
  • Memiliki perlindungan terhadap polaritas terbalik dan listrik statis. Tidak harus, tetapi ini akan menjadi tambahan yang bagus, karena dalam kegelapan Anda dapat keliru menempatkan baterai di sisi yang salah.
  • Lebih kecil dari ukuran driver aslinya, tetapi memiliki jejak yang sama. Pengemudi Cina sangat besar, membuatnya lebih besar tidak akan mudah.

Nah, jika senter dimodifikasi, mengapa tidak membangun pengisi daya dengan konektor micro-USB? Saya selalu memiliki kabel dan pengisian USB di tangan, dan saya harus mencari catu daya asli.


Besi


Saya punya pengalaman dengan Arduino, jadi diputuskan untuk membuat driver di keluarga AVR MK. Mereka tersedia secara luas, mudah diprogram, dan memiliki mode daya rendah (tidur).


Mikrokontroler Attiny13a dipilih sebagai "otak" pengemudi - ini adalah salah satu MC Atmel termurah (sekarang diserap oleh Microchip), ia memiliki segalanya di dalamnya - GPIO untuk menghubungkan tombol dan LED, timer untuk menghasilkan sinyal PWM, ADC untuk mengukur tegangan dan EEPROM untuk menghemat parameter. Hanya 1 KB memori flash yang tersedia (tetapi berapa banyak yang dibutuhkan untuk senter), serta 64 B RAM dan jumlah EEPROM yang sama.
Attiny13 tersedia dalam beberapa opsi perumahan, khususnya di DIP-8, yang dapat dimasukkan langsung ke papan tempat memotong roti biasa dengan pitch 2,54mm.


Karena hanya 3 kabel yang bergerak dari belakang ke kepala senter, tombol dipaksa untuk memendek ke tanah (tentang ketidakmungkinan korsleting ke plus - nanti), Anda harus mengganti LED di tambah - yang berarti Anda memerlukan tiang saluran-P. Saya mengambil AO3401 sebagai transistor, tetapi Anda dapat mengambil SI2323, lebih mahal, tetapi memiliki resistansi saluran terbuka yang lebih sedikit (40 mOhm, sedangkan AO3401 memiliki 60 mOhm, pada 4,5 V), oleh karena itu, pengemudi akan memanaskan lebih sedikit.


Dari kata-kata hingga perbuatan, saya mengumpulkan di papan tempat memotong roti versi awal


Saat ini didukung langsung dari programmer, dengan tegangan 5 V (sebenarnya lebih sedikit karena kerugian pada kabel USB). Alih-alih LED, XM-L sejauh ini telah terjebak LED biasa di kaki dan menempatkan transistor yang lemah dengan tegangan ambang batas tinggi.
Kemudian, dalam program Altium Designer, sebuah diagram dibuat, yang saya tambahkan dengan perlindungan terhadap polaritas terbalik dan ESD.



Deskripsi terperinci dan tujuan semua komponen

Prasyarat:


U1 - Mikrokontroler Attiny13a dalam paket 8S1 (indeks SSU)


C1 - decoupling kapasitor untuk catu daya mikrokontroler, harus dalam wilayah 0,1 mikrofarad, kasing 1206 atau 0805, koefisien suhu X7R


R1-R2 adalah pembagi resistor untuk mengukur tegangan baterai, peringkat apa pun dapat diatur, di sini rasio utama (750K / 220K, rasio pembagian 4,41) dan arus bocor, yang akan lebih besar jika peringkatnya ditingkatkan (saat ini sekitar 4 ΞA). Karena ION internal digunakan (1,1 V, menurut datasheet itu bisa antara 1,0 V - 1,2 V), tegangan maksimum pada output pembagi tidak boleh lebih dari 1 V. Dengan pembagi 750/220, tegangan maksimum yang diijinkan pada input pembagi akan menjadi 4,41 V, yang lebih dari cukup untuk semua jenis baterai lithium.
Saya menghitung pembagi menggunakan kalkulator ini.


R3 - melindungi output port mikrokontroler dari korsleting (jika PB1 tiba-tiba ditarik ke VCC, arus besar akan mengalir melalui pin dan MC dapat terbakar)


R4 - menarik RESET MK ke kekuasaan, tanpa itu, reboot dari pickup dimungkinkan.


Q1 - transistor efek medan P-channel dalam paket SOT-23, saya menginstal AO3401, tetapi yang lainnya dengan pinout yang sesuai (misalnya, SI2323)


R7 adalah resistor gerbang pembatas arus. Karena gerbang transistor memiliki kapasitas tertentu, saat mengisi daya ini, arus yang besar dapat melewati pin dan pin mungkin gagal. Anda dapat mengaturnya di wilayah 100-220 Ohm (seharusnya tidak lagi, transistor akan mulai dalam keadaan setengah tertutup untuk waktu yang lama, dan, sebagai hasilnya, akan memanas lebih banyak)


R6 - resistor pull-up shutter ke daya. Jika PB0 masuk ke kondisi impedansi tinggi, logika 1 akan dipasang melalui resistor di gerbang Q1 ini dan transistor akan ditutup. Ini dapat terjadi karena kesalahan dalam kode atau dalam mode pemrograman.


D2 - "penguncian" dioda - memungkinkan untuk tegangan "kendur" (ketika LED menyala untuk jangka waktu singkat pada kecerahan penuh) untuk memberi makan MK dari kapasitor untuk sementara waktu, ia juga melindungi terhadap polaritas terbalik.
Anda dapat menempatkan dioda Schottky dalam paket SOD323 dengan drop tegangan minimum, saya menaruh BAT60.


Awalnya, perlindungan terhadap polaritas terbalik catu daya dibuat pada transistor efek medan (ini dapat dilihat pada papan yang dibuat oleh jarahan). Fitur yang tidak menyenangkan keluar setelah pemasangan kabel - ketika beban dinyalakan, terjadi penurunan tegangan dan MK dinyalakan kembali, karena pekerja lapangan tidak membatasi arus di arah yang berlawanan. Pada awalnya saya menyolder kapasitor elektrolitik 200 uF antara VCC dan GND, tetapi saya tidak menyukai solusi ini karena ukurannya. Saya harus menyolder transistor dan meletakkan dioda di tempatnya, karena SOT-23 dan SOD-323 memiliki dimensi yang sama.


Total, di sirkuit hanya ada 10 komponen yang diperlukan untuk instalasi.


Komponen opsional:


R5 dan D1 bertanggung jawab untuk lampu latar (LED2). Peringkat minimum R5 adalah 100 ohm. Semakin tinggi peringkat, semakin lemah LED kembali menyala (menyala dalam mode konstan, tanpa PWM). D1 - setiap LED dalam kasus 1206, saya taruh hijau, karena secara visual mereka lebih cerah pada arus yang sama dari yang lain.


D3 dan D4 adalah dioda pelindung (TVS), saya menggunakan PESD5V0 (5.0V) dalam paket SOD323. D3 melindungi terhadap tegangan berlebih dengan daya, D4 - dengan tombol. Jika tombol ditutupi oleh membran, maka tidak ada arti khusus di dalamnya. Mungkin bermanfaat untuk menggunakan dioda pelindung dua arah, jika tidak, ketika polaritas terbalik, arus akan mengalir melaluinya dan mereka akan terbakar (lihat CVC dioda pelindung dua arah).


C2 - kapasitor tantalum dalam kasus A (mirip dengan 1206), masuk akal untuk mengaturnya ketika pengemudi tidak stabil (tegangan suplai dapat ditekan pada arus switching LED yang tinggi)


Semua resistor ukuran 0603 (bagi saya, ini adalah batas yang memadai untuk penyolderan manual)


Semuanya jelas dengan komponennya, Anda bisa membuat papan sirkuit tercetak sesuai skema di atas.
Hal pertama yang harus dilakukan adalah membangun model 3D papan masa depan, bersama dengan lubang - IMHO, di Altium Designer ini adalah cara paling mudah untuk menentukan geometri PCB.
Saya mengukur dimensi driver lama dan lubang pemasangannya - papan harus terpasang pada mereka, tetapi memiliki dimensi yang lebih kecil (untuk fleksibilitas, tiba-tiba Anda harus membangunnya di tempat lain).
Minimum yang masuk akal di sini ternyata sekitar 25x12.5mm (rasio aspek 2: 1) dengan dua lubang dengan diameter 2mm untuk dipasang pada rumah lampu dengan sekrup asli.


Saya membuat model 3D di SolidWorks, kemudian diekspor ke Altium Designer sebagai LANGKAH.
Kemudian saya menempatkan komponen di papan, membuat kontak di sudut (lebih mudah dan lebih mudah untuk menyolder tanah), Attiny13 ditempatkan di tengah, transistor lebih dekat ke kontak LED.
Saya menyebar trek daya, menempatkan komponen yang tersisa saat itu ternyata dan berpisah trek sinyal. Untuk kenyamanan menghubungkan memori, saya mengeluarkan kontak terpisah untuknya, yang menggandakan kontak baterai.
Saya membuat semua kabel (dengan pengecualian satu jumper) di lapisan atas - agar dapat membuat papan di rumah dengan LUT.
Lebar minimum jalur sinyal adalah 0,254 mm / 10 mil, yang kekuatannya memiliki lebar maksimum jika memungkinkan.


Ini adalah bagaimana papan kabel terlihat di Altium Designer


Altium Designer memiliki kesempatan untuk melihat bagaimana papan akan terlihat dalam 3D (untuk ini Anda memerlukan model untuk semua komponen, beberapa di antaranya Anda harus membuat sendiri).
Mungkin seseorang di sini akan mengatakan bahwa mode 3D tidak diperlukan untuk pelacak, tetapi bagi saya pribadi itu adalah fungsi yang nyaman yang memfasilitasi penempatan komponen untuk kenyamanan penyolderan.



Pada saat penulisan, 3 versi papan dibuat - yang pertama untuk LUT, yang kedua untuk manufaktur industri dan yang ke-3, final dengan beberapa koreksi.


Pembuatan papan


Cara buatan sendiri


LUT - teknologi penyetrika laser, metode untuk memproduksi papan sirkuit menggunakan etsa pada masker yang diperoleh dengan mengubah toner dari kertas menjadi tembaga. Metode ini sangat bagus untuk papan satu sisi yang sederhana seperti driver ini.
Jaringan ini memiliki banyak artikel tentang teknologi ini, jadi saya tidak akan menjelaskan secara rinci, tetapi hanya memberi tahu Anda bagaimana saya melakukannya.


Pertama, Anda perlu menyiapkan templat yang akan dicetak pada kertas termal. Saya mengekspor layer top_layer ke PDF, saya mendapatkan gambar vektor.



Karena papan kecil, masuk akal untuk mengambil sepotong PCB dengan dimensi beberapa kali lebih besar dan melakukan apa yang disebut industri panel.
Untuk tujuan ini, CorelDraw sangat mudah, tetapi Anda dapat menggunakan editor vektor lainnya.
Saya menempatkan salinan templat pada dokumen, saya membuat celah 0,5-1mm di antara papan (tergantung pada metode pemisahan, lebih lanjut tentang itu nanti), papan harus ditempatkan secara simetris - jika tidak akan sulit untuk memisahkannya.


Saya mengambil sepotong PCB satu sisi dengan dimensi sedikit lebih besar dari panel rakitan, bersih dan degrease (saya lebih suka menggosok dengan penghapus dan kemudian dengan alkohol). Saya mencetak templat untuk etsa pada kertas termal (di sini penting untuk tidak lupa untuk mencerminkan templat).
Dengan bantuan setrika dan kesabaran, dengan lembut membelai kertas, saya menerjemahkannya ke textolite. Saya menunggu sampai dingin dan dengan hati-hati melepaskan kertas.
Daerah bebas tembaga (tidak dilapisi dengan toner) dapat dipernis atau ditempel (semakin kecil area tembaga, semakin cepat reaksi etsa).


Panel rumah seperti itu - sejumlah besar papan dapat mengimbangi cacat produksi


Saya meracuni papan dengan asam sitrat dalam larutan hidrogen peroksida, ini adalah cara yang paling terjangkau, meskipun agak lambat.
Proporsi adalah sebagai berikut: untuk 100 ml peroksida 3% adalah 30 g asam sitrat dan sekitar 5 g garam, semuanya dicampur dan dituangkan ke dalam wadah dengan textolite.
Menghangatkan larutan akan mempercepat reaksi, tetapi dapat menyebabkan toner terkelupas.


Sihir kimiawi yang tidak dikenal dimulai: tembaga ditutupi dengan gelembung, dan solusinya mengambil warna biru


Setelah beberapa waktu saya mengeluarkan papan yang tergores dan membersihkannya dari toner. Saya tidak bisa mencucinya dengan pelarut apa pun, jadi saya menghapusnya secara mekanis dengan kertas ampelas berbutir halus.


Sekarang tinggal timah pada papan - ini akan membantu menyolder dan melindungi tembaga dari oksidasi dan memfasilitasi penyolderan. Saya lebih suka timah dengan paduan Rose - paduan ini meleleh pada suhu sekitar 95 derajat, yang memungkinkannya untuk kaleng dalam air mendidih (ya, mungkin bukan komposisi yang paling dapat diandalkan untuk timah, tetapi untuk papan sirkuit buatan rumah).



Setelah tinning, saya mengebor papan (untuk kontak saya menggunakan bor karbida f1.0, untuk jumper - f0.7), saya bor dengan dremel karena kekurangan alat lain. Saya tidak ingin memotong textolite karena debu, oleh karena itu, setelah pengeboran, saya memotong papan dengan pisau kantor - di kedua sisi saya membuat beberapa potongan dalam satu baris, kemudian memecahnya menjadi potongan. Ini mengingatkan pada metode V-cut yang digunakan dalam industri, hanya ada sayatan yang dibuat oleh pabrik.


Sepertinya papan siap disolder


Saat papan siap, Anda dapat mulai memasang kabel komponen. Pertama, saya solder sedikit (resistor 0603), lalu yang lainnya. Resistor berdekatan dengan MK, jadi penyolderan dalam urutan terbalik bisa bermasalah. Setelah menyolder, saya memeriksa apakah ada hubungan pendek untuk menyalakan driver, setelah itu sudah dimungkinkan untuk memulai firmware MK.


Driver siap mengunduh firmware


Cara industri


LUT cepat dan terjangkau, tetapi teknologi ini memiliki kelemahan (seperti hampir semua metode pembuatan PP "rumah"). Sulit membuat papan dua sisi, lintasannya bisa terukir, dan Anda hanya bisa bermimpi membuat lubang.


Untungnya, Cina yang giat telah lama menawarkan layanan untuk pembuatan papan sirkuit tercetak dengan cara industri.
Anehnya, papan lapis tunggal Cina harganya lebih mahal dari papan dua lapis, jadi saya memutuskan untuk menambahkan lapisan kedua (bawah) ke papan sirkuit cetak. Jalur daya dan ground digandakan pada lapisan ini. Juga, menjadi mungkin untuk membuat pendingin dari transistor (poligon tembaga pada lapisan bawah), yang akan memungkinkan pengemudi bekerja pada arus yang lebih tinggi.


Lapisan bawah papan di Altium Designer


Untuk proyek ini, saya memutuskan untuk memesan papan sirkuit tercetak di situs web PcbWay. Situs ini memiliki kalkulator yang nyaman untuk menghitung biaya papan, tergantung pada parameter, ukuran, dan kuantitasnya. Setelah menghitung biayanya, saya mengunduh file gerber yang dibuat sebelumnya di Altium Designer, orang China memeriksanya dan papannya mulai diproduksi.


Membuat satu set 10 papan TinyFL menghabiskan biaya $ 5. Saat mendaftarkan pengguna baru, diskon $ 5 diberikan untuk pesanan pertama, jadi saya hanya membayar untuk pengiriman, yang juga berharga sekitar $ 5.
Di situs ini ada peluang untuk meletakkan proyek di domain publik, jadi jika seseorang ingin memesan papan ini, Anda bisa menambahkan proyek ini ke keranjang.


Setelah beberapa minggu, papan yang sama datang kepada saya, hanya cantik diproduksi secara industri. Mereka hanya bisa dibuka ritsleting dan diisi dengan firmware.



Program (firmware)


Kesulitan utama yang muncul saat menulis firmware driver, ini terkait dengan ukuran memori flash yang sangat kecil - Attiny13 hanya memiliki 1024 byte.
Juga, karena perubahan kecerahannya halus, tugas yang tidak sepele adalah mengubahnya secara seragam - untuk ini kami harus melakukan koreksi gamma.


Algoritma kontrol driver


Pengemudi dihidupkan dengan menekan sebentar tombol, dimatikan olehnya.
Mode kecerahan yang dipilih disimpan selama durasi shutdown.


Jika selama operasi Anda menekan dua kali tombol (klik dua kali), LED tambahan akan dihidupkan / dimatikan.
Dengan penekanan lama selama operasi, kecerahan lampu akan berubah secara bertahap. Tekan berulang kali mengubah arah (lebih kuat / lebih lemah).


Pengemudi secara berkala memeriksa tegangan baterai, dan jika lebih rendah dari nilai yang ditetapkan, memperingatkan pengguna tentang pengosongan, dan kemudian mati untuk menghindari pengosongan yang dalam.


Penjelasan lebih rinci tentang algoritma driver
  1. Ketika daya disuplai ke MK, periferal diatur dan MK tertidur (jika STARTSLEEP ditentukan). Ketika daya disuplai ke driver, kedua LED berkedip beberapa kali jika STARTBLINKS didefinisikan.
  2. Tidur Attiny13 tertidur dalam mode power-down (ini adalah mode paling ekonomis, menurut datasheet, konsumsi MK akan ~ 1 ΞA), dari mana ia hanya bisa keluar dengan gangguan apa pun. Dalam hal ini, ini adalah interupsi INT0 - menekan tombol (mengatur PC1 ke logis 0).
    Pada PC1, pull-up lemah internal harus dihidupkan. ADC dan komparator adalah konsumen utama saat ini dari seluruh pinggiran, sehingga mereka juga perlu dimatikan. Selama tidur, isi register dan RAM disimpan, sehingga EEPROM tidak diperlukan untuk mengingat kecerahan.
  3. Setelah tidur, periferal dan PWM dihidupkan dan pengemudi memasuki siklus tanpa akhir di mana tombol dipantau dan tegangan baterai diperiksa secara berkala.
  4. Jika tombol ditekan, waktu ditekan.
    4.1. Jika persnya pendek, diharapkan klik dua kali (jika BTN_DBCLICK didefinisikan).
    Jika ya, LED2 tambahan akan berganti
    Jika tidak, lanjutkan ke langkah 2 (tidur)
    4.2. Jika pers panjang (lebih lama dari BTN_ONOFF_DELAY) - mode kontrol kecerahan diaktifkan. Dalam mode ini:
    • Arah perubahan dibalik (lebih / kurang) dan% dari pengisian PWM berubah saat tombol ditekan.
    • / (RATE_MAX / RATE_MIN), ;
    • n- (AUXMODES_DELAY) , . — ( 25 , 8 ) ( 50, 1 ). , - .
  5. — ADC2, .
    • BAT_WARNING –
    • BAT_WARNING – , . - . , 5 .
    • BAT_SHUTDOWN — .2 ().


, — , - , . - , , . P- , , — , . .
rate, 255 rate = 100% .
1.2 1, 1200000/256 = 4.7 . ( ), (, , , ). , 9.6 (CKSEL[1:0]=10, CKDIV8=1) 4.8 (CKSEL[1:0]=01, CKDIV8=1), 8 4 , .


, , . , ( ) , , , 1.5 , 2 ( Cree XM-L — 3 ).
, (rate=255) 3. , . , RATE_MAX . , SI2323DS 4 , 2 , .


-


. , 5-10% , 75-100% . , n , , , .


, -. , 1 12 . , rate_step_array. , , .



n- ( BAT_PERIOD) . , VIN R1-R2, PB4 ( ADC2 ).


, , Vref, 1.1 . — , (, 1.1 1023 255, 8- ). , 6 , 255 1.1 , 4.33 ( 4.03), .


, . BAT_WARNING ( , — BAT_INFO_STEP, ), BAT_SHUTDOWN .
, .. , .


, , . , 4.03 R1 = 1M R2 = 330, R = 1330K 4 = 3 .
() 1 . , , ( - — ).



, Arduino C/C++.
, (defines) flashlight.h.
Arduino IDE Attiny13(a) Atmel Studio – , Arduino IDE, .


Arduino IDE

Attiny13 IDE. .
Tools>Board Attiny13(a) Tools>Frequency 1.2MHz.
"" .ino, — . , — Arduino IDE. - , .cpp.
, , *.hex. .


Atmel Studio

IDE flashlight.atsln, — flashlight.h () flashlight.cpp .
— .
F7, ( , , ). debug flashlight.hex, .


USBASP AVRDUDEPROG. GUI avrdude, — . ( Attiny13(a), Fuses read. , , . programm, . flashlight.h


Untuk mengunggah firmware, buka tab Program, pilih file firmware yang dikompilasi dalam format HEX (flashlight.hex) di baris Flash dan klik Program. Status firmware akan ditampilkan pada jendela di bawah ini. Jika unduhan tidak berhasil, itu mungkin kontak yang buruk, itu terjadi - patut dicoba lagi. Omong-omong, untuk alasan ini parameter STARTBLINKS dibuat - satu kedipan LED2 pada saat memasok daya ke pengemudi berfungsi sebagai indikasi kontak pengemudi dengan pemrogram.
Alih-alih USBASP, Anda dapat menggunakan Arduino untuk mengunduh firmware, lebih detail di sini dan di sini


Programmer USBASP terhubung ke driver melalui klip dengan loop


Untuk menghubungkan USBASP ke tinka, saya menggunakan klip untuk SOIC 8-pin. Bukan perangkat yang sangat nyaman, Anda harus menyiksa 10 menit sebelum Anda menangkap kontak (mungkin saya baru saja menemukan klip yang rusak). Ada juga SOIC-DIP adapter di mana rangkaian mikro dimasukkan sebelum penyolderan dan firmware dituangkan ke dalamnya - opsi ini lebih nyaman, tetapi kemampuan untuk memprogram driver di-sirkuit hilang (yaitu, memperbarui firmware setelah menyolder MK ke papan).
Jika semua ini tidak ada, maka Anda cukup menyolder kabel ke terminal MK, yang kemudian menempel pada Arduino.


Kalibrasi


Arus yang melewati driver dan LED tidak boleh melebihi nilai maksimum. Untuk LED XM-L, ini adalah 3 A, untuk driver tergantung pada transistor yang digunakan, misalnya, untuk SI2323 arus maksimum adalah sekitar 4 A, tetapi lebih baik untuk mengemudi di arus yang lebih rendah karena pemanasan yang berlebihan. Untuk mengurangi arus pada kecerahan maksimum, parameter RATE_MAX digunakan (#define RATE_MAX xx, di mana xx adalah kecerahan maksimum dari 0 hingga 255).
Kalibrasi ADC bukanlah prosedur wajib, tetapi jika Anda ingin pengemudi memantau tegangan ambang secara akurat, Anda harus mengotak-atiknya.


Perhitungan tidak akan memberikan akurasi pengukuran yang tinggi, karena, pertama, resistor dapat bervariasi dalam toleransi (biasanya 1-5%), dan kedua, ion internal dapat memiliki sebaran dari 1,0 hingga 1,2 V.
Oleh karena itu, satu-satunya cara yang dapat diterima adalah menetapkan nilai dalam unit ADC (BAT_WARNING dan BAT_SHUTDOWN), secara eksperimental memilihnya untuk yang diinginkan. Untuk melakukan ini, Anda perlu kesabaran, seorang programmer dan sumber daya yang dapat disesuaikan.
Saya menetapkan nilai BAT_PERIOD ke 1000 dalam firmware (memeriksa tegangan sekali per detik) dan secara bertahap mengurangi tegangan suplai. Ketika pengemudi mulai memperingatkan tentang debit, saya meninggalkan nilai BAT_WARNING saat ini sesuai kebutuhan.
Ini bukan cara yang paling nyaman, mungkin di masa depan Anda perlu melakukan prosedur kalibrasi otomatis dengan menyimpan nilai-nilai di EEPROM.


Perakitan senter


Ketika papan sudah siap dan firmware dibanjiri, Anda akhirnya bisa meletakkannya di tempat driver lama. Saya melepas supir lama dan menyolder supir baru di tempatnya.


Driver baru terhubung bukan yang lama sesuai dengan skema ini


Setelah memeriksa apakah ada korsleting pada catu daya, saya menghubungkan catu daya dan memeriksa operabilitasnya. Kemudian saya memasang papan pengisian (TP4056), untuk ini saya harus mengebor lubang di konektor pengisian dengan sedikit dremel, dan memperbaikinya dengan lem panas (penting bahwa lem tidak mengalir ke konektor, akan sulit untuk mengeluarkannya dari sana).


Saya tidak mengencangkan papan dengan sekrup, karena ulir dalam kasing rusak karena memutar berulang-ulang, tetapi hanya menuangkan lem di atasnya, juga menempelkan kabel di tempat-tempat penyolderan agar tidak pecah. Saya memutuskan untuk menutupi pengemudi dan pengisi daya dengan pernis tidak berwarna akrilik, ini akan membantu melawan korosi.



Pengujian dan perhitungan biaya produksi


Setelah semua operasi, dimungkinkan untuk mulai menguji driver. Arus diukur dengan multimeter konvensional, menghubungkannya ke sirkuit terbuka catu daya.


Konsumsi daya pengemudi lama (diukur pada 4,04 V):


  1. Saat tidur - tidak diukur
  2. Mode maksimum: 0,60 A
  3. Mode sedang: 0,30 A
  4. Stroboscope: 0.28 A

Konsumsi daya driver baru (diukur pada 4.0 V):


  1. Dalam mode tidur, ia mengkonsumsi sekitar 4 ΞA, yang jauh lebih sedikit daripada arus self-discharge baterai lithium-ion. Arus utama dalam mode ini mengalir melalui pembagi resistor.
  2. Dalam mode minimum, "cahaya bulan" adalah sekitar 5-7 mA, jika kita mengasumsikan bahwa kapasitas satu sel 18650 adalah sekitar 2.500 mA * jam, maka kita mendapatkan operasi kontinu sekitar 20 hari . MK sendiri mengkonsumsi suatu tempat 1,2-1,5 mA (pada frekuensi operasi 1,2 MHz).
  3. Pada mode maksimum, "turbo" - mengkonsumsi sekitar 1,5 A, dalam mode ini ini akan bekerja sekitar satu setengah jam. LED pada arus seperti itu mulai menjadi sangat panas, sehingga mode ini tidak dimaksudkan untuk operasi jangka panjang.
  4. Suar darurat - mengkonsumsi rata-rata sekitar 80 mA, dalam mode ini, senter akan bekerja hingga 30 jam.
  5. Stroboscope - mengkonsumsi sekitar 0,35 A, akan bekerja hingga 6 jam.

Harga masalah


Jika Anda membeli komponen dalam Chip dan Deep, sekitar 100 rubel akan keluar (60 rubel Attiny13, ~ 40 rubel sisa bubuk longgar). Masuk akal untuk memesan dari Cina, jika beberapa potong dibuat - maka dari segi sepotong akan lebih murah, Cina biasanya menjual dalam batch 10 potong atau lebih.
Biaya akan dirilis dengan harga di wilayah 300 rubel untuk 10 buah (tanpa pengiriman), jika dipesan di Cina.
Pengkabelan dan flashing satu driver membutuhkan waktu sekitar satu jam.


Kesimpulan


Senter Cina menjadi lebih nyaman, meskipun sekarang saya memiliki keluhan tentang mekanismenya - bagian depan terlalu berat, dan fokusnya tidak terlalu dibutuhkan.
Di masa depan saya berencana untuk membuat versi driver ini untuk senter dengan tombol power (dengan fiksasi). Benar, saya bingung dengan banyaknya proyek semacam itu. Apakah Anda pikir perlu melakukan yang lain?


Driver close-up (versi 2_t)


UPD : Menambahkan dukungan untuk Arduino IDE.


Kode sumber untuk firmware, sirkuit, dan kabel papan sekarang ada di github, Anda dapat mengunduhnya di sini: https://github.com/madcatdev/tinyfl_t

Source: https://habr.com/ru/post/id464673/


All Articles