11. Januar 2021 · Kommentare deaktiviert für Herzlich Willkommen auf meiner Website! · Kategorien: Allgemein
Diese Website ist ein rein privates Projekt. Es verfolgt keinerlei kommerzielle Ziele. Deshalb werden von mir auch keine persönlichen Daten gespeichert. Deshalb kann sich auch niemand auf dieser Website anmelden und Kommentare hinterlassen. Der Provider (1blu.de) speichert die Verbindungsdaten für einen begrenzten Zeitraum.
Dieser Blog dient mir dazu meine Projekte zu dokumentieren und meine Erfahrungen damit festzuhalten. Er ist im Internet frei zugänglich, damit auch Andere von meinen Erfahrungen profitieren können. Schließlich muss nicht jeder das Rad selbst erfinden.
Mein Beiträge sind keine Bauanleitungen! Es besteht kein Anspruch darauf, dass die vorgestellten Projekte bei einem Nachbau funktionieren! Sollten dabei Schäden entstehen, so ist dafür der Nachbauer verantwortlich. Schließlich sollte jeder wissen was er tut. Ich schließe jede Haftung aus.
Die Beiträge können nur als Anregung angesehen werden.
Wenn Du mir etwas mitteilen möchtest, so schicke mir unter peter@peters-bastelkiste.de eine Email.
Namensräume bei mehreren hintereinander ausgeführten Scripts.
Version 1.11.8
Wenn 2 Scripte nacheinander ausgeführt werden ohne den ESP32 zwischenzeitlich neu zu booten, so sind im M5Stick C Plus die Namen der Objekte des zuerst ausgeführten Scripts im anschließend ansgeführten Script bekannt.
Beim M5STAMP Pico ist das nicht der Fall! offenbar wird vor dem Start des zweiten Scripts hier der Speicher geleert. Der freie Speicher war nach dem Ausführen von 2 Scripten genauso groß wie nach dem Ausführen nur des zweiten Scriptes. Das gilt nur für die REPL! Im Normalbetrieb sind in main.py die Objekte aus boot.py sichtbar.
libs.urequests beim M5ATOM Lite funktioniert nicht.
Beim M5Stick C Plus und beim M5STAMP Pico tut sie was sie soll.
Diese Seite ist noch nicht für die Öffentlichkeit nutzbar, da alles noch in der Entwicklung ist.
Die Umgebung erstellen.
Als Erstes müssen diese Dateien im Dateisystem des Gerätes erezugt werden. Dazu dient das Micropython Script mk_json.py. Dieses wird am Besten auf das Gerät kopiert. Dann im Editorfenster von Thonny geöffnet und die erforderlichen Daten eingetragen. Von Thonny aus wird es dann auf dem Gerät ausgeführt und erzeugt so die erforderlichen Dateien.
mk_json.py kann auch aus dem PC heraus ausgeführt werden. Dann besteht aber die Gefahr, dass falsche / alte Daten auf des Gerät gelangen, wenn man mit dem Script verschiedene Geräte vorbereitet.
Die erforderlichen Dateien:
Der OTA Updater benötigt einige Informationen, die ihm in verschiedenen Dateien bereitgestellt werden.
Diese Dateien sind meist im Json-Format gespeichert und haben dann die Endung .json.
Die Installationsroutine von Thonny lässt es nicht zu, 2 Versionen von Thonny auf einem Rechner zu installieren. Wenn schon ein Thonny-Verzeichnis, ggf. auch mit anderem Namen existiert wird immer dorthin installiert und die alte Version gelöscht.
Nun gibt es derzeit das Problem, dass die M5Stack Geräte nicht mit der Version 4 von Thonny zusammenarbeiten. Es gibt wohl ein Problem mit der Größe der übertragenen Blöcke. Das kann man durch einen Eintrag in einer Config-Datei umgehen – allerdings nur bis zum nächsten Neustart des M5Stack Gerätes. Deshalb hätte ich gerne die Versionen 4.x.x und 3.3.13 auf meinem Rechner.
Ich habe die neue Version (hier 4.0.2) auf dem Rechner installiert in einem Verzeichnis Thonny_4. Dann habe ich ein weiteres Verzeichnis mit dem Namen Thonny_3 angelegt. Dahinein habe ich das Zip-file der Portabelversion 3.3.13 entpackt.
Die Übersetzungen auf dieser Seite wurden mit DeepL.com vorgenommen und ggf. von mir korrigiert.
Es gibt verschiedene Stellen im Internet bei denen man Micropython für das Lilygo T-Device S3 finden kann. Zuerst beim „Original“ Micropython.org. Hier gibt es 3 Versionen für den S3
Zu beachten ist, dass die Startadresse beim ESP32-S3 0 ist. Beim ESP32 ist sie ansonsten 0x1000. Dieser Wert steht auch in vielen Anleitungen. Mir hat das mindestens einen Tag Probiererei gekostet, bis ich dahinter gekommen bin.
Ich brauche eine Elektronische Last mit der ich ein altes PC-Netzteil testen möchte. Von einem früherem Projekt habe ich noch einen großen Kühlkörper mit 18 x IFR540 darauf. Das Teil möchte ich als Basis nehmen.
Weitwinkel und Vorsatzlinse vertragen sich nicht so gut.
Vorüberlegungen
Umladezeit der MOS-FET-Gates
Um die Umladeströme der MOES-FET-Gatekapazitäten einzuschätzen habe ich ein bischen mit Thonny in Micropython auf einem ESP23 herumgespielt. Die folgeneden Berechnungen sind nicht exakt. Sie geben nur einen Überblick über die zu erwartenden Ströme:
>>> # Q = C*U
>>> # Q = I*t
>>> # c*u = i*t
>>> # i = (c*u)/t
>>> c = 2E-9 # max. Eingangskapazität des IRF540 [F]
>>> u = 12 # durchschnittliche Spannung am Gate [V]
>>> t = 1E-3 # Schaltzeit hier 1 ms [s]
>>> (c*u)/t
2.4e-05 # 24 µA
>>> t = 1E-6 # Schaltzeit hier 1 µs
>>> (c*u)/t
0.024 # 24 mA
>>> 12/0.024
500.0 # Widerstand bei 12 V und 24 mA = 500 Ohm
>>> 500 * 2E-9
1e-06 # Zeitkonstante 2nF und 500 Ohm zur Kontrolle
>>> (7*c*u)/t # Es sollen später 7x IRF540 parallel angesteuert werden
0.168 # 168 mA
>>>
Um später eine Lastumschaltzeit in der Größenordnung 1 µs zu bekommen muss an dem Gate jedes MOS-FET mindestens 24 mA fließen können.
Bei der ursprünglichen Planung habe ich die Transistoren BD649/650 vorgesehen. Inzwischen bin ich auf das komplementäre MOS-FET-Pärchen IRF7507 gestoßen, die hier geeigneter sein könnten.
Zuerst möchte ich mit nur einem MOS-FET anfangen und diesen als Last testen. Er soll einen Source-Widerstand von 0,1 Ohm / 0,5 Watt / 1% erhalten. Dieser kann maximal 2,2 Ampere vertragen. Das ist ein guter Ausgangspunkt.
Belastbarkeit der 0,1 Ohm Widerstände:
0,5 Watt, 2,2 Ampere, 0,22 Volt
10 Watt, 10 Ampere, 1 Volt
Für die Gesamtstrommessung befinden sich auf dem Kühlkörper auch noch 2 Messwiderstände 0,1 Ohm / 10 Watt / 0,5%. Damit lassen sich maximal 10 Ampere pro Widerstand messen, also gesamt 20 Ampere.
Die Transistoren bekommen später jeder einen 0,1 Ohm Widerstand in die Sourceleitung zum Ausgleich von Toleranzen. Somit kann jeder Transistor maximal 2,2 A fließen lassen.
Der 10 Watt Messwiderstand dient als Stromfühler. Er stellt den IST-Wert bereit. Bei 2,2 Ampere sind das 220 mV. Es macht wohl Sinn, diese Spannung zu verstärken, bevor sie mit der Referenzspannung verglichen wird.
Schaltwandler sind universelle Spannungversorgungseinheiten, die sich immer größerer Beliebtheit erfreuen und in den meisten Fällen den analogen Reglern vorgezogen werden, da sie wesentlich effektiver arbeiten. Leider erfolgt die Einstellung der Ausgangsspannung bisher immer noch analog mittels Potentiometer/Trimmer. Das ist ein Problem, wenn man die Ausgangsspannung mittels Microcontroller einstellen möchte. Ich habe mir drei Lösungsmöglichkeiten für dieses Problem angesehen:
Umschaltbare Widerstände
PWM
DAC mit externem Komparator
Hinweise zur Simulation
Ich habe die Simulationen mit dem kostenlosen LTspice XVII erstellt. Als Grundlage habe ich das Beispiel 1938.asc eingesetzt. Das habe ich ausgewählt, weil die Simulation damit relativ problemlos funktionierte. Es ist nur ein Beispiel und hat nichts mit dem später eingesetzten IC’s zu tun. Auch der Operationsverstärker OP07 ist nur ein Beispiel. Später werde ich eher den LM358 oder LM324 einsetzen. Diese sind aber bei LTspice nicht dabei.
Die Simulationen sind nur ein erster Versuch mit der Materie vertraut zu werden. Die wirklichen Ergebnisse werde ich später bei echten Aufbauten erhalten.
Die Bilder und Plots aus LTspice sind auf der Website nur sehr schlecht zu erkennen. Ein Linksklick mit der Mouse ins Bild zeigt es in voller Größe und dann ist auch alles gut zu erkennen.
Zum Nachvollziehen werde ich die Dateien am Ende der Kapitel anhängen, so dass Ihr sie herunterladen könnt.
Die Originalschaltung
In der Standardschaltung wird aus R1 und R2 ein Sapnnungsteiler gebildet der die Ausgangsspannung bestimmt.
Umschaltbare Widerstände
Noch nicht bearbeitet.
PWM
Noch nicht bearbeitet.
DAC mit externem Komparator
Die Schaltwandler IC’s besitzen einen eingebauten Komparator, der die mittels Spannungsteiler heruntergeteilte Ausgangsspannung mit einer internen Referenzspannung vergleicht und so den Schalttransistor ansteuert. Wenn eine externe Referenz möglich wäre, könnte man darüber die Ausgangsspannung mittels DAC einstellen. Da diese Möglichkeit nicht besteht, muss ein externer Komparator eingesetzt werden. Der besteht im einfachsten Fall aus einem Operationsverstärker. Der -Eingang wird mit dem DAC verbunden, der +Eingang mit der Ausgangsspannung und der Ausgang mit dem Feedback-Eingang (FB) des IC’s.
Im obigen Schaltbild befindet sich der Operationsverstärker in der Bildmitte (OP07). V2 entspricht dem DAC. Rechts habe ich mi I1 eine Impulsstromsenke hinzugefügt. So wird der Strom zwischen 200 mA und 1,7A hin und her geschaltet. Das habe ich eingefügt, weil mich das Regelverhalten der veränderten Schaltung interessiert.
Das Ergebnis der Simulation für 3,3 Volt ausgangsspannung ist im folgenden Plot dargestellt:
Die blaue Line zeigt die Ausgangsspannung, die rote Linie den Ausgangsstrom und die grüne Linie die Spannung am FB-Eingang des IC’s. Die Reaktion der Ausgangsspannung auf die Laständerung ist dieser Darstellung kaum wahrnehmbar.
Auch bei besserer Auflösung geht der Einfluß der Stromänderung in den systembedingten Spannungsschwankungen unter. Nur im Einschaltmoment bricht die Spannung kurz auf 3,0 Volt ein.
Allerdings ist deutlich angestiegener Rippel zu erkennen. Das dürfte an der Slew Rate von 0.3 V/μs des OP07 liegen. Für LM358/324 ist der selbe Wert im Datenblatt zu finden.
Ich habe die Simulation mit 5 Volt wiederholt. Auch dabei zeigte sich, dass die Pannung im Einschaltmoment für einen kurzen Zeitraum unter die -5%-Grenze (4,75 Volt) von 5 Volt absinkt.
Hier sind es 4,63 Volt. Nun interessiert mich, ob der 100R Widerstand in der FB-Zuleitung einen Einfluß hat:
Nun habe ich den Widerstand 0R gemacht. Da das bei LTspice nicht geht habe ich den Wert auf 0,000001R gesetzt. Damit ergibt sich tatsächlich eine kleine Veränderung. Der Wert liegt jetzt bei 4,69 Volt. 60 mV machen den Kohl nicht wirklich fett.
Dieser Spannungseinbruch dauert ca. 50 µS.
Wahrscheinlich lässt sich dieser Spannungseinbruch durch einen Stützkondensator direkt an der Last reduzieren.
Zusammenfassung und Ausblick
Grundsätzlich funktioniert dieses Konzept. Als Operationsverstärker kommen aber nur sehr schnelle Typen in Frage. Bei der Simulation wurden die Eigenschaften des IC’s durch den Operationsverstärker deutlich verschlechtert.
Simulation mit schnellem OP
Sonderbarerweise zeigte der erste Plot völlig absurde Linienzüge. Die 3,3 Volt wurden nicht erreicht. Schließlich konnte ich durch verlängern der Beobachtungszeit dann doch noch ein brauchbares Ergebnis sehen. Der Start dauert >3 ms bis die 3,3 Volt erreicht sind. Dann sieht alles normal aus.
Um alle Störfaktoren auszuschalten hatte ich die Impulsstromsenke abgekniffen. Nun da alles Funktioniert miot einem neuen Timing ein neuer Versuch:
Sonderbarer Weise schaft es die Schaltung nicht die Last von 1,5A auszuregeln. Bei den vorherigen Simulationen funktionierte das einwandfrei.
Das Problem hat der Elko C5 mit 220µF gemacht, den ich bei den ersten Simulationen mit einem OP hinzugefügt hatte, um den Rippel zu reduzieren. Warum dort das Problem nicht aufgetreten ist, erschließt sich mir nicht.
Nun ist der Rippel wieder größer aber die Schaltung funktioniert.
Einen LDO-Regler nachschalten
Es wird empfohlen für eine besonders saubere Spannung einen analogen LDO-Regler nachzuschalten. Das wollte ich natürlich auch simulieren.
Es werden von chinesischen Herstellern und Händlern diverse günstige AC/DC-Wandler angeboten. Die Frage ist wie es um Störspannungen auf der Netz- und Niederspannungsseite bestellt. Kürzlich bin ich auf Schaltungsvorschläge zur Entstörung dieser kleinen Netzteile gestoßen. Das habe ich mir bei Hi-Link einmal näher angesehen:
und die entsprechenden Bauteileempfehlungen:
Hi-Link schlägt für alle Modelle diese Entstörmaßnahme vor.
Wobei ich aber auch andere Vorschläge gefunden habe. So findet sich bei FEIYANG für das HKL-5M05 Modul diese asymmetrische Entstörung:
Das der ADC der ESP’s ziemlich umbrauchbar ist ist inzwischen hinlänglich bekannt. Allerdings benötigt man ja nicht immer eine hohe Genauigkeit. Zum Ein- und Ausschalten eines Lüfters kommt es meist ein 1, 2 Grad nicht an. Genau das ist meine Anwendung. Ich möchte einen Lüfter bei ca 45 °C ein- und bei ca. 35 °C wieder ausschalten. Dazu bedarf es keiner exakten Werte, sondern nur Schwellwerte, die ggf. per Test ermittelt werden können. Genauigkeit und Linearität des ADC spielen hier keine Rolle. Deshalb scheint mir der intere ADC des ESP32 dafür geeignet zu sein. Das möchte ich hier ausprobieren.
Hier noch ein paar interessante Infos über den ADC aus dem Programmierhandbuch von Espressif (Link unten):
Rauschen minimieren
Der ESP32 ADC kann empfindlich auf Rauschen reagieren, was zu großen Diskrepanzen in den ADC-Messwerten führen kann. Um das Rauschen zu minimieren, kann der Anwender einen 0,1uF-Kondensator an das verwendete ADC-Eingangspad anschließen. Multisampling kann auch verwendet werden, um die Auswirkungen des Rauschens weiter zu minimieren.
ADC-Kalibrierung
Die API esp_adc_cal/include/esp_adc_cal.h bietet Funktionen zur Korrektur von Unterschieden in den gemessenen Spannungen, die durch Variation der ADC-Referenzspannungen (Vref) zwischen den Chips verursacht werden. Per Design ist die ADC-Referenzspannung 1100mV, die tatsächliche Referenzspannung kann jedoch zwischen 1000mV und 1200mV bei verschiedenen ESP32 liegen.
Die Kurve von randomnerdtutorials.com zeigt auch noch eine ausgeprägte Nichtlinearität im oberen Bereich:
Test
Für den Test habe ich eine kleine Platine gebaut. Sie ist für einen M5Stack C bzw. M5Stack C Plus vorgesehen. Sie enthält eine Reihe Vorwiderstände, die mittels Jumper umgesteckt werden können, einen 3poligen Sockel für den NTC. Der parallele Sockel ermöglicht es die Spannung am NTC direkt zu messen.
Um die Temperatur am NTC zu messen habe ich ein Termoelement daran montiert.
Für den Test habe ich eine Heissluftpistole benutzt und für die Temperatureinstellung den Abstand zum NTC variiert.
Diese Schaltung habe ich angewendet:
Meine Tests haben die folgenden Werte erbracht.
21,4 °C – 2850
35 °C – 2200
45 °C – 1750
50 °C – 1500
60 °C – 1150
Dabei muss man berücksichtigen, dass die Messwerte des ADC schwanken (siehe oben).
Software:
Dieses Programm ließt die Temperatur und reagiert auf das Über- und Unterschreiten der Grenzwerte, die ich hier als Raw-Werte des ADC eingesetzt habe.
Das die Abfragen in einer Interrupt-Service-Routine laufen hat mit diesem Thema hier nichts zu tun. Sie gehören üblicherweise in die Mainloop.
Neueste Kommentare