Archiv verlassen und diese Seite im Standarddesign anzeigen : Motor über Transistor schalten
andyrhoads
07.02.2013, 15:47
Hallo, ich bin neu hier und habe da mal eine Frage.
Ich möchte gerne einen Motor von einem RC-Auto ansteuern. Da ich noch Anfänger bin reicht es mir erstmal nur den Motor zu schalten (nicht zu regulieren).
Meiner Meinung nach müsste es doch mit einem Transistor realisierbar sein, oder? Der Motor läuft bei 5V und 400mA.
Der Mikrocontroller ist ein ATmega32.
In der anhängenden Datei ist mein Schaltplan zu sehen. Dieser funktioniert allerdings nicht.
Meine Frage lautet jetzt: Ist das totaler Schwachsinn oder muss ich da nur noch was dazu schalten?
HeXPloreR
07.02.2013, 16:06
Willkommen im Forum andyrhoads,
der Schaltplan sollte soweit funktionieren. Allerdings meine ich der BC547B kann nur 250mA ab.
Versuch den gleichen Aufbau ggf mal mit einer LED und 470 Ohm Widerstand anstatt des Motors.
Wenn dann immer noch nichts zu sehen ist, dann musst Du Deinen Schaltplan noch um den Pin an dem der Transistor angeschlossen ist erweitern. Und könntest uns den Programmcode hier zeigen.
Ich hoffe an Deinem ATmega ist noch bischen mehr angeschlossen ;)
Viele Grüße
Was man unbedingt dazu braucht ist eine Freilaufdiode, die die Spannung, die beim Abschalten der induktiven Last anfällt, auf ein für den Transistor ungefährliches Niveau begrenzt. Vielleicht ist der Transistor deswegen schon kaputt. Die Diode (ein Silizium Universaltyp genügt hier) wird parallel zum Motor geschaltet, Kathode an Plus.
Ansonsten ist der Basisvorwiderstand etwas hoch, für maximalen Ouitput sollte der Transistor maximalen Basisstrom bekommen (der ATmega darf maximal pro Pin, glaube ich, 20mA, also etwa 220 Ohm statt der 1k5, wenn der ATmega auf 5V läuft.). Eventuell noch im DB des Transistors nachsehen, was der maximal verträgt.
Falls die Spanungsversorgung für ATmega und Motor gleich ist, muss man auf ausreichende Leistung achten (sonst resettet der MC sofort). Falls die Spannungsversorgung getrennt ist, muss man die beiden Minuspole zu einer gemeinsamen Masse verbinden.
Zuletzt: 400mA sind vielleicht der Stromverbrauch im Leerlauf? Dann wird der Motor aus dem Stillstand oder bei Last gewaltig mehr ziehen, dann wird man einen MOSFET oder einen zweistufigen Verstärker brauchen. Das wäre die zweite Variante warum der Transistor vielleicht schon kaputt ist (maximaler Kollektorstrom überschritten bzw. maximale verlustleistung überschritten).
HeXPloreR
07.02.2013, 16:23
Oh, ja Freilaufdiode wäre noch ziemlich wichtig...da hat der ranke recht.
Viele Grüße
andyrhoads
08.02.2013, 18:59
Hallo, erstmal vielen Dank für die schnellen Antworten!
Ich habe den Vorschlag von HeXPloreR befolgt und habe in der Schaltung den Motor durch den besagten Widerstand und der LED ersetzt. Diese hat funktioniert. Anschließend habe ich den Rat von ranke ausprobiert. Aber dennoch passierte nichts. Ich habe es dann mal mit einer Darlingtonschaltung versucht, aber auch dies hat nicht geklappt. Der Motor hat nur kurz "gezuckt".
In meinem Testprogramm für den ATmega32 lasse ich in einem zeitlichen Intervall immer 5V und 0V ausgeben.
Als ich während des Betriebes mal Spannungen gemssen habe, hat der MC nur konstant 0,5V ausgegeben. Wenn ich die Schaltung vom MC trenne gibt er wieder die 5V und 0V im Wechsel aus.
Würde es funktionieren wenn ich einen Tranistor mit einem Kollektorstrom von max.1A einsetze? zb der?:
http://www.reichelt.de/BC-Transistoren/BC-637/3/index.html?;ACTION=3;LA=2;ARTICLE=5031;GROUPID=288 1;artnr=BC+637;SID=13URUh0X8AAAIAACmGbUIacbfa6a5d1 144a578a9bac8ae4d4289b
Oder gibt es noch einfachere oder gar bessere Methoden einen Motor zu schalten?
Im Anhang ist meine Skizze für die aktuelle Schaltung und das Testprgramm für den Testbetrieb.
Viele Grüße
HeXPloreR
08.02.2013, 19:17
Dann könnte es sein das die Spannung einbricht.
Woher nimmst Du die 5V für den µC und woher die Spannnung für den Motor?
Eine Darlingtonschaltung bringst hier wohl nichts, denn Du hast ja 5V zum durchschalten.
Mein Tipp: Baue eine LED mit Widerstand extra an, schreibe Dein Program so um das die LED eingeschaltet wird (-aber nicht wieder ausschalten) und unmittelbar davor setzt Du eine Pause von ca 500ms ein - das Ganze vor einer eventuellen Schleife die den Motor einschaltet.
Wenn jetzt die LED anfängt zu blinken, während der Motor laufen soll - dann ist das ein Zeichen dafür das die µC-Spannung einbricht und ständig resetet. Kondensatoren von VCC zu GND direkt an die Pins könnten das kompensieren.
Dein Testprogramm habe ich nicht geöffnet - es gibt hier die erweiterte Funkion zum Code eingeben.
Viele Grüße
andyrhoads
10.02.2013, 19:19
Könnte ich nicht auch eigentlich einen L293D einsetzen? Dann könnte ich auch ohne große Probleme den Motor in zwei Richtungen bestreiben.
Zudem könnte ich auch gleich den zweiten Motor für die Lenkung damit steuern.
Der/Die Motoren läufen bei 5V und 400mA. Dann müsste er doch auch den Anlaufstrom gut meistern können, oder?
Würden 8 Batterien AA 1,5V (4 in serioe und das gleiceh nochmal parallel) reichen?
Viele Grüße
Wenn Du beide Drehrichtungen haben willst ist ein integrierter Motortreiber sicher keine schlechte Idee. Der L293D ist allerdings kein Kraftpaket. Ich weiss nicht wie die Angabe 400mA bei 5V zu verstehen ist. Ist das der Nennstrom oder Leerlaufstrom?
Wenn Du zwei Batterieblöcke hast, schalte sie nicht parallel sondern verwende einen nur für Controller und Logik und den anderen für Leistung (Motor). Damit bleibt die Logikspannung unabhängig vom Stromhunger des Motors.
andyrhoads
20.02.2013, 15:17
Ich habe den L293D schon eingesetzt und es funktioniert auch ganz gut. Der Motor nimmt während des Betriebs einen Strom von ca. 450mA auf. Der Anlaufstrom beträgt für sehr kurze Zeit ca. 1,2A (gemessene Werte). Zur Zeit benutze ich für die Testzwecke ein Labornetzteil für Anfänger. Der liefert Ströme bis 3A und Spannungen bis 36V. Wenn ich aber später auf Batterien umsteige dann werde ich die Logikspannung und die Energieversorgung für den Motor auch trennen.
Danke für die Antwort
Viele Grüße
andyrhoads
20.02.2013, 23:33
Die Ansteuerung der beiden Motoren (1 Motor für vor-rückwärts; 1 Motor für links rechts) über L293d funktioniert zwar, aber bei etwas längerer Laufzeit von ca. 4 sek am Stück scheint der Mikrocontroller zusammen zu brechen. Danach funktioniert nichts mehr. Woran kann das liegen? Ist der L293d zu schwach? Dann wunderts mich aber dass er die beiden kurzen Anlaufströme meistert. Wenn ich die Spannung vom Controller nehme und wieder neu anlege, dann beginnt alles wieder von neuen (also lässt sich alles ansteuern, aber nicht dauerhaft betreiben). Kennt jemand diese Probleme?
Liebe Grüße
Hallo,
wird der L293D heiß? Ohne Kühlung kann man bei den meisten Brückentreibern nicht einmal den angegebenen Nennstrom nutzen.
Grüße, Bernhard
Hubert.G
21.02.2013, 12:57
Das kann mehrere Gründe haben, z.B. ein Fehler in der Software.
Was für eine Spannungsquelle nutzt du?
Immernoch das Labornetzteil, oder Batterien?
Wenn Motor und Steuerung an einer Batterie hängen, die einen zu grossen Innenwiderstand hat, bricht die Spannung ein und dann ist Schluss. Die ca. 4s Verzögerung kommt dann vermutlich durch Kondensatoren, die erst die Spannung stützen und sich dadurch entladen.
Wenn es also Batterienn sind die du nutzt, dann schreib mal bitte was für welche (Typ, Kapazität und Nennspannung).
Am Labornetzteil könnte es dann auch die Strombegrenzung sein.
andyrhoads
24.02.2013, 15:33
Hallo,
wird der L293D heiß? Ohne Kühlung kann man bei den meisten Brückentreibern nicht einmal den angegebenen Nennstrom nutzen.
Grüße, Bernhard
Nein, wird er nicht. Er wird nicht mal wirklich warm
Ich benutze immer noch das Labornetzteil. Ich habe keine Verzögerung, sondern ich kann einen Motor max 4s ununterbrochen lang betreiben. Wenn ich die Motoren kürzere Zeit ansteuere zB. 1s rückwärts, dann 2s vorwärts usw klappt alles; auch so oft wie ich möchte. Nur bei "längerem" Betrieb funktioniert auf einmal garnichts mehr.
Ich hab euch mal die Schaltung im Anhang beigefügt.
Der Code ist:
// Fahrzeugteststeuerung
#ifndef F_CPU
#define F_CPU 16000000UL // Taktfrequenz = 16 MHz
#endif
#include <avr/io.h>
#include <util/delay.h>
int main (void)
{
DDRB = 0xff; // Datenrichtungsregister Port B auf Ausgang setzen
DDRA = 0x00; // Datenrichtungsregister Port A auf Eingang setzen
PORTA = 0xff; // Pull-Up Widerstände aktivieren
while(1)
{
while (PINA==0x00) // Kein Signal, keine Aktion
{
PORTB=0x00; // ggf. noch anliegende Signale löschen
}
PORTB=~PINA; // Übernehme Taster Status
}
}
Hallo,
auch wenn es hier wohl keinen Unterschied macht - die folgende while-Schleife wird nicht ausgeführt:
while (PINA==0x00) // Kein Signal, keine Aktion
{
PORTB=0x00; // ggf. noch anliegende Signale löschen
}
Dazu müssten alle 4 Taster gedrückt sein und zudem auch alle 4 restlichen Pins am Port A auf Low liegen. Da bei PA4 bis PA7 die Pullups aktiv sind und in deinem Schaltplan extern nichts angeschlossen ist, wird hier immer high-Pegel anliegen. Außerdem verstehe ich nicht, wozu diese innere Schleife gut sein soll :-k
Noch Tipps zur weiteren Fehlersuche:
- Tritt das 4-Sekunden-Problem auch auf, wenn du die Eingänge des Motortreibers direkt mit +5V oder GND verbindest?
Falls ja, dann wäre dort der Fehler zu suchen.
- Wenn das nicht die Ursache ist, könntest du herausfinden, ob der Mikrocontroller einen Reset macht (z.B. bei Programmstart eine LED an einem Port kurz leuchten lassen und wieder ausschalten). Wenn die LED dann im normalen Programmablauf aufblitzt, hat der Controller neu gestartet. (Eventuell Brown-out-detection aktiv geworden?)
Grüße, Bernhard
Ok, du nutzt also ein Labornetzteil. Liefert das direkt die 5V? Oder benutzt du noch einen Spannungsregler (z.B. 7805) um aus z.B. 9V die 5V zu bekommen? Wenn du einen Spannungsregler benutzt, kann dieser der Engpass sein.
Calis007
25.02.2013, 16:37
Der L293D hat einen integrierten "Thermal Shutdown", also eine Art Thermosicherung. Vielleicht schlaegt die zu, noch bevor die Waerme nach draussen dringt..
Warum der allerdings nur bei Batteriebetrieb zuschlagen sollte und nicht beim Labornetzteil, ist mir aber nicht klar..
andyrhoads
25.02.2013, 20:09
Oder benutzt du noch einen Spannungsregler (z.B. 7805) um aus z.B. 9V die 5V zu bekommen?
Das labornetztei liefert direkt 5V.
Ich wollte den Rat von BMS befolgen und mal die Motoren direkt and den Motortreiber anschließen. Aber irgendewie tritt der Fehler nicht mehr auf, obwohl ich nichts verändert habe..... ich hoffe das bleibt so ;)
Als nächstes wollte ich einen Abstandswarner installieren. Das Abstandswarnmodul gibt mir bei einer Hindernisserkennung 4V auf einen Draht, den ich als Abgriff benutze. Den könnte ich doch eigentlich auf einen Pin vom ATmega legen, oder? Das wäre ja laut Datenblatt schon ein gültiger High-Pegel.
Als nächstes wollte ich einen Abstandswarner installieren. Das Abstandswarnmodul gibt mir bei einer Hindernisserkennung 4V auf einen Draht, den ich als Abgriff benutze. Den könnte ich doch eigentlich auf einen Pin vom ATmega legen, oder? Das wäre ja laut Datenblatt schon ein gültiger High-Pegel.
Um welchen Sensor handelt es sich denn? 4V sind ungewöhnlich, 3,3V oder 5V wäre der nächste Standard. (Das ist ziemlich sicher ein Sensor mit Analogausgang)
andyrhoads
26.02.2013, 18:09
Es handelt sich um einen Analogausgang.
http://www.pollin.de/shop/dt/NTg5OTE0OTk-/Bausaetze_Module/Bausaetze/Ultraschall_Abstandswarner_Bausatz.html?utm_source =google-shopping&utm_medium=online&utm_content=html&utm_campaign=googleshop_automatic&gclid=COLgj_251LUCFchd3god6DIAyA
Allerdings habe ich die Bauteile auf einen andere Platine gelötet.
Die Schaltung ist im Anhang zu sehen.
Ich habe nochmal nachgemessen. Es sind in der Tat um die 3,3V
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.