PDA (Pocket Travel Computer): Enregistreur de circuits GPS

Mon projet de loisir est un enregistreur GPS . Les commentaires ont même suggéré de l’appeler «ordinateur de bord», comme La journalisation n'est qu'une petite partie de toutes les capacités de l'appareil. Beaucoup a déjà été mis en œuvre, mais la plupart restent à faire.

Dans des articles précédents, j'ai décrit la transition de l'arduino à STM32 , STMCube / HAL , parlé un peu du système de construction , du chargeur de démarrage , construit un périphérique USB composite et augmenté sa vitesse . Tout cela a été fait sur une planche à pain basée sur la carte Blue Pill STM32F103CB et un hérisson de fils. Il est temps que l'appareil prenne forme, à la fois électronique (circuit) et physique (corps).



Les problèmes que j'ai dû résoudre à ce stade sont étroitement liés. Lorsque vous choisissez des composants pour un projet, vous devez imaginer approximativement dans quel logement ils peuvent être insérés. Et vice versa, le boîtier doit être fait pour les composants disponibles et les cartes, qui, encore une fois, doivent être faites avec un œil sur le boîtier. En général, un enchevêtrement de problèmes interconnectés. Vous pouvez bien sûr prendre une boîte plus grande et y pousser n'importe quoi, mais vous vouliez quelque chose de compact et léger.

Avant de commencer tout de suite, je tiens à noter que ce n'est pas la version finale de l'appareil. Très probablement, il y aura des erreurs dans le schéma, quelque chose ne fonctionnera pas comme prévu, dans les commentaires ils indiqueront des solutions plus correctes, certaines approches seront repensées. Je pense que la deuxième ou même la troisième version de l'appareil ne peut pas être évitée. Par conséquent, je serai heureux de vos commentaires constructifs.

Sous la coupe, il est multi-perles, mais ce sera l'ingénierie.

Quoi et pourquoi


L'enregistreur GPS Holux M241 est mon fidèle compagnon pour tous les voyages. Il est avec moi depuis des milliers de kilomètres. La piste que l'enregistreur écrit est principalement utilisée pour géolocaliser les photos, mais l'itinéraire lui-même est également intéressant. C'est amusant de savoir à quelle vitesse vous êtes allé skier, quel itinéraire votre avion a parcouru, quelle vue vient de clignoter devant la fenêtre de l'autobus. Ici, j'ai fait un petit examen de cet appareil.

Malheureusement, les capacités de cet appareil ont depuis longtemps cessé de me convenir: je suis fatigué de jouer avec des batteries qui s'asseyent toujours au moment le plus inopportun. Il y a aussi une très faible vitesse USB, une petite quantité de flash interne, un mécanisme peu pratique pour fusionner des pistes, peu d'informations disponibles sur l'écran, une faible précision, un odomètre très primitif, aucune information sur les satellites, et bien plus encore.

Oui, on pourrait chercher ce que les trackers modernes offrent - c'est sûr qu'il existe déjà un appareil en vente qui répond à mes exigences. Mais c'est un hobby, je veux essayer de faire quelque chose de complexe, intéressant, utile et nécessaire moi-même. Qu'il en soit ainsi, même si seulement je vais l'utiliser.

L'objectif du projet dans son ensemble est de créer un appareil similaire en quelque chose, uniquement rempli de ma liste de souhaits. Dans le premier article de la série, j'ai détaillé mes exigences pour l'appareil. En bref, je voudrais faire ce qui suit:

  • Recyclez le système d'alimentation, transférez-le sur une batterie au lithium
  • mettre un affichage plus informatif
  • GPS plus précis
  • étendre le flash avec la carte SD
  • ajouter une boussole et un accéléromètre
  • Je veux également repenser le système d'enregistrement pour cracher des pistes dans le format dont j'ai besoin.

En plus des exigences techniques et de la liste de souhaits, il existe également des exigences non techniques (non fonctionnelles). Je voudrais donc pomper dans la création d'appareils complexes à partir de zéro, pour comprendre comment fonctionnent les différents composants électroniques, comment les programmer, comment créer une carte et concevoir un boîtier.

Pourquoi avez-vous besoin d'un appareil séparé si tous les téléphones modernes ont un GPS, un grand écran et beaucoup de mémoire? Eh bien, tout d'abord, je ne suis pas sûr qu'un téléphone avec GPS allumé en mode d'enregistrement de piste puisse supporter toute la journée. Je ne voudrais pas vraiment rester dans un pays inconnu sans téléphone. Aussi, j'utilise personnellement un appareil séparé, c'est tout simplement plus confortable.

Peut-être qu'avec le temps, le concept de l'appareil changera. Ainsi, par exemple, il devient de plus en plus logique d'abandonner l'écran et de se connecter au téléphone via Bluetooth, et de faire toutes les astuces logiques sur le téléphone. Cette idée est très robuste et tentante. Mais à ce stade, j'aimerais toujours avoir une exposition - j'ai toujours le temps de l'abandonner.

