PDA (Pocket Travel Computer): Schaltkreis-GPS-Logger

Mein Hobbyprojekt ist ein GPS-Logger . In den Kommentaren wurde sogar vorgeschlagen, es als "Trip Computer" zu bezeichnen Die Protokollierung ist nur ein kleiner Teil aller Funktionen des Geräts. Viel wurde bereits implementiert, aber die meisten müssen noch getan werden.

In früheren Artikeln habe ich den Übergang von Arduino zu STM32 , STMCube / HAL, beschrieben , ein wenig über das Build-System , den Bootloader , ein Composite-USB-Gerät und dessen Geschwindigkeit gesprochen . All dies wurde auf einem Steckbrett durchgeführt, das auf dem Blue Pill STM32F103CB-Brett und einem Igel aus Drähten basierte. Es ist Zeit, dass das Gerät Gestalt annimmt, sowohl elektronisch (Schaltung) als auch physisch (Körper).



Die Probleme, die ich zu diesem Zeitpunkt lösen musste, sind sehr eng miteinander verbunden. Bei der Auswahl von Komponenten für ein Projekt müssen Sie sich ungefähr vorstellen, in welches Gehäuse sie geschoben werden können. Und umgekehrt muss das Gehäuse für die verfügbaren Komponenten und die Platinen erstellt werden, was wiederum mit Blick auf das Gehäuse erfolgen muss. Im Allgemeinen ein Gewirr miteinander verbundener Themen. Sie können natürlich eine größere Kiste nehmen und alles dorthin schieben, aber Sie wollten etwas Kompaktes und Leichtes.

Bevor ich gleich anfange, möchte ich darauf hinweisen, dass dies nicht die endgültige Version des Geräts ist. Höchstwahrscheinlich wird es Fehler im Schema geben, etwas wird nicht wie beabsichtigt funktionieren, in den Kommentaren werden sie korrektere Lösungen anzeigen, einige Ansätze werden überdacht. Ich denke, dass die zweite oder sogar dritte Version des Geräts nicht vermieden werden kann. Daher freue ich mich über Ihre konstruktiven Kommentare.

Unter dem Schnitt ist er mehrperlig, aber es wird Technik sein.

Was und warum


Der GPS-Logger Holux M241 ist mein treuer Begleiter auf allen Reisen. Er ist seit vielen tausend Kilometern bei mir. Die vom Logger geschriebene Spur wird hauptsächlich zum Geotaggen von Fotos verwendet, aber auch die Route selbst ist von Interesse. Es macht Spaß herauszufinden, wie schnell Sie Ski gefahren sind, welche Route Ihr Flugzeug geflogen ist und was für ein Anblick gerade vor dem Fenster des Busses aufblitzte. Hier habe ich eine kleine Überprüfung dieses Geräts durchgeführt.

Leider haben die Fähigkeiten dieses Geräts längst nicht mehr zu mir gepasst: Ich bin es leid, mit Batterien herumzuspielen, die sich immer im ungünstigsten Moment hinsetzen. Es gibt auch eine sehr niedrige USB-Geschwindigkeit, eine geringe Menge an internem Blitz, einen unbequemen Mechanismus zum Zusammenführen von Spuren, wenig Informationen auf dem Display, geringe Genauigkeit, einen sehr primitiven Kilometerzähler, keine Informationen über Satelliten und vieles mehr.

Ja, man könnte nach dem suchen, was moderne Tracker bieten - sicher gibt es bereits ein Gerät im Angebot, das meinen Anforderungen entspricht. Aber das ist ein Hobby, ich möchte versuchen, selbst etwas Komplexes, Interessantes, Nützliches und Notwendiges zu tun. Lass es sein, auch wenn ich es nur benutzen werde.

Das Ziel des gesamten Projekts ist es, ein ähnliches Gerät in etwas herzustellen, das nur mit meiner Wunschliste gefüllt ist. Im ersten Artikel der Serie habe ich meine Anforderungen an das Gerät detailliert beschrieben. Kurz gesagt, ich möchte Folgendes tun:

  • Recyceln Sie das Stromversorgungssystem und übertragen Sie es auf eine Lithiumbatterie
  • Stellen Sie eine informativere Anzeige
  • genaueres GPS
  • Erweitern Sie Flash mit SD-Karte
  • Kompass und Beschleunigungsmesser hinzufügen
  • Ich möchte auch das Protokollierungssystem neu gestalten, um Spuren in dem von mir benötigten Format auszuspucken.

Neben den technischen Anforderungen und der Wunschliste gibt es auch nichttechnische (nicht funktionale). Daher möchte ich komplexe Geräte von Grund auf neu erstellen, um herauszufinden, wie verschiedene elektronische Komponenten funktionieren, wie sie programmiert werden, wie ein Board gezüchtet und ein Gehäuse entworfen wird.

Warum benötigen Sie ein separates Gerät, wenn alle modernen Telefone über GPS, einen großen Bildschirm und viel Speicher verfügen? Zunächst einmal bin ich mir nicht sicher, ob ein Telefon mit eingeschaltetem GPS im Track-Aufnahmemodus den ganzen Tag standhalten kann. Ich möchte nicht wirklich ohne Telefon in einem unbekannten Land bleiben. Auch ich persönlich benutze ein separates Gerät, das einfach komfortabler ist.

Möglicherweise ändert sich im Laufe der Zeit das Konzept des Geräts. So wird es zum Beispiel jetzt immer logischer, den Bildschirm zu verlassen, eine Verbindung zum Telefon über Bluetooth herzustellen und alle logischen Tricks auf dem Telefon auszuführen. Diese Idee ist sehr robust und verlockend. Aber zu diesem Zeitpunkt hätte ich immer noch gerne ein Display - ich habe immer Zeit, es aufzugeben.

In den ersten anderthalb Jahren habe ich das Gerät auf verschiedenen Arten von Debug-Boards entwickelt (zuerst Arduino Nano, dann STM32F103 Blue Pill, dann STM32F407VE). Ich musste Peripheriegeräte an Kabel anschließen und Module kaufen. Infolgedessen stellte sich auf dem Tisch ein Igel aus Drähten heraus, der nicht zum Testen des GPS-Empfangs auf der Straße geeignet war. Manchmal konnte man die Drähte nicht einmal bewegen, ohne die Verbindung irgendwo zu unterbrechen. Und dann viel Spaß beim Debuggen.

Jedes Mal, wenn ich mich hinsetzte, um nützliche Funktionen zu schreiben, stieß ich auf die Tatsache, dass ein anderer Teil des Systems nicht mehr normal funktionierte und Stunden damit verbringen musste, etwas völlig Unabhängiges zu debuggen. So stellte sich beispielsweise heraus, dass die wichtigste Komponente des Systems - der GPS-Empfänger - am Ende am wenigsten entwickelt war, weil Ich musste mich mit dem Debuggen von USB, SD-Karten, dem Einrichten von Bibliotheken usw. befassen.

Schließlich wurde ich es leid und entschied mich, mein Debugging-Board zu erstellen - dies wird das Thema des heutigen Artikels sein. Die Ziele, die ich mir in diesem Teil des Projekts gesetzt habe, waren folgende:

  • Erstellen Sie eine Debug-Karte, die keine Probleme mit berührungslosen Komponenten hat
  • Entscheiden Sie sich für die wichtigsten technischen und schematischen Lösungen
  • Entscheide dich grob für die Komponenten, die ich als nächstes verwenden werde
  • Entscheiden Sie sich grob für das Layout und den Körper
  • Die Schaltung sollte allgemein genug sein, um mit verschiedenen Komponenten und ihren Modi experimentieren zu können

Und obwohl das ultimative Ziel ein kompaktes Batteriegerät ist, werde ich heute solche Dinge nicht tun wie

  • Feinabstimmung der Leistungsmodi
  • Verbrauchseinstellung
  • Schlafmodi


Ich werde mich mit der Verbrauchseinstellung befassen, wenn die Karte und der Hauptcode fertig sind. Übrigens wird es heute auch nicht um den Code gehen, aber ich werde definitiv auf diese Frage zurückkommen, da es genug interessantes Material geben wird.

Komponenten


