Forum: Mikrocontroller und Digitale Elektronik Feedback Schaltplan STM32G0


von Ben K. (bkaiser)


Angehängte Dateien:

Lesenswert?

Hallo,

getrieben aus purer Langeweile (auch sowas soll vorkommen) bin ich auf 
der Suche nach Herausforderungen heute über ein paar STM32G031 
gestolpert, die hier noch rumliegen. Die Gunst der Stunde wollte ich 
nutzen um mich in einem kleinen Projekt ein wenig intensiver damit zu 
beschäftigen. Gesagt getan, Schaltplan ist in der ersten Version fertig. 
Das ganze Projekt soll ein kleiner Reflow Controller werden (ohne 
Anspruch es mit professionellem Equipment aufzunehmen). Bevor ich mich 
jetzt an das Layout der Platine mache, würde ich mich freuen Feedback 
zum Schaltplan zu bekommen (ja, evtl. sortiere ich ihn noch mal um). 
Fällt euch direkt etwas auf, dass meine müden Augen übersehen haben (ich 
habe z.B. in der Vergangenheit im Eifer des Gefechts mal VSS und VDD 
verwechselt ^^)?

Unabhängig davon hab ich aber auch noch ein paar konkrete Fragen:

1) Ich bin mir unsicher bei dem Bootmode Selektor (CH340->RTS und 
DTR->NRST und BOOT0) angeht. Hab hier verschiedene Lösungen gefunden und 
bin nicht sicher ob es Timingmässig so funktioniert. Hat hier ggf. 
jemand eine funktionierende Schaltung die er empfehlen kann?

2) Ich würde gerne den internen Oszillator des STM32 nutzen. Soll ich 
die unbenutzten Pins 2 und 3 floaten lassen oder auf GND ziehen?

3) Kann ich bei der Schaltung mit dem MAX6675 noch etwas verbessern? 
Laut Datenblatt nicht...

4) Empfehlungen an welchen Stellen ich noch TVS Dioden setzen sollte? 
Ist U2 sinnvoll oder Platzverschwendung?

5) SWCLK teilt sich den Pin wohl mit BOOT0. Reicht es hier einfach mit 
dem SWD Pinheader zu verbinden oder muss man etwas beachten?

Herzlichen Dank für jegliches Feedback,

Ben

von Markus M. (adrock)


Lesenswert?

AN5096 (Getting started with STM32G0) Kapitel 6.1 (Reference Design).

Du kannst ja bei unbenutzten Eingängen den internen Pullup aktivieren:

"To increase EMC performance and avoid extra power consumption, unused 
clocks, counters or I/Os, should not be left free. I/Os should be 
connected to a fixed logic level of 0 or 1 by an external or internal 
pull-up or pull-down on the unused I/O pin. The other option is to 
configure GPIO as output mode using software. Unused features should be 
frozen or disabled, which is their default value."

: Bearbeitet durch User
von Ben K. (bkaiser)


Lesenswert?

Danke, hab Pin 2 und 3 nun erst mal auf GND gezogen. :-)

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Den SWD Stecker wuerde ich in einer Reihenfolge machen, wie sie auch 
woanders verwendet wird. Bei den STM Boards ist das 1=VCC 2= SWCLK 3 = 
GND 4 = SWDIO ( und 5 = Nrst, 6 = TDO/SWO).

von Ben K. (bkaiser)


Lesenswert?

Erledigt, danke! :-) Ich hab mich an meinem ST-Link V2 orientiert.

Uwe B. schrieb:
> Den SWD Stecker wuerde ich in einer Reihenfolge machen, wie sie auch
> woanders verwendet wird. Bei den STM Boards ist das 1=VCC 2= SWCLK 3 =
> GND 4 = SWDIO ( und 5 = Nrst, 6 = TDO/SWO).

von Bauform B. (bauformb)


Lesenswert?

1) Die Unsicherheit kommt daher, dass RTS und DTR vom PC-Betriebssystem 
gesteuert werden. Deshalb kann es nicht zuverlässig funktionieren. Auch 
das Timing wird auf dem PC gemacht, das betrifft deine Platine nicht.

