TinyFL - pilote de lampe de poche pour microcontrôleur

Salut Habr!


Je veux raconter une histoire sur la façon dont je suis tombé entre les mains d'une lampe frontale chinoise sur une LED Cree XM-L et ce qui lui est arrivé ensuite.



Contexte


Il était une fois, j'ai commandé une lampe de poche avec une LED brillante sur un site chinois. La lampe de poche s'est avérée assez ergonomique (bien que cela puisse être plus facile), mais son pilote laissait beaucoup à désirer.


Il brillait suffisamment, mais le conducteur ne disposait que de 3 modes - très lumineux, lumineux et stroboscopique, la commutation entre ceux-ci se faisant au simple toucher d'un bouton. Afin d'allumer et d'éteindre simplement la lampe de poche, il fallait à chaque fois trier ces 3 modes. De plus, cette lampe de poche, lorsqu'elle est allumée, a déchargé la batterie jusqu'à la fin - une paire de mes boîtes 18650 s'est donc déchargée profondément.


Tout cela était inconfortable et ennuyeux, alors à un moment donné, j'ai décidé de faire mon chauffeur, ce qui sera la suite de l'histoire.


Lampe de poche avec un ancien chauffeur

Voici une lampe de poche, beaucoup ont probablement traité de


Il ressemble au pilote d'origine


Mandat


Comme vous le savez, pour obtenir un bon résultat, tout développement doit avoir de bonnes spécifications techniques, je vais donc essayer de le formuler moi-même. Ainsi, le conducteur doit:


  • Pour pouvoir allumer / éteindre par une courte pression sur un bouton (un bouton sans fixation). C'est peut-être la principale raison pour laquelle tout cela a commencé.
  • Avoir un contrôle de luminosité doux (en continu), du plus brillant - "turbo" au "clair de lune" lorsque la diode est à peine allumée. La luminosité devrait changer uniformément.
  • N'oubliez pas la luminosité réglée pour le temps libre.
  • Surveillez la charge de la batterie, avertissant lorsqu'elle est presque déchargée (environ 3,3 V) et s'éteignant lorsqu'elle est complètement déchargée (environ 2,9 V). Pour différentes batteries, ces paramètres peuvent être différents. Par conséquent, la tension de fonctionnement doit être comprise entre 2,7 et 4,5 V.
  • Avoir 2 modes spéciaux - balise d'urgence et stroboscope (enfin, pourquoi pas?)
  • Pour pouvoir allumer / éteindre la LED arrière (cela est vrai lorsque vous roulez à vélo la nuit, il se révèle quelque chose comme un feu de position).
  • Avoir une protection contre l'inversion de polarité et l'électricité statique. Pas nécessairement, mais ce sera un bel ajout, car dans l'obscurité, vous pouvez par erreur mettre la batterie du mauvais côté.
  • Être plus petit que le pilote d'origine, mais avoir la même empreinte. Le pilote chinois est tout simplement énorme, il ne sera pas facile de l'agrandir.

Eh bien, si la lampe de poche est modifiée, pourquoi ne pas intégrer un chargeur avec un connecteur micro-USB? J'ai toujours un tel câble et un chargeur USB à portée de main, et je dois chercher une alimentation native.


Le fer


J'ai une certaine expérience avec Arduino, il a donc été décidé de faire un pilote sur la famille AVR MK. Ils sont largement disponibles, faciles à programmer et ont des modes de faible consommation (veille).


Le microcontrôleur Attiny13a a été choisi comme «cerveau» du conducteur - c'est l'un des MC Atmel les moins chers (maintenant absorbé par Microchip), il a tout à bord - un GPIO pour connecter un bouton et une LED, une minuterie pour générer un signal PWM, un ADC pour mesurer tension et EEPROM pour enregistrer les paramètres. Seulement 1 Ko de mémoire flash est disponible (mais combien est nécessaire pour une lampe de poche), ainsi que 64 B de RAM et la même quantité d'EEPROM.
Attiny13 est disponible en plusieurs options de boîtier, en particulier en DIP-8, qui peuvent être insérées directement dans une planche à pain ordinaire avec un pas de 2,54 mm.