Beginnen wir mit den Komponenten und Peripheriegeräten. Unterwegs werden wir die Anzahl der Beine des Mikrocontrollers schätzen, die zum Verbinden dieses Zoos erforderlich sind, sowie die Leistungsparameter. Weil Es ist ein Hobbyprojekt, bei dem ich Komponenten aus dem ausgewählt habe, was ich tatsächlich in Geschäften / ebay / ali kaufen kann, und auch aus dem, was zu Hause gelötet werden kann (nun, auch aus dem, was bereits in meinen persönlichen Vorräten enthalten war). Vielleicht könnten einige spezielle Mikroschaltungen das Problem besser lösen, aber das Problem der Erschwinglichkeit und des Preises ist mir wichtig.

  • Die Hauptkomponente eines GPS-Loggers wird natürlich ein GPS-Empfänger sein . In meinem Fall ist dies ein ziemlich ausgetrickster Beitian BN-880, der auf dem UBlox M8N-Chip basiert. Der Kompass auf dem HMC5883L-Chip ist ebenfalls in das Modul integriert.

    Anschluss: 2 Pins UART für GPS und 2 Pins I2C für Kompass
    Stromversorgung: Von 2,7V
    Verbrauch: 50mA

    • Bestellte auch ein Beitial BN-220 Modul. Es hat keinen Kompass, aber die Antenne ist kompakter (20x20mm gegenüber 30x30). Die Wahrheit ist noch unklar, wie sich dies auf die Qualität des Empfangs auswirkt. Müssen testen. Dem Datenblatt nach zu urteilen, kann dieses Modul jedoch mit 1,4 V betrieben werden, was sich positiv auf die Betriebszeit des Geräts auswirken sollte.
    • Hier ist tatsächlich alles irgendwie schlammig. Es scheint, dass der BN-880 auf der UBlox M8N basiert, während der BN-220 auf dem U-blox M8030-KT basiert. Aber in einigen Quellen scheint es, dass es dasselbe zu sein scheint. Genauer gesagt ist der M8N ein Modul und der M8030-KT ist ein Chipsatz im Inneren. Ich bin besorgt über das Stromproblem in dieser Verwirrung - der M8N wird ab 2,7 V angekündigt, während der M8030-KT ab 1,4 V betrieben wird.
    • Alternativ habe ich auch das SIM868- Modul herumliegen. in dem es neben GPS auch ein GSM / GPRS-Modul und Bluetooth gibt. Während es mit seiner Kniffligkeit und Komplexität der Verbindung Angst macht. Sie müssen zuerst mit dem Debug-Board spielen.
  • Der Hauptunterschied zwischen dem Gerät und „nur einer Black Box“ ist das Vorhandensein eines Displays . Bei den ersten Prototypen habe ich das Display über I2C angeschlossen, aber die Buslast betrug ca. 25%. Der Punkt liegt jedoch nicht einmal im prozentualen Verhältnis, sondern in der Tatsache, dass die Übertragung des Bildschirmpuffers etwa 25 ms dauert, während derer es unmöglich ist, mit anderen Geräten auf dem Bus zu kommunizieren. Dies kann ein Problem sein. Sie müssen das Display entweder auf einen separaten I2C-Bus stellen oder eine Verbindung über SPI in Betracht ziehen

    Anschluss: 2 I2C-Drähte oder 3 SPI-Drähte (Nur-Schreib-Anzeige, daher wird die MISO-Leitung nicht verwendet, sondern ein separates Daten- / Befehlssignal)
    Stromversorgung: 3V
    Verbrauch: 25mA
  • Um das Gerät zu steuern, verwende ich 2 Tasten , die jeweils 2 Beine des Prozessors belegen
  • Im Originalgerät (Holux M241, von dem ich ursprünglich die Funktionalität kopiert habe) war es unmöglich, den Track zu einem beliebigen Zeitpunkt anzusehen. Es war notwendig, das Gerät an den Computer anzuschließen und die Daten mit einem speziellen Programm zusammenzuführen. Es scheint mir, dass die Möglichkeit, einen Titel jederzeit auf einem Mobiltelefon oder Tablet anzusehen, sehr beliebt sein wird. Dafür habe ich ein Bluetooth- Modul HM-13 gekauft . Dieses Modul wird ausgewählt, weil es zusätzlich zu BLE über SPP verfügt.

    Anschluss: 2 UART-Kabel, 1 Statuskabel (verbunden / nicht angeschlossen)
    Stromversorgung: 2,5 V - 3,9 V.
    Verbrauch: 50 mA (obwohl die Zahl 13 mA direkt neben dem Datenblatt steht. Vielleicht ist dies der Spitzen- und Durchschnittswert)
  • Wie mir gesagt wurde, macht es keinen Sinn, den Hörer eingeschaltet zu lassen, wenn Sie sich nur zur Ruhe setzen oder in einem Café essen gehen. Aus diesem Grund habe ich beschlossen, den Beschleunigungsmesser MMA8452 hinzuzufügen und damit festzustellen, ob das Gerät in Ruhe ist oder wir uns irgendwo bewegen.

    Anschluss: 2 Drähte I2C, 1 Draht zur Unterbrechung
    Stromversorgung von 2V bis 3,6V mit etwas mikroskopischem Verbrauch
  • Der GPS-Track wird auf der SD-Karte aufgezeichnet. Ich habe bereits versucht, die Karte im SPI-Modus zu verwenden, und dies ist, gelinde gesagt, langsam. Besonders auf der Platte. Richtiger Modus für SD-Karte - SDIO

    Anschluss: 6 Drähte
    Stromversorgung: Ab 1,8V
    Der Verbrauch ist unbekannt, aber ich denke nicht mehr als 20mA
  • Um Energie zu sparen, ist es sinnvoll, die Stromversorgung der derzeit nicht verwendeten Geräte auszuschalten. Also werde ich in der Nähe jedes Verbrauchers einen Transistor anlegen, der ein separates Signal des Mikrocontrollers steuert

    Verbindung: 5 Signale, ein Fuß pro Verbraucher (GPS, Bluetooth, Beschleunigungsmesser, SD-Karte, Display)

    UPD basierend auf Kommentaren. Das Deaktivieren des Beschleunigungsmessers ist nicht sinnvoll - er hat bereits einen Centverbrauch. Einige Geräte funktionieren höchstwahrscheinlich immer (z. B. eine SD-Karte) - in Zukunft kann ich diese Transistoren entfernen. Einige Geräte (z. B. GPS) können sich auf Befehl von der Schnittstelle trennen. Wenn nach den Testergebnissen dieser Teil gut funktioniert, werde ich auch einen externen Transistor ablehnen. In der Zwischenzeit mache ich die maximal mögliche Gesamtgebühr, lassen Sie diese Transistoren alle sein. Außerdem habe ich mich noch nicht für die Peripherie entschieden.
  • Eine zweifarbige LED zur Statusanzeige (wie wäre es ohne blinkende LED?). Es wäre möglich, eine Dreifarbe zu setzen, aber bisher sehe ich keine Notwendigkeit.

    Anschluss: 2 Pins
    Verbrauch: 10mA
  • Zusätzlich zu Bluetooth wird ein klassischerer Mechanismus zum Zusammenführen von Tracks implementiert - über USB . Hierfür sind 4 Leitungen beteiligt - ein Differenzpaar für Daten, 1 Pin für die Erkennung, dass das Gerät an USB angeschlossen ist, und ein weiterer Pin für die logische Verbindung (warum ich diese 2 Pins benötige, werde ich unten beschreiben).
  • Appetit kommt mit Essen. Warum nicht einen Hochtöner hinzufügen, seit ich angefangen habe, alles in mein Traumgerät zu schieben? Na ja, oder ein Vibrationsmotor . Ich habe noch keinen User Case gefunden.

    Anschluss: 1 Draht
  • Das Gerät muss noch eingeschaltet werden. Während der PT1502-Chip mich als Lithium-Batterieladegerät und Leistungsregler ansieht. Um mit der Mikroschaltung zu kommunizieren, müssen Sie zwei Drähte verwenden: einen für die Energieverwaltung und einen für ein Signal über eine leere Batterie. Aus Gründen des Interesses wird es möglich sein, die Spannung der Batterie unter Verwendung einer anderen Leitung zu messen.
  • Natürlich ist es falsch, die Ladung einer Lithiumbatterie anhand der Spannung zu messen. Aus diesem Grund habe ich einen speziellen INA219-Leistungsmesserchip hinzugefügt

    Versorgungsspannung: 3-5V, empfohlen 3,3V
    Anschluss: 2 Drähte I2C

    Wie weiter unten zu sehen sein wird, verursacht eine Versorgungsspannung von 3 V einige Unannehmlichkeiten bei der Verbindung. Ich würde es vorziehen, wenn der Zählerchip mit 2,7 V oder weniger betrieben wird. Aber nachdem ich verschiedene Optionen basierend auf Preis / Fall / Verfügbarkeit durchgesehen hatte, fand ich bei 2,7 V immer noch nichts. Ich werde für die Hilfe dankbar sein.
  • Es bleibt nur eine Debugging-Schnittstelle SWD (3 Drähte) und ein Debugging-UART (2 weitere Drähte) bereitzustellen.

Ich war immer an der Frage interessiert, warum Controller mit einer großen Anzahl von Ports benötigt werden, und ich zählte leicht 39 Pfoten, die für meine Funktionalität benötigt wurden. Und das zählt nicht Quarz, Zurücksetzen und Leistung. Und es gibt Ideen, wie man mit einem Dutzend mehr umgehen kann (zum Beispiel könnte das Display über eine parallele Intel 8080- oder Motorola 6800-Schnittstelle angeschlossen werden).

Sie können natürlich die externen I2C-Anschlüsse verschrauben, um die Anzahl der verwendeten Beine zu verringern. Erstens sind dies zusätzliche Komponenten auf der Platine, zweitens wird der Softwareteil viel komplizierter, und drittens haben kleine Mikrocontroller immer noch wenig Speicher, und wo genügend Speicher vorhanden ist, gibt es auch genügend Ports. Ich sehe also keinen Grund, alles zu komplizieren - lassen Sie es 39 Zeilen geben.