Auf jeden Fall darf an PA14 kein Pull-Up. Mit R8 würde SWD nicht 
funktionieren. SWD hat einen internen Pull-Down. Und BOOT0 sollte 
normalerweise Low sein, mit R8 würde immer der Bootloader starten. Oder 
nicht -- man muss wahrscheinlich den Pin erstmal per Option-Bit von GPIO 
auf BOOT umprogrammieren.

SWC hat einen internen Pull-Up, die 10k vom Taster passen also.

RESET sollte mit einem Open Collector angesteuert werden oder mit 
Längswiderstand vom CH340. Kann es sein, dass Q3 eigentlich an RESET 
sollte und nicht an BOOT0? Aber, wie gesagt, rechne mit unkontrollierten 
Resets, auf jeden Fall beim booten und runterfahren des PCs.

RESET sollte auch auf den SWD-Stecker gehen. Man braucht es nicht immer, 
aber wenn... Der "genormte" SWD-Stecker¹ hat 10pins, RM1.27mm. Ich mag 
den 3221-10-0100-00 von CNC-Tech².

2) floaten lassen, als GPIO Output und Low programmieren. Evt. möchtest 
du doch mal einen Oszillator anklemmen.

3) Man könnte evt. VCC mit einer Ferritperle entkoppeln. An CS gehört 
ein Pull-Up. An SCK und SO eigentlich auch, aber wer verträgt schon 
soviel Luxus. Weil du den UART-Bootloader benutzen willst, läuft der 
STM32 längere Zeit mit hochohmigen Pins.

4) Glaubenssache, manche Leute spendieren jedem Taster eine. Ich würde 
bei Platzmagel die U2 an den I2C-Stecker verlegen. USB-Chips sind 
empfindlich, aber STM32 sind empfindlicher.

5) siehe 1)

[1] https://documentation-service.arm.com/static
[2] 
https://www.digikey.de/de/products/detail/cnc-tech/3221-10-0100-00/4878932?s=N4IgTCBcDaIIxwOwFYC0SDMHUDkAiIAugL5A

: Bearbeitet durch User
von Ben K. (bkaiser)


Lesenswert?

Hey,

danke für das ausführliche Feedback! Ich hab den Reset Schaltplan 
hierher:

https://ee-paper.com/how-to-make-stm32-mcu-realize-automatic-isp-download/

China-Englisch... etwas schwer zu lesen. Klang aber generell jetzt nicht 
verkehrt, werde das aber noch mal genau durchdenken.

Mit freundlichen Grüßen,

Ben

Bauform B. schrieb:
> 1) Die Unsicherheit kommt daher, dass RTS und DTR vom PC-Betriebssystem
> gesteuert werden. Deshalb kann es nicht zuverlässig funktionieren. Auch
> das Timing wird auf dem PC gemacht, das betrifft deine Platine nicht.
> ...

von Bauform B. (bauformb)


Lesenswert?

Ben K. schrieb:
> Klang aber generell jetzt nicht
> verkehrt, werde das aber noch mal genau durchdenken.

In der chinesischen Schaltung wird der Pin aktiv auf GND gezogen. Für 
BOOT ist die Logik richtig, und funktioniert bei den meisten STM32 auch, 
weil die einen extra Pin für BOOT0 haben. Dein G031F benutzt den Pin 
aber auch für SWD und das Signal wird nach GND kurzgeschlossen.

Wenn man den NPN- durch einen PNP-Transistor ersetzt und R8 ein 
Pull-Down wird, sollte es funktionieren. Der PNP würde im Ruhezustand 
nicht angesteuert und SWD sieht nur den (zusätzlichen) Pull-Down.

https://ee-paper.com/how-to-make-stm32-mcu-realize-automatic-isp-download/
schrieb übrigens:
1
Note: when ch340 is just powered on, it takes several seconds
2
to stabilize. During this period, the DTR pin will be lowered
3
twice or three times, which will cause the MCU to reset two or
4
three times after power on, and the program operation will not
5
be affected after stability. If you don’t want the MCU to be
6
powered on and reset several times, disconnect the DTR and
7
reset when powered on.
Ich weiß schon, warum ich diese RTS/DTR-Mimik nicht verwende...

von Ben K. (bkaiser)


Angehängte Dateien:

Lesenswert?

Hallo,

meinst du so, wie im Anhang? Oder habe ich etwas falsch verstanden?

Mal an einem Beispiel durchgehen:

