PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Leistungsschalter und µC



MechMac
08.01.2011, 14:13
Hallo,

ich möchte gerne 12Volt mit einem µC schalten. Das Problem ist, das ich nicht weiß welches FET ich dafür nehmen sollte.

Ich hatte bereits Erfolge mit einem BTS660P. Diesen habe ich mit einem BC547 Transtistor angesteuert. Der BTS660P hat eine Ladepumpe und er wird aktiviert wenn man das Gate gegen GND schaltet. Dazu der BC547 Transistor. Das hat supi funktioniert. Nur leider gibts den BTS660P nicht mehr.

Dann habe ich einen IRF3205 ausprobiert. Das ist ein N-Kanal Anreicherungstyp. Der Plan war die 5Volt auf das Gate zu geben und gut ist. Leider hört das Ding nicht mehr auf durchzuschalten. Selbst wenn man die 5Volt komplett vom Gate abklemmt. Der FET ist nicht defekt, ein zweiter den ich zum Testen probiert hatte, macht das auch. Seltsamer Weise hört er auf Durchzuschalten wenn man GND und Gate Brückt. Egal ob mit Finger oder Kabel. Keine Ahnung ob das so sein soll.

So, jetzt würde mich mal interessieren wie ihr das so macht. Interessant wäre für mich ein FET der vom µC aus angesteuert werden kann. Gerne auch mit Hillfstransistor. Mittlerweile habe ich mich so sehr damit herumgeärgert das es einfach nur noch laufen soll. Ich möchte keine SMD-Bausteine verwenden.

Gruß, Andreas

BMS
08.01.2011, 14:30
Leider hört das Ding nicht mehr auf durchzuschalten. Selbst wenn man die 5Volt komplett vom Gate abklemmt. Der FET ist nicht defekt, ein zweiter den ich zum Testen probiert hatte, macht das auch. Seltsamer Weise hört er auf Durchzuschalten wenn man GND und Gate Brückt. Egal ob mit Finger oder Kabel. Keine Ahnung ob das so sein soll.
Ja, dass muss so sein :) Das kommt daher, dass das Gate eine Kapazität gegenüber Source hat. Einmal aufgeladen, leitet der FET dann ständig. Zum ausschalten musst du das Gate wieder entladen (mit GND verbinden).
Den Pin vom Mikrocontroller einfach hochohmig zu schalten reicht nicht.
Siehe auch http://b-kainka.de/bastel12.htm

Wenn dem FET 5V am Gate reichen, kannst du ihn direkt an einen Pin vom Mikrocontroller hängen (evtl. noch ein Widerstand dazwischen um den Mikrocontrollerpin beim Auf/Entladen der Gate-Kapazität nicht zu überlasten).
Einschalten: 5V am Pin ausgeben
Ausschalten: 0V am Pin ausgeben
Falls 5V am Gate nicht reichen sollten, suche mal nach logic-level-FETs.

Siehe auch:
http://www.mikrocontroller.net/articles/Snippets#Wie_schlie.C3.9Fe_ich_einen_MOSFET_an_ein en_Mikrocontroller_an.3F

Grüße,
Bernhard

BASTIUniversal
08.01.2011, 14:37
Hallo!

Seltsamer Weise hört er auf Durchzuschalten wenn man GND und Gate Brückt.

Das ist vollkommen normal für einen FET.
Im Gegensatz zu einem bipolar Transistor wie dem BC547 ist ein FET nicht Stromgesteuert sondern Spannungsgesteuert. Dazu kommt, dass das Gate des FET wie ein kleiner Kondensator wirkt.
Gibst du 5V auf das Gate, so steuert der FET durch. Nimmst du die 5V weg (z.B. µC Pin in Tristate), so speichert dieser kleine Kondensator die Spannung und der FET bleibt durchgeschaltet. Bei einem bipolar Transistor wäre das nicht passiert, da Tristate = Hochohmig = kein Strom durch die Basis bedeutet.

Du solltest folgendes tun:
Den entsprechenden Pin des µC über etwa 470Ohm an das Gate des FET anschließen. Zwischen Gate und 470Ohm Widerstand setzt du einen Pull-down Widerstand mit etwa 10k gegen Masse (das verhindert die "Finger-Effekte")
Beim ansteuern den µC-Pin nicht in den Tristate-Mode steuern sondern gegen Masse.

