INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 2 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Motorsteuerung mit Mosfet
07.12.2014, 21:11 (Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2014 21:14 von einserbeamer.)
Beitrag #1
Motorsteuerung mit Mosfet
N'abend zusammen,

ich benötige eure Hilfe da ich bei dem Fehlerbild einfach nicht mehr weiter wo, wo das Problem liegt.

Ich möchte mit dem Arduino Uno einen Gleichstrommotor via PMW steuern. Soweit so gut. Als Strom Versorgung bekommt der Uno saft über 9V Block und das Motor über ein 9V Netzteil (1A Output). Zum Schalten des Motors nutze ich einen MOSFET (IRLIZ44N). Schaltung siehe Anhang.

Quelle: http://www.kriwanek.de/arduino/aktoren/3...alten.html

Ich möchte Den Motor in drei Modi laufen lassen : Langsam, Mittel, Schnell.
Diese drei Modi werden mir via Status-LEDs angezeigt, damit der Anwender erkennt und welchem Modus sich der Arduino befindet. Außerdem soll mittels Taster das Programm gewechselt werden.

Langsam, Mittel, Schnell --> Aus, Langsam, Mittel, Schnell usw.

Ich habe das Programm ohne Last getestet (nur Spannung mit MM gemessen) und die LEDs leuchten alle somit kann ich sicher gehen, dass das Programm jeden Modus durchläuft.

Die Schaltung habe ich mit einem anderen Programm mittel PMW getestet leider. funktioniert die Schaltung in Kombination mit meinem Programm nicht.

Fehlerbild: Arudino springt nach 1.Tastendruck in den ersten Modus und bleibt dort auch wie geplant. Beim zweiten Tastendruck leuchten alle einmal auf und dann geht der Motor in "Aus".
Ich weiß echt nicht wo mein Fehler liegt, da ich ja Programm und Schaltung unabhängig von einander getestet habe.








#include <Bounce2.h>
const int buttonPin1 = 2;
int button1State = 0;
const int LED0 = 13;
const int LED1 = 12;
const int LED2 = 11;
const int LED3 = 10;
int Motor = 9;
int i = 0; //Zählvariable
int state = LOW;
int laststate = LOW;
int zwischenwert;
Bounce bouncer = Bounce();
/**********************************************************/
//Pin-Initalisierung

void setup()
{
pinMode(buttonPin1, INPUT);
digitalWrite(buttonPin1, HIGH);
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
bouncer.attach(buttonPin1);
bouncer.interval(100);
}

/**********************************************************/
// Deklaration Funktionen (Programme)


void Start()
{
analogWrite(Motor, LOW);
digitalWrite(LED0, LOW); //Anzeige Programm 0
digitalWrite(LED1, LOW); //Anzeige Programm 1
digitalWrite(LED2, LOW); //Anzeige Programm 2
digitalWrite(LED3, LOW); //Anzeige Programm 3
delay(500);

digitalWrite(LED0, HIGH); //Anzeige Programm 0
digitalWrite(LED1, HIGH); //Anzeige Programm 1
digitalWrite(LED2, HIGH); //Anzeige Programm 2
digitalWrite(LED3, HIGH); //Anzeige Programm 3
delay(500);
}

void Langsam()
{
analogWrite(Motor, 75);
digitalWrite(LED0, HIGH); //Anzeige Programm 0
digitalWrite(LED1, LOW); //Anzeige Programm 1
digitalWrite(LED2, LOW); //Anzeige Programm 2
digitalWrite(LED3, LOW); //Anzeige Programm 3
}

void Mittel()
{
analogWrite(Motor, 128);
digitalWrite(LED0, HIGH); //Anzeige Programm 0
digitalWrite(LED1, HIGH); //Anzeige Programm 1
digitalWrite(LED2, LOW); //Anzeige Programm 2
digitalWrite(LED3, LOW); //Anzeige Programm 3

}

void Schnell()
{
analogWrite(Motor, 255);
digitalWrite(LED0, HIGH); //Anzeige Programm 0
digitalWrite(LED1, HIGH); //Anzeige Programm 1
digitalWrite(LED2, HIGH); //Anzeige Programm 2
digitalWrite(LED3, LOW); //Anzeige Programm 3
}
void Stop()
{
analogWrite(Motor, LOW);
digitalWrite(LED0, LOW); //Anzeige Programm 0
digitalWrite(LED1, LOW); //Anzeige Programm 1
digitalWrite(LED2, LOW); //Anzeige Programm 2
digitalWrite(LED3, LOW); //Anzeige Programm 3
}
/**********************************************************/
//Hauptprogramm


