Forum: Analoge Elektronik und Schaltungstechnik PWM-Steuerung eines DC-Motors mit Arduino und MOSFET


von Maschbauer (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

vorneweg - ich bin Maschinenbauer mit Mechatronik Vertiefung. Daher 
bitte ich um Verständnis, dass ich nicht das qualifizierteste 
Elektronik- und Elektrotechnik-Wissen besitze. Ich wende mich an dieses 
Forum, da ich hier offensichtlich die richtigen Fachleute anspreche.

Zur Problematik:
Ich möchte einen kleinen Coreless-DC-Motor mit 3.7V ansteuern. Dieser 
ist bis 5V ausgelegt. Verwenden möchte ich den Motor - später dann vier 
davon - für einen eigenen Quadrocopter, weshalb ich eine Versorgung per 
Batterie benötige. Ich werde hierfür einen Lipo verwenden, der bei einer 
Zelle eben nur 3,7V hat (bzw. 4,2 wenn voll geladen) - soviel zur 
Erklärung warum 3,7V.

Diese 3,7V sollen über ein PWM-Signal vom Arduino variiert werden. Anbei 
findet Ihr einen Steck- und Schaltplan. Im Schaltplan sind die 
verwendeten Komponenten beschriftet.

Mein Arduino-Code ist prinzipiell eine einfache PWM-Ansteuerung:
1
#define PWM_PIN_M0 9
2
int PWM = 0;
3
4
void setup() {
5
  pinMode( PWM_PIN_M0, OUTPUT );
6
  TCCR1B = TCCR1B & B11111000 | B00000001; // set timer 1 divisor to 1 for PWM frequency of 31372.55 Hz
7
  
8
  analogWrite(PWM_PIN_M0, 0);
9
10
  Serial.begin(9600);
11
}
12
void loop() {
13
  if( Serial.available() ){
14
    /* irgendeine einlese-Routine für PWM
15
    PWM = ... ;
16
    */
17
    analogWrite(PWM_PIN_M0, PWM);
18
  }
19
  delay(100);
20
}

Der Code ist noch etwas umfangreicher, das ist aber der entscheidende 
Teil.

Nun wollte ich das gesamte Setup testen. Ich habe also den Sketch 
hochgeladen und über den seriellen Monitor meine PWM-Werte geschrieben. 
Ich habe das Ganze zunächst mit den Arduino 5V- und GND-Pins als 
Stromversorgung probiert - hat super geklappt.
Danach dann den LiPo so angeschlossen wie im Steckplan. Selbst bei 100% 
Duty-Cycle hat sich der Motor nicht gedreht. Batterie geprüft: 4,2V. 
Danach habe ich den Motor direkt an die Batterie angeschlossen und er 
dreht sich, wie er es soll.
Ich habe es dann erneut mit der PWM-Schaltung mit MOSFET probiert und 
wollte an der Diode mit meinem Multimeter die Spannung messen, die über 
dem Motor abfällt. Und plötzlich - ich habe NUR das COM-Ende an die 
Diode gehalten - ging der Motor los. Ich habe dann die PWM-Ansteuerung 
von dem Gate-Pin weggenommen und der Motor drehte weiter und weiter.
Anscheinend habe ich den MOSFET von Drain zu Source kurzgeschlossen 
(???). Ich habe das gleich mit noch einem anderen MOSFET probiert und 
wieder versucht mit dem Multimeter die Spannung zu messen. Erneut 
reichte eine kleine Berührung aus und der MOSFET war kurzgeschlossen.

Da ich mich nur ansatzweise mit Elektronikkomponenten auskenne, hier 
eine unqualifizierte These, was passiert ist:
Anscheinend wird die Drain-Source-Spannung nicht geschaltet, wenn diese 
zu gering ist (Spannungsversorgung 5V vom Arduino vs. 3,7/4,2V vom 
Lipo). Der MOSFET wurde beim Messen durch den Kontakt COM geerdet, 
wodurch intern irgendwas passiert ist. Kann auch sein, dass ich einen 
komplett falschen MOSFET für diese Anwendung verwende. Ich habe wie 
gesagt wenig Ahnung.

Ich hoffe Ihr könnt mich aufklären und mir Tipps geben, wie ich diese 
Schaltung umändern sollte. Ich wäre euch sehr dankbar.

Viele Grüße,

Janis

von Zeitjäger  . (forgoden)


Lesenswert?

Pull-Down-Widerstand fehlt

10k Widerstand zwischen pwm-kabel und GND verbinden

Minus von Batterie auch mit GND von Arduino verbinden (Massenverbindung)

Und IRF520 schaltet bei 5V zwar nicht ganz durch aber für Anfänger erst 
mal egal

Und warum einen so hohen Frequenz?

evtl diese Zeile löschen:

 TCCR1B = TCCR1B & B11111000 | B00000001; // set timer 1 divisor to 1 
for PWM frequency of 31372.55 Hz

: Bearbeitet durch User
von Achim S. (Gast)


Lesenswert?

Helmut V. schrieb:
> Und warum einen so hohen Frequenz?

Wahrscheinlich deswegen:

Maschbauer schrieb:
> einen kleinen Coreless-DC-Motor

Coreless-Motoren haben eine sehr viel kleinere Induktivität als 
"normale" DC-Motoren - dementsprechend muss bei PWM-Ansteuerung die 
Frequenz deutlich höher gewählt werden. (oder eine zusätzliche 
Induktivität in Serie geschaltet werden.)

Dafür sollte dann aber auch etwas schnelleres als als die 1N4007 als 
Freilaufdiode gewählt werden - nicht eine Gleichrichterdiode, die für 
Netzfrequenz und für 1000V Sperrspannung gebaut wurde.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Maschbauer schrieb:
> Ich habe das gleich mit noch einem anderen MOSFET probiert und
> wieder versucht mit dem Multimeter die Spannung zu messen. Erneut
> reichte eine kleine Berührung aus und der MOSFET war kurzgeschlossen.

Mach erst mal die o.a. Masseverbindung und den Pulldown Widerstand, den 
Helmut mit 10k vorschlägt.

MOSfets werden praktisch leistungslos angesteuert und das Gate ist ein 
kleiner Kondensator, der vom Signal am Gate aufgeladen und entladen 
wird.
Deswegen steuert ein MOSFet nach erfolgter Aufladung durch, selbst wenn 
man am Gate nichts mehr dran hat. Entlädt man den Gate-Kondensator z.B. 
mit einem Widerstand gegen die Source, sperrt er wieder.
Energie zum Steuern eines MOSFets ist also nur der Lade- und 
Entladestrom des Gates.
Sei ein wenig vorsichtig bei der Berührung des Gates, denn da sind keine 
Schutzmassnahmen im Bauteil. Eine statische Entladung kann die dünne 
Isolationsschicht zerstören.
In Zukunft benutze nicht den IRF520, sondern besser einen echten 
Logiklevel MOSFet wie den IRLZ34N oder den IRLZ44N. Diese sind mit 5V am 
Gate voll durchgesteuert.

: Bearbeitet durch User
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.