Ernährung


Mit der Stromversorgung ist nicht alles so klar. Sie können wahrscheinlich alle Geräte mit 3,3 V versorgen und sich beruhigen. Trotzdem werden wir ein mobiles Gerät bauen, was bedeutet, dass wir darüber nachdenken müssen, Energie zu sparen. Sie müssen also versuchen, eine kleinere Versorgungsspannung zu wählen. Im Folgenden werde ich schätzen, welche Einsparungen Sie erzielen können.

Hier sind die Daten für alle Geräte in der Platte - in dieser Form ist es bequemer, die Leistungsdomäne auszuwählen, an die dieses oder jenes Gerät angeschlossen werden soll.

GerätLeistungsbereichPower DomainKommunikation
CPU2 - 3,6 V.2V
Beschleunigungsmesser2 - 3,6 V.2VI2C
SD-Karte1,8 V oder 3,6 V.2VSDIO
Anzeige1,65 - 3,3 V.
oder 3 - 5V
2VI2C oder SPI
GPS2,7 - 5,5 V.
oder von 1,4V
2,7VUART
Bluetooth2,5 - 3,9 V.2,7VUART
Leistungsmesser (INA219)3 - 5,5 V.3vI2C
Summer3V - 5VVbat

An der Platte ist leicht zu erkennen, dass einige der Geräte mit ausreichend niedrigen Spannungen (ab 1,8 V) betrieben werden können. Andere können bequem mit 2,7 V arbeiten. Schließlich können die verbleibenden Geräte unter 3 V nicht funktionieren. Der Quietscher benötigt im Allgemeinen 5 V, aber für mich wird er mit der höchsten Spannung betrieben - von der Batterie, egal wie viel sie ist.

Mit der Leistung des Displays ist noch nicht vollständig verstanden. In der Beschreibung von Anzeigemodulen mit Ali liegt der Bereich zwischen 3 und 5 V, während im Datenblatt des Matrix-Controllers SSD1309 der Bereich zwischen 1,65 und 3,3 V liegt. Ich gehe davon aus, dass 3 V benötigt werden, um den Aufwärtswandler auf der Anzeigemodulplatine zu schwenken, während 1,65 V für die Logik ausreichen. Wie aus den Diskussionen über das Layout hervorgeht, ist es sinnvoll, das Anzeigemodul zu verlassen und das Display direkt anzuschließen, wodurch das Display über die 2B-Domäne mit Strom versorgt wird.

Ich habe ungefähr die gleichen Überlegungen zu GPS - verschiedene Quellen zeigen unterschiedliche Versorgungsspannungen an. Bisher habe ich kein Verständnis dafür, welches Modul ich am Ende verwenden werde. Lassen Sie den Empfänger also in der 2,7-V-Domäne hängen.

Bei einer SD-Karte ist das überhaupt nicht klar. Die Spezifikation besagt dunkel, dass die Karte im Allgemeinen mit 3,3 V betrieben werden sollte, aber moderne Karten sind intelligent genug und können verstehen, dass sie in einem Niederspannungsgerät stecken und von 1,8 V auf Strom umgeschaltet werden können. Der Mechanismus für die Auswahl der Lebensmittel ist jedoch nicht sehr klar. Ich werde die Karte von 2B füttern und sehen, was passiert. Es wird nicht funktionieren - es wird von 3V funktionieren.

Es drohen also 4 Leistungsbusse - 2 V, 2,7 V, 3 V und eine Batterie. Ich möchte alle Verbraucher, die essen und ständig arbeiten (und dies ist der Controller und das GPS), auf den Bus mit der niedrigsten Spannung setzen, aber im Moment habe ich mich nicht für das GPS-Modul (und damit dessen Stromversorgung - 2 oder 2,7 V) entschieden, was bedeutet, dass es notwendig sein wird eine Art universelle Lösung. Ich werde versuchen, die Karte zu trennen, damit die eine oder andere Spannung leicht angelegt werden kann.

Woher bekommen Sie so viele verschiedene Belastungen? Schon in der Anfangsphase des Projekts habe ich mir die Mikroschaltung PT1502 angesehen und es sogar geschafft, sie in einem anderen Projekt auszuprobieren . Zusätzlich zum Ladegerät für die Lithiumbatterie verfügt diese Mikroschaltung über bis zu 3 Stromquellen - einen Impuls und 2 lineare Abwärtsschalter. Hier ist die Spannung an einem von ihnen jedoch nicht geregelt und beträgt 3V - ich werde versuchen, den INA219 damit zu versorgen. Die restlichen 2 Stromquellen sind da kein Problem Dort können Sie die Spannung wählen.

Die Schätzung des Verbrauchs ist nicht sehr erfolgreich. Der Spitzenverbrauch wird in den Datenblättern angegeben. Dies reicht aus, um die Leistung der Schlüsseltransistoren zu berechnen, reicht jedoch nicht aus, um die erforderliche Batteriekapazität abzuschätzen. Daher werde ich vorerst die Batterie basierend auf dem verfügbaren Platz im Gehäuse auswählen und dort bereits den tatsächlichen Verbrauch messen.

Die Frage mag sich stellen, aber wie werden Geräte mit unterschiedlichen Betriebsspannungen angepasst? Lass es uns richtig machen.

  • Alle Kommunikationszweige der Mikrocontroller sind als Fünf-Volt-tolerant gekennzeichnet (mit Ausnahme von UART2 an den Zweigen von PA2 / PA3). Wenn also 3,3 V vom Gerät mit der höchsten Spannung anfallen, passiert nichts Schlimmes
  • Obwohl der Beschleunigungsmesser mit 2 V betrieben wird, kann er möglicherweise parallel zu Hochspannungsgeräten am Bus geschaltet werden. Dieses Problem lässt sich leicht lösen. Mit der Mikroschaltung MMA8452Q können Sie die Kommunikationsleitungen separat von einem anderen Netzteil mit Strom versorgen (über das Hochspannungsgerät am Bus selbst).
  • Ich werde versuchen, die SD-Karte mit der gleichen Spannung wie der Mikrocontroller zu betreiben, was bedeutet, dass ich nichts koordinieren muss.
  • GPS und Bluetooth sollten die „niedrige“ Spannung vom Mikrocontroller problemlos aufnehmen. Gleiches gilt für andere Hochspannungsgeräte

Zum Schluss noch ein paar Worte darüber, warum ich so darum kämpfe, die Versorgungsspannung zu senken. Ein Chip in einem gepulsten DC-DC-Wandler, der Volt gegen Ampere austauschen kann (wenn Sie die Verluste des Wandlers selbst natürlich nicht berücksichtigen). Um genauer zu sein, tauschen Sie eine höhere Spannung mit einem niedrigeren Strom gegen eine niedrigere Spannung und einen höheren Strom aus. In diesem Fall interessiert uns eher die umgekehrte Argumentation: Wenn Sie eine Niederspannungslast über DC-DC speisen, ist der Stromverbrauch dieser gesamten Struktur zusammen mit dem Wandler geringer als der Stromverbrauch der Last selbst. Nun, da die Batteriekapazität in mAh gemessen wird, erhöht eine Reduzierung des Stromverbrauchs die Batterielebensdauer.

Zählen?
, 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. , , , .

Mikrocontroller


Ich ging nachdenklich auf die Frage nach der Auswahl eines Mikrocontrollers ein - ich spielte lange mit dem Konfigurator und wog die Vor- und Nachteile der einzelnen Optionen ab. Die STM32-Mikrocontroller haben mir sehr gut gefallen, daher sehe ich keinen Sinn darin, ohne besondere Notwendigkeit in Richtung anderer Controller zu schauen. Darüber hinaus gibt es in der STM32-Linie Controller für jeden Geschmack und für jede Peripherie. Die in den vorherigen Phasen meines Projekts gesammelten Erfahrungen ermöglichen es uns, die Auswahl des Controllers anhand der Liste der Peripheriegeräte, der bereits geschriebenen Softwarebindungen sowie der Funktionen, die ich in Zukunft implementieren möchte, einzugrenzen.

Es ist also ziemlich offensichtlich, dass 20 KB Speicher meines STM32F103CB definitiv klein sind - es gibt nicht genügend Puffer mit angemessener Größe für die Kommunikation mit einer SD-Karte und USB. Ich habe noch nicht einmal begonnen, einen Großteil der geplanten Funktionen zu implementieren, aber es hat bereits mehr als 19 KB gedauert. Bei der Verarbeitungsleistung ist dies jedoch nicht besonders notwendig. Wenn die gesamte Kommunikation mit Peripheriegeräten in DMA übertragen wird, verbleiben nur noch ein paar Prozent auf dem Anteil des Zentralprozessors.

