Développement d'une banque d'alimentation pour ordinateur portable. De la mise en page au produit fini. Deuxième partie

Dans la dernière partie de l'article sur le développement de PowerBank pour un ordinateur portable, nous nous sommes installés sur une configuration fabriquée, une efficacité mesurée et une compréhension de ce qu'il faut faire ensuite. Et puis il a fallu faire revivre le morceau de fer. Par conséquent, je présente à votre attention la deuxième partie: la mise en page du logiciel.



La rupture entre les pièces s'est avérée assez importante - toutes les forces ont été exercées sur le projet d'une batterie externe à charge rapide, qui rassemble désormais un soutien sur le boomstarter . Nous allons continuer. Afin de comprendre quels microcircuits nous devrons programmer, nous allons regarder le schéma de principe de la disposition. À partir de là, il est clair que nous devrons écrire un logiciel pour le contrôle MK (STM32F042), ainsi que configurer le système de contrôle de batterie Li-ion + chargeur (BQ40Z60). J'ai commencé par la seconde, car je considérais cette partie comme la plus difficile. Pour programmer le contrôleur BQ40Z60, nous avons besoin de: - L'adaptateur EV2400 et EV2300 ( prêt à l' emploi ou fait maison). J'ai quitté l'EV2300 de projets passés, je l'ai donc utilisé. - Programme







Battery Management Studio (bqStudio) .
L'adaptateur est connecté via SMBus, pour la connexion j'ai laissé des points de soudure sur les lignes SMBD et SMBC. (Pas la solution la plus pratique - alors j'ai réalisé que je devais installer le connecteur).

Après avoir dansé avec un tambourin, le BQ40Z60 a opté pour Battery Management Studio. La raison en était le mode veille dans lequel le contrôleur entre lorsqu'il n'y a pas de pull-up sur le bus SMBus et aucun accès à celui-ci. Il se réveille lors de la connexion de la mémoire.
Ensuite, nous allons régler directement la puce BQ40Z60. Dire qu'il a de nombreux registres, c'est ne rien dire. Un million de réglages. La configuration étant un processus long et compliqué (un article séparé est requis pour la description), je vais la décrire brièvement.

Après le démarrage, la fenêtre principale de Battery Management Studio apparaît.

L'onglet Mémoire de données contient un grand nombre de champs dans lesquels nous devons entrer les paramètres de la batterie et les modes de fonctionnement du contrôleur.

Dans l'onglet Chimie, vous pouvez essayer de trouver des étalonnages prêts à l'emploi pour les cellules utilisées.


Pour mon YOKU LP 5558115 3500mAh, il n'y avait pas d'étalonnages prêts à l'emploi (au fait, les étalonnages sont constamment mis à jour ). Trouvé similaire YOKU LP 656193 4000mAh. Ayant réalisé que je ne sais toujours rien des packages disponibles, j'ai choisi ce profil.

Ensuite, dans l'onglet Mémoire de données, j'ai configuré:
Calibration: valeurs de calibration pour les voltmètres (cellules, batteries et un adaptateur externe), résistance du capteur de courant, valeurs de calibration pour le capteur de température.
Réglages:inclusion de protections, thermistances, LED, mode veille, configuration de la batterie.
Protections: réglage des seuils de protection (tension, temps, température), réglage des seuils de tension de l'adaptateur externe.
Échec permanent: définition de seuils pour les erreurs irréversibles (de sorte que le fonctionnement de la batterie n'est pas possible).
Algorithme de charge avancé: réglage du chargeur (courants, tensions pour différentes plages de température, signe de fin de charge, équilibrage).
Gas Gauging: réglage de l'unité pour déterminer le niveau de charge (capacité de la plaque signalétique / tension de la cellule, résistance du fil, statistiques).
Puissance: réglage des modes de fonctionnement du contrôleur.
Statut PF:Statut du bit d'état d'échec permanent
Données système: champs pour les données du fabricant.
Configuration SBS: définition des seuils de déclenchement pour le déclencheur d'alarme, informations de base sur la batterie (numéro de série, date de production, fabricant, nom, composition chimique).
Support LED: réglage du mode du voyant LED.
Black Box: boîte noire (historique des modifications des bits d'état de protection).
Durée de vie: statistiques de la batterie.
Ra Table: un tableau des résistances internes des cellules.

Pendant le processus d'installation, je n'ai pas changé tous les champs, mais cela a suffi pour commencer.

Avec cette partie du circuit, il n'y avait qu'un seul montant matériel connecté à la sortie du microcircuit 21-AFEFUSE. C'est arrivé comme ça:
Je déchirais le circuit de la carte de débogage, à l' exception du microcircuit de protection secondaire et du fusible grillé. Le BQ40Z60 possède 21 broches AFEFUSE pour brûler un fusible (comme je le pensais). J'ai donc regardé la 5ème page de la fiche technique du BQ40Z60. J'ai vu le

type de sortie Output dans le tableau et, en toute conscience, je l'ai laissé suspendu dans les airs. Les problèmes sont survenus après avoir soudé la carte: j'ai trié tous les paramètres (et à l'époque, il y avait beaucoup de doutes), mais cela n'a pas fonctionné - les transistors de charge et de décharge ne se sont pas allumés. Après 2 jours de doute / réflexion / essais et erreurs, j'ai remarqué que le bit FUSE_EN n'était pas défini et j'ai décidé de «demander aux gens» et quand j'ai posté une question, une idée m'est venue

En regardant le circuit imprimé de la carte de débogage, j'ai suggéré que la broche AFEFUSE peut également être une entrée, ce qui a été confirmé par la section 9.3.2.4 p.24, qui dit que si la broche n'est pas utilisée, elle doit être connectée à la masse. Je l'ai fait avec des pincettes et ça a marché. Après 5 minutes, ils m'ont répondu sur e2e.com - la réponse est claire et correcte, j'ai exprimé mon "phi" sur l'erreur dans le tableau de sortie - ils ont promis de le corriger dans les futures versions de la documentation.
Pour mettre fin aux réglages du contrôleur, j'ai effectué 2 cycles d'entraînement charge / décharge complète + relaxation (au total 30 heures).

Passons maintenant à la programmation du STM32F042. Au stade fictif, ce processeur ne demandait pas grand-chose:
- Contrôler le convertisseur de tension, traiter les boutons.
- Aller le plus loin possible en veille pour ne pas décharger la batterie.
- Lisez les principaux paramètres de la batterie à partir du contrôleur (tension, courant, niveau de charge, température, état actuel, nombre de cycles, temps de charge / décharge complète) et envoyez-les au PC via USART (puisque le convertisseur CP2102 était déjà sur la carte). Bien que le processeur contienne USB à bord, je ne l'ai pas utilisé dans la mise en page, et une mise en page a été faite pour 051 MK, mais je n'ai pas pu l'acheter.

Le contrôle du convertisseur a été réduit à deux conclusions (allumage et mode de fonctionnement), alimentant le PWM (avec un filtrage RC ultérieur) à la sortie du paramètre de fréquence de conversion de la puce LTC3780 (en conséquence, réglez la fréquence à un maximum de 400 kHz) et l'entrée de surveillance du signal PowerGood. Mais même ici, j'ai réussi à monter sur le râteau. Le bug flottait et s'est produit lorsque Power Bank s'est allongé pendant une longue période, ce qui s'explique par le fait qu'il ne s'est tout simplement pas allumé. Le problème était que j'avais d'abord activé l'interruption du signal PowerGood du LTC3780, puis allumé la puce elle-même (EN). Il s'est avéré que l'interruption s'est déclenchée avant même le démarrage du convertisseur et l'a éteint. Réorganisé les événements par endroits et ajouté un retard - le problème a disparu. Sinon, cette fonctionnalité était facile.

Il a été décidé de créer une interface utilisateur avec 1 bouton et 5 (6) LED (bien qu'il y ait 2 boutons et 10 LED sur le tableau de configuration). Il fonctionne comme suit:
L'appareil est éteint -> appui court (<500 ms) - animation du niveau de charge sur 4 LED.
L'appareil est éteint -> appui long (> 500 ms) - allumez l'appareil (la 5ème LED s'allume).
L'appareil est éteint -> connexion de la mémoire -> animation du niveau de charge sur 4 LED jusqu'à la fin du processus de charge.
L'appareil est allumé -> appui court - animation du niveau de charge sur 4 LED.
Appareil allumé -> appui long - éteignez l'appareil.
Appareil éteint -> consommation de courant inférieure à 50 mA pendant plus de 3 min. - éteignez l'appareil.
Cela a permis de supprimer 27 éléments de l'appareil.

J'avais déjà l'expérience de l'implémentation des modes de veille sur STM32F0xx, donc je ne comptais pas sur un gros rake ici. Pour optimiser la consommation, j'ai d'abord remplacé le LDO 3.3V par mcp1703 par un faible courant de ma propre consommation (il fallait ne pas arracher du débogage, mais l'installer tout de suite). Taille, prix, consommation, kit carrosserie - tous moins que le LP2951.
Merci à Hardegor d' avoir édité LDO pour Li-ion 4. Le Mcp1703 ne peut pas être utilisé en raison d'une faible tension d'entrée. J'ai utilisé LiFePo4 pour la chimie - il n'y a pas un tel problème. Faites attention!!!
-Lorsque l'appareil est éteint, le MK est en mode STANDBY et ne répond qu'à la pression d'un bouton ou à la connexion de la mémoire. La consommation dans ce mode est de 108 μA (100 d'entre eux consomment du BQ40Z60).
- Lorsque l'appareil est allumé, le processeur la plupart du temps (à l'exception des moments d'indication et d'interrogation du BQ40Z60) est en mode STOP avec une consommation de 1,5 mA (1 mA est une LED). Au moment de l'interrogation et de l'indication, la consommation de courant varie de 4,5 à 9 mA.
- Lorsqu'un USB MK est connecté en mode RUN 48 MHz, la consommation est de 15 mA. À l'avenir, je vais alimenter le MK dans ce mode à partir de l'USB.

Le plus gros problème potentiel était l'enquête BQ40Z60. Je n'ai pas travaillé avec SMBus et jusqu'à ce que le dernier espère que SMBus est I2C 1v1 (c'est en partie parce que le niveau physique est le même pour eux), mais il s'est avéré que le niveau du canal est très différent et cela a créé un certain nombre de difficultés. Ici, je ne décrirai pas les différences entre SMBus et I2C, mais je fournirai un lien vers un article plutôt compétent . Au stade de la mise en page, je ne me suis pas impliqué dans la lutte contre SMBus (en passant, en tant que programmeur, je suis beaucoup plus faible qu'un concepteur de circuits) et comme les commandes d'envoi et de réception d'octets dans SMBus et I2C étaient complètement identiques, je les ai utilisées uniquement. En conséquence, j'ai lu SOC, SOH, Current, CellVolt, TimeToFull, TimeToEmpty de BQ40Z60. En fonction des valeurs des registres, le mode de fonctionnement a changé (des avertissements ont été émis, un arrêt s'est produit).

Eh bien, du côté PC, bien sûr, un programme était nécessaire pour afficher les données lues dans la batterie sous une forme pratique. Comme je ne pouvais utiliser les GUI que dans Borland C ++ Builder et que je l'ai fait pendant longtemps, j'ai demandé au programmeur de dessiner un débogage simple pour moi. Pour un fouet rapide, voici ce qui est sorti:


C'est tout le travail qui a été réalisé lors de la mise en page. Plus loin dans les plans (et puisque je décris les opérations déjà terminées, une partie du travail a déjà été fait), le transfert des spécifications techniques au concepteur pour le développement / fabrication du package PowerBank, correction d'erreur / révision du circuit, altération de la carte pour le boîtier, révision du logiciel. Après cela, l'appareil sera similaire à un produit et, une fois terminé, deviendra un produit au sens littéral du terme. Dans les parties suivantes de l'article, nous examinerons les étapes et les principales difficultés de la transition d'une mise en page à un produit fini, travaillerons sur l'emballage, considérerons les coûts des différentes solutions et opérations, l'optimisation, et verrons également le résultat final.

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


All Articles