void loop()
{

state = digitalRead(buttonPin1);

if (state == 1)
{
zwischenwert = 1;
}

if (state == LOW && zwischenwert == HIGH)
{
zwischenwert = 0;
i++;
switch (i)
{

case 0: //Start
Start();
break;

case 1: //Motor langsam
Langsam();
break;

case 2: //Motor mittel
Mittel();
break;

case 3: //Motor schnell
Schnell();
break;

case 4:
Stop();
break;

}

if (i == 4)
{
i = 0;
}

}
}


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.12.2014, 22:16
Beitrag #2
RE: Motorsteuerung mit Mosfet
Hi,
wie ist denn Pin 2 angeschlossen?
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2014, 08:13
Beitrag #3
RE: Motorsteuerung mit Mosfet
An Pin zwei ist ein Taster mit einem pullup Widerstand von 10j angeschlossen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2014, 09:43
Beitrag #4
RE: Motorsteuerung mit Mosfet
Hi,
Du hast doch aber schon den internen Pullup eingeschaltet, warum dann noch ein externer? Oder geht Pin 2 über den Taster, dann 10kOhm und dann nach +5V? ...oder nach GND?
Jedenfalls gehört es so, dass der Taster direkt den Pin mit GND verbindet, ohne irgendwelche Widerstände. Ich bin mir nicht sicher, ob das für das Problem was hilft, aber einen Versuch ist es sicherlich Wert.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2014, 09:53
Beitrag #5
RE: Motorsteuerung mit Mosfet
(08.12.2014 09:43)Thorsten Pferdekämper schrieb:  Hi,
Du hast doch aber schon den internen Pullup eingeschaltet, warum dann noch ein externer? Oder geht Pin 2 über den Taster, dann 10kOhm und dann nach +5V? ...oder nach GND?
Jedenfalls gehört es so, dass der Taster direkt den Pin mit GND verbindet, ohne irgendwelche Widerstände. Ich bin mir nicht sicher, ob das für das Problem was hilft, aber einen Versuch ist es sicherlich Wert.
Gruß,
Thorsten

...und wenn der Taster gegen GND geht dann ist auch die Abfrage falsch, anstatt
state = digitalRead(buttonPin1);
muß das dann
state = !digitalRead(buttonPin1);
heißen.
Das Ausrufezeichen invertiert den Einganspegel.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2014, 09:54
Beitrag #6
RE: Motorsteuerung mit Mosfet
Hi bk,
das denke ich nicht, da er schon auf Low-aktiv schaltet. ...aber im Prinzip ist egal, ob man bei der auf- oder absteigenden Flanke schaltet.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2014, 10:04
Beitrag #7
RE: Motorsteuerung mit Mosfet
(08.12.2014 09:54)Thorsten Pferdekämper schrieb:  Hi bk,
das denke ich nicht, da er schon auf Low-aktiv schaltet. ...aber im Prinzip ist egal, ob man bei der auf- oder absteigenden Flanke schaltet.
Gruß,
Thorsten

Danke für deinen Denkanstoß, jetzt hab ichs begriffen was die if's da machen...gut das hilft ein bischen das ganz verriegeln mit dem hochzählen...nur zu was dann eine Bounce Lib eingebunden ist ist damit nicht erklärt....von daher kann das Teil immer noch nach Lust und Laune prellen...Rolleyes

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2014, 10:32 (Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2014 10:36 von einserbeamer.)
Beitrag #8
RE: Motorsteuerung mit Mosfet
Ich den Taster wie folgt angeschlossen:

5V --> Taster --> 10K prallel zu Pin 2.

Naja wie gesagt ich hab ja kein Problem mit dem Taster, da ich ohne Last durchschalten kann. Oder meint ihr kann das Auswirkungen auf den Taster haben?



if (state == 1)
{
zwischenwert = 1;
}

if (state == LOW && zwischenwert == HIGH)
{
zwischenwert = 0;


Das soll eine Flankensteuerung bei fallender Flanke sein, damit wenn man den Taster gedrückt hält der nicht wie wild Hochzählt.

Vielen Dank für euer Bemühen

(08.12.2014 10:04)Bitklopfer schrieb:  Danke für deinen Denkanstoß, jetzt hab ichs begriffen was die if's da machen...gut das hilft ein bischen das ganz verriegeln mit dem hochzählen...nur zu was dann eine Bounce Lib eingebunden ist ist damit nicht erklärt....von daher kann das Teil immer noch nach Lust und Laune prellen...Rolleyes

Die Bounce Lib soll das Prellen vom Taster beseitigen, da das Signal ziemlich unsauber ist. Oder habe ich da mit der Lib was falsch verstanden, weil bei Ardu haben sie ja die Bounce2.h rausgebracht war für mich nicht wirklich ersichtlich laut Datenblatt wie ich die Lib anwende
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Motorsteuerung mit Schautzschtung aggro600 2 2.108 05.05.2015 20:04
Letzter Beitrag: aggro600
  Abwärtsregler mit Arduino und Mosfet D.T.Schneiderlein 3 2.122 13.09.2014 17:26
Letzter Beitrag: D.T.Schneiderlein

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste