TinyFL - Taschenlampentreiber für Mikrocontroller

Hallo Habr!


Ich möchte eine Geschichte darüber erzählen, wie ich auf einer Cree XM-L LED in die Hände eines chinesischen Scheinwerfers gelangt bin und was als nächstes damit passiert ist.



Hintergrund


Es war einmal, als ich bei einer chinesischen Website eine Taschenlampe mit einer hellen LED bestellte. Die Taschenlampe erwies sich als ziemlich ergonomisch (obwohl es einfacher sein könnte), aber der Fahrer ließ zu wünschen übrig.


Es schien hell genug, aber der Fahrer hatte nur 3 Modi - sehr hell, hell und Blitz, zwischen denen auf Knopfdruck umgeschaltet wurde. Um die Taschenlampe einfach ein- und auszuschalten, mussten diese drei Modi jedes Mal sortiert werden. Außerdem hat diese Taschenlampe beim Einschalten die Batterie bis zum letzten Mal entladen - so dass ein Paar meiner 18650-Dosen tief entladen wurde.


All dies war unangenehm und nervig, also entschied ich mich irgendwann, meinen Fahrer dafür zu machen, was die weitere Geschichte sein wird.


Taschenlampe mit einem alten Fahrer

Hier ist eine Taschenlampe, mit der sich wahrscheinlich viele ähnlich befasst haben


Es sieht aus wie der ursprüngliche Treiber


Technische Aufgabe


Wie Sie wissen, sollte jede Entwicklung gute technische Spezifikationen haben, um ein gutes Ergebnis zu erzielen. Deshalb werde ich versuchen, sie für mich selbst zu formulieren. Der Fahrer sollte also:


  • Ein- und Ausschalten durch kurzes Drücken einer Taste (eine Taste ohne Fixierung). Vielleicht ist dies der Hauptgrund, warum das alles begann.
  • Haben Sie eine sanfte (stufenlose) Helligkeitsregelung, von der hellsten - "Turbo" bis "Mondlicht", wenn die Diode kaum leuchtet. Die Helligkeit sollte sich gleichmäßig ändern.
  • Denken Sie an die eingestellte Helligkeit für die freie Zeit.
  • Überwachen Sie die Batterieladung, warnen Sie, wenn sie fast entladen ist (ca. 3,3 V) und schalten Sie sie aus, wenn sie vollständig entladen ist (ca. 2,9 V). Bei verschiedenen Batterien können diese Parameter unterschiedlich sein. Dementsprechend sollte die Betriebsspannung im Bereich von 2,7 bis 4,5 V liegen.
  • Haben Sie 2 spezielle Modi - Notsignal und Blitz (na ja, warum nicht?)
  • Um die hintere LED ein- und ausschalten zu können (dies gilt, wenn Sie nachts Fahrrad fahren, so etwas wie eine Begrenzungsleuchte).
  • Schutz gegen Verpolung und statische Elektrizität. Nicht unbedingt, aber es wird eine schöne Ergänzung sein, denn im Dunkeln können Sie den Akku fälschlicherweise auf die falsche Seite legen.
  • Seien Sie kleiner als der ursprüngliche Treiber, haben Sie aber den gleichen Platzbedarf. Der chinesische Fahrer ist einfach riesig, es wird nicht einfach sein, ihn größer zu machen.

Wenn die Taschenlampe modifiziert ist, warum nicht ein Ladegerät mit einem Micro-USB-Anschluss einbauen? Ich habe immer ein solches Kabel und ein USB-Ladegerät zur Hand und muss nach einem nativen Netzteil suchen.


Eisen


Ich habe einige Erfahrungen mit Arduino, daher wurde beschlossen, einen Fahrer für die AVR-Familie MK zu bauen. Sie sind weit verbreitet, einfach zu programmieren und verfügen über einen Energiesparmodus (Schlafmodus).


