Forum: Mikrocontroller und Digitale Elektronik Mega32 + L293D + PWM, nur 0V oder 12V


von Nils (Gast)


Lesenswert?

Ich habe ein kleines Problem mit meiner PWM-Steuerung, die ich gerade 
versuche zu bauen.

Am L293D ist einmal die Spannung für die Logik (5V) und 12V für den 
Motor angelegt (auch richtig herum).
Hiernach ( http://www.mcu.hk/GIF/L293D.gif ) ist an In1 H, In2 L, 
Out1+Out2 am Motor, GND sind alle angeschlossen. En1 ist am 
Microcontroller am PWM-Pin angeschlossen.

Wenn ich mit meinem Multimeter messe oder eine LED mit Vorwiderstand 
direkt an den Pin anschliesse, kann ich das ganze regeln mit der 
Software auf meinem M32 (relevante Codeausschnitte kommen gleich noch). 
Jetzt habe ich eben den L293D daran angeschlossen und einen Motor dran. 
Wenn der PWM-Pin aus ist, dann ist am Motorausgang auch alles aus, aber 
EGAL was ich am PWM-Pin über 0V anliegen lasse, es kommen immer nur die 
12V heraus, obwohl, wenn ich in der Schaltung nochmal messe, kommt 
selbst mit dem Motortreiber noch eine Spannung heraus, die ich verändern 
kann.

Der Mega32 läuft mit einem externen 8MHZ Quarz, die Fusebits stimmen, 
der Quarz ist richtig angeschlossen mit den 22pF Kondensatoren. Ich 
Programmiere mit dem avr-gcc unter Linux. Das Restliche Programm (u.a. 
mit Display-Ansteuerung, Interrupt gesteuerter UART, ADC-Funktionen, 
...) funktioniert einwandfrei.

Hier das relevante Stückchen Code:
1
DDRD = (1 << PD5 ); // pd5 ausgang
2
TCCR1A = (1<<COM1A1) | (1<<WGM11);
3
TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10);
4
ICR1 = 0x6FFF;
5
6
OCR1A = 0x3FFF;

Den Code habe ich aus eurem " AVR-GCC-Tutorial ", compiliert ohne Fehler 
oder Warnungen.

Wenn ihr noch was wissen wollt/müsst, sagt bitte bescheid.
Ich danke hier auch gleich schon mal allen, die versuchen, mir zu 
helfen.

von Peter Diener (Gast)


Lesenswert?

Hallo,

ohne den Leistungstreiber genau zu kennen - man sollte normalerweise 
keinen PWM auf einen enable Pin geben, der ist dazu da, die ganze 
Anordnung abzuschalten. Der PWM muss normalerweise auf die In Pins, und 
zwar so, dass die gewünschte Logikfunktion erreicht wird. Also z.B. In1 
auf High und In2 auf PWM. Enable ist dabei immer High. Für eine 
Richtungsumkehr dann einfach In1 auf Low legen und die Wirkungsrichtung 
des PWM umdrehen.

Es kann sein, dass der Enablepin gegen hochfrequente Signale geschützt 
ist und ein PWM-Signal als dauer high erkennt. Das ist aber nur eine 
Vermutung.

Wenn du es so machst, sollte es auch funktionieren.

Grüße,

Peter

von Kobaltchlorid (Gast)


Lesenswert?

@ Peter Diener:

Tut mir leid, das ist Unsinn, was du da schreibst. Der Enable-Eingang 
ist unter anderem auch dazu gedacht, einen Motor per PWM zu regeln.

@ Nils: Du schreibst:

> EGAL was ich am PWM-Pin über 0V anliegen lasse, es kommen immer nur die
> 12V heraus,

Der PWM-Pin des Controllers kann keine Spannungen ausgeben, nur 
Rechteckspannungen mit wechselndem Tastverhältnis. Wenn du hier eine 
Gleichspannung mit einem normalen Billig-Multimeter messen willst, wirst 
du keinen Erfolg haben.

