Posts by schnasseldag

    Kai_aus_der Kiste Ich muss gestehen, dass ich die meisten Deiner Ausführungen nicht verstehe. Um hier folgen zu können, würde ich tiefergehende Erklärungen benötigen...

    Für meinen Teil sprach ich nicht von Frequenzen oder "additiven Spannungserhöhungen", ich sprach von der Leistung mittels der ein Signal in der LED-Strecke einwirken müsste, damit ein OK (sekundär) überhaupt schalten kann. Das Stichwort heisst Stromübertragungsfaktor.

    RichardeRicharde Das Relais als galvanischer Trenner ist schon mal sehr gut. Dennoch würde ich keine Spannung vom 3,3V Pin abgreifen, um damit über eine längere Leitung wieder auf die GPIOs zurückzukehren. Das ist zwar bequem, zieht aber alle möglichen (und erst nach Monaten bemerkten) Störungen in die CPU-Stromversorgung. Das will man nicht. Besser wäre es, aus dem Netzteil über die Relaiskontakte (nach etwas Gleichrichtung und Glättung) auf einen Optokoppler zu gehen. Den Ausgang schliesst Du mit kurzen Leitungen an Deine GPIOs.

    Hintergrund: Der Optokoppler benötigt eine gewisse Leistung, um zu schalten. Die Leistung wird über Störungen nicht in Deine 2x2m Kabel einkoppeln (ich gehe mal davon aus, dass Du keinen Schweisstrafo neben Deinen Relais betreibst...). D.h. neben der zweiten galvanischen Trennung hast Du mittels der Optokoppler auch eine brauchbare Störgrössenunterdrückung.

    Servus miteinander,

    auch wenn ich mich hier in vielleicht mehrerlei Hinsicht unbeliebt machen sollte (kein Spaßfaktor beim selberprogrammieren, Windows, kostenlos...). Werft mal einen Blick auf den QuoteCompiler. Eine .Net Applikation zur Depotverwaltung, die Min-Max-Endkurse aller möglichen Aktien, Zertifikate, Anleihen, Kurse, Derivate... aus allen möglichen Börsen (auch der Welt) lädt. Wenn's sein soll, dann auch historische Kurse von vor X Jahren nebst Aktiensplit...

    Das Programm benutzt im Grund ebenfalls Screenscraping, um an die Daten zu kommen. Für die wichtigsten Handelsplätze werden Screenscrapingfilter regelmäßig gepflegt. Wer selbst exotische Börsen abgrasen will, der verwendet den Filtereditor. Dort hinterlegt man die URL und parst sich mittels einiger logischer Ausdrücke und Teilstringvergleiche selbst an die gewünschten Werte im html. Den so erstellten Filter kann man dann auch speichern... Zur Auswertung stehen die üblichen Verdächtigen zur Verfügung: gleitender Mittelwert, Bollinger Bänder... Das Programm bietet eine Backupfunktion an und eigentlich alles, was der Hobbyzocker benötigt, der die Daten bei sich daheim und nicht irgendwo im Web gespeichert wissen will.

    Wer selbst programmieren will, naja, der kann sich ja auf die (SQL) Datenbank verbinden. Wer mehr an Auswertung etc. will, der findet sicher bessere kommerzielle Programme. Als kostenlose Einstiegsdroge ist das Programm aber wirklich gut (a bissal weniger Exceptions könnte es schmeissen :-)).

    Das mir dann aber keiner jammert, wenn er seinen Hof verzockt hat... :)

    Schöne Grüße,

    schnasseldag

    PS: Vielleicht probiert ja jemand mal aus, ob man das unter Mono et. al. zum Laufen bekommt.

    Man sieht es eh die DDR hat einfach so den Müll auf die Wiese gekippt jetzt müssen die Böden für viele € gereinigt werden.

    Das ist aber nicht schlimm. Das war Westmüll, der für Devisen entsorgt wurde. Ist auch nicht anders, als auf Ökozappelstrom zu machen und bei Wind- und Sonnenflaute Atomstrom aus Franreich und Kohlestrom aus Polen zu kaufen. :)

    "Prost es lebe die Partei, frisch und fromm und steuerfrei."

    Und die PI's benötigen wirklich alle 3A und kommen nicht mit jeweils 2,4A aus? Sprich, die GPU und CPU ist voll am Rechnenund die Wärme wird auch abgeführt? Ich frage mich nämlich, wie das räumlich aussieht. 3 Raspis an je einem kurzen Kabel, 3 Monitore (als GPU-Strom-Alibi) nebeneinandergepackt...

    Sind die Kabel auch kurz und dick genug? Andernfalls nützen die 3A herzlich wenig. Ich glaube, es ist wohl eher die von Dir beschriebene "gefühlte" Unsicherheit.

    Die Meanwell-Hutschienennetzteile habe ich selbst seit zig Jahren erfolgreich im Einsatz. Bei der Verteilung solltest Du auf einer sternförmigen Verkabelung abstellen.

    Leider gab's noch keine Computer, als ich anfing rumzulöten. Das Lag an der Zeit und dem Ort... Daher bastelte ich mir einen Taschenrechner, basierend auf dem legendären U821D. Ja, zu dieser Zeit erfolgte die Subtraktion noch fast in umgekehrt polnischer Notation. Und nachdem ich auch kein Geld für Lötzinn hatte, holte ich mir halt eine Stange aus Opas Werzeugkoffer, die er immer hernahm, wenn er Dachrinnen lötete. Mit dem Seitenschneider einen Klumpen abgeknipst, mit dem Lötkolben aufgenommen, dann ich eine Schale Kolophonium tropfen gelassen und wieder raus aus dem Kolophonium und schnell zur Lötstelle transportiert, bevor das Flußmittel wieder weg war. So ging das damals. Natürlich glänzte keine der Lötstellen! Daher dann den Pinsel genommen und feste drübergebürstet. Die Lötstellen waren zwar innerlich nicht besser als vorher, aber sie glänzten :) Mein ABI mußte ich allerdings immer noch mit dem Rechenschieber machen - trotzt tollem Rechner.

    Was machen die 4k7 auf SCL SDA? rein zum verständniss?

    Die definieren die Hi-Flanke des Busses, da die I2c-Spec allein ein aktives Lo-Ziehen der Busteilnehmer definiert. Damit ist auch klar, das es in der Verantwortung des Schaltungsdesigners liegt, wie er die Werte der Pullups fuer sein konkretes Schaltungslayout bemisst. Die Werte hängen prinzipiell von der Buslast/kapazität ab, um die Spec hinsichtlich der Risetime (Flankensteilheit) zu erfüllen.

    Nachdem der Raspi mit (ich meine um die) 2,2k bereits relativ niedrige Pullups von Haus aus mit sich bringt, braucht es an dieser Stelle vermutlich keiner weiteren Pullups. Werden zu viele parallel beschaltet, dann ist der Widerstand in der Summe zu niedrig, damit die Busteilnehmer noch gültige Low-Signale erzeugen können. Häufig besitzen die billigen I2C-Chinamodule ihre eigenen Pullups, was dann dazu führt, das alles bis zum 3. oder 4. Modul funktioniert, beim 5. oder 6. Modul dann aber ungewöhnliche Busfehler auftreten, "obwohl man doch gar nix an der SW geändert hat".

    Kleine Nebenbemerkung: Die Resetleitung kann man auch (wie auch die Adressleitung) über 10k Pullups schalten. Das begrenzt den Strom - wird aber an der Problemursache nix ändern. Allerdings sind die Leitungen des MCP23017 nicht 5V tolerant, wenn die Versorgungsspannung nur 3,3V beträgt. Das sollte in jedem Fall geändert werden. Im Zweifelsfall könnte man noch über einen Umstieg zu einem MCP23018 nachdenken (der besitzt 5V tolerante IO Leitungen, womit sich auch das Pegelproblem bei den Relaisplatinen läsen würde)...

    Noch aus der Hüfte geschossen...

    • Blockkondensator am MCP23017 angeschlossen?
    • GND-Leitungen soweit möglich sternförmig vom Netzteil zu den (Relais-) Lasten ziehen. Beim Durchschleifen der Spannungsversorgung von einer Last zur nächsten können bei Laständerungen Spannungsabfälle entstehen oder auch der GND wegdriften. Das könnte erklären, wieso eine über ein Relais geschaltete Last zu Controller-/Raspi-seitigem Fehlverhalten (aufgrund von Unterspannung) führt.

    Scheduling, Interrupts, Pseudointerrupts, Python-Interrupts - der Versuch einer einfachen Erklärung


    Motivation

    Der Begriff des Interrupts ist in den letzten Jahren sehr mehrdeutig und oft für verschiedene Zwecke verwendet worden. Die eher hardwarenahen Vertreter mögen sogar sagen: "Er wird mehr und mehr mißbraucht.". Der Artikel versucht, die verschiedenen Verwendungsformen zu erklären.

    Es verhält sich beim Begriff des "Interrupt" in etwa wie bei dem Begriff der "Batterie". Die meisten Leute werden sagen: "Meine Autobatterie war leer, weswegen ich Starthilfe benötigte.". Technisch gesehen ist das genauso falsch, wie von einem "Python Interrupt" zu sprechen, trotzdem wird jeder verstehen, was gemeint ist.

    Im Auto ist keine Batterie verbaut, sondern ein Akkumulator. Eine Batterie besteht aus zwei unterschiedlichen Materialien, die sich chemisch umwandeln und dabei Energie in Form elektrischen Stromes abgeben. Zwar ist das in erster Linie beim Akkumulator auch der Fall, allerdings ist dieser Prozeß beim Akkumulator reversibel, d.h. durch einen Stromfluß in umgekehrter Richtung können die Ausgangsmaterialien der beiden Pole chemisch wiederhergestellt werden. Bei der Batterie ist der Prozeß irreversibel. D.h. sind die beiden Ausgangsmaterialien chemisch einmal umgesetzt, so ist Schluß. Nebenbemerkung: Auf Spitzfindigkeiten wie: "Bis zur vollständigen Polarisation der Elektroden kann ich eine Batterie ebenfalls wieder aufladen und dann erhalte ich diesen marginalen Strom auch wieder zurück... ." gehe ich hier nicht ein.

    Beim "Interrupt ist das ähnlich.


    Der klassische (Hardware-) Interrupt

    Ein Interrupt ist ein Ereignis, welches ein Controller (oder eine CPU) auslöst, wenn man ihm in seinen Statusregistern mitteilt, daß er auf einen externen (Spannungsänderung egal wo) oder internen (Timer) Stimuli reagieren soll. Die Hardware des Controllers stellt für alle von ihr implementierten Interrupts eine Tabelle im Speicher bereit, welche die Adressen der Routinen enthält, welche im Falle eines Interruptereignisses auszuführen sind.

    Die Ausführung beginnt damit, daß das laufende Programm unterbrochen wird (und zwar egal, wo es sich gerade befindet) und die entsprechende Interruptroutine ausgeführt wird. Bei deren Ausführung liegt es in der Verantwortung des Programmierers:

    • die Register der CPU und ggf. andere Statusflags auf den Stack (i.d.R. dem des unterbrochenen Programmes) zu retten,
    • seine eigentliche Aktion durchzuführen (z.B. ein Zeichen aus dem Fifo eines UART zu lesen),
    • u.U. das Interruptflag des Controllers (und/oder das Interruptflag der CPU) zurückzusetzen,
    • die Register vom Stack zu restaurieren und
    • per speziellem CPU-Befehl (z.B. IRET, RETE...) wieder zum unterbrochenen Programm zurückzukehren. Dabei verhält sich der Interruptreturn-Befehl wie ein klassischer Returnbefehl mit dem Zusatz, daß er das Interruptflag der CPU zurücksetzt, um so weitere Interrupts zu erlauben.

    Nested Interrupts sind spezielle Implementierungen von Interruptroutinen. Der Programmierer sieht vor, daß seine Interruptroutine selbst wieder von einem anderen Interrupt unterbrochen werden kann, währenddessen sie noch läuft. Dabei kann es sich um einen Hardwareinterrupt höherer Priorität oder auch irgendeinen anderen Interrupt handeln. Das liegt ganz beim Programmierer der Interruptroutine. Im Unterschied zum "normalen" Interrupt gibt man bei nested Interrupts vor der Vollendung der Interruptroutine die Statusregister des Controllers und der CPU wieder frei, um möglichst schnell für neue Interrupt "empfänglich" zu sein. Die korrekte Implementierung ist dabei nicht einfach, weil ein Burst an Interrupts schnell die Stackgröße der unterbrochenen Tasks sprengen kann und auch diverse andere Probleme entstehen können...


    Eigenschaften klassischer Interrupts

    Interrupts besitzen die Eigenschaft extrem schnell (innerhalb weniger Taktzyklen der CPU) reagieren zu können und sind dadurch gekennzeichnet nur das wirklich nötigste zu tun. Klar, solange die Interruptroutine läuft, läuft sonst nichts anderes auf der den Interrupt bearbeitenden CPU.
    Timerinterrupts sind die Basis des preemptiven Schedulings eines Betriebssystems. Preemptiv bedeutet dabei, daß Prozesse/Tasks eines Betriebssystems von einem Timerinterrupt unterbrochen werden, die Interruptroutine die Register der laufenden Task auf deren Stack sichert, dann schaut, welche Task als nächstes bearbeitet werden soll, den Stackpointer der CPU auf den Stack dieser Task setzt und dann dessen gespeicherte Register restored. Diesen Vorgang nennt man "Scheduling". Der Scheduler eines (preepmtiv) geschedulten Betriebssystems tut im Kern genau das.


    Ein kurzer Ausflug zum kooperativen Scheduling. Im Prinzip verhält es sich beim kooperativen Scheduling um den gleichen Vorgang wie beim preemptiven Scheduling. Der Unterschied besteht lediglich darin, daß nicht ein Hardwaretimer zyklisch den Scheduler anstößt, sondern der Programmierer der Applikation dies über den (sog. kooperativen) Aufruf einer Betriebssystemfunktion erwirkt, um so eine andere Task die Möglichkeit zum Laufen zu ermöglichen. Ein Sleep() - Aufruf bewirkt oftmals so etwas.

    Hat man diese Art der "klassischen" Interrupts verstanden, so ist leicht ersichtlich, daß es sich hier um etwas sehr hardwarenahes handelt, auf dem ein Betriebssystemkern aufbaut. Prozesse, Threads und Tasks sind allesamt "oberhalb" dieser low-leveligen (Kernel Space) Implementierungen angesiedelt. Man spricht dann vom User-Space. Sie unterliegen i.d.R. dem Timing des Schedulers oder zumindest dem Task/Thread/Prozeß-Kontextwechsel des Schedulers, was ihre Reaktionsfähigkeit (Latenz) anbelangt. Das hat den Vorteil, daß solche Tasks i.d.R. nicht die Interruptbearbeitung des Betriebssystems korrumpieren können, allerdings auf Kosten langsamerer Reaktionszeiten.


    Python-Interrupts (Pseudointerrupts)

    Prinzipiell haben diese "Interrupts" überhaupt nichts mit den o.g. klassischen Interrupts zu tun (außer der Namensähnlichkeit). Hierbei handelt es sich um Threads im Kontext einer Python-Interpreterinstanz, welche im User Space des Betriebssystems laufen. Insofern gelten für sie die Aussagen zur Latenz ganz gewöhnlicher Threads und Prozesse. Für den Anwender wird ledigliche eine Programmierschnittstelle geschaffen, die asynchron aussieht. Das war dann aber auch schon die einzige Gemeinsamkeit mit klassischen Interrupts. Diese Art von "User-Space Interrupts" vermittelt dem Programmierer den Anschein, sporadisch beim Auftreten eines Ereignisses aufgerufen zu werden - mit allen Latenzen, die bei einem Thread und/oder Prozeßwechsel einhergehen.

    Sind Aktionen zeitunkritisch und ist das Betriebssystem nicht ausgelastet, so genügen sie sicherlich vielen Endanwendungen wie Licht ausschalten, Bewässerung stoppen... Für zeitkritische und/oder sicherheitskritische Dinge wie Notausverkettungen sind sie i.d.R. ungeeignet. Im Prinzip leidet der "Python-Interrupt" oftmals noch an anderen Limitierungen. So implementieren Pythoninterpreter u.U. selbst einen eigenen kooperativen Scheduler, der "on top" des Betriebssystemschedulers liegt und schlimmstenfalls noch nicht mal Gebrauch von mehreren CPU's macht, so sie die Hardware zur Verfügung stellt.


    Ich hoffe, mit diesem Beitrag etwas Licht in die Hintergründe der namensgleichen, jedoch sehr unterschiedlichen Bedeutungen des Begriffs "Interrupt" gebracht zu haben.


    Schöne Grüße

    schnasseldag

    @__deets__: Da haben Deine Kumpel sich aber ein schönes Projekt gesucht - Hut ab. Vor allem haben sie das OS erst mal in ein für Steuerungen brauchbares per RT-Patch verwandelt. :) Es gibt hier ja jede Menge von "Steuerungsprojekten", die mit dem "Linux von der Stange" sicherlich gut machbar sind, bei einer ruckfreien und synchronen Steuerung von Antrieben ist da aber (im Userspace) Schluß. Auch beim Funken von Bitsequenzen, so sie nicht per DMA o.ä. durchgeführt werden... Man liest das ja zuweilen...

    Mein o.g. Gedanke der Trennung der Steuerungsaufgabe von der Applikation lag hauptsächlich in den folgenden Dingen:

    • man schiebt die Echtzeitanforderung auf den Arduino (ohne OS),
    • besitzt mittels der G-Befehle ein komfortables Positioniersystem mit Beschleunigungen, Geschwindigkeiten, Endschaltern... und
    • kann den Arduino bequem seriell vom Pi aus steuern und hält sich den Pi damit offen für alle Art anderer Software.

    Günstig zu haben ist die Arduino basierte Hardware obendrein. Ich habe mir als "Ersatz" für meinen HC7 3D-Drucker vor einigen Jahren eine Marlin-FW parametriert, die ich im Notfall einsetzen werde. Arduino 2560, Treibershield und LCD-Display haben so an die 30€ in der Bucht gekostet. Billiger und schneller kann man eine Fahrablaufsteuerung kaum bekommen...

    Gruß in den Norden!

    schnasseldag

    Mal noch ein gänzlich anderer Gedanke...

    Wieso nicht die Marlin-Software (ist für 3d-Drucker gedacht) auf einem ATMega2560 benutzen? Inkl. Display und 6 Motortreibern nebst diversen Endschaltern ist da alles dabei. Zudem werden die Motoren bei einer Fahrt auf den Endschalter (hier z.B. als Notaus verwendet) nicht stromlos geschaltet sondern aktiv in Ihrer Position gehalten. Je nach Anlagenauslegung ist der sicherste Zustand nicht unbedingt immer der stromlose (ein eufgrund fehlenden Stromes "absinkender" Roboterarm von 100kg schmerzt auf dem Fuß...) - wenngleich das wohl meistens der Fall ist.

    Wie hoch ist denn der Widerstand bei 25°C bzw. auch bei einer anderen Temperatur? Anhand dessen könntest Du herausfinden, ob es sich ggf. um einen NTC oder PTC Widerstand handelt. Allerdings würdest Du dann noch einen AD-Wandler für den Raspi benötigen.

    Hier ein paar Links zum einlesen:

    Das Ruckeln kommt dann wohl daher, daß die CPU heruntertaktet, wenn sie zu heiß wird.

    Möglicherweise benötigt die Verarbeitung des HD Formats in seiner Gänze eben eine hohe Rechenleistung. Was sagen denn top oder htop zur CPU-Auslastung?

    Tja, wenn's an der Temperatur liegt, dann würde ein Kühlkörper tatsächlich helfen. Kannst ja im Fehlerfall mal etwas Kältespray draufsprühen und schauen, ob's dann kurzfristig besser wird um Klarheit zu bekommen...

    Ein SATA Controller wäre mal eine Idee, wenngleich keine neue. Die hatten ganz frühe Varianten des Banana-Pi bereits.

    Aber jetzt ist erst mal höher, schneller, weiter angesagt und irgendwann kommt dann auch der SATA Controller ... auf einer 1GB RAM Variante. Die Folgejahre wird dann auch dort das RAM größer. Immer schön häppchenweise... :)

    Nachdem öfter mal gefragt wird, wie man Gleich- und Wechselspannungssignale mit dem Pi einliest...

    Die Simulation zeigt die Signalspannung (hier Wechselspannung) in blau und den getriggerten Spannungsverlauf (an R99) in grün. Die Schaltung funktioniert für Gleich- und Wechselspannung bis mind. 24V. Die vollständige Schaltung nebst Spec kann man auf meiner Homepage herunterladen.

    Nebenbemerkung: R98 ist nur ein Dummy.

    Es gibt Funktürklingeln. Ein Taster, viele Klingeln. Diese gibt's batteriebetrieben oder auch für die Steckdose. Warum muß es immer eine App sein? Weil man das Handy immer mit sich herumträgt? Wie sieht es mit den anderen Hausbewohnern aus, die ein anderes Handy mit sich herumtragen? Dürfen die den Gong nicht hören?

    OT...

    Das mit dem Phasenanschnitt, das geht - naja, so lala... Einen Ventilator (der schön "elastisch" durch Luft gedämpft wird) oder einen anderen einfachen Spaltpolmotor bekommt man damit drehzahlgesteuert (der Wirkungsgrad sei mal dahingestellt), vielleicht auch eine Wasserpumpe... Bei Wellenpaketsteuerungen kommt es auf die Art der Paketzusammensetzung an, ob der Rotor beim Anlegen der Pakete in den Stator hineingezogen wird. Falls ja, dann führt so eine Steuerung zum Klopfen und beschädigt auf lange Zeit gesehen die Motorlager. Für Getriebe ist sie völlig ungeeignet. Zudem laufen stark unsymmetrische Paketzusammensetzungen auf eine Gleichmagnetisierung des Stators (oder Rotors) hinaus, womit der Wirkungsgrad sinkt und der Motor sich erwärmt.

    Ich hatte da vor einigen Jahren mal ein wenig mit den verschiedensten Motoren herumgespielt. Zunächst ein einfacher Dimmer am Spaltpolmotor:

    Das lief einigermaßen geräuscharm und der Motor wurde dank "keiner" Belastung auch nicht warm. Beim Dimmer handelte es sich um ein billiges "Aldi-Modell".

    Im Anschluß bastelte ich mir eine Nullpunkterkennung und schubste Wellenpakete per SSR zum Motor. Die Steuerung übernahm ein ATMega 329. Hierbei traten bei gewissen Paketzusammensetzungen die o.g. Klopfgeräusch auf, da der Rotor beim bestromen regelmäßig in den Stator gezogen wurde und am hinteren Lager anschlug.

    In meiner ausrangierten Spülmaschine befand sich dann noch ein Kondensatormotor, den ich per kombinierter Phasenanschnitt- Wellenpaketsteuerung geregelt betrieb. Der Motor besaß einen Tachogenerator, sodaß tatsächlich eine Drehzahlregelung möglich war. Ich meine, ich hatte damals einen einfachen P-Regler realisiert...

    Der Phasenanschnitt erfolgte per Triac, zu sehen auf der vorderen Platine.

    Anbei die Schaltung, die ich zunächst mal in LTSpice ausprobierte.

    Oben erkennt man die Nullpunkterkennung. Der Optokoppler stellt den Übergabepunkt für den ATMega-Eingang dar. Gleichsam bildet der OK im unteren Bild den Übergabepunkt zur Steuerung des Motors. Die vom Tachogenarator erzeugte Wechselspannugn lief über eine Graetzbrücke mit Spannungsteiler und Clipping per Z-Diode (nicht dargestellt) - also nix Besonderes.

    Fazit: Ja man kann ein bißchen steurn und regeln - es kommt aber auch stark auf den Einsatzzweck (Auslegung der Mechanik, Dämpfung, Wirkungsgrad, Wärmeabfuhrmöglichkeit...) an. Besser geeignet (aber eben auch teurer), um AC Motoren zu regeln, ist da schon der Frequenzumrichter.

    Ach ja, bevor ich es vergesse - Spannungen und sich ergebende Ströme aus der Steckdose sind lebensgefährlich. Bitte also nicht nachmachen!

    ... OT

    Bei der PWM-Steuerung mit Mosfet wird's diese Probleme nicht geben. Allenfalls ein paar EMV-Störungen... :^^:

    Kelvin: Irgendwie kommt mir die Frage aus einem anderen Thread her bekannt vor...

    Ich besitze einen Limodor Lüfter und betreibe ihn nicht "gedimmt". Die Wirkungsgrade der Motoren (z.B. Spaltpolmotor) sind bei langsamer Drehzahl eher gering, sodaß eine niedrigere Drehzahl zumindest energetisch nicht viel bringt. Mein Lüfter geht mit voller Drehzahl an, wenn eine gewisse Feuchtigkeit überschritten wird und dann vollständig aus, wenn eine hysteresebehaftete Grenze unterschritten wird. Das Thema "Lüftung" mit Luftmassenstrom, Energie, Wirkungsgrad, Art der Drehzahlsteuerung etv. ist ein weites Feld... und sprengt zudem das das OT.

    Die Timerbausteine haben sicher ihren Reiz - er will aber gedimmt hoch- und runterfahren, d.h. benötigt eine veränderliche PWM. Das stelle ich mir mit den Timern ziemlich tricky vor. Sonach bin ich (wie Fliegenhals ja schon schrieb) eher bei einem ATTiny85 nebst Mosfet. Auch läßt sich dann wohl die Selbsthalteschaltung einfacher realisieren, weil man noch ein- zwei Eingänge übrig hat.

    >>> Hier<<< verkauft der freundliche Händler aus Fernost einen ATTiny, der sich per Arduino IDE programmieren läßt. ich habe einen solchen nebst Feuchtigkeitssensor in eine UP-Dose verbannt, um eine feuchtegeregelte Lüftersteuerung für's Bad zu realisieren. Läuft seit Jahren 24/7.

    PS: SSR ist nicht, da hier Triacs drinstecken, die Wechselstzrom schalten - das schrieb Fliegenhals aber auch schon.

    Wurstuk: Anbei noch einige Vorabgedanken...

    Wie sieht die mechanische Kopplung (Deiner Seilrolle zum Motor) aus? Besitzt Du einen umlaufendes "Seil" oder zwei einzelne? Wäre eine lange Spindel, auf der ein Gleitkörper das vordere Ende des Vorhangs (beidseitig) zieht ggf. eine Alternative? Welche Kraft (bzw. welchen Kraftbereich) benötigst Du derzeit von Hand, wenn Du den Vorhang öffnest? Wie soll das System reagieren, wenn der Vorhang klemmt (Stromabschaltung, Zeitbegrenzung, ...)? Wie laut darf die Lösung denn sein (Getriebe und quietschende Gewindestangen scheiden dann ggf. aus)? Die ideale elektrische Umsetzung ergibt sich zuweilen erst, wenn die mechanische Umsetzung klar ist.