Der Attiny13a-Mikrocontroller wurde als „Gehirn“ des Fahrers ausgewählt - er ist einer der billigsten Atmel-MCs (jetzt von Microchip absorbiert), er hat alles an Bord - ein GPIO zum Anschließen einer Taste und einer LED, ein Timer zum Erzeugen eines PWM-Signals, ein ADC zum Messen Spannung und EEPROM zum Speichern von Parametern. Es steht nur 1 KB Flash-Speicher zur Verfügung (aber wie viel wird für eine Taschenlampe benötigt) sowie 64 B RAM und die gleiche Menge an EEPROM.
Attiny13 ist in verschiedenen Gehäuseoptionen erhältlich, insbesondere in DIP-8, die direkt in ein normales Steckbrett mit einem Abstand von 2,54 mm eingesetzt werden können.


Da nur 3 Drähte von der Rückseite zum Kopf der Taschenlampe verlaufen und der Knopf gegen Masse kurzgeschlossen werden muss (wegen der Unmöglichkeit eines Kurzschlusses mit Plus - später), müssen Sie die LED im Plus schalten - was bedeutet, dass Sie einen P-Kanal-Pol benötigen. Ich habe AO3401 als solchen Transistor genommen, aber Sie können SI2323 nehmen, es ist teurer, hat aber weniger offenen Kanalwiderstand (40 mOhm, während AO3401 60 mOhm bei 4,5 V hat), daher erwärmt sich der Treiber weniger.


Von Worten bis zu Taten sammle ich auf einem Steckbrett eine vorläufige Version


Es wird derzeit direkt vom Programmierer mit einer Spannung von 5 V betrieben (tatsächlich weniger aufgrund von Verlusten im USB-Kabel). Anstelle der LED hat der XM-L bisher eine normale LED an die Beine geklebt und einen schwachen Transistor mit einer hohen Schwellenspannung angebracht.
Dann wurde im Altium Designer-Programm ein Diagramm gezeichnet, das ich durch Schutz gegen Verpolung und ESD ergänzte.



Detaillierte Beschreibung und Zweck aller Komponenten

Voraussetzungen:


U1 - Attiny13a Mikrocontroller im 8S1-Paket (SSU-Index)


C1 - Entkopplungskondensator für die Stromversorgung des Mikrocontrollers sollte im Bereich von 0,1 Mikrofarad, Fall 1206 oder 0805, Temperaturkoeffizient X7R liegen


R1-R2 ist ein Widerstandsteiler zur Messung der Batteriespannung. Hier können beliebige Nennwerte eingestellt werden, hier das Hauptverhältnis (750K / 220K, Teilungsverhältnis 4,41) und der Leckstrom, die größer sind, wenn die Nennwerte erhöht werden (bei Strom beträgt sie etwa 4 μA). Da ein interner ION verwendet wird (1,1 V, laut Datenblatt kann er zwischen 1,0 V und 1,2 V liegen), sollte die maximale Spannung am Ausgang des Teilers nicht mehr als 1 V betragen. Bei einem Teiler 750/220 beträgt die maximal zulässige Spannung am Eingang des Teilers 4,41 V. mehr als genug für alle Arten von Lithiumbatterien.
Ich habe den Teiler mit diesem Rechner berechnet .


R3 - schützt den Ausgang des Mikrocontroller-Ports vor einem Kurzschluss (wenn PB1 plötzlich auf VCC gezogen wird, fließt ein großer Strom durch den Pin und der MC kann durchbrennen).


R4 - RESET MK an die Stromversorgung ziehen, ohne es ist ein Neustart von Tonabnehmern möglich.


Q1 - P-Kanal-Feldeffekttransistor im SOT-23-Gehäuse, ich habe den AO3401 installiert, aber jeden anderen mit einer geeigneten Pinbelegung (z. B. SI2323)


R7 ist ein Strombegrenzungs-Gate-Widerstand. Da das Gate des Transistors eine bestimmte Kapazität hat, kann beim Laden dieser Kapazität ein großer Strom durch den Pin fließen und der Pin kann ausfallen. Sie können ihn im Bereich von 100-220 Ohm einstellen (es sollte nicht mehr sein, der Transistor wird für eine lange Zeit in einem halb geschlossenen Zustand sein und sich infolgedessen mehr erwärmen).