Nachdem ich die Liste der benötigten Elemente vom Controller geschätzt hatte, berechnete ich Folgendes:

  • > = 128kb Flash (derzeit werden ca. 50k verwendet)
  • > = 40 kb Speicher (jetzt sind 19k belegt)
  • > = 40 Fuß GPIO (siehe Argumentation oben)
  • > = 40 MHz (Sie brauchen nicht viel, die Hauptsache ist, weniger Verbrauch zu haben)
  • DMA (hat mir sehr gut gefallen)
  • > = 2x I2C,> = 3x UART,> = 1 SPI
  • SDIO (Flash-Laufwerk über SPI ist sehr langsam)
  • USB Full Speed, High Speed
  • ( )
  • LCD ( FSMC)

STMicroelectornics-Mikrocontroller sind nur ein Dutzend - für jeden Geschmack, jede Farbe und jeden Geldbeutel. Zuerst habe ich versucht, einen Controller auszuwählen, um von der Serie fortzufahren. Die Lineale L0 und F0 sind zu schwach und nicht genügend Speicher, S7 und H7 hingegen sind zu funktionsreich, es gibt kein SDIO in L4 (UPD: SDIO ist, sie haben es nur nicht auf der Titelseite der Serie erwähnt). Im Rest der Serie können Sie etwas auswählen, das meinen Bedürfnissen entspricht, da ich keine besonderen Anforderungen habe.

Die STM32WB-Serie beeindruckt durch das Vorhandensein von Bluetooth, aber das VFQFPN68-Gehäuse kühlt den Wunsch, es in Hobbyprojekten zu verwenden, etwas ab. Und solche Controller habe ich im Einzelhandel nicht gefunden.

Ich zielte auf das LQFP64-Gehäuse - ausreichend in der Anzahl der Beine, aber nicht sehr groß zugleich und kann zu Hause gelötet werden. Es ist gut, dass es einen CubeMX-Konfigurator gibt, in dem Sie mit Filtern auswählen können, was Sie benötigen.

Ich habe mich aus drei Gründen für den STM32F103RB-Controller entschieden. Erstens habe ich die F103-Serie bereits gut mit dem Blue Pill Board studiert. Im Allgemeinen passte der STM32F103CB-Controller vollständig zu mir, nur der Speicher reichte nicht aus. Zweitens habe ich bereits einen Bootloader und einen Low-Level-Code für diesen Controller, während andere überarbeitet werden müssen. Und drittens, vor ungefähr einem Jahr, hatte ich bereits Freude daran, 3 Stück STM32F103RB zu kaufen. Dann habe ich die verfügbaren Controller nicht detailliert untersucht, sondern einfach einen dickeren Controller aus der F103-Reihe ausgewählt. Wirf es jetzt nicht weg :)

Wie bereits erwähnt, habe ich keine besonderen Anforderungen an Peripheriegeräte oder Leistung. Aber wenn ich auf etwas stoße, habe ich bereits Controller aus der F4-Reihe (wenn etwas Stärkeres benötigt wird) oder L152RD, wenn Sie etwas mit Verbrauch entscheiden müssen (UPD: Ich habe mir auch L433RC angesehen). Was gefällt, mit STM32 sind fast alle Pin-zu-Pin-Controller kompatibel, und F4 und L1 / L4 können fast ohne Änderung der Platine gelötet werden. Sie können sogar den Verbrauch mit verschiedenen MKs erfassen und vergleichen.

Ein paar Worte zu Körper und Layout


Wir haben uns für die Details entschieden. Es ist Zeit, ein Diagramm zu zeichnen, dann die Tafel zu verfolgen und dann zu versuchen, sie in das Gehäuse einzupassen. Oder nicht? Zugegeben, zuerst bin ich einfach diesen Weg gegangen, aber dann bin ich zu dem Schluss gekommen, dass alles in umgekehrter Reihenfolge gemacht werden muss. Na ja, oder zumindest zur gleichen Zeit.

Ich möchte ein kompaktes Gerät bekommen. Dazu müssen Sie die Größe des verfügbaren Speicherplatzes genau kennen, um zu verstehen, wo die Platine platziert werden muss, wie groß der Akku ist, wo die Tasten, der Bildschirm, der USB-Anschluss und andere externe Komponenten platziert werden müssen und wie Sie die Komponenten montieren können ob es zweckmäßig ist, Drähte zwischen ihnen zu verlegen. Es ist einfach sinnlos, ein Board anzuheben, ohne all diese Dinge zu verstehen. Es stellt sich also heraus, dass Sie sich zuerst mit dem Körper und dem Layout befassen und dann mit der Schaltung fortfahren müssen.

Außerdem musste ich beim Zeichnen des Gehäuses die Auswahl der Komponenten mehrmals überarbeiten. Daher dachte ich anfangs daran, ein billiges 128 x 64 0,96- Zoll- Display (Arbeitsbereich 21,7 x 11,2 mm) zu verwenden, aber dieses Display sah vor dem Hintergrund eines viel größeren Gehäuses völlig mikroskopisch aus. Dann wurde ein 1,3-Zoll-Display bestellt (Arbeitsbereich 29,4 x 14,7 mm), aber es wurde nicht viel besser. Dann habe ich ein 1,54-Zoll-Display (35 x 17,5 mm) bekommen - es sieht damit mehr oder weniger normal aus. Dies ist derzeit die Hauptarbeitsoption.

Schätzungen zufolge hätte ein 1,8-Zoll-2-Zoll-Display besser ausgesehen, aber diese sind bereits in Farbe und höherer Auflösung erhältlich, und dementsprechend ist der Bildschirmpuffer groß genug für meinen Controller (35 KB anstelle von 1 KB). Das Einschieben großer Displays in das Gehäuse kann auch ein Problem sein, weil Landeklammern für solche Module sind deutlich größer als der aktive Bereich des Displays.

Während ich diesen Artikel über Ali schrieb, wurden monochrome 2,42-Zoll-Displays mit derselben Auflösung (128 x 64) und genau derselben Bindung wie 1,54 Zoll angezeigt . Ich habe einen für meinen Test bestellt - es besteht die Möglichkeit, ihn in meinen Koffer zu stecken, ohne das Gerät signifikant zu vergrößern.

Ein weiterer wichtiger Punkt in der Phase der Bearbeitung des Gehäuses war das Verständnis, dass das gekaufte Anzeigemodul zu viel Platz beansprucht und den Platz für die Hauptplatine erheblich reduziert. Aus diesem Grund habe ich beschlossen, das fertige Anzeigemodul aufzugeben und stattdessen das Display und seine Bindung auf meiner Platine zu platzieren. Die Anzahl der Teile in der Schaltung nahm leicht zu, aber das Design insgesamt wurde erheblich vereinfacht und kompakter.

Ich habe ähnliche Gedanken zum Thema GPS-Modul. Es ist nicht so groß, aber egal wie es gestellt wird oder es stört oder die Antenne wird von einer Batterie geschlossen. Es kann eine gute Idee sein, die Füllung des Moduls auf Ihrer Platine zu platzieren und die Antenne an einer anderen Stelle zu platzieren.

Die Arbeit am Gehäuse ermöglichte es auch, die Größe und Kapazität der Batterie zu bestimmen. In dem verfügbaren Volumen wurde gerade eine 900-mAh-Batterie gefunden - wir werden uns darauf konzentrieren. Ich möchte, dass mein Gerät mit einem 15-20-Stunden-Akku arbeitet, was bedeutet, dass der Verbrauch zwischen 45 und 60 mA liegen sollte.

Im Moment kann ich die Arbeit am Rumpf nicht als beendet bezeichnen. Erstens ist die Frage der Wahl für einige Komponenten (Display, GPS) noch offen. Zweitens ist nicht klar, ob meine Schaltung grundsätzlich startet oder ob es notwendig sein wird, etwas radikal zu ändern. Und drittens stellt sich heraus, dass die Platine zu kompakt ist - ich bin nicht sicher, ob ich sie auflösen, löten und debuggen kann. Daher werde ich mich in diesem Artikel weiterhin auf Schaltungsprobleme konzentrieren, mich in einfacheren und verständlicheren Schritten bewegen und das nächste Mal über den Fall sprechen. Hier haben Sie ein paar Renderings und Fotos für Samen.









Schema


Jetzt können Sie Elektronik machen. Ich werde die Schaltungslösungen ausreichend detailliert beschreiben. Zuallererst für die gleichen Neulinge in der Elektronik wie ich, sowie eine Zusammenfassung für mich. Erfahrene Elektronikingenieure können die Schaltkreise durchblättern und zum nächsten Abschnitt zurückspulen.

Beginnen wir mit der Ernährung.

Das Gerät wird von einer Lithiumbatterie gespeist, was bedeutet, dass Sie einen Laderegler benötigen. Einige Komponenten haben auch eine obere Spannungsgrenze von etwa 3,6 V, während eine Batterie leicht mit mehr als 4 V enden kann. Sie benötigen also eine abgespeckte Stromquelle. Wie wir bereits herausgefunden haben, werden wir verschiedene Belastungen benötigen.

Ich habe bereits erwähnt, dass ich den PT1502-Chip verwenden werde. Es passt gut, weil implementiert einen Laderegler, 3 Stromquellen sowie eine Tastenschaltvorrichtung. Die Mikroschaltung enthält mehrere Funktionsblöcke, die ich der Übersichtlichkeit halber im Diagramm unterteilt habe. Die Schaltung selbst ist eine leicht überarbeitete Datenblattschaltung. Hier ist der Lithium-Batterieladecontroller



