Forum: Analoge Elektronik und Schaltungstechnik Mosfet Ansteuerung


von Filip B. (airsoftspieler)


Lesenswert?

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

von Samuel C. (dragonsam)


Lesenswert?

Schalter oder Taster?

RS-Flipflop ist das Stichwort.

von pullunder (Gast)


Lesenswert?

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?

von Filip B. (airsoftspieler)


Lesenswert?

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.

: Bearbeitet durch User
von Samuel C. (dragonsam)


Lesenswert?

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.

von Filip B. (airsoftspieler)


Lesenswert?

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

: Bearbeitet durch User
von Samuel C. (dragonsam)


Lesenswert?

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?

von Filip B. (airsoftspieler)


Lesenswert?

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

von Samuel C. (dragonsam)


Lesenswert?

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 :)

von Filip B. (airsoftspieler)


Lesenswert?

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 ;)

von Magic S. (magic_smoke)


Lesenswert?

Ich hab gerade gelernt, daß Google dafür am besten geeignet sei und man 
sich andere Dumme suchen soll.

von Samuel C. (dragonsam)


Lesenswert?

Das AVR-Tutorial bzw. AVR-GCC-Tutorial ist schonmal ein guter Anfang ;)

von Filip B. (airsoftspieler)



Lesenswert?

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.

von Jan H. (jan_m_h)


Lesenswert?

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?

von Filip B. (airsoftspieler)


Lesenswert?

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.

: Bearbeitet durch User
von Jan H. (jan_m_h)


Lesenswert?

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.

von Filip B. (airsoftspieler)


Lesenswert?

Danke dir vielmals!
Ist für mich wirklich schwierig so was zu machen ohne grosse 
Programmiererfahrung.

von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

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.

von Joe F. (easylife)


Lesenswert?

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 ;-)

von Samuel C. (neoexacun)


Lesenswert?

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 ;)

von MaWin (Gast)


Lesenswert?

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 ?

von Filip B. (Gast)


Lesenswert?

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

von Jan H. (jan_m_h)


Angehängte Dateien:

Lesenswert?

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.

von Joe F. (easylife)


Lesenswert?

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.

: Bearbeitet durch User
von Jan H. (jan_m_h)


Lesenswert?

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

von Joe F. (easylife)


Lesenswert?

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...

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

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.

: Bearbeitet durch User
von Jan H. (jan_m_h)


Lesenswert?

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)

von Filip B. (airsoftspieler)


Lesenswert?

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
Noch kein Account? Hier anmelden.