> obwohl, wenn ich in der Schaltung nochmal messe, kommt
> selbst mit dem Motortreiber noch eine Spannung heraus,
> die ich verändern kann.

Das heisst doch, dass die Schaltung funktioniert.

Welche Spannung hast du in diesem Fall an welchem Punkt der Schaltung 
womit gemessen? Hast du ein Oszilloskop, wo du dir die Signale ansehen 
kannst?

von Peter Diener (Gast)


Lesenswert?

@Kobaltchlorid:

Nils misst eben mit einem Multimeter die mittlere Spannung, die sich 
durch die Pulsweitenmodulation ergibt. Die Tatsache, dass am MC-Pin die 
Spannung verändert werden kann, auch mit angeschlossenem Treiber, zeigt, 
dass die Software funktioniert. Wenn er am Ausgang des Treibers aber nur 
immer 12 Volt misst, sobald irgendeine Pulsweite > 0 eingestellt ist, 
deutet das auf eine Filterung des Enablesignals im Leistungsteil hin. 
Und wie gesagt: Der enable ist zum Bereitschalten (enable) der Schaltung 
da, nicht zur Modulation des Augangs. Es mag sein, dass das in manchen 
Schaltungen funktioniert. Aus dem Datenblatt geht das aber nicht hervor 
und es hängt mit sicherheit auch von der verwendeten Frequenz ab. Aber 
nach der Fehlerbeschreibung von Nils ist es recht wahrscheinlich, dass 
es deswegen nicht funktioniert. Und was spricht denn gegen die korrekte 
Variante, einen der In Pins zu Modulieren?

@Kobaltchlorid:

Versuch auch mal niedrigere PWM-Frequenzen.

Grüße,

Peter

von Tassilo B. (big_t)


Lesenswert?

>> Und was spricht denn gegen die korrekte Variante, einen der In Pins zu 
Modulieren?
Es geht dann kein Freilauf mehr und man kann nur noch zwischen Vollgas 
und 'Vollbremse' umschalten.

Tassilo

von Peter Diener (Gast)


Lesenswert?

Hallo Tassilo,

die Zwangskommutierung ist mit der Selbstkommutierung in diesem Fall 
identisch. Stell dir vor Brücke 1 ist auf High und Brücke 2 auf Low. 
Dann fließt Strom von Brücke 1 durch den Motor in Brücke 2. Der 
Motorstrom integriert auf. Bestromt werden nur Transistoren, keine 
Dioden.

Jetzt erfolgt eine Kommutierung: Brücke 1 ist immer noch High, Brücke 2 
kommutiert von Low nach High um. Die Spannung über dem Motor ist jetzt 
Null, der Strom integriert ab. Er fließt immer noch in die gleiche 
Richtung (Motorinduktivität). Jetzt fließt der Stom in Brücke 1 immer 
noch durch den oberen Transistor, in Brücke 2 aber durch die obere Diode 
auf die positive rail zürück und dann wieder in den oberen Transistor 
von Brücke 1. Die Tatsache, dass in diesem Zyklus auch der obere 
Transistor von Brücke 2 eingeschaltet ist, ist irrelevant.

Wenn man enable wegnehmen würde, wären alle Brückentransistoren 
nichtleitend und der Freilauf der Motorinduktivität erfolgt doppelt so 
schnell gegen die negative Versorgungsspannung über die Dioden. Das 
bedeutet doppelten Stromrippel am Motor. Daher ist der Betrieb wie ich 
ihn vorschlage vorteilhaft.

Zudem ist damit ein Bremsbetrieb beim Richtungsumsteuern möglich, der 
die Bremsleistung in die Batterie zurückspeist.

Peter

von Nils (Gast)


Lesenswert?

Es lag tatsächlich daran, dass ich den PWM-Pin an En1, anstatt, an einem 
der Ins angeschlossen hatte.

Vielen Dank für die Hilfe!

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.