Der Widerstand R3 stellt den Ladestrom ein. Standardmäßig entspricht dies 470 mA. Vielleicht werde ich den Testergebnissen zufolge den Wert dieses Widerstands auf 510 Ohm reduzieren, was einen Ladestrom von etwa 900 mA (1C) ergibt.

Die Steuerung kann den aktuellen Lademodus mit dem Fuß CHG_STAT melden. Außerdem weiß er, wie man Signale bis zu 3 gibt - es wird aufgeladen, es wird nicht aufgeladen und es wurde bereits aufgeladen, ist aber immer noch an die Steckdose angeschlossen. In der ersten Version drückt der interne Transistor den Fuß auf den Boden und dies kann von der Steuerung leicht erkannt werden. In der zweiten Ausführungsform ist der Transistor vollständig geschlossen und der Zweig geht in einen hochohmigen Zustand über. Bei einem Einschalten ist ein solches Signal auch von der Steuerung leicht abzulesen.

Aber mit dem dritten Zustand ist das nicht so einfach. Dort ist der Transistor angelehnt und fließt von einem Strom von 20 μA durch. Um einen solchen Zustand in Betracht zu ziehen, wurde ich aufgefordert, einen Lift zu wählen, so dass etwa die Hälfte der Nahrung auf meinem Bein lag. Dann ist es möglich, einen solchen Zustand mit dem ADC leicht zu erkennen. Nach dem Ohmschen Gesetz erhalten wir R5 = 1V / 20mkA = 50k.

Wie gesagt, der PT1502-Chip ist nicht nur ein Ladegerät, sondern auch ein kniffliger Controller für alle Leistungen. Die Mikroschaltung überwacht die Spannungen in der Schaltung und kann mithilfe des RESET-Signals den Hauptprozessor steuern (sie sagen, dass Sie noch früh starten müssen, die Leistung hat sich noch nicht stabilisiert).



Außerdem kann die Mikroschaltung das Gerät auf Knopfdruck (BTN1) starten und auf ein Signal vom Mikrocontroller (PWR_HOLD) den Vorgang abschließen und die Stromversorgung ausschalten. Nun, um dem Prozessor zu signalisieren, dass der Batterie das Signal BAT_LOW ausgeht.

Und das ist die Hauptstromquelle.



Die Ausgangsspannung wird durch die Spannung an der Klemme BUCKFB eingestellt und mit Batteriestrom auf 2 V eingestellt. Bei einer Zwei-Volt-Stromversorgung wurde jedoch ein Problem festgestellt: USB funktioniert nicht. Das heißt, Der Akku wird aufgeladen, kann jedoch keine Daten übertragen. Der Mikrocontroller kann einfach keine Signale an einen USB-Bus mit ausreichender Amplitude senden. Datashit empfiehlt eine Spannung von mindestens 2,7 V, besser als 3,3 V.

Um keine andere Stromquelle zu blockieren und darüber nachzudenken, wie man zwischen ihnen umschaltet, habe ich beschlossen, nur das Verhältnis des Teilers R1 / R4 + R7 anzupassen. Mit dieser Einbeziehung arbeitet der Impuls kontinuierlich. Sobald das Gerät an USB angeschlossen ist, öffnet der Transistor und Shunt R7. Das Verhältnis der Ansteuerwiderstände ändert sich und wir erhalten 3,16 V am Ausgang (wir können immer noch mit den Nennwerten spielen und sie auf 3,3 V halten).

Der PT1502 verfügt außerdem über 2 lineare Steuerungen.



An diese Controller werden entweder Komponenten mit geringem Verbrauch (INA219) oder kurzlebige Komponenten (Bluetooth) angeschlossen, sodass die Effizienz dieser Quellen kein Problem darstellt. Die LDO2-Versorgungsspannung kann über die LDO2_SETx-Signale eingestellt werden.

Da ich noch offene Fragen zur Versorgungsspannung habe, habe ich mich entschlossen, die Jumper zu trennen, um den LDO2_SETx-Modus auszuwählen. Um den tatsächlichen Verbrauch auf dem entsprechenden Bus messen zu können, werde ich auch den Jumper JP1 / JP2 / JP3 mit dem Kamm verbinden.

Zum Abschluss des Themas Netzteile müssen wir die Leistung des Displays erwähnen. Ich schrieb etwas höher, dass ich im Namen der Kompaktheit das gekaufte Anzeigemodul aufgeben und das Display mit dem Umreifungsband an meinem Board abholen musste. Diese Anzeige erfordert einen speziellen 7-16V-Aufwärtswandler. Praktischerweise kann diese Quelle über das EN-Signal ein- und ausgeschaltet werden. Die Schaltung selbst wird aus dem Datenblatt des Boosters kopiert, genau das gleiche wird in Anzeigemodulen mit Ali verwendet.



PT1505
Als ich im Internet nach Alternativen zum PT1502-Chip suchte, stieß ich auf ihre ältere Schwester - den PT1505-Chip. Dies ist fast der gleiche Leistungsregler, jedoch mit einem zusätzlichen Upgrade. Mit einer solchen Steuerung wäre es möglich, die Anzahl der Elemente auf der Platine zu reduzieren. Leider habe ich keine PT1505-Chips zum Verkauf gefunden.

Ich wäre Ihnen übrigens dankbar, wenn Sie ähnliche Leistungsregler anderer Hersteller kennen.

Nun ein wenig über die Leistung des Mikrocontrollers. Die Mikroschaltung ist groß und verfügt über 6 Stromleitungen - 4 für den digitalen Teil, 1 analoge Stromversorgung und eine für die Uhr. Gemäß dem Datenblatt des STM32F103 sollte auf allen Stromleitungen (möglicherweise mit Ausnahme der Uhr) ein 100-nF-Kondensator entlang des Kondensators und ein weiterer bei 4,7 uF vorhanden sein.

Im Datenblatt des STM32F4 heißt es jedoch, dass die Mikrocontroller zwar in Bezug auf die Ausgänge praktisch kompatibel sind, jedoch immer noch etwas andere Leistungsschemata aufweisen. An den beiden Klemmen sollten sich also zwischen Klemme und Masse Kondensatoren mit 2,2 mkF befinden (und nicht zwischen Masse und Stromversorgung, wie in F1). Daher musste ich beide Optionen in Betracht ziehen und für einen bestimmten Mikrocontroller nur einen Teil der Kondensatoren löten.



Wenn Sie das Thema Ernährung fortsetzen, müssen Sie herausfinden, wie Sie es messen können. Sie können sich auf das Signal BAT_LOW verlassen und den Benutzer bitten, sich schnell zusammenzurollen, wenn die Batterie schwach ist. Aber genau das hat mir im originalen Holux M-241 nicht gefallen, weil Dieses Signal erschien zu spät und war leicht zu übersehen. Ich brauche eine informativere Anzeige der Batterieleistung.



Für alle Fälle habe ich den gewöhnlichsten Teiler zur Messung der Batteriespannung eingesetzt. Bei Lithiumbatterien ist dies jedoch nur ein informativer Indikator und sollte nicht als verlässlich angesehen werden. Für ehrlichere Batteriemessungen im Internet empfehlen sie die Verwendung eines „Anhängers“.



Dieser kleine Mikrochip zählt die Energiemenge, die durch ihn zur oder von der Batterie geleitet wurde. Messungen werden am Shunt R10 durchgeführt. Die Messwerte der Mikroschaltung können über I2C abgelesen werden. Die Mikroschaltung ist in der Lage, die Spannung an der Batterie, den durch den Widerstand fließenden Strom zu messen und auch miteinander zu multiplizieren. Leider weiß sie nicht, wie sie den Wert der von Watt * verstrichenen Stunden akkumulieren soll, daher muss sie eine ständige Umfrage durchführen.

Kommen wir zum digitalen Teil. Das Herzstück des gesamten Systems ist der Mikrocontroller STM32F103RB.



Die Umreifung in Form von zwei Quarzen wurde aus anderen im Internet gefundenen Schemata entnommen (im Datenblatt doppelt überprüft). Ich muss nicht vom RAM booten, sondern weil das Signal BOOT1 auf den Boden gezogen wird. BOOT0 kann mit einem Jumper ausgewählt werden, um vom Haupt-Flash-Speicher oder dem eingebauten UART-Bootloader zu starten (z. B. für die primäre Firmware des Geräts).

Als nächstes ist die LED.



Da die Hauptversorgungsspannung zwischen 2 und 3,3 V variiert, sollten keine LEDs daran angeschlossen werden - die Helligkeit und der Stromverbrauch variieren stark. Daher werden die LEDs I an den 2,7-V-Bus angeschlossen, Strombegrenzungswiderstände werden entsprechend berechnet. Da der Mikrocontroller bei Batteriebetrieb nicht mehr als 2 V an seinem Fuß abgeben kann, kann der GPIO-Push-Pull-Modus nicht verwendet werden. Nur offener Abfluss.

Über die Reset-Taste gibt es nichts Besonderes zu sagen.