Étant donné que seulement 3 fils vont de l'arrière à la tête de la lampe de poche, le bouton est forcé de court-circuiter à la terre (sur l'impossibilité de court-circuiter à plus - plus tard), vous devrez commuter la LED dans le plus - ce qui signifie que vous avez besoin d'un pôle à canal P. J'ai pris AO3401 en tant que tel transistor, mais vous pouvez prendre SI2323, il est plus cher, mais a une résistance de canal moins ouverte (40 mOhm, tandis que AO3401 a 60 mOhm, à 4,5 V), par conséquent, le pilote chauffera moins.


Des paroles aux actes, je recueille sur une planche à pain une version préliminaire


Il est actuellement alimenté directement par le programmateur, avec une tension de 5 V (en fait moins en raison des pertes dans le câble USB). Au lieu de la LED, le XM-L a jusqu'à présent collé une LED régulière sur les jambes et mis un transistor faible avec une tension de seuil élevée.
Ensuite, dans le programme Altium Designer, un schéma a été dessiné, que j'ai complété par une protection contre les inversions de polarité et les décharges électrostatiques.



Description détaillée et objectif de tous les composants

Prérequis:


U1 - Microcontrôleur Attiny13a en boîtier 8S1 (index SSU)


C1 - condensateur de découplage pour l'alimentation du microcontrôleur, doit être de l'ordre de 0,1 microfarads, cas 1206 ou 0805, coefficient de température X7R