RTS > Über Schaltung (Anhang) an BOOT0
DTR > Direkt an RESET

Beim CH340 sind RTS und DTR im Normalzustand High und gehen bei 
Aktivierung Low. Das Bedeutet im Normalbetrieb mit der Schaltung im 
Anhang: BOOT0 = LOW, RESET = HIGH.

Arduino macht nun beim Upload folgendes:

-RTS and DTR go LOW
-DTR goes HIGH
-DELAY
-RTS goes HIGH

> RTS and DTR go LOW
Bedeutet: RESET geht auf LOW, der STM32 führt einen Reset aus. BOOT0 
geht gleichzeitig auf HIGH (BOOT0 = 1 wie es soll)

>DTR goes HIGH
Bedeutet: RESET geht auf HIGH (Reset trigger beendet). BOOT0 bleibt 
weiter auf HIGH (1)

>DELAY
Konnte leider nicht finden wie lange, wird aber nur ein Bruchteil sein.

>RTS goes HIGH
Bedeutet: RESET weiterhin auf HIGH, BOOT0 geht wieder auf LOW.

Wenn mich nicht alles täuscht, alles so wie es soll, oder? SWD sollte 
nach meinem Verständnis dann auch funktionieren, da wie du gesagt hast 
für SWD ja nur der Pulldown "sichtbar" ist wenn RTS auf HIGH ist.

Ich habe das ganze mal in LTSpice ausprobiert und bei BOOT0 kommen mit 
der Schaltung nur 2.5V an. Liegt es am generischen Modell des PNP 
Transistors oder ist der Verlust wirklich 0,8V? Oder liegt es an 
falschen Werten bei den Widerständen? Ich würde jetzt einen S8550 PNP 
Transistor nehmen, passt das?

https://datasheet.lcsc.com/lcsc/2112031830_FOSAN-SS8550LT1-Y2_C2926168.pdf

@Bauform B: Wirklich herzlichen Dank für die Hilfe, wieder einiges 
gelernt! :-)

Mit freundlichen Grüßen,

Ben

Bauform B. schrieb:
> Wenn man den NPN- durch einen PNP-Transistor ersetzt und R8 ein
> Pull-Down wird, sollte es funktionieren. Der PNP würde im Ruhezustand
> nicht angesteuert und SWD sieht nur den (zusätzlichen) Pull-Down.

von Bauform B. (bauformb)


Lesenswert?

Ben K. schrieb:
> -RTS and DTR go LOW
> -DTR goes HIGH
> -DELAY
> -RTS goes HIGH

Der Ablauf sieht vernünftig aus.

Ben K. schrieb:
>>DELAY
> Konnte leider nicht finden wie lange, wird aber nur ein Bruchteil sein.

RESET wird normalerweise mit Open Collector und dem internen Pull-Up 
angesteuert. Mit dem 100n nach GND dauert es 55k mal 100n mal 
Angstfaktor bis der STM32 merkt, dass RESET High ist. Dann braucht er 
400us bis zum ersten Befehl. BOOT wird innerhalb dieser 400us abgefragt. 
Also sollte DELAY länger als 10ms sein.

Wenn der CH340-Ausgang direkt mit dem NRST-Pin verbunden wird, stimmt 
das alles nicht mehr. Bei einem Watchdog-Reset kommt es darauf, welcher 
Ausgang stärker ist, CH340 oder STM32. Der einfachste Kompromiss ist 
wohl eine Schottky-Diode zwischen DTR und NRST. Damit wird DTR praktisch 
zum Open Collector Ausgang.

Ben K. schrieb:
> Ich habe das ganze mal in LTSpice ausprobiert und bei BOOT0 kommen mit
> der Schaltung nur 2.5V an.

Die Spannungsquelle gehört mit - an GND, vielleicht wird es dann besser. 
Aber was macht der Kondensator? Noch dazu direkt am Ausgang, das ist 
Transistorquälerei. Oben schreibst du doch, dass Arduino DELAY erzeugt?

: Bearbeitet durch User
von Ben K. (bkaiser)


Angehängte Dateien:

Lesenswert?

Hallo,

Im Anhang die aktuelle Version. In der Datei "changes_schematic.png" hab 
ich die Änderungen zur letzten Version sichtbar gemacht.