R6 - Widerstands-Pull-Up-Verschluss zur Stromversorgung. Wenn PB0 in einen hochohmigen Zustand übergeht, wird Logik 1 über diesen Widerstand am Gate Q1 installiert und der Transistor wird geschlossen. Dies kann aufgrund eines Fehlers im Code oder im Programmiermodus geschehen.


D2 - "Verriegelungs" -Diode - ermöglicht ein "Durchhängen" der Spannung (wenn die LED für kurze Zeit bei voller Helligkeit aufleuchtet), um den MK für eine Weile vom Kondensator zu speisen, und schützt auch vor Verpolung.
Sie können jede Schottky-Diode mit einem minimalen Spannungsabfall in das SOD323-Gehäuse einbauen, ich habe BAT60 eingesetzt.


Anfänglich wurde am Feldeffekttransistor ein Schutz gegen Verpolung der Stromversorgung vorgenommen (dies ist auf den durch Beute hergestellten Platinen zu sehen). Nach der Verkabelung trat ein unangenehmes Merkmal auf: Beim Einschalten der Last trat ein Spannungsabfall auf und der MK wurde neu gestartet, da der Außendienstmitarbeiter den Strom nicht in die entgegengesetzte Richtung begrenzt. Zuerst habe ich einen 200 uF Elektrolytkondensator zwischen VCC und GND gelötet, aber diese Lösung hat mir wegen ihrer Größe nicht gefallen. Ich musste den Transistor löten und eine Diode an seine Stelle setzen, da der SOT-23 und der SOD-323 ähnliche Abmessungen haben.


Insgesamt sind in der Schaltung nur 10 Komponenten für die Installation erforderlich.


Optionale Komponenten:


R5 und D1 sind für die Hintergrundbeleuchtung (LED2) verantwortlich. Die Mindestnennleistung von R5 beträgt 100 Ohm. Je höher die Bewertung, desto schwächer leuchtet die hintere LED (sie leuchtet im konstanten Modus ohne PWM). D1 - jede LED im Fall 1206 habe ich grün gesetzt, weil Optisch sind sie bei gleichen Strömen heller als andere.


D3 und D4 sind Schutzdioden (TVS), ich habe PESD5V0 (5,0 V) im SOD323-Paket verwendet. D3 schützt vor Überspannung durch Strom, D4 - per Knopfdruck. Wenn der Knopf von einer Membran bedeckt ist, hat er keine besondere Bedeutung. Es lohnt sich wahrscheinlich, bidirektionale Schutzdioden zu verwenden. Andernfalls fließt bei umgekehrter Polarität Strom durch sie und sie brennen aus (siehe CVC einer bidirektionalen Schutzdiode).


C2 - ein Tantalkondensator in Fall A (ähnlich wie 1206). Es ist sinnvoll, ihn einzustellen, wenn der Treiber instabil ist (die Versorgungsspannung kann bei hohen Schaltströmen der LED gequetscht werden).


Alle Widerstände der Größe 0603 (für mich ist dies eine angemessene Grenze für das manuelle Löten)


Mit den Komponenten ist alles klar, Sie können eine Leiterplatte nach dem obigen Schema herstellen.
Das erste, was zu tun ist, ist ein 3D-Modell der zukünftigen Platine zusammen mit den Löchern zu erstellen - IMHO, in Altium Designer ist dies die bequemste Methode, um die Geometrie der Leiterplatte zu bestimmen.
Ich habe die Abmessungen des alten Treibers und seiner Befestigungslöcher gemessen - die Platine sollte daran befestigt sein, aber kleinere Abmessungen haben (für Vielseitigkeit muss man sie plötzlich woanders bauen).
Ein vernünftiges Minimum ergab sich hier irgendwo um 25x12,5 mm (Seitenverhältnis 2: 1) mit zwei Löchern mit einem Durchmesser von 2 mm für die Befestigung am Lampengehäuse mit nativen Schrauben.