R1-R2 est un diviseur de résistance pour mesurer la tension de la batterie, toutes les valeurs nominales peuvent être définies, ici le rapport principal (750K / 220K, rapport de division 4.41) et le courant de fuite, qui sera plus élevé si les valeurs nominales sont augmentées (au courant, il est d'environ 4 μA). Comme un ION interne est utilisé (1,1 V, selon la fiche technique, il peut être compris entre 1,0 V et 1,2 V), la tension maximale à la sortie du diviseur ne doit pas dépasser 1 V. Avec un diviseur 750/220, la tension maximale admissible à l'entrée du diviseur sera de 4,41 V, ce qui largement suffisant pour tous les types de batteries au lithium.
J'ai calculé le diviseur à l'aide de cette calculatrice .


R3 - protège la sortie du port du microcontrôleur d'un court-circuit (si PB1 est soudainement tiré vers VCC, un courant important passera à travers la broche et le MC peut brûler)


R4 - en tirant RESET MK pour alimenter, sans lui, les redémarrages à partir de micros sont possibles.


Q1 - Transistor à effet de champ à canal P dans le boîtier SOT-23, j'ai installé l'AO3401, mais tout autre avec un brochage approprié (par exemple, SI2323)


R7 est une résistance de grille de limitation de courant. Étant donné que la grille du transistor a une certaine capacité, lors de la charge de cette capacité, un gros courant peut traverser la broche et la broche peut échouer. Vous pouvez le régler dans la région de 100-220 Ohms (il ne devrait plus l'être, le transistor commencera à être dans un état semi-fermé pendant longtemps, et, par conséquent, il chauffera davantage).


R6 - obturateur de traction de résistance à l'alimentation. Dans le cas où PB0 passe dans un état de haute impédance, la logique 1 sera installée à travers cette résistance sur la grille Q1 et le transistor sera fermé. Cela peut se produire en raison d'une erreur dans le code ou en mode de programmation.


D2 - diode de "verrouillage" - permet un "affaissement" de la tension (lorsque la LED s'allume pendant une courte période à pleine luminosité) pour alimenter le MK depuis le condensateur pendant un certain temps, il protège également contre l'inversion de polarité.
Vous pouvez mettre n'importe quelle diode Schottky dans le paquet SOD323 avec une chute de tension minimale, je mets BAT60.


Initialement, la protection contre l'inversion de polarité de l'alimentation était réalisée sur le transistor à effet de champ (cela se voit sur les cartes fabriquées par le butin). Une caractéristique désagréable est apparue après le câblage - lorsque la charge a été allumée, une chute de tension s'est produite et le MK a redémarré, car le travailleur sur le terrain ne limite pas le courant dans la direction opposée. Au début, j'ai soudé un condensateur électrolytique de 200 uF entre VCC et GND, mais je n'ai pas aimé cette solution en raison de sa taille. J'ai dû souder le transistor et mettre une diode à sa place, car les SOT-23 et SOD-323 ont des dimensions similaires.


Au total, dans le circuit, seuls 10 composants sont nécessaires pour l'installation.


Composants optionnels:


R5 et D1 sont responsables du rétroéclairage (LED2). La cote minimale de R5 est de 100 ohms. Plus la valeur nominale est élevée, plus la LED arrière est faible (elle s'allume en mode constant, sans PWM). D1 - toute LED dans le cas 1206, je mets vert, car visuellement, ils sont plus brillants aux mêmes courants que les autres.


D3 et D4 sont des diodes de protection (TVS), j'ai utilisé PESD5V0 (5.0V) dans le paquet SOD323. D3 protège contre les surtensions par l'alimentation, D4 - par un bouton. Si le bouton est recouvert d'une membrane, il n'y a pas de signification particulière. Il vaut probablement la peine d'utiliser des diodes de protection bidirectionnelles, sinon, lorsque la polarité est inversée, le courant les traversera et elles brûleront (voir CVC d'une diode de protection bidirectionnelle).


C2 - un condensateur au tantale dans le cas A (similaire à 1206), il est logique de le régler lorsque le pilote est instable (la tension d'alimentation peut être comprimée à des courants de commutation élevés de la LED)


Toutes les résistances de taille 0603 (pour moi, c'est une limite adéquate pour le soudage manuel)


Tout est clair avec les composants, vous pouvez faire une carte de circuit imprimé selon le schéma ci-dessus.
La première chose à faire est de construire un modèle 3D de la future carte, avec les trous - à mon humble avis, dans Altium Designer, c'est le moyen le plus pratique pour déterminer la géométrie du PCB.
J'ai mesuré les dimensions de l'ancien pilote et ses trous de montage - la carte devrait y être attachée, mais avoir des dimensions plus petites (pour plus de polyvalence, vous devez soudainement le construire ailleurs).
Un minimum raisonnable s'est avéré quelque part autour de 25x12,5 mm (rapport d'aspect 2: 1) avec deux trous d'un diamètre de 2 mm pour la fixation au boîtier de la lampe avec des vis natives.


J'ai créé un modèle 3D dans SolidWorks, puis exporté vers Altium Designer sous STEP.
Ensuite, j'ai placé les composants sur la carte, fait les contacts dans les coins (il est plus pratique et plus facile de souder le sol), Attiny13 placé au centre, le transistor plus proche des contacts LED.
J'ai étalé les pistes de puissance, placé les composants restants comme il s'est avéré et séparé les pistes de signal. Pour faciliter la connexion de la mémoire, j'ai apporté des contacts séparés pour celle-ci, qui dupliquent les contacts de la batterie.
J'ai fait tout le câblage (à l'exception d'un cavalier) sur la couche supérieure - afin de pouvoir faire une carte à la maison avec LUT.
La largeur minimale des trajets du signal est de 0,254 mm / 10 mil, celles de puissance ont une largeur maximale lorsque cela est possible.


Voici à quoi ressemble la carte filaire dans Altium Designer


Altium Designer a la possibilité de voir à quoi ressemblera la carte en 3D (pour cela, vous avez besoin de modèles pour tous les composants, dont certains que vous avez dû construire vous-même).
Peut-être que quelqu'un ici dira que le mode 3D n'est pas nécessaire pour le traceur, mais pour moi personnellement, c'est une fonction pratique qui facilite le placement des composants pour la commodité de la soudure.



Au moment de la rédaction, 3 versions de la carte ont été fabriquées - la première pour LUT, la seconde pour la fabrication industrielle et la 3ème, finale avec quelques corrections.


Fabrication de planches


Façon maison


LUT - technologie de repassage laser, une méthode pour produire des cartes de circuits imprimés à l'aide de la gravure sur un masque obtenu en convertissant le toner du papier en cuivre. Cette méthode est idéale pour les cartes simples à simple face comme ce pilote.
Le réseau a beaucoup d'articles sur cette technologie, donc je n'entrerai pas dans les détails, mais je vais seulement vous expliquer brièvement comment je le fais.


Vous devez d'abord préparer un modèle qui sera imprimé sur du papier thermique. J'exporte la couche top_layer au format PDF, j'obtiens une image vectorielle.



Comme la carte est petite, il est logique de prendre un morceau de PCB avec des dimensions plusieurs fois plus grandes et de faire ce que l'industrie appelle des panneaux.
À ces fins, CorelDraw est très pratique, mais vous pouvez utiliser n'importe quel autre éditeur de vecteur.
Je place des copies de modèles sur le document, je fais des espaces de 0,5 à 1 mm entre les planches (cela dépend de la méthode de séparation, plus sur celle-ci plus tard), les planches doivent être situées symétriquement - sinon il sera difficile de les séparer.


Je prends un morceau de PCB unilatéral avec des dimensions légèrement plus grandes que le panneau assemblé, nettoie et dégraisse (je préfère frotter avec une gomme à effacer puis avec de l'alcool). J'imprime un modèle pour la gravure sur papier thermique (ici il est important de ne pas oublier de refléter le modèle).
Avec l'aide d'un fer et de patience, en caressant doucement le papier, je le traduis en textolite. J'attends qu'il refroidisse et décolle soigneusement le papier.
Les zones libres de cuivre (non recouvertes de toner) peuvent être vernies ou collées (plus la zone de cuivre est petite, plus la réaction de gravure est rapide).


Un tel lambris à la maison - un grand nombre de planches peuvent compenser les défauts de fabrication


J'empoisonne les planches avec de l'acide citrique dans une solution de peroxyde d'hydrogène, c'est le moyen le plus abordable, bien que ce soit plutôt lent.
Les proportions sont les suivantes: pour 100 ml de peroxyde à 3% soit 30 g d'acide citrique et environ 5 g de sel, le tout est mélangé et versé dans un récipient avec textolite.
Le réchauffement de la solution accélérera la réaction, mais peut décoller le toner.


La magie chimique inconnue commence: le cuivre est recouvert de bulles et la solution prend une teinte bleue


Après un certain temps, je sors la planche gravée et la nettoie du toner. Je ne peux pas le laver avec des solvants, je le retire donc mécaniquement avec du papier émeri à grain fin.


Il reste maintenant à étamer la carte - cela aidera au soudage et protégera le cuivre de l'oxydation et facilitera le soudage. Je préfère l'étamage avec l'alliage Rose - cet alliage fond à une température d'environ 95 degrés, ce qui lui permet d'être étamé dans de l'eau bouillante (oui, peut-être pas la composition la plus fiable pour l'étamage, mais pour les circuits imprimés faits maison).



Après l'étamage, je perce une planche (pour les contacts j'utilise des forets carbure f1.0, pour les jumpers - f0.7), je perce avec un dremel faute d'un autre outil. Je n'aime pas couper le textolite à cause de la poussière, donc après le perçage, je coupe les planches avec un couteau de bureau - des deux côtés, je fais plusieurs coupes en une seule ligne, puis je le casse en coupe. Cela rappelle la méthode de coupe en V utilisée dans l'industrie, seulement il y a une incision faite par un moulin.


Il ressemble à une planche prête à souder


Lorsque la carte est prête, vous pouvez commencer à câbler les composants. Tout d'abord, je soude un peu (résistances 0603), puis tout le reste. Les résistances sont adjacentes au MK, donc le soudage dans l'ordre inverse peut être problématique. Après le soudage, je vérifie s'il y a un court-circuit pour alimenter le pilote, après quoi il est déjà possible de démarrer le firmware MK.


Pilotes prêts à télécharger le firmware


Manière industrielle


Le LUT est rapide et abordable, mais la technologie a ses inconvénients (comme presque toutes les méthodes de fabrication de PP «maison»). Faire une planche double face est problématique, les pistes peuvent être gravées et on ne peut que rêver de métalliser les trous.


Heureusement, les Chinois entreprenants offrent depuis longtemps des services pour la fabrication de circuits imprimés de manière industrielle.
Curieusement, une carte monocouche chinoise coûtera plus cher qu'une carte à deux couches, j'ai donc décidé d'ajouter une deuxième couche (inférieure) à la carte de circuit imprimé. Les chemins d'alimentation et la masse sont dupliqués sur cette couche. De plus, il est devenu possible de faire un dissipateur de chaleur à partir du transistor (polygones de cuivre sur la couche inférieure), ce qui permettra au conducteur de travailler à des courants plus élevés.


La couche inférieure de la carte dans Altium Designer


Pour ce projet, j'ai décidé de commander une carte de circuit imprimé sur le site PcbWay. Le site dispose d'une calculatrice pratique pour calculer le coût des planches, en fonction de leurs paramètres, tailles et quantités. Après avoir calculé le coût, j'ai téléchargé le fichier gerber créé précédemment dans Altium Designer, les Chinois l'ont vérifié et la carte est allée en production.


Faire un ensemble de 10 planches TinyFL m'a coûté 5 $. Lors de l'inscription d'un nouvel utilisateur, un rabais de 5 $ est accordé pour la première commande, donc je n'ai payé que les frais d'expédition, qui coûtent également environ 5 $.
Sur ce site il y a la possibilité de mettre le projet dans le domaine public, donc si quelqu'un veut commander ces planches, vous pouvez simplement ajouter ce projet au panier.


Après quelques semaines, les mêmes planches sont venues à moi, seulement jolie fabriqués industriellement. Ils ne peuvent être décompressés et remplis qu'avec le firmware.



Programme (firmware)


La principale difficulté rencontrée lors de l'écriture du firmware du pilote est liée à la taille extrêmement petite de la mémoire flash - Attiny13 ne dispose que de 1024 octets.
De plus, comme le changement de luminosité est fluide, une tâche non triviale consistait à le changer uniformément - pour cela, nous avons dû faire une correction gamma.


Algorithme de contrôle du conducteur


Le conducteur s'allume par une courte pression sur le bouton, il s'éteint par lui.
Le mode de luminosité sélectionné est enregistré pendant la durée de l'arrêt.


Si, pendant le fonctionnement, vous appuyez deux fois brièvement sur un bouton (double-clic), la LED supplémentaire s'allume / s'éteint.
En appuyant longuement pendant le fonctionnement, la luminosité de la lampe changera progressivement. Un appui long et répété change de direction (plus fort / plus faible).


Le conducteur vérifie périodiquement la tension de la batterie et, si elle est inférieure aux valeurs définies, avertit l'utilisateur d'une décharge, puis s'éteint pour éviter une décharge profonde.


Une description plus détaillée de l'algorithme du pilote
  1. Lorsque l'alimentation est fournie au MK, les périphériques sont configurés et le MK se met en veille (si STARTSLEEP est défini). Lorsque le pilote est alimenté, les deux LED clignotent un certain nombre de fois si STARTBLINKS est défini.
  2. Dormir Attiny13 s'endort en mode hors tension (c'est le mode le plus économique, selon la fiche technique, la consommation de MK sera ~ 1 μA), dont il ne peut sortir que par une interruption. Dans ce cas, il s'agit d'une interruption INT0 - en appuyant sur un bouton (réglage PC1 sur 0 logique).
    Sur PC1, un pull-up interne faible doit être activé. L'ADC et le comparateur sont les principaux consommateurs de courant de toute la périphérie, ils doivent donc également être éteints. Pendant le sommeil, le contenu des registres et de la RAM est stocké, donc l'EEPROM n'est pas nécessaire pour se souvenir de la luminosité.
  3. Après le sommeil, les périphériques et le PWM sont allumés et le conducteur entre dans un cycle sans fin dans lequel le bouton est surveillé et la tension de la batterie est périodiquement vérifiée.
  4. Si le bouton est enfoncé, l'heure est enfoncée.
    4.1. Si la presse est courte, un double clic est attendu (si BTN_DBCLICK est défini).
    Si c'était le cas, les commutateurs LED2 supplémentaires
    Sinon, passez à l'étape 2 (sommeil)
    4.2. Si la presse est longue (plus longue que BTN_ONOFF_DELAY) - le mode de contrôle de la luminosité est activé. Dans ce mode:
    • (/) % , .
    • / (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


Pour télécharger le firmware, allez dans l'onglet Programme, sélectionnez le fichier du firmware compilé au format HEX (flashlight.hex) dans la ligne Flash et cliquez sur Program. L'état du micrologiciel sera affiché dans la fenêtre ci-dessous. Si le téléchargement échoue, cela peut être un mauvais contact, cela arrive - cela vaut la peine d'essayer à nouveau. À propos, pour cette raison, le paramètre STARTBLINKS a été créé - un seul clignotement de la LED2 au moment de l'alimentation du pilote sert d'indication du contact du conducteur avec le programmeur.
Au lieu d'USBASP, vous pouvez utiliser Arduino pour télécharger le firmware, plus de détails ici et ici


Programmateur USBASP connecté au pilote via un clip avec boucle


Pour connecter USBASP à un tinka, j'utilise un clip pour un SOIC 8 broches. Ce n'est pas un appareil très pratique, vous devez tourmenter 10 minutes avant d'attraper le contact (peut-être que je viens de tomber sur un clip défectueux). Il existe également des adaptateurs SOIC-DIP dans lesquels le microcircuit est inséré avant la soudure et le firmware y est versé - cette option est plus pratique, mais la possibilité de programmer le pilote en circuit est perdue (c'est-à-dire, mettre à jour le firmware après avoir soudé le MK à la carte).
Si tout cela n'est pas là, vous pouvez simplement souder les fils aux bornes du MK, qui se fixent ensuite à l'Arduino.


Calibration


Les courants traversant le driver et la LED ne doivent pas dépasser les valeurs maximales. Pour la LED XM-L, c'est 3 A, pour le pilote cela dépend du transistor utilisé, par exemple, pour SI2323 le courant maximum est d'environ 4 A, mais il vaut mieux piloter à des courants plus faibles en raison d'un échauffement excessif. Pour réduire le courant à la luminosité maximale, le paramètre RATE_MAX est utilisé (#define RATE_MAX xx, où xx est la luminosité maximale de 0 à 255).
L'étalonnage de l'ADC n'est pas une procédure obligatoire, mais si vous voulez que le pilote surveille avec précision la tension de seuil, vous devrez le bricoler.


Les calculs ne donneront pas une grande précision des mesures, car, d'une part, les résistances peuvent varier dans la tolérance (généralement 1-5%), et d'autre part, l'ion interne peut avoir une dispersion de 1,0 à 1,2 V.
Par conséquent, la seule façon acceptable est de définir la valeur en unités ADC (BAT_WARNING et BAT_SHUTDOWN), en la sélectionnant expérimentalement pour celle souhaitée. Pour ce faire, vous aurez besoin de patience, d'un programmeur et d'une source d'alimentation réglable.
J'ai réglé la valeur BAT_PERIOD à 1000 dans le firmware (en vérifiant la tension une fois par seconde) et j'ai progressivement réduit la tension d'alimentation. Lorsque le conducteur a commencé à avertir de la décharge, j'ai laissé la valeur actuelle de BAT_WARNING au besoin.
Ce n'est pas le moyen le plus pratique, peut-être qu'à l'avenir, vous devrez effectuer une procédure d'étalonnage automatique avec enregistrement des valeurs dans l'EEPROM.


Ensemble lampe de poche


Lorsque la carte était prête et que le firmware était inondé, vous pouviez enfin le mettre à la place de l'ancien pilote. J'ai dessoudé l'ancien pilote et soudé un nouveau à sa place.


Le nouveau pilote est connecté à la place de l'ancien selon ce schéma


Après avoir vérifié s'il y avait un court-circuit dans l'alimentation, j'ai branché l'alimentation et vérifié l'opérabilité. Ensuite, j'ai monté la carte de charge (TP4056), pour cela, j'ai dû percer un trou dans le connecteur de charge avec un petit dremel et le fixer avec de la colle chaude (il était important que la colle ne coule pas dans le connecteur, il serait difficile de la retirer).


Je n'ai pas attaché la carte avec des vis, car le fil dans le boîtier s'est cassé à cause de torsions répétées, mais j'ai simplement versé de la colle dessus, également collé les fils dans les points de soudure afin qu'ils ne s'effilochent pas. J'ai décidé de recouvrir le pilote et le chargeur de vernis acrylique incolore, cela devrait aider contre la corrosion.



Test et calcul des coûts de fabrication


Après toutes les opérations, il a été possible de commencer à tester les pilotes. Le courant a été mesuré avec un multimètre conventionnel, le connectant au circuit ouvert de l'alimentation.


Consommation d'énergie de l'ancien pilote (mesurée à 4,04 V):


  1. Pendant le sommeil - non mesuré
  2. Mode maximum: 0,60 A
  3. Mode moyen: 0,30 A
  4. Stroboscope: 0,28 A

Consommation électrique du nouveau pilote (mesurée à 4,0 V):


  1. En mode veille, il consomme environ 4 μA, ce qui est beaucoup moins que le courant d'autodécharge d'une batterie lithium-ion. Le courant principal dans ce mode passe à travers un diviseur de résistance.
  2. Dans le mode minimum, le «clair de lune» est d'environ 5-7 mA, si nous supposons que la capacité d'une cellule 18650 est d'environ 2500 mA * h, alors nous obtenons environ 20 jours de fonctionnement continu . MK lui-même consomme quelque part entre 1,2 et 1,5 mA (à une fréquence de fonctionnement de 1,2 MHz).
  3. En mode maximum, "turbo" - consomme environ 1,5 A, dans ce mode, il fonctionnera pendant environ une heure et demie. La LED sur ces courants commence à devenir très chaude, ce mode n'est donc pas destiné à un fonctionnement à long terme.
  4. Balise de détresse - consomme en moyenne environ 80 mA, dans ce mode, la lampe de poche fonctionnera jusqu'à 30 heures.
  5. Stroboscope - consomme environ 0,35 A, fonctionnera jusqu'à 6 heures.

Prix ​​d'émission


Si vous achetez des composants dans Chip and Deep, environ 100 roubles sortiront (60 roubles Attiny13, ~ 40 roubles le reste de la poudre libre). Il est logique de commander en Chine, si plusieurs pièces sont fabriquées - alors en termes de pièce, ce sera moins cher, les Chinois vendent généralement en lots de 10 pièces ou plus.
Les frais seront débloqués à un prix de l'ordre de 300 roubles pour 10 pièces (sans livraison), si commandé en Chine.
Le câblage et le clignotement d'un pilote prennent environ une heure.


Conclusion


La lampe de poche chinoise est devenue beaucoup plus pratique, même si j'ai maintenant des plaintes concernant sa mécanique - la partie avant est trop lourde et la mise au point n'est pas vraiment nécessaire.
À l'avenir, je prévois de faire une version de ce pilote pour lampes de poche avec un bouton d'alimentation (avec fixation). Certes, je suis confus par l'abondance de ces projets. Pensez-vous que cela vaut la peine d'en faire un autre?


Pilote de gros plan (version 2_t)


UPD : Ajout du support pour Arduino IDE.


Le code source du firmware, du circuit et du câblage de la carte est maintenant sur le github, vous pouvez le télécharger ici: https://github.com/madcatdev/tinyfl_t

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


All Articles