Bauform B. schrieb:
> Wenn der CH340-Ausgang direkt mit dem NRST-Pin verbunden wird, stimmt
> das alles nicht mehr. Bei einem Watchdog-Reset kommt es darauf, welcher
> Ausgang stärker ist, CH340 oder STM32. Der einfachste Kompromiss ist
> wohl eine Schottky-Diode zwischen DTR und NRST. Damit wird DTR praktisch
> zum Open Collector Ausgang.
Ok, so wie ich den Vorschlag verstehe muss die Durchlassspannung der 
Schottky Diode niedrig genug sein, dass der CH340 den Pin zwar LOW 
ziehen kann, aber nicht HIGH setzen, oder? Ich habe noch ein bisschen 
Probleme das bei Dioden richtig zu berechnen bzw. einzuschätzen. Passt 
hier eine DS14W (Laut Datenblatt: Forward Voltage: 0,55V/1A)?

https://datasheet.lcsc.com/lcsc/1810121034_Shandong-Jingdao-Microelectronics-DS14W_C108809.pdf

> Die Spannungsquelle gehört mit - an GND, vielleicht wird es dann besser.
> Aber was macht der Kondensator? Noch dazu direkt am Ausgang, das ist
> Transistorquälerei. Oben schreibst du doch, dass Arduino DELAY erzeugt?
Es lag an der GND Verbindung und der Kondensator ist schon wieder weg, 
auch wenn ich Spaß am Quälen habe. ;-)

Mit freundlichen Grüßen,

Ben

von Bauform B. (bauformb)


Lesenswert?

Ben K. schrieb:
> Im Anhang die aktuelle Version. In der Datei "changes_schematic.png" hab
> ich die Änderungen zur letzten Version sichtbar gemacht.

Vorbildlich!
Aber du solltest NRST auf den Debug-Stecker legen. Weil du die SWD-Pins 
im Programm auf GPIO umprogrammierst, funktioniert SWD im normalen 
Betrieb nicht. Es geht nur, wenn der Debugger schon vorher die Kontrolle 
bekommt: "Connect Under Reset". Deshalb würde ich auch den OK- mit dem 
RIGHT-Button vertauschen, ich denke, auf den kann man am leichtesten 
verzichten (also im Notfall, während der Debugger den Pin benutzt).

Ben K. schrieb:
> Ok, so wie ich den Vorschlag verstehe muss die Durchlassspannung der
> Schottky Diode niedrig genug sein, dass der CH340 den Pin zwar LOW
> ziehen kann, aber nicht HIGH setzen, oder?

Ja, aber beim "HIGH setzen" ist die Diode ja nicht in Flussrichtung 
gepolt, also spielt die Spannung keine Rolle, da zählt der Reverse Bias 
Current. Der ist bei Schottky-Dioden immer sehr groß (DS14W: mA!), man 
muss ihn in jeder Anwendung berücksichtigen; hier geht es gerade noch 
gut.

Im normalen Betrieb liegen über der Diode Null Volt, also kein Problem. 
Wenn NRST low wird, z.B. bei einem Watchdog-Reset oder vom Debugger, 
fliesst grob geschätzt 1mA Leckstrom vom DTR zum NRST. Nicht perfekt, 
aber kein Problem. Uns rettet vor allen der große Unterschied zwischen 
unseren 3.3V und den erlaubten 40V der DS14W; siehe Fig.2 im Datenblatt.

Ben K. schrieb:
> der Kondensator ist schon wieder weg,
> auch wenn ich Spaß am Quälen habe. ;-)

Hobbies haben die Leute, also echt :)

von Ben K. (bkaiser)


Angehängte Dateien:

Lesenswert?

Hey,

anbei die aktuelle Version. Hab NRST nun endlich auf den SWD connector 
gelegt. ;-)

Ich habe beschlossen noch ein zweites SSR zu Unterstützen. Da die Pins 
beim STM32 zu neige gingen, hab ich ein bisschen umorganisiert. Zum 
einen liegt jetzt der Button Left auf dem SWD Pin (PA15) und zum anderen 
habe ich den Button Back auf den PC15 gelegt (was nach meinem 
Verständnis möglich ist, da der interne Oszillator genutzt werden soll).

Sollte jetzt nichts auffälliges mehr sein, würde ich mal zum PCB Design 
übergehen. :)