Ich habe in SolidWorks ein 3D-Modell erstellt und es dann als STEP in Altium Designer exportiert.
Dann habe ich die Komponenten auf die Platine gelegt, die Kontakte in den Ecken hergestellt (es ist bequemer und einfacher, den Boden zu löten), Attiny13 in der Mitte platziert, den Transistor näher an den LED-Kontakten.
Ich breitete die Stromspuren aus, platzierte die restlichen Komponenten, wie sich herausstellte, und teilte die Signalspuren. Um das Anschließen des Speichers zu vereinfachen, habe ich separate Kontakte herausgebracht, die die Batteriekontakte duplizieren.
Ich habe die gesamte Verkabelung (mit Ausnahme eines Jumpers) auf der obersten Ebene vorgenommen, um mit LUT zu Hause eine Platine herstellen zu können.
Die minimale Breite der Signalpfade beträgt 0,254 mm, die leistungsstarken haben nach Möglichkeit eine maximale Breite.


So sieht die Kabelplatine in Altium Designer aus


Altium Designer hat die Möglichkeit zu sehen, wie das Board in 3D aussehen wird (dazu benötigen Sie Modelle für alle Komponenten, von denen einige selbst erstellt werden mussten).
Vielleicht wird hier jemand sagen, dass der 3D-Modus für den Tracer nicht benötigt wird, aber für mich persönlich ist es eine praktische Funktion, die das Platzieren von Komponenten erleichtert, um das Löten zu vereinfachen.



Zum Zeitpunkt des Schreibens wurden 3 Versionen des Boards hergestellt - die erste für die LUT, die zweite für die industrielle Fertigung und die dritte, endgültig mit einigen Korrekturen.


Brettherstellung


Selbst gemachter Weg


LUT - Laser-Bügeltechnologie, ein Verfahren zur Herstellung von Leiterplatten durch Ätzen einer Maske, die durch Umwandlung von Toner von Papier in Kupfer erhalten wird. Diese Methode eignet sich hervorragend für einfache, einseitige Boards wie diesen Treiber.
Das Netzwerk hat viele Artikel zu dieser Technologie, daher werde ich nicht auf Details eingehen, sondern Ihnen nur kurz sagen, wie ich es mache.


Zuerst müssen Sie eine Vorlage vorbereiten, die auf Thermopapier gedruckt wird. Ich exportiere die Ebene top_layer als PDF und erhalte ein Vektorbild.



Da die Platine klein ist, ist es sinnvoll, ein Stück Leiterplatte mit um ein Vielfaches größeren Abmessungen zu nehmen und das zu tun, was die Industrie als Verkleidung bezeichnet.
Für diese Zwecke ist CorelDraw sehr praktisch, Sie können jedoch jeden anderen Vektoreditor verwenden.
Ich lege Kopien von Vorlagen auf das Dokument, mache 0,5-1 mm Lücken zwischen den Brettern (dies hängt von der Trennmethode ab, dazu später mehr), die Bretter sollten symmetrisch angeordnet sein - sonst ist es schwierig, sie zu trennen.


Ich nehme ein Stück einseitige Leiterplatte mit Abmessungen, die etwas größer als die zusammengebaute Platte sind, reinige und entfette (ich reibe lieber mit einem Radiergummi und dann mit Alkohol). Ich drucke eine Vorlage zum Ätzen auf Thermopapier (hier ist es wichtig, nicht zu vergessen, die Vorlage zu spiegeln).
Mit Hilfe eines Bügeleisens und Geduld, die sanft auf Papier streicheln, übersetze ich es in Textolit. Ich warte bis es abgekühlt ist und ziehe das Papier vorsichtig ab.
Freie Kupferflächen (nicht mit Toner beschichtet) können lackiert oder abgeklebt werden (je kleiner die Kupferfläche ist, desto schneller ist die Ätzreaktion).


Eine solche Heimverkleidung - eine große Anzahl von Platinen kann Herstellungsfehler ausgleichen


Ich vergifte die Bretter mit Zitronensäure in einer Lösung von Wasserstoffperoxid. Dies ist der günstigste Weg, obwohl er ziemlich langsam ist.
Die Anteile sind wie folgt: Für 100 ml Peroxid sind 3% 30 g Zitronensäure und etwa 5 g Salz, alles wird gemischt und in einen Behälter mit Textolit gegossen.
Das Erwärmen der Lösung beschleunigt die Reaktion, kann jedoch dazu führen, dass sich der Toner ablöst.


