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
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
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).
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).
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
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. > ...
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...
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.
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
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
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 :)
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
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.
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.
Für Betriebsspannungen bis 6V und max. 250mA würde ich da auch was anderes nehmen, z.B. den MCP1700-3302.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.