Pendant la première année et demie, j'ai développé l'appareil sur différents types de cartes de débogage (d'abord arduino nano, puis pilule bleue STM32F103, puis STM32F407VE). J'ai dû connecter des périphériques sur le câblage et les modules achetés. En conséquence, un hérisson fait de fils s'est avéré sur la table, ce qui n'a pas fonctionné pour tester la réception GPS dans la rue - parfois, vous ne pouviez même pas déplacer les fils sans rompre la connexion quelque part. Et puis débogage heureux.

Chaque fois, assis pour écrire des fonctionnalités utiles, je me suis heurté au fait qu'une autre partie du système a cessé de fonctionner normalement et a dû passer des heures à déboguer quelque chose de complètement indépendant. Ainsi, par exemple, le composant le plus important du système - le récepteur GPS - s'est finalement avéré être le moins développé, car J'ai dû me lancer dans le débogage USB, les cartes SD, la configuration des bibliothèques, etc.

Enfin, je m'en suis lassé et j'ai décidé de faire ma planche de débogage - ce sera le sujet de l'article d'aujourd'hui. Les objectifs que je me suis fixés dans cette partie du projet étaient les suivants:

  • Créer une carte de débogage qui n'aura pas de problèmes avec les composants sans contact
  • Décider des principales solutions techniques et schématiques
  • Décidez grossièrement des composants que j'utiliserai ensuite
  • Décidez grossièrement de la disposition et du corps
  • Le circuit doit être suffisamment général pour pouvoir expérimenter différents composants et leurs modes

Et bien que le but ultime soit un appareil à batterie compact, aujourd'hui je ne ferai pas des choses comme

  • modes de puissance de réglage fin
  • réglage de la consommation
  • modes de sommeil


Je traiterai du paramètre de consommation lorsque la carte et le code principal seront prêts. Soit dit en passant, le code d'aujourd'hui ne le sera pas non plus, mais je reviendrai certainement sur cette question car il y aura suffisamment de matériel intéressant.

Composants


Commençons par les composants et les périphériques. En cours de route, nous allons estimer le nombre de pattes du microcontrôleur qui seront nécessaires pour connecter ce zoo, ainsi que les paramètres de puissance. Parce que c'est un projet de loisir que j'ai choisi des composants de ce que je peux vraiment acheter dans les magasins / ebay / ali, et aussi de ce qui peut être soudé à la maison (enfin, aussi de ce qui était déjà dans mon stock personnel). Certains microcircuits spécifiques pourraient peut-être mieux résoudre le problème, mais la question de l'abordabilité et du prix est importante pour moi.

  • Le composant principal d'un enregistreur GPS, bien sûr, sera un récepteur GPS . Dans mon cas, c'est un Beitian BN-880 assez trompé basé sur la puce UBlox M8N. La boussole de la puce HMC5883L est également intégrée au module.

    Connexion: 2 broches UART pour GPS et 2 broches I2C pour boussole
    Alimentation: à partir de 2,7 V
    Consommation: 50mA

    • Également commandé un module Beitial BN-220 . Il n'a pas de boussole, mais l'antenne est plus compacte (20x20mm contre 30x30). La vérité n'est pas encore claire sur la façon dont cela affectera la qualité de la réception. Besoin de tester. Mais, à en juger par la fiche technique, ce module peut fonctionner à partir de 1,4 V, ce qui devrait avoir un effet positif sur la durée de fonctionnement de l'appareil.
    • Ici, en fait, tout est en quelque sorte boueux. Il semble que le BN-880 est basé sur l'UBlox M8N, tandis que le BN-220 est basé sur l'U-blox M8030-KT. Mais dans certaines sources, il glisse que cela semble être la même chose. Plus précisément, le M8N est un module et le M8030-KT est un chipset à l'intérieur. Je suis préoccupé par le problème d'alimentation dans cette confusion - le M8N est annoncé à partir de 2,7 V, tandis que le M8030-KT est à partir de 1,4 V.
    • Comme alternative, j'ai également le module SIM868 qui traîne . dans lequel en plus du GPS il y a aussi un module GSM / GPRS et Bluetooth. Alors qu'il fait peur avec sa ruse et sa complexité de connexion. Vous devrez d'abord jouer avec le tableau de débogage.
  • La principale différence entre l'appareil et «juste une boîte noire» est la présence d'un écran . Dans les premiers prototypes, j'ai connecté l'écran via I2C, mais la charge du bus était d'environ 25%. Mais le point n'est même pas dans le rapport en pourcentage, mais dans le fait que le transfert du tampon d'écran prend environ 25 ms, pendant lesquels il est impossible de communiquer avec d'autres appareils sur le bus. Cela peut être un problème, vous devez donc placer l'écran sur un bus I2C séparé ou envisager de vous connecter via SPI

    Connexion: 2 fils I2C ou 3 fils SPI (affichage en écriture seule, donc la ligne MISO n'est pas utilisée, mais un signal de données / commande distinct est utilisé)
    Alimentation: 3V
    Consommation: 25mA
  • Pour contrôler l'appareil, j'utiliserai 2 boutons qui occupent respectivement 2 pieds du processeur
  • Dans l'appareil d'origine (Holux M241, à partir duquel j'ai initialement copié la fonctionnalité), il était impossible de regarder la piste à un moment arbitraire. Il était nécessaire de connecter l'appareil à l'ordinateur et de fusionner les données avec un programme spécial. Il me semble que la possibilité de regarder une piste sur un téléphone mobile ou une tablette à tout moment sera très populaire. Pour cela, j'ai acheté un module Bluetooth HM-13 . Ce module est sélectionné car il a SPP en plus de BLE.

    Connexion: 2 fils UART, 1 fil d'état (connecté / non connecté)
    Alimentation: 2,5 V - 3,9 V
    Consommation: 50mA (bien que le chiffre 13mA soit juste à côté de la fiche technique. C'est peut-être la valeur maximale et moyenne)
  • Comme on m'a dit, cela n'a aucun sens de garder le récepteur allumé si vous vous asseyez pour vous reposer ou si vous êtes allé dîner dans un café. Par conséquent, j'ai décidé d'ajouter l' accéléromètre MMA8452 et de l'utiliser pour déterminer si l'appareil est au repos ou si nous nous déplaçons quelque part.

    Connexion: 2 fils I2C, 1 fil pour interruption
    Alimentation de 2V à 3,6V avec une consommation microscopique
  • La trace GPS sera enregistrée sur la carte SD . J'ai déjà essayé d'utiliser la carte en mode SPI et c'est, pour le dire doucement, lent. Surtout sur le disque. Mode correct pour carte SD - SDIO

    Connexion: 6 fils
    Alimentation: à partir de 1,8 V
    La consommation est inconnue, mais je pense que pas plus de 20mA
  • Pour économiser de l'énergie, il est logique de couper l'alimentation des appareils qui ne sont pas actuellement utilisés. Donc, près de chaque consommateur, je vais mettre un transistor , que je contrôlerai un signal séparé du microcontrôleur

    Connexion: 5 signaux, un pied par consommateur (GPS, Bluetooth, accéléromètre, carte SD, écran)

    UPD basé sur les commentaires. La désactivation de l'accéléromètre n'a pas de sens - elle a déjà une consommation d'un centime. Certains appareils fonctionneront probablement toujours (par exemple, une carte SD) - à l'avenir, je pourrai supprimer ces transistors. Certains appareils (comme le GPS) sont capables de se déconnecter sur commande de l'interface. Si, selon les résultats du test, cette partie fonctionne bien - je refuserai également un transistor externe. En attendant, je fais le prix total maximum possible, que ces transistors soient tous. De plus, je n'ai pas encore décidé de la périphérie.
  • Une LED bicolore pour l'affichage de l'état (que diriez-vous sans LED clignotante?). Il serait possible de mettre une tricolore, mais pour l'instant je ne vois pas la nécessité.

    Connexion: 2 broches
    Consommation: 10mA
  • En plus de Bluetooth, un mécanisme plus classique de fusion des pistes sera implémenté - via USB . Pour cela, 4 lignes seront impliquées - une paire différentielle pour les données, 1 broche pour détecter que l'appareil est branché sur USB, et une autre broche pour la connexion logique (pourquoi j'ai besoin de ces 2 broches, je décrirai ci-dessous)
  • L'appétit vient en mangeant. Depuis que j'ai commencé à tout pousser dans l'appareil de mes rêves, pourquoi ne pas ajouter un tweeter ? Eh bien, ou un moteur à vibration . Je n'ai pas encore trouvé de cas d'utilisation.

    Connexion: 1 fil
  • L'appareil devra toujours être mis sous tension. Alors que la puce PT1502 me regarde comme un chargeur de batterie au lithium et un contrôleur de puissance . Pour communiquer avec le microcircuit, vous devrez utiliser 2 fils: l'un pour la gestion de l'alimentation, l'autre pour un signal de batterie déchargée. Par souci d'intérêt, il sera possible de mesurer la tension de la batterie en utilisant une autre ligne.
  • Bien sûr, la charge d'une batterie au lithium est incorrecte pour mesurer sur la base de la tension. Par conséquent, j'ai ajouté une puce spéciale de wattmètre INA219

    Tension d'alimentation: 3-5V, recommande 3,3V
    Connexion: 2 fils I2C

    Comme on le verra ci-dessous, une tension d'alimentation de 3 V crée un certain inconfort dans la connexion. Je préférerais que la contre-puce soit alimentée à partir de 2,7 V ou moins. Mais après être passé par plusieurs options basées sur le prix / boîtier / disponibilité, je n'ai toujours rien trouvé à 2,7V. Je serai reconnaissant de l'aide.
  • Il ne reste plus qu'à fournir une interface de débogage SWD (3 fils) et un UART de débogage (2 fils de plus)

J'ai toujours été intéressé par la question de savoir pourquoi des contrôleurs avec un grand nombre de ports étaient nécessaires, et j'ai facilement compté 39 pattes nécessaires pour ma fonctionnalité. Et cela sans compter le quartz, la réinitialisation et la puissance. Et il y a des idées sur ce qu'il faut faire avec une douzaine d'autres (par exemple, l'écran pourrait être connecté via une interface parallèle Intel 8080 ou Motorola 6800).

Vous pouvez, bien sûr, visser les ports externes I2C pour réduire le nombre de jambes utilisées. Mais d'une part, ce sont des composants supplémentaires sur la carte, d'autre part, la partie logicielle devient beaucoup plus compliquée, et troisièmement, les petits microcontrôleurs ont encore peu de mémoire, et là où il y a assez de mémoire, il y a aussi assez de ports. Je ne vois donc aucune raison de tout compliquer - qu'il y ait 39 lignes.

La nutrition


Avec l'alimentation, tout n'est pas si clair. Vous pouvez probablement alimenter tous les appareils à partir de 3,3 V et vous calmer. Mais nous allons néanmoins fabriquer un appareil mobile, ce qui signifie que nous devons penser à économiser de l'énergie. Vous devez donc essayer de choisir une tension d'alimentation plus petite. Ci-dessous, je vais estimer quel type d'économies vous pouvez essayer de réaliser.

Voici les données de tous les appareils de la plaque - sous cette forme, il est plus pratique de choisir le domaine d'alimentation auquel connecter tel ou tel appareil.

PériphériqueGamme de puissanceDomaine de puissancela communication
CPU2 - 3,6 V2V
Accéléromètre2 - 3,6 V2VI2C
Carte SD1,8 V ou 3,6 V2VSDIO
Affichage1,65 - 3,3 V
ou 3 - 5V
2VI2C ou SPI
GPS2,7 - 5,5 V
ou à partir de 1,4 V
2,7 VUART
Bluetooth2,5 - 3,9 V2,7 VUART
Compteur de puissance (INA219)3 - 5,5 V3vI2C
Buzzer3V - 5VVbat

De la plaque, il est facile de voir que certains appareils peuvent fonctionner à des tensions suffisamment faibles (à partir de 1,8 V). D'autres peuvent fonctionner confortablement à partir de 2,7 V. Enfin, les appareils restants en dessous de 3V ne peuvent pas fonctionner. Le squeaker, pour de bon, a généralement besoin de 5V, mais pour moi, il sera alimenté par la tension la plus élevée - de la batterie, peu importe combien elle est.

Avec la puissance de l'affichage n'est pas encore pleinement compris. Dans la description des modules d'affichage avec ali, la plage est de 3 à 5 V, tandis que dans la fiche technique du contrôleur matriciel SSD1309, la plage est de 1,65 à 3,3 V. Je suppose que 3V est nécessaire pour faire pivoter le convertisseur boost sur la carte du module d'affichage, tandis que 1,65V est suffisant pour la logique. Comme on le verra lors des discussions sur la disposition, il est logique d'abandonner le module d'affichage et de connecter directement l'écran, ce qui alimentera l'affichage à partir du domaine 2B.

J'ai à peu près le même raisonnement sur le GPS - différentes sources indiquent des tensions d'alimentation différentes. Jusqu'à présent, je ne sais pas quel module j'utiliserai à la fin, alors laissez le récepteur traîner dans le domaine 2.7V.

Avec une carte SD, ce n'est pas clair du tout. La spécification dit obscurément qu'en général, la carte doit être alimentée à 3,3 V, mais les cartes modernes sont suffisamment intelligentes et peuvent comprendre qu'elles sont coincées dans un appareil basse tension et peuvent passer à une alimentation de 1,8 V. Mais le mécanisme de choix des aliments n'est pas très clair. Je vais alimenter la carte à partir de 2B et voir ce qui se passe. Cela ne fonctionnera pas - cela fonctionnera à partir de 3V.

Ainsi, 4 bus électriques se dessinent - 2V, 2,7V, 3V et une batterie. Je voudrais mettre tous les consommateurs qui mangent et travaillent constamment (et c'est le contrôleur et le GPS) sur le bus à tension la plus basse, mais pour le moment je n'ai pas encore décidé du module GPS (et donc de son alimentation - 2 ou 2,7V), ce qui veut dire qu'il sera nécessaire une sorte de solution universelle. J'essaierai de séparer la carte pour qu'il soit facile d'appliquer l'une ou l'autre tension.

D'où vous vient autant de stress différents? Même au début du projet, j'ai regardé le microcircuit PT1502 et j'ai même réussi à l'essayer dans un autre projet . En plus du chargeur pour la batterie au lithium, ce microcircuit possède jusqu'à 3 sources d'alimentation - une impulsion et 2 interrupteurs linéaires. Ici, cependant, la tension n'est pas régulée sur l'un d'eux et est de 3V - je vais essayer d'alimenter l'INA219 à partir de celui-ci. Les 2 sources d'alimentation restantes ne sont pas un problème, car là, vous pouvez choisir la tension.

L'estimation de la consommation n'est pas très réussie. La consommation de pointe est indiquée dans les fiches techniques - c'est suffisant pour calculer la puissance des transistors clés, mais pas assez pour estimer la capacité de batterie requise. Donc pour l'instant, je vais sélectionner la batterie en fonction de l'espace disponible dans le boîtier, et là je vais déjà mesurer la consommation réelle.

La question peut se poser, mais comment faire correspondre les appareils avec différentes tensions de fonctionnement? Faisons les choses correctement.

  • Toutes les jambes de communication des microcontrôleurs sont marquées comme tolérantes à cinq volts (à l'exception de UART2 sur les jambes de PA2 / PA3), ce qui signifie que s'il apparaît à 3,3 V du dispositif à tension la plus élevée, rien de mauvais ne se produira.
  • L'accéléromètre, bien qu'alimenté en 2V, peut potentiellement être connecté en parallèle avec des dispositifs haute tension sur le bus. Ce problème est facilement résolu - avec le microcircuit MMA8452Q, vous pouvez alimenter séparément les câbles de communication à partir d'une autre alimentation (via le dispositif «haute tension» sur le bus lui-même)
  • J'essaierai d'alimenter la carte SD à partir de la même tension que le microcontrôleur, ce qui signifie que je n'ai besoin de rien coordonner.
  • Le GPS et le Bluetooth devraient consommer la «basse» tension du microcontrôleur sans aucun problème. Il en va de même pour les autres appareils «haute tension»

Enfin, quelques mots sur les raisons pour lesquelles je me bats pour abaisser la tension d'alimentation. Une puce dans un convertisseur DC-DC pulsé, qui peut échanger des volts contre des ampères (si vous ne tenez pas compte des pertes du convertisseur lui-même, bien sûr). Pour être plus précis, échangez une tension plus élevée avec un courant plus faible contre une tension plus basse et un courant plus élevé. Dans ce cas, nous sommes plus intéressés par le raisonnement inverse - si vous alimentez une charge basse tension via DC-DC, la consommation de courant de toute cette structure avec le convertisseur sera inférieure à la consommation de courant de la charge elle-même. Eh bien, puisque la capacité de la batterie est mesurée en mAh, la réduction de la consommation de courant augmentera la durée de vie de la batterie.

Comte?
, 90%, DC-DC . . , DC-DC .

. 900 4.1 3.5 ( ). DC-DC 90% ( ). 100. .

, 900 100 9 . — 9.3 3.3, 11.4 2.7, 15 2. , , , .

Microcontrôleur


J'ai abordé la question du choix d'un microcontrôleur de manière réfléchie - j'ai longtemps joué avec le configurateur, en pesant les avantages et les inconvénients de chacune des options. J'ai vraiment aimé les microcontrôleurs STM32, donc je ne vois pas l'intérêt de regarder dans la direction d'autres contrôleurs sans besoin particulier. De plus, dans la gamme STM32, il existe des contrôleurs pour tous les goûts et pour toutes les périphéries. L'expérience acquise dans les étapes précédentes de mon projet nous permet d'affiner le choix du contrôleur en fonction de la liste des périphériques, des liaisons logicielles déjà écrites, ainsi que des fonctionnalités que j'aimerais implémenter à l'avenir.

Donc, il est assez évident que 20 Ko de mémoire de mon STM32F103CB est vraiment petit - il n'y a pas assez de tampons de taille décente pour communiquer avec une carte SD et USB. Je n'ai même pas commencé à mettre en œuvre la plupart des fonctionnalités prévues, mais cela a déjà pris plus de 19 Ko. Mais avec le pouvoir de traitement, il s'est avéré que ce n'est pas particulièrement nécessaire. Si toutes les communications avec les périphériques sont transférées dans DMA, il ne reste que quelques pour cent sur la part du processeur central.

Ayant estimé la liste de ce dont j'ai besoin à partir du contrôleur, j'ai calculé ce qui suit:

  • > = 128 ko flash (actuellement environ 50 ko est utilisé)
  • > = 40 ko de mémoire (maintenant 19 ko sont pris)
  • > = 40 pieds GPIO (voir le raisonnement ci-dessus)
  • > = 40MHz (vous n'avez pas besoin de beaucoup, l'essentiel est d'avoir moins de consommation)
  • DMA (j'ai vraiment aimé)
  • > = 2x I2C,> = 3x UART,> = 1 SPI
  • SDIO (lecteur flash via SPI est très lent)
  • USB Full Speed, High Speed
  • ( )
  • LCD ( FSMC)

Les microcontrôleurs STMicroelectornics sont à peine un centime - pour tous les goûts, toutes les couleurs et tous les portefeuilles. Au début, j'ai essayé de choisir un contrôleur pour partir de la série. Les règles L0 et F0 sont trop faibles et pas assez de mémoire, S7 et H7, au contraire, sont trop riches en fonctionnalités, il n'y a pas de SDIO en L4 (UPD: SDIO est, ils ne l'ont tout simplement pas mentionné sur la page de titre de la série). Parmi le reste de la série, vous pouvez choisir quelque chose en fonction de mes besoins, car je n'ai pas d'exigences particulières.

La série STM32WB impressionne par la présence de Bluetooth, mais le boîtier VFQFPN68 refroidit quelque peu le désir de l'utiliser dans des projets de loisirs. Et je n'ai pas trouvé de tels contrôleurs dans le commerce de détail.

Je visais le boîtier LQFP64 - suffisant en nombre de pattes, mais pas très grand en même temps et pouvant être soudé à la maison. C'est bien qu'il y ait un configurateur CubeMX où vous pouvez sélectionner ce dont vous avez besoin avec des filtres.

J'ai opté pour le contrôleur STM32F103RB pour trois raisons. Tout d’abord, j’ai déjà bien étudié la série F103 avec la carte Blue Pill. En général, le contrôleur STM32F103CB me convenait parfaitement, seule la mémoire n'était pas suffisante. Deuxièmement, j'ai déjà un chargeur de démarrage et un code de bas niveau pour ce contrôleur, tandis que d'autres devront être refaits. Et troisièmement, il y a environ un an, j'étais déjà ravi d'acheter 3 pièces STM32F103RB. Ensuite, je n'ai pas fait d'étude détaillée des contrôleurs disponibles, mais j'ai simplement choisi un contrôleur plus épais de la gamme F103. Ne le jetez pas maintenant :)

Comme je l'ai déjà noté, je n'ai pas d'exigences périphériques ou de performances particulières. Mais si je rencontre quelque chose, alors j'ai à l'esprit que j'ai déjà des contrôleurs de la ligne F4 (si quelque chose de plus puissant est nécessaire), ou L152RD, si vous devez décider quelque chose avec la consommation (UPD: j'ai aussi regardé L433RC). Ce qui plaît, avec STM32, presque tous les contrôleurs broche à broche sont compatibles, et F4 et L1 / L4 peuvent être soudés presque sans altérer la carte. Vous pouvez même collecter et comparer la consommation avec différents MK.

Quelques mots sur le corps et la disposition


Nous avons décidé des détails. Il est temps de dessiner un diagramme, puis de tracer le tableau, puis d'essayer de l'adapter au boîtier. Ou pas? Pour l'admettre, je suis d'abord allé dans cette direction, mais je suis ensuite arrivé à la conclusion que tout doit être fait dans l'ordre inverse. Eh bien, ou du moins en même temps.

J'aimerais obtenir un appareil compact. Et pour cela, vous devez comprendre avec précision la taille de l'espace disponible, à son tour, pour comprendre où placer la carte et sa taille, quelle taille de batterie peut s'adapter, où placer les boutons, l'écran, le connecteur USB et d'autres composants externes, ainsi que de savoir comment réparer les composants et vous pouvez s'il est commode de poser des fils entre eux. Il est tout simplement inutile de commencer à élever un tableau sans comprendre toutes ces choses. Il s'avère donc que vous devez d'abord traiter le corps et la disposition, puis passer au circuit.

De plus, dans le processus de dessin du boîtier, j'ai dû réviser plusieurs fois la sélection des composants. Donc, au départ, je pensais utiliser un écran bon marché 128x64 0,96 ” (zone de travail 21,7 x 11,2 mm), mais cet écran avait l'air complètement microscopique sur le fond d'un boîtier beaucoup plus grand. Ensuite, un écran de 1,3 "a été commandé (zone de travail 29,4 x 14,7 mm), mais cela ne s'est pas beaucoup amélioré. Ensuite, j'ai eu un écran de 1,54 ” (35 x 17,5 mm) - il semble plus ou moins normal avec lui. C'est actuellement la principale option de travail.

Selon les estimations, un écran de 1,8 "-2" aurait été mieux, mais ceux-ci sont déjà disponibles en couleur et en résolution plus élevée, et en conséquence le tampon d'écran sera suffisamment grand pour mon contrôleur (35 Ko au lieu de 1 Ko). Eh bien, pousser de grands écrans dans le boîtier peut également être un problème, car les supports d'atterrissage pour ces modules sont nettement plus grands que la zone active de l'écran.

Pendant que j'écrivais cet article sur ali, des écrans monochromes de 2,42 pouces sont apparus avec la même résolution (128x64) et exactement la même reliure que 1,54 pouces. J'en ai commandé un pour mon test - il y a une chance de le coller dans mon étui sans augmentation significative de l'appareil.

Un autre point important au stade des travaux sur le boîtier était la compréhension que le module d'affichage acheté prend trop de place et réduit considérablement l'espace pour la carte principale. Par conséquent, j'ai décidé d'abandonner le module d'affichage terminé et de placer à la place l'affichage et sa liaison sur ma carte. Le nombre de pièces dans le circuit a légèrement augmenté, mais la conception dans son ensemble a été considérablement simplifiée et est devenue plus compacte.

J'ai des réflexions similaires sur le sujet du module GPS. Ce n'est pas si grand, mais peu importe comment il le met ou il interfère, ou l'antenne est fermée par une batterie. Il peut être judicieux de placer le rembourrage du module sur votre carte et de placer l'antenne ailleurs.

Les travaux sur le boîtier ont également permis de déterminer la taille et la capacité de la batterie. Dans le volume disponible, une batterie 900mAh vient d'être trouvée - nous allons nous concentrer sur elle. J'aimerais que mon appareil fonctionne sur une batterie de 15 à 20 heures, ce qui signifie que la consommation devrait être au niveau de 45 à 60 mA.

Pour le moment, je ne peux pas dire que le travail sur la coque est terminé. Premièrement, la question du choix de certains composants (écran, GPS) reste ouverte. Deuxièmement, il n'est pas clair si mon circuit démarrera en principe ou s'il faudra changer radicalement quoi que ce soit. Et troisièmement, la carte s'avère trop compacte - je ne suis pas sûr de pouvoir la dissoudre, la souder et la déboguer. Par conséquent, dans cet article, je me concentrerai toujours sur les problèmes de circuits, je passerai à des étapes plus simples et plus compréhensibles, et je parlerai du cas la prochaine fois. Ici, vous avez quelques rendus et photos pour la graine.









Schéma


Vous pouvez maintenant faire de l'électronique. Je décrirai les solutions de circuits avec suffisamment de détails. Tout d'abord, pour les mêmes nouveaux venus en électronique que moi, ainsi qu'un synopsis pour moi. Les ingénieurs électroniques expérimentés peuvent parcourir les circuits et revenir à la section suivante.

Commençons par la nutrition.

L'appareil sera alimenté par une batterie au lithium, ce qui signifie que vous avez besoin d'un contrôleur de charge. En outre, certains composants ont une limite de tension supérieure d'environ 3,6 V, tandis qu'une batterie peut facilement se retrouver avec plus de 4 V. Vous avez donc besoin d'une source d'alimentation abaisseur. Comme nous l'avons déjà découvert, nous aurons besoin de plusieurs contraintes différentes.

J'ai déjà mentionné que j'utiliserai la puce PT1502. Ça va bien, car met en œuvre un contrôleur de charge, 3 sources d'alimentation, ainsi qu'un circuit de dispositif de commutation de bouton. Le microcircuit contient plusieurs blocs fonctionnels, que j'ai divisés dans le diagramme pour plus de clarté. Le circuit lui-même est un circuit de fiche technique légèrement révisé. Voici le contrôleur de charge de la batterie au lithium



La résistance R3 règle le courant de charge. Par défaut, cela correspond à 470mA. Selon les résultats du test, je réduirai peut-être la valeur de cette résistance à 510 Ohms, ce qui donnera un courant de charge d'environ 900mA (1C).

Le contrôleur peut signaler le mode de charge actuel avec le pied CHG_STAT. De plus, il sait comment donner des signaux jusqu'à 3 - il est en charge, il ne se charge pas et il a déjà été chargé, mais il est toujours connecté à la prise. Dans la première version, le transistor interne presse le pied vers le sol et cela peut être facilement reconnu par le contrôleur. Dans le deuxième mode de réalisation, le transistor est complètement fermé et la jambe passe dans un état de haute impédance. En utilisant une mise sous tension, un tel signal est également facile à lire par le contrôleur.

Mais avec le troisième état n'est pas si simple. Là, le transistor est entrouvert et un courant de 20 μA le traverse. Afin d'envisager une telle condition, j'ai été invité à choisir un ascenseur afin que la moitié environ de la nutrition soit sur ma jambe. Il sera alors possible de détecter facilement un tel état à l'aide de l'ADC. En utilisant la loi d'Ohm, nous obtenons R5 = 1V / 20mkA = 50k.

Comme je l'ai dit, la puce PT1502 n'est pas seulement un chargeur, mais aussi un contrôleur délicat pour toute la puissance. Le microcircuit surveille les tensions dans le circuit et, en utilisant le signal RESET, peut contrôler le processeur principal (ils disent que vous devez toujours démarrer tôt, la puissance n'est pas encore stabilisée).



En outre, le microcircuit peut démarrer l'appareil au toucher d'un bouton (BTN1) et également, sur un signal du microcontrôleur (PWR_HOLD), terminer l'opération et couper l'alimentation. Eh bien, pour signaler au processeur que la batterie est à court de signal BAT_LOW.

Et c'est la principale source d'alimentation.



La tension de sortie est définie par la tension à la borne BUCKFB et est réglée sur 2 V avec la batterie. Mais avec une alimentation à deux volts, un problème a été découvert - l'USB ne fonctionnera pas. C'est-à-dire la batterie sera chargée, mais elle ne pourra pas transmettre de données - le microcontrôleur ne peut tout simplement pas fournir de signaux à un bus USB d'amplitude suffisante. Datashit recommande une tension d'au moins 2,7 V, meilleure que 3,3 V.

Afin de ne pas bloquer une autre source d'alimentation et de savoir comment basculer entre elles, j'ai décidé de simplement ajuster le rapport du diviseur R1 / R4 + R7. Avec cette inclusion, l'impulsion fonctionne en continu. Dès que l'appareil est branché sur USB, le transistor s'ouvre et shunte R7. Le rapport des résistances d'attaque change et nous obtenons 3,16 V en sortie (nous pouvons toujours jouer avec les valeurs nominales et le maintenir jusqu'à 3,3 V).

Le PT1502 dispose également de 2 commandes linéaires.



Des composants à faible consommation (INA219) ou de courte durée (bluetooth) seront connectés à ces contrôleurs, de sorte que l'efficacité de ces sources ne sera pas un problème. La tension d'alimentation LDO2 peut être réglée à l'aide des signaux LDO2_SETx.

Comme j'ai encore des questions ouvertes concernant la tension d'alimentation, j'ai décidé de séparer les cavaliers pour sélectionner le mode LDO2_SETx. De plus, afin de pouvoir mesurer la consommation réelle sur le bus correspondant, je connecterai également le cavalier JP1 / JP2 / JP3 au peigne.

Pour terminer le sujet des alimentations, nous devons mentionner la puissance de l'écran. J'ai écrit un peu plus haut que, au nom de la compacité, j'ai dû abandonner le module d'affichage acheté et ramasser l'écran avec le cerclage sur ma planche. Cet affichage nécessite un convertisseur boost 7-16V spécial. Idéalement, cette source peut être activée et désactivée à l'aide du signal EN. Le circuit lui-même est copié à partir de la fiche technique du booster, exactement le même est utilisé dans les modules d'affichage avec ali.



PT1505
Surfer sur Internet à la recherche d'alternatives à la puce PT1502, je suis tombé sur sa sœur aînée - la puce PT1505. Il s'agit presque du même contrôleur de puissance, mais avec une mise à niveau supplémentaire. Avec un tel contrôleur, il serait possible de réduire le nombre d'éléments sur la carte. Malheureusement, je n'ai pas trouvé de puces PT1505 en vente.

Au fait, je vous serais reconnaissant si vous connaissez des contrôleurs de puissance similaires d'autres fabricants.

Maintenant, parlons un peu de la puissance du microcontrôleur. Le microcircuit est grand et dispose de 6 lignes électriques - 4 pour la partie numérique, 1 alimentation analogique et une pour l'horloge. Selon la fiche technique du STM32F103, sur toutes les lignes électriques (peut-être, à l'exception de l'horloge), il devrait y avoir un condensateur de 100 nF le long du condensateur, et un plus commun à 4,7 uF.

Mais dans la fiche technique du STM32F4, il est dit que bien que les microcontrôleurs soient pratiquement compatibles en termes de sorties, ils ont toujours des schémas d'alimentation quelque peu différents. Ainsi, sur les deux bornes, il devrait y avoir des condensateurs de 2,2 mkF entre la borne et la masse (et non pas entre la masse et l'alimentation, comme en F1). Par conséquent, j'ai dû considérer les deux options et qu'un microcontrôleur spécifique ne soude qu'une partie des condensateurs.



Poursuivant le sujet de la nutrition, vous devez trouver un moyen de la mesurer. Vous pouvez compter sur le signal BAT_LOW et demander à l'utilisateur de se recroqueviller rapidement si la batterie est faible. Mais c'est exactement ce que je n'ai pas aimé dans le Holux M-241 d'origine, car ce signal est apparu trop tard et était facile à manquer. J'ai besoin d'une sorte d'indicateur plus informatif de la puissance de la batterie.



Au cas où, je mets le diviseur le plus ordinaire pour mesurer la tension de la batterie. Mais dans le cas des batteries au lithium, ce n'est qu'un indicateur informatif et ne doit pas être invoqué. Pour des lectures de batterie plus honnêtes sur Internet, ils suggèrent d'utiliser un «pendentif».



Cette petite micropuce compte la quantité d'énergie qui l'a traversée vers ou depuis la batterie. Les mesures sont effectuées sur le shunt R10. Les lectures du microcircuit peuvent être lues via I2C. Le microcircuit est capable de mesurer la tension sur la batterie, le courant traversant la résistance, et également de se multiplier l'un par l'autre. Malheureusement, elle ne sait pas accumuler la valeur des heures qui se sont écoulées en Watt *, elle devra donc faire un relevé constant.

Passons à la partie numérique. Le cœur de l'ensemble du système est le microcontrôleur STM32F103RB.



Le cerclage sous forme de deux quartz provient d'autres schémas trouvés sur Internet (revérifié dans la fiche technique). Je n'ai pas besoin de démarrer à partir de la RAM, mais parce que le signal BOOT1 a tiré vers le sol. BOOT0 peut être sélectionné avec un cavalier pour démarrer à partir de la mémoire flash principale ou du chargeur de démarrage UART intégré (par exemple, pour le micrologiciel principal de l'appareil)

Vient ensuite la LED.



Étant donné que la tension d'alimentation principale variera de 2 à 3,3 V, les LED ne doivent pas y être connectées - la luminosité et la consommation de courant varieront considérablement. Par conséquent, les LED I seront connectées au bus 2,7V, les résistances de limitation de courant sont calculées en conséquence. Étant donné que le microcontrôleur ne pourra pas donner plus de 2 V sur son pied lorsqu'il est alimenté par une batterie, le mode push-pull GPIO ne peut pas être utilisé. Drain ouvert uniquement.

Il n'y a rien de spécial à dire sur le bouton de réinitialisation.



Puisqu'un appareil à trois volts (INA219) sera assis sur le bus I2C, vous devez également faire des accolades à trois volts



Un connecteur SWD est également standard. Une diode est nécessaire pour commuter l'alimentation entre la batterie et l'alimentation externe du programmateur.



Anticiper les exclamations qu'ils ne font pas cela et qu'une telle connexion ne déconnecte pas vraiment la batterie. Oui, il ne s'éteint pas, mais la diode n'est pas pour ça. Cette chose est nécessaire pour pouvoir alimenter l'appareil à partir du programmateur si la batterie n'est pas connectée. Et s'il est connecté, laissez-le fonctionner à partir de lui. Eh bien, si la batterie est connectée, vous devez protéger le programmateur lui-même de 4,2 V sur la batterie.

Mais les boutons devraient rester plus en détail.



Le fait est que le premier bouton sera non seulement un bouton, mais fonctionnera également comme un commutateur d'appareil - le signal BTN1 est connecté à la puce du contrôleur d'alimentation PT1502. Lorsque l'appareil est éteint, le microcontrôleur et les autres consommateurs ne sont pas alimentés. C'est pourquoi le bouton n'est pas connecté à l'alimentation (VCC) mais à la batterie (BAT). En appuyant sur ce bouton, le PT1502 allumera toutes les sources d'alimentation et démarrera le microcontrôleur. Après cela, le bouton peut fonctionner comme un bouton normal. Afin de ne pas brûler le microcontrôleur avec une tension élevée de la batterie, j'ai construit un petit diviseur de tension qui pilote le signal BTN1 dans les trames nécessaires (cependant, c'est possible sans cela - le microcontrôleur a des entrées tolérantes à 5V)

Le deuxième bouton est sans particularité. À l'intérieur du processeur, une traction vers le sol sera incluse, et le bouton alimentera une unité à la ligne ...

Passez en toute transparence à la périphérie lourde. USB



Le connecteur USB dépassera de l'appareil et l'électricité statique peut y marcher. Il s'avère qu'il existe des microcircuits spéciaux (tels que STF202-22) qui protègent les microcontrôleurs des influences externes.

Mais quelque chose d'autre est intéressant ici. Une résistance de 1,5 k est cachée à l'intérieur de la puce STF202, qui est connectée entre la jambe VBUS et la ligne D +. Cette résistance est nécessaire selon la spécification USB - elle indique à l'hôte qu'elle est coincée dans quelque chose. Dans de nombreux circuits, cette résistance est toujours connectée entre l'alimentation et la ligne D +. Dès que l'hôte voit une telle résistance sur la ligne D +, il commence immédiatement à communiquer avec le périphérique. Ce n'est pas toujours approprié, car Certains appareils peuvent ne pas être immédiatement prêts pour la communication.

C'est juste mon cas. Il y a une astuce simple pour cela (espionné ici ). Vous pouvez activer et désactiver cette résistance à l'aide d'un transistor: nous voulons la communication - nous activons la résistance, nous voulons simplement être alimentés par USB - désactivez-la. Lorsque vous collez votre téléphone portable en USB, il demande généralement «que ferons-nous? Fusion de données ou simplement facturer? " - en termes d'électronique, il s'agit simplement de connecter une résistance de pull-up.

Mais comment savoir si un appareil est bloqué en USB? Pour ce faire, j'ai fourni le signal USB_PLUGGED, qui est supprimé du diviseur le plus simple.



Le 5V de l'USB pourrait également être alimenté directement au pied du microcontrôleur - ils sont toujours tolérants au 5V. Mais que ce soit déjà à travers le diviseur.

Accéléromètre maintenant



Le schéma est tiré d'une fiche technique. Le module est connecté via I2C, mais pour signaler au microcontrôleur qu'il y a des nouvelles, une ligne d'interruption est également utilisée. De plus, comme l'INA219 à trois volts est toujours suspendu au même bus I2C, les jambes de communication de l'accéléromètre sont également alimentées par le bus 3B pour coordonner les niveaux.

J'ai déjà mentionné que j'aimerais économiser de l'énergie et éteindre les appareils inutilisés. Ainsi, la puissance de l'accéléromètre est activée par le transistor.

Au fait, j'ai vraiment aimé le soi-disant transistors numériques - un transistor complet avec deux résistances. Cela économise un peu d'espace sur la carte. Dommage qu’avec une alimentation à deux volts, je ne puisse pas prendre un transistor numérique avec au moins un courant décent - 20-30 mA maximum. Des consommateurs plus voraces devaient donc être connectés aux MOSFET.

Allez-y GPS



Le GPS est situé sur une carte distincte et est connecté via un bouclage. Comme je n'ai pas encore décidé du module GPS, j'ai fourni 2 alimentations différentes. En plus du transistor de puissance côté carte processeur, rien de plus intéressant.

Je vais juste dire quelques mots sur les UART. Au départ, j'avais prévu d'utiliser les 3 - un pour télécharger le firmware et le débogage, le second pour le GPS et le troisième pour le Bluetooth. Mais il s'est avéré que UART3 est sur les mêmes broches que I2C n ° 2, que j'avais initialement prévu d'utiliser pour l'affichage. Je devais choisir. En conséquence, je suis arrivé à la conclusion que je peux télécharger le firmware et déboguer via le même UART qui est réservé au GPS (bien sûr, le GPS devra être désactivé). Eh bien, si vous devez lancer le GPS lui-même, c'est-à-dire USB CDC (dans lequel vous pouvez télécharger des journaux) et SWD. Un peu plus tard, j'ai abandonné l'idée d'utiliser I2C n ° 2, donc UART3 est devenu gratuit, mais au nom de l'économie de batterie, j'ai décidé de me concentrer sur deux UART.

Bluetooth



Bluetooth est connecté selon le schéma de la fiche technique. La broche PIO1 peut fonctionner en deux modes. Dans le premier, une LED y est connectée et le module clignote avec cette LED. Différents clins d'œil signifient un statut différent. Dans un autre mode, cette broche fonctionne comme une broche numérique - une lorsque la communication est établie et 0 sinon. Les modes sont commutés par les commandes AT lors de l'initialisation du module.

Carte SD

Bien que le schéma de connexion de la carte SD soit standard, pour une raison quelconque, cela a été très difficile pour moi. Il existe trop d'options de connexion différentes sur Internet et il n'est pas si facile de déterminer laquelle a raison.



Pour la plupart, j'avais des questions dans les bagues. Parfois, il existe des schémas où ils mettent des résistances en 1k. Certains circuits mettent des résistances de 22 Ohms, apparemment comme protection contre l'électricité statique. Néanmoins, la majorité des circuits n'offrent pas de résistances pass-through, et j'irai probablement dans le même sens. Je n'aurai pas non plus de statique depuis Le lecteur flash vivra à l'intérieur du boîtier.

Le transistor de puissance, il me semble, ne sera pas non plus demandé, je pense que la carte fonctionnera toujours - c'est un enregistreur. Mais puisqu'il s'agit d'un tableau de test, que ce soit. La même chose à propos de la bobine - apparemment, cette inclusion dans l'original a été rendue paranoïaque, ou la carte a été utilisée dans un environnement avec une faible puissance ou des interférences. Je pense y souder une résistance nulle et essayer sans bobine.

Affichage

J'ai eu l'occasion de connecter l'un des modules d'affichage avec ali via SPI et de comparer avec la connexion via I2C.Il n'y a pas eu de difficultés particulières et le code n'a dû être que légèrement gaspillé. Dans le même temps, la vitesse de SPI est d'un ordre de grandeur supérieur à celle de I2C. Après avoir ajouté les données de la fiche technique sur la consommation (4 mA pour SPI contre 10 mA pour I2C), le besoin de résistances de pull-up pour I2C, j'ai décidé de connecter l'écran via SPI.



Malheureusement, le signal BS0 n'est pas émis vers la boucle d'affichage, et donc vous ne pouvez pas sélectionner le mode SPI 3 fils, vous pouvez uniquement SPI 4 fils. La différence dans la ligne D / C supplémentaire (données / commande), qui dans le cas du mode 3 fils est transmise par le neuvième bit des données SPI. Cependant, le mode 4 fils est peut-être pour le mieux, car SPI dans STM32 ne peut transmettre que 8 bits.

Le reste du schéma correspond à la fiche technique.

Et enfin, le couineur. Rien de spécial - allumez simplement le transistor.



Dans le cas où il y aurait un vibromoteur au lieu d'un tweeter, j'ai fourni une diode de protection. Cependant, j'ai entendu l'opinion qu'une diode de protection ne nuit pas non plus au tweeter.

En fer


Ci-dessus, j'ai décrit mes réflexions sur le sujet du corps. En fait, j'ai même essayé de créer une planche pour ce cas. Malheureusement, la planche était trop exiguë. J'ai dû utiliser une installation bilatérale, passer des composants 1206 à 0805, mais tout de même, les composants de la carte étaient très serrés. De plus, chaque changement dans le schéma a été pénible, car J'ai dû reproduire près de la moitié de la planche.

J'ai donc tripoté avec elle pendant plusieurs semaines, mais le conseil d'administration m'a battu et j'ai abandonné le projet pendant près d'un an. Coup de pied deviennent ici cet article . Mais vraiment, ce n'est qu'un prototype, et le premier de plusieurs. Pourquoi vous embêter avec une carte super compacte, où vous ne pouvez pas ramper avec un fer à souder ou un oscilloscope, si vous pouvez tout déboguer sur une grande carte?

Eh bien, vous n'avez pas à fabriquer une carte aussi énorme comme un iPhone, mais il est tout à fait possible d'entrer dans les couches promotionnelles 100x100mm 2 de JLCPCB. Vous pouvez pratiquement vous limiter. Ainsi, sur la carte se trouve un énorme écran de 2,42 pouces, des cavaliers pour mesurer la consommation sur toutes les lignes électriques, des condensateurs d'alimentation là où vous en avez besoin ou non, et en général un tas de pièces qui n'ont pas pu être installées. Il reste encore une place.





C'est en vue photo




Il n'y a rien à dire sur le câblage. J'ai séparé la plupart des lignes de signal et de champ le long de la couche supérieure, tandis que celle du bas était presque complètement enterrée sous terre. Malheureusement, la disposition s'est révélée assez dense et certaines lignes de signal ont dû être traînées le long de la couche inférieure à travers la moitié de la carte. Pour cette raison, la terre est "déchirée" par endroits en plusieurs îles peu reliées. J'espère que ce n'est pas un problème.

Je n'ai pas fait la terre sous l'antenne Bluetooth, mais j'ai quand même dû faire glisser une des lignes de signal à travers cette zone. Cependant, il s'agit de la ligne BT_ON, le long de laquelle les signaux ne passent souvent pas (elle y est activée ou désactivée), ce qui signifie qu'elle ne devrait pas affecter particulièrement le signal.

L'été arrivait et je prévoyais de prendre le loyer avec moi en vacances. Pour que les femmes de chambre dans les hôtels n'aient pas peur d'une carte de débogage nue avec un ventilateur de fils, ce serait bien de la cacher dans l'étui. Je ne pouvais pas me priver du plaisir et j'ai développé le boîtier et la carte en même temps. Il y avait donc des cartes de montage dans le boîtier, le montage du support d'écran.

Le module GPS est un sandwich de plusieurs cartes et d'une antenne de 12 mm d'épaisseur. J'ai décidé de ne pas l'accrocher sur le dessus de la planche, mais de la placer au même niveau. Cela a réduit l'épaisseur du boîtier, mais a mordu un coin de la planche.

Quelques photos de la carte et de l'appareil final (à ce stade du projet).







La batterie tient bien sous l'écran, mais j'ai dû faire une petite boîte afin de rapprocher l'écran du capot supérieur.

Quelques mots sur le tableau de montage. J'ai tout soudé en environ 3 soirs, et environ une semaine en soirée, il m'a fallu tranquillement déboguer et vérifier du côté logiciel. À ma grande surprise, la mise en place de la carte n'a rencontré aucune difficulté fondamentale et presque tout a démarré comme il se doit.

Il s'est avéré que le soudage 0805 n'était pas beaucoup plus difficile à souder que le 1206, il est tout à fait comestible à la maison avec une loupe. Vous pouvez même swinguer au 0603. Mais avec la soudure du microcontrôleur et du connecteur d'affichage (ils ont un pas de 0,5 mm), j'ai dû bricoler. Sur YouTube, cela ressemble en quelque sorte aux gens - je viens de le dépenser avec un fer à souder et c'est tout, mais toutes mes conclusions sont restées instantanément.

Pas sans problèmes mineurs. Dans certains endroits, il n'y avait pas d'alcool, quelque part il y avait une «morve». L'empreinte pour le connecteur USB s'est révélée fausse - il avait une étape de conclusions était moins que nécessaire (alors faites confiance après ces empreintes d'Internet!). J'ai dû plier un peu les conclusions pour qu'elles deviennent sur la bonne voie. Le connecteur d' écran FPC acheté sur Ali s'est avéré être avec les contacts ci-dessous, alors que j'avais besoin des contacts en haut (je n'avais pas soupçonné une telle différence auparavant). J'ai dû "souffler" le connecteur de la carte d'affichage standard.

Après avoir fourré la carte dans le boîtier, il s'est avéré qu'il n'était pas possible de déconnecter la batterie en retirant simplement le connecteur, mais je ne voulais pas laisser la carte déboguée sous tension. J'ai dû pousser un interrupteur.

Lors de la configuration de la carte, il s'est avéré qu'il n'y a aucun contact avec le sol où que vous puissiez attacher la sonde à l'oscilloscope. J'ai dû m'accrocher au connecteur USB avec un crocodile. Il sera nécessaire de fournir des sites de test dans la prochaine version de la carte.

Les circuits ont également révélé des problèmes. C'était donc un fait complètement inattendu que la puce PT1502 sur la broche RESET génère une tension de 3V (j'étais complètement sûr qu'il y avait quelque chose comme un collecteur ouvert). En conséquence, ces 3V ont fui sur la ligne électrique, même si je prévoyais d'y avoir seulement 2V.

Voici un schéma simplifié de ce qui s'est passé


Grâce au grand esprit et aux gars d'easyelectronics.ru, ce joint a été décidé en ajoutant une diode. Après un peu de chirurgie, cette partie a fonctionné comme il se doit.

De plus, le module Bluetooth (alimenté par 2,5 V) s'est accidentellement connecté à l'alimentation principale (2 V), au lieu du 3 V fixe. Maintenant, le bluetooth ne peut fonctionner pour moi que lorsque l'USB est connecté, lorsque la tension de l'alimentation principale monte à 3,3 V.

En principe, il serait possible d'agiter le scalpel et de souder le bluetooth à la bonne puissance, mais l'UART2 auquel le bluetooth est connecté n'est pas tolérant à 5V (il l'a lu lui-même dans la fiche technique au stade de l'analyse, il l'a lui-même noté dans le texte ci-dessus, et a finalement oublié lors du câblage de la carte ) Par conséquent, la connexion du bluetooth à l'alimentation est plus élevée que la puissance du microcontrôleur est lourde ... Dans la prochaine version de la carte, je connecte simplement le bluetooth à un autre UART.

Le convertisseur DC-DC à tension variable a également fonctionné comme prévu - lorsqu'il est alimenté par une batterie, il donne 2V, et lorsque vous connectez l'USB monte à 3,16V (vous devez jouer avec les valeurs nominales et atteindre 3,3V). Mais ici, un autre défaut du circuit est sorti: vous devez également pouvoir augmenter la tension lorsqu'il est alimenté par le programmeur. Je pense que cela est traité en ajoutant une autre diode. Je vais essayer de jouer un peu plus tard.

Enfin, pendant le travail sur la carte, je n'ai toujours pas compris comment alimenter correctement la carte SD contre les sous-tensions. Une courte recherche sur Google n'a mené à rien. Apparemment, vous devez vous immerger dans la lecture des spécifications de pages serrées (qui, en outre, sont partiellement fermées). En attendant, j'ai court-circuité le R7 et la carte est maintenant alimentée par un 3.16V (3.3V) fixe. Je vais en rester ainsi pour les prochains mois, pendant que je travaillerai sur la partie logicielle.

En parlant de logiciel. Étonnamment (bien que prévu), mais en général, tout a commencé sans problème. Comme j'ai basculé entre les microcontrôleurs de la même série (du F103CB au F103RC), je n'ai pas eu besoin de modifier la partie logicielle. Seulement corrigé le nombre de broches, mais ajouté l'inclusion de transistors. Néanmoins, il y a eu 2 moments non triviaux avec lesquels j'ai dû bricoler.

Le premier est l'alimentation par batterie. J'ai débogué la carte en utilisant une alimentation USB et tout fonctionnait bien en général. Mais la carte n'a toujours pas voulu allumer la batterie. C'est-à-direCela peut fonctionner (si vous l'allumez lorsque l'USB est connecté, puis retirez le cordon), mais cela ne fonctionne pas pour démarrer sur un câble froid.

Selon la conception de la puce PT1502, la carte devrait commencer comme ça. L'utilisateur appuie sur le bouton BTN1 et après un tiers de seconde, la puce allume toutes les sources d'alimentation. Lorsque tout va bien avec l'alimentation, le PT1502 «libère» le signal RESET, démarrant ainsi le microcontrôleur. Le processeur, à son tour, définit le signal PWR_HOLD sur un, signalant qu'il a démarré. Après cela, le PT1502 fournit régulièrement de l'électricité au circuit jusqu'à ce que le microcontrôleur abaisse le signal PWR_HOLD à zéro.

Mais c'est en théorie. En fait, dès que le processeur a défini le signal PWR_HOLD, la carte s'est éteinte instantanément. J'ai pelleté l'ensemble du circuit d'alimentation, regardé les formes d'onde des signaux principaux, mélangé le code dans le chargeur de démarrage d'avant en arrière, mais je ne pouvais pas comprendre le problème. J'ai également péché sur l'absence d'une résistance de rappel sur la ligne PWR_HOLD, que j'ai oublié d'installer, mais elle est recommandée par une fiche technique (et très probablement elle est toujours nécessaire). Mais l'ajouter avec une verrière n'a pas résolu le problème. Et ce n'est que lorsque j'ai prêté un oscilloscope à quatre canaux que tout est devenu clair.



Lorsque l'utilisateur appuie sur le bouton (ligne orange), la puce PT1502 se met sous tension (ligne violette). Tout cela se produit longtemps (300 ms) avant les événements sur cette forme d'onde. Et puis quelque chose d'intéressant se produit. PT1502 libère RESET (ligne bleue), le processeur démarre et, pour une raison quelconque, abaisse la ligne de bouton à zéro. Même si le microcontrôleur essaie toujours d'augmenter la ligne POWER_HOLD (ligne verte) - il est trop tard, le PT1502 a déjà éteint toutes les sources d'alimentation. Ensuite, il y a encore quelques convulsions, mais le circuit meurt toujours tranquillement.

La question est, d'où vient le zéro sur le bouton? L'ensemble du point est une erreur discrète dans le chargeur de démarrage , en raison de laquelle la jambe BTN1 a été réglée sur le mode de sortie (peut-être que des miracles se sont également produits sur d'autres jambes à ce moment) et un signal faible y est apparu.

Quoi d'autre a dû lutter avec la carte SD. Il n'y avait tout simplement pas de module SDIO dans l'ancien microcontrôleur, j'ai donc dû étudier cette pièce à partir de zéro. J'ai passé presque toute la journée à essayer d'obtenir une carte, à copier des morceaux de code à partir d'exemples sur Internet et ce que CubeMX a généré. Bien que la carte soit parfaitement lisible sur un ordinateur, elle n'a toujours pas voulu démarrer dans mon circuit. J'ai péché pour une mauvaise soudure, des résistances de tirage incorrectement sélectionnées, des circuits maladroits et une fiche technique mal interprétée. Mais à ma grande surprise, une autre carte avec le même code et sur la même carte a démarré sans problème. Il sera nécessaire d'étudier cette question plus en détail.

Il y a eu un autre problème avec la carte. En fouillant dans différentes lignes avec un oscilloscope, je n'ai vu d'activité que sur la ligne D0, tandis que sur D1-D3 il y avait du silence - la carte fonctionnait en mode mono-bit. Dans HAL, la fonction HAL_SD_ConfigWideBusOperation () a même été découverte, ce qui peut activer le mode de transfert 4 bits. Malheureusement, lorsque la carte est passée en mode 4 bits, les périphériques SDIO sont entrés dans le dépassement RX FIFO profond et ont cessé de fonctionner.

Le problème s'est avéré très intéressant. Il s'est avéré qu'à l'intérieur de la fonction HAL_SD_ReadBlocks () il y a une certaine boucle qui interroge les drapeaux SDIO. Lorsque de nouvelles données arrivent de la carte, ce code transfère les octets du tampon FIFO interne vers la mémoire utilisateur. La carte a donc transmis des octets si rapidement que le code dans HAL_SD_ReadBlocks () n'a tout simplement pas eu le temps de transférer les données. J'ai dû temporairement baisser la fréquence d'horloge de la carte. Eh bien, à l'avenir, j'utiliserai le DMA et un tel problème ne devrait pas se poser en principe.

Conclusion et prochaines étapes


Ceux qui dans cet endroit s'attendaient à voir l'appareil fini, je dois le décevoir - seule la planche de test est terminée, et même cela, seulement le morceau de fer. Vous devez maintenant lui donner vie, faire la programmation, affiner les modes et la consommation. Eh bien, écrivez en fait un code de journalisation - c'est pourquoi tout le projet a été démarré.

Néanmoins, pour moi personnellement, cette étape est une réalisation très grande et importante. L'électronique n'est pas ma spécialité et je suis très heureux que l'appareil ait même démarré. J'ai réussi à pomper suffisamment pour concevoir des circuits, faire correspondre plusieurs appareils, câbler la carte, choisir des composants et bien plus encore.

Je parlerai de la partie logiciel une autre fois. Ainsi que sur les nuances des paramètres. Le fait est que tout ce remplissage doit d'abord être relancé et testé. Pour le moment, nous avons réussi à démarrer tous les appareils sur la carte (enfin, à l'exception du tweeter), mais seulement dans la mesure où «cela a commencé et répond d'une manière ou d'une autre». Aucune logique de traitement n'a encore été écrite.

Plans pour le proche avenir:

  • Pilotez l'électronique dans différents modes, vérifiez que le circuit fonctionne toujours. Fixer les jambages dans la deuxième version de la planche
  • Mesurez la consommation de toute la périphérie et trouvez des moyens d'optimiser la consommation.
  • Assemblez plusieurs options de carte sur différents microcontrôleurs (par exemple L152 ou L433)
  • Lisez attentivement les spécifications SD et découvrez comment connecter correctement la carte en mode de signalisation basse tension (1,8 V)
  • Essayez différents modules GPS et décidez enfin lequel j'irai ensuite
  • Commandez une puce de boussole distincte (par exemple, HMC5883L ou HSCDTD008A) et essayez de les utiliser d'une manière ou d'une autre
  • Effectuer une refactorisation de code interne, mettre à niveau toutes les bibliothèques principales, en commençant par HAL
  • Enfin, commencez à écrire des fonctionnalités. Mettre en œuvre réellement ce à quoi l'appareil était destiné

Sur ce, permettez-moi de prendre congé. Je vous serais reconnaissant de vos commentaires, idées et conseils constructifs sur la conception des circuits et la disposition des circuits imprimés.

Sources:

Code de
code bootloader
Plata
Logement

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


All Articles