Unbekannte chemische Magie beginnt: Kupfer ist mit Blasen bedeckt und die Lösung nimmt einen blauen Farbton an


Nach einiger Zeit nehme ich die geätzte Platte heraus und reinige sie von Toner. Ich kann es nicht mit Lösungsmitteln abwaschen, daher entferne ich es mechanisch mit feinkörnigem Schmirgelpapier.


Jetzt muss die Platte noch verzinnt werden - dies hilft beim Löten, schützt Kupfer vor Oxidation und erleichtert das Löten. Ich bevorzuge das Verzinnen mit der Rose-Legierung - diese Legierung schmilzt bei einer Temperatur von etwa 95 Grad, wodurch sie in kochendem Wasser verzinnt werden kann (ja, vielleicht nicht die zuverlässigste Zusammensetzung zum Verzinnen, aber für hausgemachte Leiterplatten).



Nach dem Verzinnen bohre ich ein Brett (für Kontakte verwende ich Hartmetallbohrer f1.0, für Jumper - f0.7), ich bohre mit einem Dremel, weil ich kein anderes Werkzeug habe. Ich mag es nicht, Textolit wegen des Staubes zu schneiden, deshalb schneide ich nach dem Bohren die Bretter mit einem Büromesser - auf beiden Seiten mache ich mehrere Schnitte in einer Linie und breche sie dann in einen Schnitt. Dies erinnert an die in der Industrie verwendete V-Cut-Methode, nur dass eine Mühle einen Einschnitt macht.


Es sieht aus wie eine Platine, die zum Löten bereit ist


Wenn die Karte fertig ist, können Sie mit der Verkabelung der Komponenten beginnen. Zuerst löte ich eine Kleinigkeit (Widerstände 0603), dann alles andere. Widerstände befinden sich neben dem MK, so dass das Löten in umgekehrter Reihenfolge problematisch sein kann. Nach dem Löten überprüfe ich, ob ein Kurzschluss für die Stromversorgung des Treibers vorliegt. Danach kann die Firmware MK bereits gestartet werden.


Treiber zum Herunterladen der Firmware bereit


Industrieller Weg


LUT ist schnell und erschwinglich, aber die Technologie hat ihre Nachteile (wie fast alle PP-Herstellungsmethoden für zu Hause). Es ist problematisch, ein doppelseitiges Brett herzustellen, die Schienen können geätzt werden und man kann nur davon träumen, die Löcher zu metallisieren.


Glücklicherweise bieten unternehmungslustige Chinesen seit langem Dienstleistungen für die industrielle Herstellung von Leiterplatten an.
Seltsamerweise kostet eine chinesische einschichtige Platine mehr als eine zweilagige Platine, daher habe ich beschlossen, der Leiterplatte eine zweite (untere) Schicht hinzuzufügen. Strompfade und Masse werden auf dieser Schicht dupliziert. Es wurde auch möglich, aus dem Transistor (Kupferpolygone auf der unteren Schicht) einen Kühlkörper herzustellen, der es dem Treiber ermöglicht, mit höheren Strömen zu arbeiten.


Die unterste Ebene der Platine in Altium Designer


Für dieses Projekt habe ich beschlossen, eine Leiterplatte auf der PcbWay-Website zu bestellen. Die Website verfügt über einen praktischen Taschenrechner zur Berechnung der Kosten von Brettern in Abhängigkeit von ihren Parametern, Größen und Mengen. Nachdem ich die Kosten berechnet hatte, lud ich die zuvor in Altium Designer erstellte Gerber-Datei herunter, die Chinesen überprüften sie und das Board ging in Produktion.