Mit freundlichen Grüßen,

Ben

von Bauform B. (bauformb)


Lesenswert?

Ben K. schrieb:
> Zum einen liegt jetzt der Button Left auf dem SWD Pin (PA15)

genau den meinte ich mit "RIGHT-Button". Die sollten Up- und Down-Button 
heissen, wer kann schon links und rechts unterscheiden ;)

> und zum anderen habe ich den Button Back auf den PC15 gelegt
> (was nach meinem Verständnis möglich ist, da der interne
> Oszillator genutzt werden soll).

kein Problem, die G0 haben schon den neuen Oszillator. Der ist stabil 
genug für UART, auch wenn's mal warm wird. Der PC14/PB9 ist übrigens 
auch noch frei.

Und der Pin 2 vom neuen Stecker wird vielleicht auch frei. Ich hab' 
keine Idee, wie kritisch ein Thermoelement in dieser Anwendung ist, ich 
weiss nur, dass es um Mikrovolts und um Thermospannungen geht. Deshalb 
war der extra Stecker (TH1) mit getrenntem GND garnicht verkehrt. Zum 
MAX6675 gibt es doch bestimmt einen Layout-Vorschlag mit Tipps, wie man 
Thermospannungen auf der Platine reduziert und wo genau die 
GND-Verbindung sein sollte und...

Was spricht eigentlich für den NCP1117? (Du hättest den C2 nicht ändern 
sollen; schlafende Hunde und so). Für mich vereinigt der die Nachteile 
vom 7800 und alten LDOs. Hoher Dropout, hoher Ruhestrom, Strombegrenzung 
über 2A und damit er nicht schwingt, soll der Ausgangskondensator 
typisch(?!) 33mΩ haben. Der 22uF kann ein Tantal sein, das passt, aber 
der 4u7 am STM32 ist wahrscheinlich niederohmiger.

Die Pinbelegung vom NCP1117 ist auch exotisch. Wenn er dann doch 
schwingen sollte, wird es schwer, eine Alternative zu finden. Ich kenne 
z.Zt. nur den MCP1799 als Alternative, mit der "normalen" Pinbelegung 
(die praktische, mit der Kühlfahne an GND).

Beitrag #6984120 wurde von einem Moderator gelöscht.
von temp (Gast)


Lesenswert?

Bauform B. schrieb:
> Was spricht eigentlich für den NCP1117? (Du hättest den C2 nicht ändern
> sollen; schlafende Hunde und so). Für mich vereinigt der die Nachteile
> vom 7800 und alten LDOs. Hoher Dropout, hoher Ruhestrom, Strombegrenzung
> über 2A und damit er nicht schwingt, soll der Ausgangskondensator
> typisch(?!) 33mΩ haben.

Die Krücke schwingt an normalen Keramikkondensatoren definitiv. Die 
Erfahrung musste ich auch schon machen.

von Markus M. (adrock)


Lesenswert?

Für Betriebsspannungen bis 6V und max. 250mA würde ich da auch was 
anderes nehmen, z.B. den MCP1700-3302.

von Ben K. (bkaiser)


Lesenswert?

Hey,

ich bin ganz ehrlich, ich versuche meine Bauteile immer nach Möglichkeit 
bei LCSC zu bestellen (nennt es Faulheit ^^, keine Ahnung warum es so 
ist). Bisher hatte ich mit dem NCP1117 noch keine Probleme, hab aber 
durchaus schon gehört das es welche geben soll.

Der MCP1700 ist aktuell leider nicht lieferbar. Falls jemand eine andere 
Empfehlung hat die bei LCSC lieferbar ist, würde ich mir das gerne 
anschauen. :-) Neben dem STM32G0, MAX6675 und einem kleinen EEPROM Modul 
wird noch ein kleines OLED display benutzt. Wie viel das zieht konnte 
ich leider noch nicht rausfinden.

https://lcsc.com/products/Linear-Voltage-Regulators-LDO_387.html

Mit freundlichen Grüßen,

Ben

von Markus M. (adrock)


Lesenswert?

Naja, wenns ein bisschen mehr sein soll: AP7215-33YG-13 (max. 600mA)

Allerdings möchte er am Eingang möglichst nicht mehr als 5.5V sehen 
(max. 6V).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.