Hallo zusammen Ich suche nach einer Lösung für folgendes Problem. Ich habe zwei Schliesser (federrückgestellte Druckschalter) mit denen ich ein Mosfet ansteuern will. Das Mosfetmodul hat zwei Steuerkabel als Eingang, sobald Spannung anliegt schaltet das Modul. (Ich denke das ist den meisten hier klar, wollte es einfach möglichst genau beschreiben) Ich möchte einen der beiden Schalter drücken können und das Signal soll so lange weitergeleitet werden bis der andere Schalter gedrückt wird. Ich kenne mich nur mit den Grundlagen der Elektronik aus (bin gerade an meiner Maschinenbauingenieur Bachelorarbeit) Eine möglichst einfache Lösung wäre zu bevorzugen. Als Spannungsquelle steht ein 11.1V LiPo zur Verfügung. Besten Dank für Eure Hilfe Gruss Filip
Filip B. schrieb: > Das Mosfetmodul hat zwei Steuerkabel als Eingang, sobald Spannung > anliegt schaltet das Modul. (Ich denke das ist den meisten hier klar, > wollte es einfach möglichst genau beschreiben) ? Wie hoch muß die Spannung sein, die angelegt wird um das Modul zum Schalten zu bringen? An beiden Steuerkabeln gleichzeitig Spannung anlegen? An einem Steuerkabel oder an dem anderen? Ist das andere dann an GND oder offen? Was meinst du mit genau?
Taster, sorry, war das falsche Wort. Zudem habe ich das Modul falsch beschrieben, habs soeben getestet. Die beiden Steuerleitungskabel müssen nur kontakt haben, dann schaltet das ganze. Den genauen Aufbau des Moduls kenne ich nicht, habe auch keinen Zugriff auf Daten dazu.
Also wenn du die beiden Leitungen verbindest schaltet das MOSFET und wenn du sie wieder trennst schaltet es wieder ab? Dann wäre ein bistabiles Relais vermutlich das einfachste.
Genau wie du sagst, ja Sobald ich die Leitungen verbinde schaltet das mosfet. Bistabiles Relais, sagt mir nichts, werd3eaber dazu mal was lesen, danke mal Edit: Hab darüber gelesen. Ist jedoch so wie ich es verstanden habe nicht ganz das was ich brauche. Das Mosfet soll: Schalten, wenn Taster 1 gedrückt wird Stoppen, wenn Taster 2 gedrückt wird, unabhängig vom Taster 1
Wenn auch beide Taster gleichzeitig gedrückt sein können wird's schwieriger. Da kommen folgende Fragen auf: Welche Steuerspannung hast du zur Verfügung? Was sind es genau für Taster (1x Schließer, 2x Wechsel, oder ...)? Hast du Erfahrung mit Mikrocontrollern? Was soll passieren, wenn: - erst Taster 1, dann Taster 2 gedrückt und dann Taster 2 wieder losgelassen wird? - erst Taster 2 und danach Taster 1 gedrückt wird? Ein kleiner Controller wäre das einfachste, aber es sollte auch durch eine Entkopplung mit Kondensatoren gehen (dass die Relaisspulen nur kurze Impulse bekommen?
Ich sehe schon, das wird komplexer als ich erhofft habe. Es sind 2 Taster, leiten solange sie gedrückt sind. Signalspannung gleich Akkuspannung, also ca 12V DC Leider habe ich keine Erfahrungen mit Mikrocontrollern, bin aber lernfähig ^^ Was soll passieren, wenn: - erst Taster 1, dann Taster 2 gedrückt und dann Taster 2 wieder losgelassen wird? Mosfet bleibt ausgeschalten - erst Taster 2 und danach Taster 1 gedrückt wird? Mosfet wird eingeschaltet Evtl hilft es, wenn ich die Anwendung erkläre. Ich habe ein Getriebe welches von einem Bürstenmotor angetrieben wird. Der Motor wird via Mosfet geschalten. Taster 1 startet den Motor, dies ist ein Knopf ausserhalb des Getriebes. AM letzten Zahnrad des Getriebes hat es eine Nocke welche Taster 2 betätigen kann. Ich möchte also Taster 1 Drücken (egal ob kurz oder 2 Stunden lang) und das Getriebe soll nur eine Umdrehung (also bis zur Nocke) machen. Tas Taster 1
Ok, dann ist das schonmal klarer :) Ich würde es mit einem Mikrocontroller machen, bin ziemlich digitalisiert. Aber wenn du da keine Erfahrung hast wird das wohl keinen großen Sinn machen. Wobei sich sicher jemand finden würde, der dir das um einen Zehner zusammenbastelt. (Wenn dir das am liebsten wäre könnte ich mich auch dazu breitschlagen lassen, dann muss allerdings noch mehr Umgebung bekannt werden) Andere Lösung wäre wie gesagt ein bistabiles Relais und einer Schaltung die dafür sorgt, dass dessen Spulen nur kurze Impulse zu sehen bekommen. Ich denke mal, das könnte man mit Kondensatoren in den Leitungen der Taster (und eventuell dazu parallele Widerstände) lösen. Allerdings ist das analog und meine Gebiet ist wie gesagt die digitale Welt. Aber auch zu dieser Lösung findet sich sicher jemand :)
Welche Quellen würdest du empfehlen damit ich mir genug Wissen aneignen kann um das selber (mit etwas Hilfe vom Forum evtl ^^) zu machen? Alternativ nehme ich auch gerne analoge Lösungen ;)
Ich hab gerade gelernt, daß Google dafür am besten geeignet sei und man sich andere Dumme suchen soll.
So, es hat sich einiges getan. Anstatt irgend eines Relais oder Mikrocontroller gebastels, habe ich mich für einen fertigen Arduino NANO entschieden. Der ist für meinen Zweck einfach perfekt. Doch jetzt kommt das Problem mit dem Programmieren. Ich kann die Grundlagen von C/C++, doch zum einen habe ich das ganze schon länger nicht mehr benutzt und zum anderen reichen evtl. meine Grundlagen nicht so ganz. Mein aktueller Code findet ihr unten. Der Ausgang ist momentan noch Pin13, also das eingebaute LED, wird dann aber auf einen anderen Pin gewechselt sobald es so läuft wie ich will. Die Schaltung hat folgende Taster (Schliesser) Trigger COL Selector (Schalter) Assis Das ganze ist für eine Airsoft Getriebebox. Da dreht ein Elektromotor ein Getriebe und spannt dann so eine Feder. Wichtig ist, dass nach einer Umdrehung des obersten Zahnrades der Strom zum Motor abgestellt wird, egal ob der Abzug noch gedrückt ist, oder nicht. Der Trigger wird von Hand betätigt. COL ist ein Taster, der aktiviert wird, wenn das Zahnrad eine Umdrehung gemacht hat (grünes Teil auf Bild) Selector ist ein Schalter, der wird extern verbaut und dient nur der Sicherheit. Assis habe ich sozusagen als "Hilfsschalter" mal eingefügt, für den Fall dass Trigger & COL beide aktiviert sind. Das kann vorkommen, wenn der Motor z.b so schnell stoppt dass das Zahrad zum stillstand kommt während es noch auf COL liegt. Ich denke mit einem guten Programm kann der Assist entfernt werden. Der Trigger soll einen Ausgang auf 13 geben und zwar genau solange bis COL aktiviert wird, unabhängig davon ob Trigger noch gedrückt ist oder nicht. Selector ist im moment sozusagen eine Sicherung, ist der aktiviert darf nichts passieren.
1 | /* |
2 | Turns on and off a Mosfet connected to digital |
3 | pin 13, when pressing the trigger attached to pin 5. |
4 | |
5 | The circuit: |
6 | * Mosfet attached from pin 13 to ground |
7 | * Trigger attached to pin 5 from +5V |
8 | |
9 | */ |
10 | |
11 | |
12 | // constants won't change. They're used here to set pin numbers |
13 | |
14 | const int trigger = 5; // the number of the trigger pin |
15 | const int col = 6; // cut of lever pin |
16 | const int selector = 7; // selector pin |
17 | const int ledPin = 13; // Mosfet pin |
18 | const int assist = 8; // assist pin |
19 | |
20 | // variables will change: |
21 | int triggerState = 0; // variable for reading the variables status |
22 | int colState = 0; |
23 | int selectorState = 0; // SAFETY!!! |
24 | int assistState = 0; // if nothing works anymore...call the assist! |
25 | int variante = 0; |
26 | |
27 | |
28 | void setup() { |
29 | // initialize the Mosfet pin as an output: |
30 | pinMode(ledPin, OUTPUT); |
31 | |
32 | // initialize the other pins as an input: |
33 | pinMode(trigger, INPUT); |
34 | pinMode(col, INPUT); |
35 | pinMode(selector, INPUT); |
36 | pinMode(assist, INPUT); |
37 | |
38 | // activate intern resistors |
39 | digitalWrite(trigger, HIGH); |
40 | digitalWrite(col, HIGH); |
41 | digitalWrite(selector, HIGH); |
42 | digitalWrite(assist, HIGH); |
43 | } |
44 | |
45 | void loop() { |
46 | // read the state of the input values: |
47 | triggerState = digitalRead(trigger); |
48 | colState = digitalRead(col); |
49 | selectorState = digitalRead(selector); |
50 | assistState = digitalRead(assist); |
51 | |
52 | //Rule: Button pressed = LOW |
53 | if (selectorState == HIGH) { |
54 | if (triggerState == LOW && colState == HIGH){ |
55 | variante = 1; |
56 | } |
57 | if (triggerState == LOW && colState == LOW){ |
58 | variante = 2; |
59 | } |
60 | if(triggerState == HIGH){ |
61 | variante = 3; |
62 | } |
63 | if(assistState == LOW){ |
64 | variante = 4; |
65 | } |
66 | |
67 | switch(variante){ |
68 | case 1: |
69 | digitalWrite(ledPin, HIGH); |
70 | break; |
71 | |
72 | case 2: |
73 | digitalWrite(ledPin, LOW); |
74 | break; |
75 | |
76 | case 3: |
77 | digitalWrite(ledPin, LOW); |
78 | break; |
79 | |
80 | case 4: |
81 | digitalWrite(ledPin, HIGH); |
82 | } |
83 | delay(20); |
84 | } |
85 | // turn LED off: |
86 | |
87 | } |
Der Code so ist sicher nicht richtig, das ist mir klar. Ich habe gemacht was ich kann, komme aber nicht mehr weiter und bin um jede Hilfe froh.
Ich hab einen Hinweis bezüglich deiner Sicherung, das Teil ist so nämlich eher gefährlich als sicher. Wenn deine Sicherung drin ist macht dein Programm keine Überprüfung der Eingänge mehr. Wenn du also die Softair “sicherst“ während sich der Motor dreht, dann bleibt er nicht stehen sondern läuft ewig weiter! Und die Konstruktion mit ifs und anschließendem switch wirkt seltsam. Darf der Motor erst wieder anlaufen, wenn man den Abzug loslässt und erneut betätigt (Halbautomatik) oder ist das abschalten wegen der Mechanik nötig?
Danke für den Hinweis. Die Sicherung wird später ebenfalls anders umgesetzt, ziemlich sicher indem der ganze Stromkreis einfach unterbrochen wird. Der Motor darf erst wieder anlaufen nachdem der Abzug einmal losgelassen wurde und dann wieder gedrückt wird. Sprich "normale" Halbautomatik Das mit dem "switch" Befehl habe ich aus dem lieben Internet. Jemand hat da was so gesteuert und da ich nicht wusste wie weiter habe ich das mal übernommen. Ich verstehe wie das Switch geht, aber ist evtl nicht optimal hier, hast du recht.
Ich hab mir ein paar Gedanken dazu gemacht. Ich mach dir ein Flussdiagramm sobald ich Gelegenheit dazu habe. Switch ist schon mal sinnvoll, aber nicht so wie da oben.
Danke dir vielmals! Ist für mich wirklich schwierig so was zu machen ohne grosse Programmiererfahrung.
Oh my... sehe diesen Thread viel zu spät. Arduino für eine einfache Endabschaltung? Seriously? Für alle Nachahmer, die angehängte Schaltung für 1 EUR hätte es auch getan. Gleich der 2. Post in diesem Thread (Samuel C.) sagte doch schon, wie es geht.
Filip B. schrieb: > Ich möchte einen der beiden Schalter drücken können und das Signal soll > so lange weitergeleitet werden bis der andere Schalter gedrückt wird > Ich möchte also Taster 1 Drücken (egal ob kurz oder 2 Stunden lang) und > das Getriebe soll nur eine Umdrehung (also bis zur Nocke) machen. > Die beiden Steuerleitungskabel müssen nur kontakt haben, dann schaltet > das ganze. Das ist natürlich eine wirklich miese Beschreibung. Schliessen die Taster auf Druck einen Kontakt, oder öffnen sie einen Kontakt, oder haben sie einen Umschalter ? Es ist schön, daß die Steuerleitungkabel "nur Kontakt" haben müssen, aber wie viel Strom fliesst dann wenn sie Kontakt haben, und wie hoch ist die Spannung zwischen ihnen wenn sie keinen Kontakt haben. Auch wäre die Schaltung einfacher, wenn ein Steuerleitungskabel beispielsweise als Masse identifizierbar ist und immer Masse hat, und das andere normalerweise auf 11.1V liegt und wenn beide geschlossen sind z.B. 100uA fliessen (dann wüsste man, daß ein 10k Widerstand als pull up verbaut wurde). Mit etwas Glück würde neben den beiden Tastern (Umschalter) und dem MOSFET-Module (10mA Strom wenn verbunden, eine Leitung immer an Masse) zwei Bauteile reichen, ein BRX45 und ein 10nF Kondensator. Auch Joes Vorschlag ignoriert das unbekannte Verhalten des MOSFET-Moduls, er weiss nicht ob er "Kontakte schliessen zum Verbinden von Steuerleitungen" muss, oder ob 12V Ansteuersignal ausreicht, aber sein Vorschlag geht schon in die richtige Richtung. Ein NE555 benötigt weniger zusätzliche Bauelemente, aber egal. Samuel C. schrieb: > Ich würde es mit einem Mikrocontroller machen Du ersetzt vermutlich auch Widerstände gegen Mikrocontroller. Filip B. schrieb: > mich für einen fertigen Arduino NANO entschieden. Geil. So wird man in die Irre geleitet.
MaWin schrieb: > Auch Joes Vorschlag ignoriert das unbekannte Verhalten des > MOSFET-Moduls, er weiss nicht ob er "Kontakte schliessen zum Verbinden > von Steuerleitungen" muss, oder ob 12V Ansteuersignal ausreicht Richtig. Ich habe das Mosfet-Modul durch einen Mosfet ersetzt, und den Motor direkt getrieben ;-)
MaWin schrieb: > Samuel C. schrieb: >> Ich würde es mit einem Mikrocontroller machen > > Du ersetzt vermutlich auch Widerstände gegen Mikrocontroller. Wenn es dem Zweck dient, ja ;)
Samuel C. schrieb: > Wenn es dem Zweck dient, ja ;) Welchem Zweck ? Fragende in Foren zu veralbern und sich scheckig lachen wenn die zum Arduino-Board greifen ?
Das Aeduino Board habe ich aus verschiedenen Gründen gewählt. V.a. weil ich die Schaltung dann auch noch ausbauen will. da wird dann später noch so was wie ein Schusszähler, Kadenzmesser etc. Somit macht das glaube ich durchaus Sinn. Zur Frage wegen der Steuerleitung. Diese werde ich über ein LogicLevel Mosfet ansteuern. Grund: das ganze soll mit diversen Mosfetmodulen funktionieren und nur so kann ich das gewährleisten. wie bereits geschrieben sind alle Taster Schliesser
Ich kam dann nun auch mal dazu, das Flussdiagramm zu machen. Hoffe du kommst damit klar. Umsetzung in Code überlass ich mal dir, kannst ja nochmal fragen wenn es nicht klappt.
Hihi, das ist wieder ein gutes Beispiel dafür, je komplizierter desto falscher. a) warum ist ein Taster "1" wenn er nicht gedrückt ist, und "0" wenn er gedrückt ist? Geschenkt. b) "==" ist für mich ein Vergleich und keine Zuweisung. Aber c) was passiert, wenn "State" 3 wird? Naja, gut, muss ja nur 1x funktionieren. Ok, kein großer Fehler, mach aus "State==3" ein "State==0", dann funktioniert es. Der Witz ist doch: die ganze Logik basiert auf einer einfachen Flankenerkennung. Relevant ist die Flanke ungedrückt-gedrückt. Wenn man die Flankenerkennung mal hat, heisst das einfach: Flanke an Taster "Trigger" -> Motor an, Taster "Stop" -> Motor Aus. Dann ist auch unerheblich, ob der Motor läuft oder nicht. Und genau dies macht die Flipflop Logik, wobei für die Erzeugung einer Flanke bei "Stop" noch der Kondensator notwendig ist, da CLR sonst die CLK blockieren würde.
Uuups, Tippfehler, sollte natürlich 0 werden statt 3! == ist müll, da hast du Recht. Muss ein einfaches = sein. Die invertierten Taster sind bei AVR normal, da die µC einen internen Pull-up haben, damit ist low active günstiger als pull-down aussen dran. Ich würde vermutlich eher zu deiner Lösung greifen, hab den Thread aber erst nach dem Kauf des Arduinos gelesen. Wenn noch Schusszähler etc dazu kommen sollen, dann ist der µC wenigstens nicht mehr so fehl am Platz
Jan H. schrieb: > Wenn noch Schusszähler etc dazu > kommen sollen, dann ist der µC wenigstens nicht mehr so fehl am Platz Klar, kann man ja auch als nettes Übungsprojekt sehen. Ein Problem gibt's allerdings mit deinem Flußdiagramm (Statemachine) noch. Die Nocke wird nicht unmittelbar nach Trigger den "Col" Taster freigeben. Also wird State 2 sehr schnell wieder verlassen...
Filip B. schrieb: > … weil ich die Schaltung dann auch noch ausbauen will. da wird dann > später noch so was wie ein Schusszähler, Kadenzmesser etc. Na bitte! Lustiges Forum: Oft will jemand was ganz einfaches und alle sind sich einig: Nimm einen µC, damit kannst Du zusätzlich noch dies oder das umsetzen. Hier ist es anders rum: Die angehängte Schaltung für 1 EUR hätte es auch getan.^^ Sei es drum. Für alle Nachahmer nur zur Info: MaWin schrieb: > Du ersetzt vermutlich auch Widerstände gegen Mikrocontroller. Wenn die Spannungs-Pegel zufällig zur Aufgabenstellung passsen, können Mikrocontroller am Ende billiger als z.B. 74HCxxx-Gatter sein, natürlich nicht billiger als Widerstände. ;-) * Bei Monoflops mit konfigurierbaren Zeit-Konstanten ist ein µC z.B. eine Alternative. * Wenn die Gatterlaufzeit unkritisch ist, lassen sich Logik- Schaltungen mit vielen GPIOs preiswert umsetzen. Der STM8S103F3P6 hat zum Beispiel eine 'Standard operating voltage' von 2,95V bis 5,50V und ist damit ähnlich flexibel wie ein 74HCxxx-Gatter, hat aber 15 freie GPIOS, wenn man den SWIM-Pin frei läßt. Siehe Beitrag "Re: µC mit 1K SRAM für 24ct" Unser Kopf ist rund, damit das Denken die Richtung wechseln kann, daher dachte ich mir, ich poste mal eine Gegenmeinung als Denkanstoß, auch wenn er allgemein ist, also nicht speziell auf dieses Problem abzielt.
Joe F. schrieb: > Die Nocke wird nicht unmittelbar nach Trigger den "Col" Taster > freigeben. > Also wird State 2 sehr schnell wieder verlassen... Da hast du recht. Entweder man stoppt den Motor auf fallende Flanke von col oder reagiert nur auf steigende Flanke an col. Interessant wäre, wie weit der Motor nach dem abschalten nachdreht, vielleicht ist das dann gar kein Problem. Sonst: State 0: auf trigger warten, motor an State 1: auf col freigeben warten State 2: auf col warten, motor aus State 3: auf trigger freigeben warten, zurück zu 0 Müsste so besser funktionieren und sollte auch keine Probleme mit prellern haben. Wann fällt bei dem Getriebe den eigentlich der Schuss? Optimal anwenderfreundlich wäre direkt nach col, langlebig direkt davor (Feder nach Schuss entspannt)
Jan H. besten Dank, ich glaube ich verstehe das Grundprinzip deines Diagramms und werde es am Wochenende versuchen zu implementieren. Die Frage ob Arduino oder nicht hat sich für mich schnell gar nicht gestellt, da der Preis so tief ist und ich damit noch viele andere Funktionen einbauen kann. Zudem lerne ich so was und kann dann den anderen Arduino Nano (hab 2 gekauft) für andere Projekte sinnvoll nutzen. Der Schuss fällt direkt vor COL (ist übrigens eine Abkürzung für Cut Of Lever) Somit ist die Feder dann immer Entspannt. Der Motor wird "aktiv" gebremst (mit sich selber kurzgeschlossen, ist genaugenommen nicht aktiv, in der Airsoftszene hat sich dieser Begriff jedoch etabliert) Somit hält der recht schnell, sollte jedoch immer noch über den Punkt drehen wo COL wieder freigegeben wird. Es ist immerhin ein 200W Motor mit 45'000 U/min
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.