Die Herstellung eines Satzes von 10 TinyFL-Boards kostete mich 5 US-Dollar. Bei der Registrierung eines neuen Benutzers wird für die erste Bestellung ein Rabatt von 5 USD gewährt, sodass ich nur für den Versand bezahlt habe, der ebenfalls ungefähr 5 USD kostet.
Auf dieser Site besteht die Möglichkeit, das Projekt öffentlich zugänglich zu machen. Wenn also jemand diese Boards bestellen möchte, können Sie dieses Projekt einfach in den Warenkorb legen.


Nach ein paar Wochen kamen nur die gleichen Boards zu mir hübsch industriell hergestellt. Sie können nur entpackt und mit der Firmware ausgefüllt werden.



Programm (Firmware)


Die Hauptschwierigkeit, die beim Schreiben der Treiberfirmware auftrat, ist die extrem geringe Größe des Flash-Speichers - Attiny13 hat nur 1024 Bytes.
Da die Helligkeitsänderung gleichmäßig ist, bestand eine nicht triviale Aufgabe darin, sie gleichmäßig zu ändern - dafür mussten wir eine Gammakorrektur durchführen.


Treibersteuerungsalgorithmus


Der Fahrer schaltet sich durch kurzes Drücken der Taste ein, er schaltet sich dadurch aus.
Der ausgewählte Helligkeitsmodus wird für die Dauer des Herunterfahrens gespeichert.


Wenn Sie während des Betriebs zweimal kurz drücken (Doppelklick), wird die zusätzliche LED ein- und ausgeschaltet.
Durch langes Drücken während des Betriebs ändert sich die Helligkeit der Lampe allmählich. Wiederholtes langes Drücken ändert die Richtung (stärker / schwächer).


Der Fahrer überprüft regelmäßig die Batteriespannung. Wenn diese unter den eingestellten Werten liegt, warnt er den Benutzer vor einer Entladung und schaltet sich dann aus, um eine tiefe Entladung zu vermeiden.


