{"id":9,"date":"2023-02-22T19:04:02","date_gmt":"2023-02-22T19:04:02","guid":{"rendered":"https:\/\/roepro.de\/?p=9"},"modified":"2023-02-22T19:04:02","modified_gmt":"2023-02-22T19:04:02","slug":"ntc-modellierung-in-lt-spice","status":"publish","type":"post","link":"https:\/\/roepro.de\/index.php\/2023\/02\/22\/ntc-modellierung-in-lt-spice\/","title":{"rendered":"NTC Modellierung in (LT-)SPICE"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Die Spice-Sprache besitzt leider nur sehr eingeschr\u00e4nkte generische M\u00f6glichkeit einen NTC mit gegebenem Temperaturverhalten zu modellieren. In meinem Fall (DIE-Temperatursensor eines XM3 Halbleitermoduls) ist die Formel f\u00fcr die \u00c4nderung nur in Format T=F(R) angeben. Das Aufl\u00f6sen in die Inverse f\u00fchrt laut Wolfram Alpha zu keiner L\u00f6sung &#8211; das habe ich wegen der Koeffizienten mit quadrierten Exponenten auch nicht vor zu \u00fcberpr\u00fcfen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eine Lookup-Table l\u00e4sst sich sehr einfach invertieren, die Pr\u00e4zision der Berechnung ist selbstverst\u00e4ndlich schlechter, dass soll hier aber nicht weiter st\u00f6ren, bei Bedarf k\u00f6nnte ja einfach die Schrittweite reduziert werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das Aufbauen von Look-Up-Tabellen ist nicht sehr gut dokumentiert, trotzdem kann man aus der Hilfe des Programmes herleiten, wie man sie import-freundlich implementiert. Hier ein Beispiel mit 3 St\u00fctzstellen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.subckt XM3NTC 1 2\nR1 1 2 {TABLE(temp,\n+ -10, 20k, \n+ 5, 10k, \n+ 165, 500\n+ )}\n.ends<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">&#8222;Aber wie verwende ich diesen Text jetzt als Wiederstand ?&#8220; &#8211; ganz einfach: Texteditor der Wahl \u00f6ffen, text einf\u00fcgen, Datei speichern als irgendwas.cir. Jetzt kann man in LT Spice (Tina nat\u00fcrlich auch) diese Datei \u00f6ffen. Es geht in LT Spice ein Texteditor auf. Hier muss die Zeile, die mit .subckt anf\u00e4ngt markiert werden &#8211; Rechtsklick &#8211; &#8222;Create Symbol&#8220;. Dieses Symbol kann nach gusto ver\u00e4ndet werden, sobald gl\u00fccklich &#8211; speichern.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zur\u00fcck in der Schaltung, die eigentlich simuliert werden soll muss jetzt der Widerstand eingef\u00fcgt werden, der gerade modelliert worden ist. WIEPRAKTISCH, dass LT Spice diese Bauteile unter dem &#8222;AutoGenerated&#8220; Reiter in der &#8222;Component&#8220; Schaltfl\u00e4che bereitstellt. Jetzt noch einf\u00fcgen<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Version Temperatur-Port<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Der Klassiker: die Termperatur eines Bauteils im Betrieb ermitteln. Daf\u00fcr macht man ein Temperaturemodell mit W\u00e4rmekapazit\u00e4t C(th) und W\u00e4re\u00fcbergangswiderstand R(th). Genauso wie oben kann man die Tabelle importiern, \u00e4ndern muss man nur, dass der X-Wert nichtmehr temp, sondern irgendetwas anderes hei\u00dft, tmp hier und ein weiterer Port wird ben\u00f6tigt, dieser muss so hei\u00dfen, wie der X-Achsen Bezeichner der LUT (Look up table).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.subckt XM3NTC 1 2 tmp\nR1 1 2 R=table(V(tmp),\n+ -10, 20k, \n+ 5, 10k, \n+ 165, 500\n+ )\n.ends<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"661\" height=\"345\" src=\"https:\/\/roepro.de\/wp-content\/uploads\/2023\/02\/Screenshot-from-2023-02-07-19-02-12.png\" alt=\"\" class=\"wp-image-12\" srcset=\"https:\/\/roepro.de\/wp-content\/uploads\/2023\/02\/Screenshot-from-2023-02-07-19-02-12.png 661w, https:\/\/roepro.de\/wp-content\/uploads\/2023\/02\/Screenshot-from-2023-02-07-19-02-12-300x157.png 300w\" sizes=\"auto, (max-width: 661px) 100vw, 661px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Mit einem kurzen Beispielschaltplan kann man herausfinden, ob sich die M\u00fche bis hier her gelohnt hat. Und wichtiger : Wie verh\u00e4lt sich das System au\u00dferhalb der St\u00fctzstellen. Folgende Simulation geht von -20 grad bis 175, also jeweils 10 grad \u00fcber die Grenzen des in der Tabelle definierten Bereichs. Bild unten zeigt, dass zwischen den St\u00fctzstellen linear interpoliert wird, im &#8222;undefinierten&#8220; Bereich dagegen wird einfach letzte Wert genutzt, der bekannt ist.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"322\" src=\"https:\/\/roepro.de\/wp-content\/uploads\/2023\/02\/Screenshot-from-2023-02-07-19-20-24-1024x322-1.png\" alt=\"\" class=\"wp-image-11\" srcset=\"https:\/\/roepro.de\/wp-content\/uploads\/2023\/02\/Screenshot-from-2023-02-07-19-20-24-1024x322-1.png 1024w, https:\/\/roepro.de\/wp-content\/uploads\/2023\/02\/Screenshot-from-2023-02-07-19-20-24-1024x322-1-300x94.png 300w, https:\/\/roepro.de\/wp-content\/uploads\/2023\/02\/Screenshot-from-2023-02-07-19-20-24-1024x322-1-768x242.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">So weit so gut, die Termperatur steigt, der Widerstand f\u00e4llt. Was fehlt, ist ein Weg, um die St\u00fctzstellen automatisch in das Program zu f\u00fcttern. Das ist mit Python sehr einfach. Hier der Code:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import matplotlib.pyplot as plt\nimport numpy as np\n\nKelvin = 273\n\nResistanceatTzero = 10000       #nominal Resistance\nTzero = 25 + Kelvin             #degre\nBeta = 3380                     #Beta Value\n\ndef f(T):\n    T = T+Kelvin\n    return ResistanceatTzero * np.power(np.e, Beta*((1\/T)-(1\/Tzero)))\n\nTemperature = np.arange(-20, 200, 10)\nResistance = f(Temperature)\n\n\nplt.plot(Temperature,Resistance)\nplt.show()\n\nf = open(\"NTC.cir\", \"x\")\nf.write(\".subckt NTC  1 2 temp \\n R1 1 2 R=table(V(temp),\\n\")\n\nfor x in range(0, Temperature.size):\n    f.write(\"+ \" + str(Temperature&#91;x]) + \" , \" + str(round(Resistance&#91;x])))\n    if not (x==Temperature.size-1):\n        f.write(\" , \")\n    f.write(\"\\n\")\n    \n\nf.write(\"+ ) \\n\")\nf.write(\".ends\")\n\nf.close()<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Muss die Messfunktion angepasst werden, einfach die Funktion f(T) \u00e4ndern. Nach Ausf\u00fchren des Skripes sollte ein neues Textdokment in dem Ordner entstanden sein, in dem sich das Skript befunden hat. Dieses Textdokument hat die Endung .cir und kann in LTSpice importiert werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Spice-Sprache besitzt leider nur sehr eingeschr\u00e4nkte generische M\u00f6glichkeit einen NTC mit gegebenem Temperaturverhalten zu modellieren. In meinem Fall (DIE-Temperatursensor eines XM3 Halbleitermoduls) ist die Formel f\u00fcr die \u00c4nderung nur in Format T=F(R) angeben. Das Aufl\u00f6sen in die Inverse f\u00fchrt laut Wolfram Alpha zu keiner L\u00f6sung &#8211; das habe ich wegen der Koeffizienten mit quadrierten &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/roepro.de\/index.php\/2023\/02\/22\/ntc-modellierung-in-lt-spice\/\" class=\"more-link\">Mehr <span class=\"screen-reader-text\">\u00fcber &#8222;NTC Modellierung in (LT-)SPICE&#8220; <\/span>Lesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-9","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/roepro.de\/index.php\/wp-json\/wp\/v2\/posts\/9","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/roepro.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/roepro.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/roepro.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/roepro.de\/index.php\/wp-json\/wp\/v2\/comments?post=9"}],"version-history":[{"count":2,"href":"https:\/\/roepro.de\/index.php\/wp-json\/wp\/v2\/posts\/9\/revisions"}],"predecessor-version":[{"id":13,"href":"https:\/\/roepro.de\/index.php\/wp-json\/wp\/v2\/posts\/9\/revisions\/13"}],"wp:attachment":[{"href":"https:\/\/roepro.de\/index.php\/wp-json\/wp\/v2\/media?parent=9"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/roepro.de\/index.php\/wp-json\/wp\/v2\/categories?post=9"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/roepro.de\/index.php\/wp-json\/wp\/v2\/tags?post=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}