Da ein Drei-Volt-Gerät (INA219) auf dem I2C-Bus sitzt, müssen Sie auch Klammern an drei Volt anlegen



Ein SWD-Anschluss ist ebenfalls Standard. Eine Diode wird benötigt, um die Leistung zwischen der Batterie und der externen Leistung des Programmiergeräts umzuschalten.



Vorwegnahme der Ausrufe, dass sie dies nicht tun und dass eine solche Verbindung die Batterie nicht wirklich trennt. Ja, es schaltet sich nicht aus, aber die Diode ist nicht dafür. Dieses Ding wird benötigt, um das Gerät vom Programmierer aus mit Strom versorgen zu können, wenn der Akku nicht angeschlossen ist. Und wenn verbunden, dann lassen Sie es daraus arbeiten. Wenn die Batterie angeschlossen ist, müssen Sie den Programmierer selbst vor 4,2 V an der Batterie schützen.

Die Schaltflächen sollten jedoch detaillierter sein.



Tatsache ist, dass die erste Taste nicht nur eine Taste ist, sondern auch als Geräteschalter fungiert - das BTN1-Signal wird an den PT1502-Leistungscontroller-Chip angeschlossen. Wenn das Gerät ausgeschaltet ist, werden der Mikrocontroller und andere Verbraucher nicht mit Strom versorgt. Aus diesem Grund ist der Knopf nicht an die Stromversorgung (VCC), sondern an die Batterie (BAT) angeschlossen. Durch Drücken dieser Taste schaltet der PT1502 alle Stromquellen ein und startet den Mikrocontroller. Danach kann die Schaltfläche wie eine normale Schaltfläche funktionieren. Um den Mikrocontroller nicht mit einer hohen Batteriespannung zu verbrennen, habe ich einen kleinen Spannungsteiler eingebaut, der das BTN1-Signal in die erforderlichen Frames treibt (dies ist jedoch möglich - der Mikrocontroller hat Eingänge, die 5 V tolerieren).

Die zweite Taste ist unauffällig. Im Inneren des Prozessors wird ein Zug auf den Boden eingeschlossen, und der Knopf führt eine Einheit in die Leitung ein ...

Gehen Sie nahtlos zur schweren Peripherie über. USB



Der USB-Anschluss ragt aus dem Gerät heraus und statische Elektrizität kann dorthin gelangen. Es stellt sich heraus, dass es spezielle Mikroschaltungen (wie STF202-22) gibt, die Mikrocontroller vor äußeren Einflüssen schützen.

Aber noch etwas ist hier interessant. Im STF202-Chip, der zwischen dem VBUS-Zweig und der D + -Leitung angeschlossen ist, ist ein 1,5-k-Widerstand verborgen. Dieser Widerstand wird gemäß der USB-Spezifikation benötigt - er teilt dem Host mit, dass er in etwas steckt. In vielen Schaltkreisen ist dieser Widerstand immer zwischen der Stromversorgung und der D + -Leitung angeschlossen. Sobald der Host einen solchen Widerstand auf der D + -Leitung sieht, beginnt er sofort mit der Kommunikation mit dem Gerät. Dies ist nicht immer angemessen, da Einige Geräte sind möglicherweise nicht sofort für die Kommunikation bereit.

Dies ist nur mein Fall. Dafür gibt es einen einfachen Trick ( hier ausspioniert). Sie können diesen Widerstand mit einem Transistor ein- und ausschalten: Wir wollen Kommunikation - wir schalten den Widerstand ein, wir wollen nur über USB mit Strom versorgt werden - schalten Sie ihn aus. Wenn Sie Ihr Mobiltelefon an USB anschließen, fragt er normalerweise: „Was machen wir? Daten zusammenführen oder nur aufladen? “ - In Bezug auf die Elektronik geht es nur darum, einen Pull-up-Widerstand anzuschließen.

Aber woher wissen Sie, ob ein Gerät an USB angeschlossen ist? Zu diesem Zweck habe ich das Signal USB_PLUGGED bereitgestellt, das vom einfachsten Teiler entfernt wird.



5 V von USB können auch direkt in den Fuß des Mikrocontrollers eingespeist werden - sie sind immer noch 5 V tolerant. Aber lass es schon durch den Teiler sein.

Beschleunigungsmesser jetzt



Das Schema stammt aus einem Datenblatt. Das Modul ist über I2C verbunden, aber um dem Mikrocontroller zu signalisieren, dass es Neuigkeiten gibt, wird auch eine Interrupt-Leitung verwendet. Da der Drei-Volt-INA219 immer noch am selben I2C-Bus hängt, werden auch die Kommunikationszweige des Beschleunigungsmessers vom 3B-Bus mit Strom versorgt, um die Pegel zu koordinieren.

Ich habe bereits erwähnt, dass ich Energie sparen und unbenutzte Geräte ausschalten möchte. Die Beschleunigungsmesserleistung wird also vom Transistor eingeschaltet.

Das sogenannte hat mir übrigens sehr gut gefallen digitale Transistoren - ein Transistor mit zwei Widerständen. Dies spart etwas Platz auf der Platine. Es ist nur schade, dass ich mit einer Zwei-Volt-Leistung keinen digitalen Transistor mit mindestens einem anständigen Strom aufnehmen konnte - maximal 20-30 mA. Daher mussten unersättlichere Verbraucher mit MOSFETs verbunden werden.

Gehen Sie weiter GPS



GPS befindet sich auf einer separaten Karte und ist über einen Loopback verbunden. Da ich mich noch nicht für das GPS-Modul entschieden habe, habe ich 2 verschiedene Netzteile bereitgestellt. Neben dem Leistungstransistor auf der Prozessorkartenseite gibt es nichts Interessanteres.

Ich sage nur ein paar Worte zu UARTs. Ursprünglich wollte ich alle 3 verwenden - eine zum Hochladen von Firmware und zum Debuggen, die zweite für GPS und die dritte für Bluetooth. Es stellte sich jedoch heraus, dass sich UART3 auf denselben Pins befindet wie I2C Nr. 2, das ich ursprünglich für das Display verwenden wollte. Ich musste wählen. Als Ergebnis kam ich zu dem Schluss, dass ich Firmware hochladen und über denselben UART debuggen kann, der für GPS reserviert ist (natürlich muss GPS deaktiviert werden). Nun, wenn Sie das GPS selbst debütieren müssen, dh USB CDC (in das Sie Protokolle hochladen können) und SWD. Wenig später gab ich die Idee der Verwendung von I2C Nr. 2 auf, sodass UART3 kostenlos wurde, aber im Namen des Batteriesparens entschied ich mich, mich auf zwei UARTs zu konzentrieren.

Bluetooth



Bluetooth ist gemäß dem Schema aus dem Datenblatt verbunden. Pin PIO1 kann in zwei Modi betrieben werden. Im ersten Fall wird eine LED daran angeschlossen und das Modul blinkt mit dieser LED. Unterschiedliche Winks bedeuten unterschiedlichen Status. In einem anderen Modus arbeitet dieser Pin als digitaler Pin - einer, wenn die Kommunikation hergestellt ist, und 0, wenn nicht. Die Modi werden während der Modulinitialisierung durch AT-Befehle umgeschaltet.

SD-Karte

Obwohl das SD-Kartenverbindungsschema Standard ist, war es aus irgendeinem Grund für mich sehr schwierig. Es gibt zu viele verschiedene Verbindungsoptionen im Internet und es ist nicht so einfach zu verstehen, welche richtig ist.



Zum größten Teil hatte ich Fragen in Buchsen. Gelegentlich gibt es Schemata, bei denen Widerstände in 1k gesetzt werden. Einige Schaltkreise setzen 22 Ohm Widerstände ein, anscheinend als Schutz gegen statische Aufladung. Trotzdem bieten die meisten Schaltkreise keine Durchgangswiderstände an, und ich werde wahrscheinlich den gleichen Weg gehen. Ich werde seitdem auch keine Statik mehr haben Das Flash-Laufwerk befindet sich im Gehäuse.

Der Leistungstransistor, so scheint es mir, wird auch nicht gefragt sein, ich denke, die Karte wird immer funktionieren - es ist ein Logger. Aber da dies ein Testboard ist, lass es sein. Das Gleiche gilt für die Spule - anscheinend wurde diese Aufnahme in das Original paranoid gemacht, oder die Karte wurde in einer Umgebung mit geringer Leistung oder Interferenz verwendet. Ich denke dort einen Nullwiderstand anzulöten und ohne Spule zu versuchen.

Anzeige

Ich hatte die Möglichkeit, eines der Anzeigemodule über SPI mit ali zu verbinden und mit der Verbindung über I2C zu vergleichen.Es gab keine besonderen Schwierigkeiten und der Code musste nur geringfügig verschwendet werden. Gleichzeitig ist die Geschwindigkeit von SPI um eine Größenordnung höher als die von I2C. Nachdem ich die Daten aus dem Datenblatt zum Verbrauch (4 mA für SPI gegenüber 10 mA für I2C) und der Notwendigkeit von Pull-up-Widerständen für I2C hinzugefügt hatte, entschied ich mich, das Display über SPI anzuschließen.