Eine detailliertere Beschreibung des Treiberalgorithmus
  1. Wenn der MK mit Strom versorgt wird, werden Peripheriegeräte eingerichtet und der MK geht in den Ruhezustand (wenn STARTSLEEP definiert ist). Wenn der Treiber mit Strom versorgt wird, blinken beide LEDs eine bestimmte Anzahl von Malen, wenn STARTBLINKS definiert ist.
  2. Schlaf Attiny13 schläft im Power-Down-Modus ein (dies ist der wirtschaftlichste Modus, laut Datenblatt beträgt der MK-Verbrauch ~ 1 μA), aus dem es nur durch eine Unterbrechung austreten kann. In diesem Fall handelt es sich um einen INT0-Interrupt - Drücken einer Taste (Setzen von PC1 auf logische 0).
    Auf PC1 sollte ein internes schwaches Pull-up aktiviert sein. Der ADC und der Komparator sind die Hauptverbraucher von Strom aus der gesamten Peripherie, daher müssen sie auch ausgeschaltet werden. Während des Ruhezustands werden die Inhalte der Register und des RAM gespeichert, sodass das EEPROM nicht benötigt wird, um sich an die Helligkeit zu erinnern.
  3. , .
  4. — .
    4.1. — ( BTN_DBCLICK ).
    , LED2
    , .2 ()
    4.2. (, BTN_ONOFF_DELAY) — . :
    • (/) % , .
    • / (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 . , , ( - — ).



Dies ist nicht schwer zu tun, insbesondere wenn Sie Erfahrung mit Arduino oder nur mit C / C ++ hatten.
Selbst wenn es keine solche Erfahrung gab, können Sie fast alle Betriebsparameter konfigurieren, indem Sie die Definitionen der Header-Datei flashlight.h bearbeiten.
Um den Quellcode zu bearbeiten, müssen Sie eine Arduino IDE mit Unterstützung für Attiny13 (a) oder Atmel Studio installieren - es ist nicht komplizierter als die Arduino IDE, aber viel praktischer.


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, .


Laden Sie die Firmware auf den Mikrocontroller herunter

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


Um Firmware hochzuladen, gehen Sie zur Registerkarte Programm, wählen Sie die kompilierte Firmware-Datei im HEX-Format (flashlight.hex) in der Flash-Zeile aus und klicken Sie auf Programm. Der Firmware-Status wird im folgenden Fenster angezeigt. Wenn der Download nicht erfolgreich ist, handelt es sich möglicherweise um einen schlechten Kontakt. Es lohnt sich, es erneut zu versuchen. Aus diesem Grund wurde übrigens der Parameter STARTBLINKS erstellt - ein einziges Blinken von LED2 zum Zeitpunkt der Stromversorgung des Fahrers dient als Hinweis auf den Kontakt des Fahrers mit dem Programmierer.
Anstelle von USBASP können Sie mit Arduino Firmware herunterladen. Weitere Details finden Sie hier und hier


USBASP-Programmierer, der über einen Clip mit einer Schleife mit dem Treiber verbunden ist


Um USBASP an eine Tinka anzuschließen, verwende ich einen Clip für ein 8-poliges SOIC. Kein sehr praktisches Gerät, Sie müssen 10 Minuten quälen, bevor Sie den Kontakt fangen (vielleicht bin ich gerade auf einen defekten Clip gestoßen). Es gibt auch SOIC-DIP-Adapter, bei denen die Mikroschaltung vor dem Löten eingesetzt und die Firmware hineingegossen wird. Diese Option ist bequemer, aber die Möglichkeit, den Treiber im Stromkreis zu programmieren, geht verloren (dh die Firmware wird nach dem Löten des MK auf die Platine aktualisiert).
Wenn all dies nicht vorhanden ist, können Sie die Drähte einfach an die Klemmen des MK anlöten, die dann am Arduino befestigt werden.


Kalibrierung


Die durch den Treiber und die LED fließenden Ströme sollten die Maximalwerte nicht überschreiten. Für die XM-L-LED sind dies 3 A, für den Treiber hängt es vom verwendeten Transistor ab, zum Beispiel für SI2323 beträgt der maximale Strom etwa 4 A, aber es ist besser, wegen übermäßiger Erwärmung mit niedrigeren Strömen zu fahren. Um den Strom bei maximaler Helligkeit zu reduzieren, wird der Parameter RATE_MAX verwendet (#define RATE_MAX xx, wobei xx die maximale Helligkeit von 0 bis 255 ist).
Die Kalibrierung des ADC ist kein obligatorisches Verfahren. Wenn Sie jedoch möchten, dass der Fahrer die Schwellenspannung genau überwacht, müssen Sie daran basteln.


Die Berechnungen ergeben keine hohe Genauigkeit der Messungen, da zum einen die Widerstände innerhalb der Toleranz variieren können (normalerweise 1 bis 5%) und zum anderen das interne Ion eine Streuung von 1,0 bis 1,2 V aufweisen kann.
Daher ist der einzig akzeptable Weg, den Wert in ADC-Einheiten (BAT_WARNING und BAT_SHUTDOWN) einzustellen und ihn experimentell für den gewünschten auszuwählen. Dazu benötigen Sie Geduld, einen Programmierer und eine einstellbare Stromquelle.
Ich habe den BAT_PERIOD-Wert in der Firmware auf 1000 gesetzt (einmal pro Sekunde die Spannung prüfen) und die Versorgungsspannung schrittweise reduziert. Als der Fahrer anfing, vor der Entladung zu warnen, ließ ich den aktuellen Wert von BAT_WARNING nach Bedarf.
Dies ist nicht der bequemste Weg. Möglicherweise müssen Sie in Zukunft ein automatisches Kalibrierungsverfahren durchführen, bei dem die Werte im EEPROM gespeichert werden.


Taschenlampenmontage


Wenn das Board fertig war und die Firmware überflutet war, konnten Sie es endlich anstelle des alten Treibers einsetzen. Ich löte den alten Treiber und löte einen neuen an seiner Stelle.


Der neue Treiber wird gemäß diesem Schema anstelle des alten Treibers angeschlossen


Nachdem ich überprüft hatte, ob das Netzteil kurzgeschlossen war, schloss ich das Netzteil an und überprüfte die Funktionsfähigkeit. Dann habe ich die Ladekarte (TP4056) montiert, dafür musste ich mit einem kleinen Dremel ein Loch in den Ladeanschluss bohren und es mit Heißkleber befestigen (es war wichtig, dass der Kleber nicht in den Anschluss floss, es wäre schwierig, ihn dort herauszuholen).


Ich habe die Platine nicht mit Schrauben befestigt, weil das Gewinde im Gehäuse durch wiederholtes Verdrehen gerissen ist, sondern einfach Klebstoff darauf gegossen und auch die Drähte an den Lötstellen aufgeklebt hat, damit sie nicht ausfransen. Ich beschloss, den Treiber und das Ladegerät mit farblosem Acryllack abzudecken, um Korrosion vorzubeugen.



Prüfung und Berechnung der Herstellungskosten


Nach allen Vorgängen konnten die Treiber getestet werden. Der Strom wurde mit einem herkömmlichen Multimeter gemessen und an den offenen Stromkreis der Stromversorgung angeschlossen.


Leistungsaufnahme des alten Treibers (gemessen bei 4,04 V):


  1. Im Schlaf - nicht gemessen
  2. Maximaler Modus: 0,60 A.
  3. Mittlerer Modus: 0,30 A.
  4. Stroboskop: 0,28 A.

Leistungsaufnahme des neuen Treibers (gemessen bei 4,0 V):


  1. Im Schlafmodus verbraucht es etwa 4 μA, was viel weniger ist als der Selbstentladestrom einer Lithium-Ionen-Batterie. Der Hauptstrom in diesem Modus fließt durch einen Widerstandsteiler.
  2. Im Minimalmodus beträgt das „Mondlicht“ etwa 5 bis 7 mA. Wenn wir davon ausgehen, dass die Kapazität einer 18650-Zelle etwa 2500 mA * h beträgt, erhalten wir etwa 20 Tage Dauerbetrieb . MK selbst verbraucht irgendwo 1,2-1,5 mA (bei einer Betriebsfrequenz von 1,2 MHz).
  3. Im Maximalmodus verbraucht "Turbo" ungefähr 1,5 A, in diesem Modus arbeitet es ungefähr anderthalb Stunden. Die LED an solchen Strömen wird sehr heiß, daher ist dieser Modus nicht für den Langzeitbetrieb vorgesehen.
  4. Notsignal - verbraucht durchschnittlich ca. 80 mA. In diesem Modus arbeitet die Taschenlampe bis zu 30 Stunden.
  5. Stroboskop - verbraucht ca. 0,35 A, arbeitet bis zu 6 Stunden.

Ausgabepreis


Wenn Sie Komponenten in Chip und Deep kaufen, werden ungefähr 100 Rubel ausgegeben (60 Rubel Attiny13, ~ 40 Rubel der Rest des losen Pulvers). Es ist sinnvoll, aus China zu bestellen, wenn mehrere Stücke hergestellt werden - dann ist es in Bezug auf ein Stück billiger, die Chinesen verkaufen normalerweise in Chargen von 10 Stück oder mehr.
Gebühren werden zu einem Preis in der Größenordnung von 300 Rubel für 10 Stück (ohne Lieferung) freigegeben, wenn in China bestellt.
Das Verkabeln und Blinken eines Treibers dauert ungefähr eine Stunde.


Fazit


Die chinesische Taschenlampe ist viel praktischer geworden, obwohl ich jetzt Beschwerden über ihre Mechanik habe - der vordere Teil ist zu schwer und der Fokus wird nicht wirklich benötigt.
In Zukunft plane ich, eine Version dieses Treibers für Taschenlampen mit einem Netzschalter (mit Fixierung) herzustellen. Es stimmt, ich bin verwirrt über die Fülle solcher Projekte. Glaubst du, es lohnt sich, noch einen zu machen?


Nahaufnahmetreiber (Version 2_t)


UPD : Unterstützung für Arduino IDE hinzugefügt.


Der Quellcode für die Firmware, die Schaltung und die Verkabelung der Karte befindet sich jetzt auf dem Github. Sie können ihn hier herunterladen: https://github.com/madcatdev/tinyfl_t

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


All Articles