Mehr Details zu den FETs findest du im RN-Wiki bzw. bei Wikipedia.

Möchtest du trotzdem nicht auf die Vorteile des BTS verzichten, könntest du einen BTS141 von Reichelt verwenden.

Gruß
Basti

MechMac
08.01.2011, 15:34
Hallo,


wenn ich den 10K widerstand wie beschrieben einbaue, schaltet der FET gar nicht mehr.

Wie gebe ich denn 0 Volt aus, bzw. wie schalte ich einen Pin gegen Masse?
Ich habe leider keine Infos dazu gefunden.

Oder ist das so gemeint das man den Pin als Eingang setzt? Wenn ja, mit, oder ohne internen Pull-Up?

Gruß, Andreas

BASTIUniversal
08.01.2011, 16:06
Hey!
Poste bitte, welchen Controller du verwendest, das Programm und am besten noch einen Schaltplan.

MechMac
08.01.2011, 19:10
Hallo,

ich verwende einen Atmega 644.

Das Testprogramm ist ein wenig durcheinander weil ich da allen möglichen Kram mit teste, also nicht wundern wenn da Zeugs drin ist, was nicht benötigt wird.




#include <avr/io.h>
#ifndef F_CPU
/* Definiere F_CPU, wenn F_CPU nicht bereits vorher definiert
(z.B. durch Übergabe als Parameter zum Compiler innerhalb
des Makefiles). Zusätzlich Ausgabe einer Warnung, die auf die
"nachträgliche" Definition hinweist */
#warning "F_CPU war noch nicht definiert, wird nun mit 16000000 definiert"
#define F_CPU 16000000UL /* Quarz mit 16.0000 Mhz */
#endif
#include <util/delay.h>
#include "i2cmaster.h"
#include <util/delay.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <string.h>
#define Dev24C02 0xA2
#define UART_BAUD_RATE 19200L
#define UART_BAUD_CALC(UART_BAUD_RATE,F_CPU) ((F_CPU)/((UART_BAUD_RATE)*16L)-1L)


int main( void )
{
while(1)
{
PORTD ^= ( 1 << PD2 ); // Toggle
for(int i=0; i < 7 ; i++)
{
_delay_ms(1000);
}
}

}




Gruß, Andreas

BASTIUniversal
08.01.2011, 19:27
Hi!
Dein Schaltplan ist etwas "unleserlich"...wo ist der µC angeschlossen? Gehen die 10k nach GND?

Die 450 Ohm sollten an den µC-Pin gehen, die 10k nach GND. Das Gate kommt nicht mit VCC in Berührung.

MechMac
08.01.2011, 20:20
Ups, das war ein Tippfehler von mir. Da wo Vcc steht, ist natürlich der Portpin vom µc. Sorry.

Gruß, Andreas

BMS
08.01.2011, 20:35
Mit dem Programm bin ich noch nicht einverstanden.
Du hast nirgends DDRD (Data Direction Register) definiert, d.h. der PD2 ist noch als Eingang geschaltet. Wenn du dann PORTD ansprichst, wird lediglich der Pull-up gesetzt / gelöscht.
Da der integrierte Pullup aber auch so im Bereich 10kOhm aufwärts hat, wirkt das mit den äußeren Widerständen als Spannungsteiler, die Spannung am Gate ist dann wohl zu niedrig für den FET.

Du musst das entsprechende Bit in DDRD auf 1 setzen, um PD2 als Ausgang zu schalten (siehe Tabelle im Anhang). Also

DDRD=0b00000100;
noch vor die while-Schleife. Dann ist der Pin ein "echter" Push-Pull-Treiber und kann genug Strom liefern.

Nebenbei: Du hast die delay.h 2x eingebunden

Grüße,
Bernhard

MechMac
08.01.2011, 21:02
Super, habt vielen Dank! Es funktioniert.
Mit dem R 10K läuft es auch, es lag an dem falsch gesetzten Pin.


Gruß, Andreas