Leider wird das BS0-Signal nicht an die Anzeigeschleife ausgegeben, und daher können Sie den 3-Draht-SPI-Modus nicht auswählen, sondern nur 4-Draht-SPI. Die Differenz in der zusätzlichen D / C-Leitung (Daten / Befehl), die im 3-Draht-Modus durch das neunte Bit der SPI-Daten übertragen wird. Vielleicht ist der 4-Draht-Modus jedoch zum Besseren, weil SPI in STM32 kann nur 8 Bit übertragen.

Der Rest des Schemas entspricht dem Datenblatt.

Und schließlich der Quietscher. Nichts Besonderes - einfach über den Transistor einschalten.



Für den Fall, dass anstelle eines Hochtöners ein Vibromotor vorhanden sein sollte, habe ich eine Schutzdiode bereitgestellt. Ich habe jedoch die Meinung gehört, dass eine Schutzdiode auch den Hochtöner nicht verletzt.

In Eisen


Oben habe ich meine Gedanken zum Thema Korps beschrieben. Tatsächlich habe ich sogar versucht, ein Brett für diesen Fall zu züchten. Leider war das Board zu eng. Ich musste zweiseitig installieren und von den Komponenten 1206 auf 0805 wechseln, aber trotzdem waren die Komponenten auf der Platine sehr dicht. Darüber hinaus war jede Änderung des Schemas ein Schmerz, weil Ich musste fast die Hälfte des Brettes neu züchten.

Also habe ich einige Wochen mit ihr herumgespielt, aber der Vorstand hat mich besiegt und ich habe das Projekt für fast ein Jahr aufgegeben. Kick wurde hier in diesem Artikel . Aber wirklich, dies ist nur ein Prototyp und der erste von mehreren. Warum sollten Sie sich mit einer superkompakten Platine beschäftigen, bei der Sie nicht mit einem Lötkolben oder einem Oszilloskop kriechen können, wenn Sie alles auf einer großen Platine debuggen können?

Nun, Sie müssen kein so großes Board wie ein iPhone herstellen, aber es ist durchaus möglich, in die werblichen 100 x 100 mm 2 Schichten von JLCPCB einzusteigen. Sie können sich praktisch einschränken. Auf der Platine befindet sich also ein riesiges 2,42-Zoll-Display, Steckbrücken zur Messung des Verbrauchs über alle Stromleitungen, Leistungskondensatoren, wo Sie sie benötigen und nicht benötigen, und im Allgemeinen eine Reihe von Teilen, die nicht installiert werden konnten. Es ist noch ein Platz frei.





Es ist in der Fotoansicht




Über die Verkabelung gibt es nicht viel zu erzählen. Ich teilte die meisten Signal- und Feldlinien entlang der oberen Schicht, während die untere fast vollständig unter der Erde vergraben war. Leider stellte sich heraus, dass das Layout immer noch ziemlich dicht war und einige Signalleitungen entlang der unteren Schicht durch die Hälfte der Platine gezogen werden mussten. Aus diesem Grund wird das Land stellenweise in mehrere lose miteinander verbundene Inseln "zerrissen". Ich hoffe das ist kein Problem.

Ich habe die Erde nicht unter der Bluetooth-Antenne gemacht, aber ich musste trotzdem eine der Signalleitungen durch diese Zone ziehen. Dies ist jedoch die BT_ON-Leitung, entlang der die Signale häufig nicht laufen (sie wird dort entweder ein- oder ausgeschaltet), was bedeutet, dass sie das Signal nicht besonders beeinflussen sollte.

Der Sommer kam und ich hatte vor, die Miete in den Urlaub mitzunehmen. Damit Dienstmädchen in Hotels keine Angst vor einem bloßen Debugging-Board mit einem Kabelventilator haben, wäre es schön, es in dem Fall zu verstecken. Ich konnte mir das Vergnügen nicht verweigern und entwickelte gleichzeitig den Fall und das Board. Es gab also Montageplatinen im Gehäuse, auf denen der Displayhalter montiert war.

Das GPS-Modul besteht aus mehreren Platinen und einer 12 mm dicken Antenne. Ich beschloss, es nicht oben auf das Brett zu haken, sondern auf die gleiche Ebene zu legen. Dies reduzierte die Dicke des Gehäuses, biss jedoch eine Ecke der Platte ab.

Ein paar Fotos von der Tafel und dem letzten Gerät (in dieser Phase des Projekts).







Der Akku passt gut unter das Display, aber ich musste eine kleine Box machen, um das Display näher an die obere Abdeckung zu heben.

Ein paar Worte auf dem Montagebrett. Ich habe alles an ungefähr drei Abenden gelötet, und ungefähr eine Woche am Abend habe ich gemächlich gebraucht, um von der Softwareseite aus zu debuggen und zu überprüfen. Zu meiner Überraschung gab es keine grundsätzlichen Schwierigkeiten beim Einrichten des Boards und fast alles begann so, wie es sollte.

Es stellte sich heraus, dass das Löten von 0805 nicht viel schwieriger zu löten war als 1206, es ist zu Hause mit einer Lupe ziemlich essbar. Sie können sogar bei 0603 schwingen. Aber mit dem Löten des Mikrocontrollers und des Displayanschlusses (sie haben einen Abstand von 0,5 mm) musste ich basteln. Auf YouTube sieht es für die Leute irgendwie so aus - ich habe es nur mit einem Lötkolben verbracht und das wars, aber alle meine Schlussfolgerungen blieben sofort hängen.

Nicht ohne kleinere Probleme. An einigen Stellen gab es kein Trinken, irgendwo gab es einen „Rotz“. Der Platzbedarf für den USB-Anschluss stellte sich als falsch heraus - er hatte einen Schritt der Schlussfolgerungen, der weniger als notwendig war (also vertrauen Sie nach diesen Fußabdrücken aus dem Internet!). Ich musste die Schlussfolgerungen ein wenig biegen, damit sie auf die Strecke kamen. Es stellte sich heraus, dass der bei Ali gekaufte FPC- Display- Anschluss mit den Kontakten unten übereinstimmt, während ich ihn mit den Kontakten oben benötigte (ich hatte zuvor keinen solchen Unterschied vermutet). Ich musste den Stecker von der Standardanzeigetafel „abblasen“.

Nachdem ich die Platine in das Gehäuse gesteckt hatte, stellte sich heraus, dass es nicht möglich war, die Batterie durch einfaches Herausziehen des Steckers zu trennen, aber ich wollte die debuggte Platine nicht unter Spannung lassen. Ich musste einen Schalter betätigen.

Beim Einrichten der Karte stellte sich heraus, dass es keinen Erdungskontakt gibt, an dem Sie die Sonde am Oszilloskop befestigen könnten. Ich musste mich mit einem Krokodil an den USB-Anschluss klammern. In der nächsten Version des Boards müssen Teststandorte bereitgestellt werden.

Schaltungen zeigten auch Probleme. Es war also eine völlig unerwartete Tatsache, dass der PT1502-Chip am RESET-Pin eine Spannung von 3 V erzeugt (ich war mir völlig sicher, dass es so etwas wie einen offenen Kollektor gab). Infolgedessen leckten diese 3 V an die Stromleitung, obwohl ich vorhatte, dort nur 2 V zu haben.

Hier ist ein vereinfachtes Diagramm dessen, was passiert ist.


Dank des großartigen Verstandes und der Leute von easyelectronics.ru wurde diese Verbindung durch Hinzufügen einer Diode entschieden. Nach einer kleinen Operation funktionierte dieser Teil wie es sollte.

Außerdem habe ich das Bluetooth-Modul (mit 2,5 V versorgt) versehentlich an die Hauptstromversorgung (2 V) angeschlossen, anstatt an die festen 3 V. Jetzt kann das Bluetooth für mich nur funktionieren, wenn USB angeschlossen ist und die Spannung der Hauptstromversorgung auf 3,3 V ansteigt.

Im Prinzip wäre es möglich, das Skalpell zu bewegen und das Bluetooth mit der richtigen Leistung zu verlöten, aber der UART2, an den das Bluetooth angeschlossen ist, ist nicht tolerant gegenüber 5 V (er selbst hat es im Datenblatt in der Analysephase gelesen, er selbst hat dies im obigen Text notiert und schließlich beim Verdrahten der Platine vergessen ) Daher ist das Anschließen des Bluetooth an die Stromversorgung höher als die Leistung des Mikrocontrollers ... In der nächsten Version der Karte verbinde ich das Bluetooth einfach mit einem anderen UART.

Der DC-DC-Wandler mit variabler Spannung funktionierte ebenfalls wie geplant - wenn er von einer Batterie gespeist wird, gibt er 2 V ab, und wenn Sie den USB anschließen, steigt er auf 3,16 V (Sie müssen mit den Nennwerten spielen und 3,3 V erreichen). Aber hier ist noch ein Fehler der Schaltung herausgekommen: Sie müssen auch in der Lage sein, die Spannung zu erhöhen, wenn sie vom Programmierer mit Strom versorgt werden. Ich denke, dies wird durch Hinzufügen einer weiteren Diode behandelt. Ich werde versuchen, etwas später zu spielen.

Schließlich verstand ich während der Arbeit an der Platine immer noch nicht, wie man die SD-Karte richtig gegen Unterspannung versorgt. Ein kurzes Googeln führte zu nichts. Anscheinend müssen Sie sich mit dem Lesen von Spezifikationen für enge Seiten befassen (die außerdem teilweise geschlossen sind). In der Zwischenzeit habe ich R7 kurzgeschlossen und die Karte wird jetzt von einer festen 3,16 V (3,3 V) gespeist. Ich werde es für die nächsten paar Monate so lassen, während ich am Software-Teil arbeiten werde.

Apropos Software. Überraschenderweise (obwohl durchaus erwartet), aber im Allgemeinen lief alles ohne Probleme an. Da ich zwischen Mikrocontrollern der gleichen Serie (von F103CB zu F103RC) gewechselt habe, musste ich den Softwareteil nicht ändern. Korrigierte nur die Pin-Nummern, fügte aber den Einschluss von Transistoren hinzu. Trotzdem gab es 2 nicht triviale Momente, an denen ich basteln musste.

Der erste ist Batteriestrom. Ich habe das Board mit USB-Strom getestet und alles hat im Allgemeinen gut funktioniert. Aber das Board wollte den Akku nicht dauerhaft einschalten. Das heißt,Es kann funktionieren (wenn Sie es einschalten, während der USB-Anschluss angeschlossen ist, und dann das Kabel herausziehen), aber es funktioniert nicht, wenn Sie mit einem kalten Kabel beginnen.

Entsprechend dem Design des PT1502-Chips sollte die Platine so beginnen. Der Benutzer drückt die BTN1-Taste und nach einer Drittelsekunde schaltet der Chip alle Stromquellen ein. Wenn alles in Ordnung ist, gibt der PT1502 das RESET-Signal „frei“ und startet so den Mikrocontroller. Der Prozessor setzt seinerseits das Signal PWR_HOLD auf eins und signalisiert, dass es gestartet wurde. Danach versorgt der PT1502 den Stromkreis regelmäßig mit Strom, bis der Mikrocontroller das Signal PWR_HOLD auf Null senkt.

Das ist aber theoretisch. Sobald der Prozessor das PWR_HOLD-Signal gesetzt hat, wurde die Karte sofort ausgeschaltet. Ich schaufelte den gesamten Stromkreis, schaute auf die Wellenformen der Hauptsignale, mischte den Code im Bootloader hin und her, aber ich konnte das Problem nicht verstehen. Ich habe auch wegen des Fehlens eines Pulldown-Widerstands in der PWR_HOLD-Leitung gesündigt, den ich vergessen habe zu installieren, aber er wird von einem Datenblatt empfohlen (und höchstwahrscheinlich wird er noch benötigt). Das Hinzufügen mit einem Baldachin löste das Problem jedoch nicht. Und erst als ich ein Vierkanal-Oszilloskop verlieh, wurde alles klar.



Wenn der Benutzer die Taste drückt (orange Linie), schaltet der PT1502-Chip die Stromversorgung ein (lila Linie). All dies geschieht lange (300 ms) vor den Ereignissen auf dieser Wellenform. Und dann passiert etwas Interessantes. PT1502 gibt RESET (blaue Linie) frei, der Prozessor startet und senkt aus irgendeinem Grund die Tastenlinie auf Null. Obwohl der Mikrocontroller immer noch versucht, die POWER_HOLD-Leitung (grüne Linie) anzuheben - es ist zu spät, hat der PT1502 bereits alle Stromquellen ausgeschaltet. Dann gibt es noch ein paar Krämpfe, aber die Schaltung stirbt immer noch leise.

Die Frage ist, woher kommt die Null auf dem Knopf? Der springende Punkt ist ein unauffälliger Fehler im Bootloader , aufgrund dessen das BTN1-Bein in den Ausgabemodus versetzt wurde (möglicherweise traten in diesem Moment auch auf anderen Beinen Wunder auf) und dort ein niedriges Signal auftrat.

Was sonst noch zu kämpfen hatte, ist die SD-Karte. Es gab einfach kein SDIO-Modul im alten Mikrocontroller, also musste ich dieses Stück von Grund auf neu studieren. Ich habe fast den ganzen Tag damit verbracht, eine Karte zu erstellen, Codeteile aus Beispielen im Internet zu kopieren und was CubeMX generiert hat. Obwohl die Karte auf einem Computer perfekt lesbar war, wollte sie dauerhaft nicht in meiner Schaltung starten. Ich habe wegen schlechtem Löten, falsch ausgewählten Pull-up-Widerständen, ungeschickten Schaltkreisen und falsch interpretiertem Datenblatt gesündigt. Zu meiner Überraschung startete jedoch problemlos eine andere Karte mit demselben Code und demselben Board. Es wird notwendig sein, dieses Problem genauer zu untersuchen.

Es gab ein weiteres Problem mit der Karte. Ich stocherte mit einem Oszilloskop in verschiedenen Zeilen und sah Aktivität nur auf der D0-Leitung, während auf D1-D3 Stille herrschte - die Karte arbeitete im Einzelbitmodus. In HAL wurde sogar die Funktion HAL_SD_ConfigWideBusOperation () gefunden, die den 4-Bit-Übertragungsmodus aktivieren kann. Als die Karte in den 4-Bit-Modus geschaltet wurde, gingen die SDIO-Peripheriegeräte leider in den Deep RX FIFO Overrun und funktionierten nicht mehr.

Das Problem stellte sich als sehr interessant heraus. Es stellte sich heraus, dass es in der Funktion HAL_SD_ReadBlocks () eine bestimmte Schleife gibt, die die SDIO-Flags abfragt. Wenn neue Daten von der Karte ankommen, überträgt dieser Code die Bytes vom internen FIFO-Puffer in den Benutzerspeicher. Die Karte hat also Bytes so schnell übertragen, dass der Code in HAL_SD_ReadBlocks () einfach keine Zeit hatte, die Daten zu übertragen. Ich musste die Taktfrequenz der Karte vorübergehend senken. Nun, in Zukunft werde ich DMA verwenden und ein solches Problem sollte im Prinzip nicht auftreten.

Fazit und nächste Schritte


Diejenigen, die an diesem Ort erwartet haben, das fertige Gerät zu sehen, werden mich enttäuschen müssen - nur das Testboard ist fertig und sogar das, nur das Stück Eisen. Jetzt müssen Sie ihm Leben einhauchen, die Programmierung durchführen, die Modi und den Verbrauch optimieren. Schreiben Sie tatsächlich einen Protokollierungscode - deshalb wurde das gesamte Projekt gestartet.

Trotzdem ist diese Etappe für mich persönlich eine sehr große und wichtige Leistung. Elektronik ist nicht meine Spezialität und ich bin sehr froh, dass das Gerät überhaupt gestartet wurde. Ich habe es geschafft, genug zu pumpen, um Schaltkreise zu entwerfen, mehrere Geräte zusammenzubringen, die Platine zu verdrahten, Komponenten auszuwählen und vieles mehr.

Ich werde ein anderes Mal über den Softwareteil sprechen. Sowie über die Nuancen der Einstellungen. Tatsache ist, dass diese gesamte Füllung zuerst wiederbelebt und getestet werden muss. Im Moment haben wir es geschafft, alle Geräte auf dem Board zu starten (außer dem Hochtöner), aber nur in der Menge von "es hat begonnen und reagiert irgendwie". Es wurde noch keine Verarbeitungslogik geschrieben.

Pläne für die nahe Zukunft:

  • Fahren Sie die Elektronik in verschiedenen Modi und prüfen Sie, ob die Schaltung noch funktioniert. Behebung von Pfosten in der zweiten Version des Boards
  • Messen Sie den Verbrauch der gesamten Peripherie und finden Sie Möglichkeiten zur Optimierung des Verbrauchs.
  • Stellen Sie mehrere Kartenoptionen auf verschiedenen Mikrocontrollern zusammen (z. B. L152 oder L433).
  • Lesen Sie die SD-Spezifikation sorgfältig durch und finden Sie heraus, wie Sie die Karte im Niederspannungssignalisierungsmodus (1,8 V) richtig anschließen.
  • Probieren Sie verschiedene GPS-Module aus und entscheiden Sie schließlich, welches ich als nächstes verwenden werde
  • Bestellen Sie einen separaten Kompass-Chip (z. B. HMC5883L oder HSCDTD008A) und versuchen Sie, ihn irgendwie zu verwenden
  • Führen Sie ein internes Code-Refactoring durch und aktualisieren Sie alle wichtigen Bibliotheken, beginnend mit HAL
  • Beginnen Sie schließlich mit dem Schreiben von Funktionen. Implementieren Sie tatsächlich, wofür das Gerät bestimmt war

Erlauben Sie mir, mich zu verabschieden. Ich wäre dankbar für konstruktive Kommentare, Ideen und Ratschläge zum Schaltungsdesign und zum Leiterplattenlayout.

Quellen: -

Code
Urladercodes
Plata
Gehäuse

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


All Articles