Hi, ich habe eine fertige (bereits Einsatz erprobte) DC-Motoransteuerung mittels 2 Relais(Umpolung) + IRFZ44N (Speed) und (nicht zugänglicher) Bascom Programmierung auf Atmega8 Basis. Ich möchte gerne Platinendesign UND Programmierung (diesmal C++) überholen um das Gerät dem wachsenden Kundenanforderungen anzupassen (2x16er HD44780 Display und sanfter Anlauf des Motors) Auf Softwareseite wurde bislang mit dem IRFZ44N wohl eine sehr primitive Implementierung vorgenommen, denn jeh nach Stufe (50% 75% 100%) rast der Motor sofort mit dieser Drehzahl los) Dort habe ich bereits ALLES in C++ neu/nachimplementiert doch die PWM Ansteuerung ist noch nicht perfect. ==Meine Fragen:== Welchen PWM-Mode würdet ihr mir für diese Aufgabe empfehlen? (und welchen Takt) Kann ich anstatt des IRFZ44N gleich den L6203 (bzw. (L6201PS) verwenden? Oder doch eine diskrete H-Brücke aus IRFZ44N(s) aufbauen? [Nicht trivial? Bräuchte Beispiele/Hilfe] Was sollte ich bei einer solchen integriertn H-Brücke noch alles beachten gegeben der folgenden Fakten: VCC= 20-24V IRFZ44N (41A!! hoffe die waren nur Reserve?) L6201PS (4A 5A Peak--> https://www.mikrocontroller.net/articles/H-Brücken_Übersicht steht jedoch 10A Spitze, wie kommts?) DC-Motor= 25W (mit der bestehenden Schaltung mal "festgehalten" bringt 1,8A, dies würde sich mit der Faustformel Peak= Leistung *2 decken?) Grüße Oekel
@ D a v i d K. (oekel) >Ich möchte gerne Platinendesign UND Programmierung (diesmal C++) WOW! C++!!! Das muss je eine Super-Duper Motorsteuerung sein ;-) >überholen um das Gerät dem wachsenden Kundenanforderungen anzupassen >(2x16er HD44780 Display und sanfter Anlauf des Motors) Dazu reicht doch die vorhandene Hardware. Der MOSFET macht die Motoransteuerung mit PWM und die Relais die Umpolung für den Richtungswechsel. >Auf Softwareseite wurde bislang mit dem IRFZ44N wohl eine sehr primitive >Implementierung vorgenommen, denn jeh nach Stufe (50% 75% 100%) rast der >Motor sofort mit dieser Drehzahl los) Naja, das kann man ändern, rein in Software. >Dort habe ich bereits ALLES in C++ neu/nachimplementiert Welche C++ Spachelemente hast du denn da verwendet? ;-) >Welchen PWM-Mode würdet ihr mir für diese Aufgabe empfehlen? Ist egal. Akademisch gesehen sollte es ein glitchfreier sein, als beim AVR Phase/Frequency Correct Mode. >(und welchen Takt) Hängt vom Motor ab. Muss man mal probieren. Zwischen 50-10000 Hz PWM Frequenz ist vieles möglich. >Kann ich anstatt des IRFZ44N gleich den L6203 (bzw. (L6201PS) verwenden? Anstatt nicht, aber man kann die Relais und den MOSFET durch eine H-Brücke ersetzen. >Oder doch eine diskrete H-Brücke aus IRFZ44N(s) aufbauen? Nö. > [Nicht >trivial? Bräuchte Beispiele/Hilfe] Such lieber nicht hier, hier gibt es viel zuviele schlechte Frickelbeispiele von planlosen H-Brücken. >VCC= 20-24V Können die meisten. >IRFZ44N (41A!! hoffe die waren nur Reserve?) Jaja, ich kann auch 1t hochheben . . . >L6201PS (4A 5A Peak--> Reicht das nicht? >DC-Motor= 25W (mit der bestehenden Schaltung mal "festgehalten" bringt >1,8A, dies würde sich mit der Faustformel Peak= Leistung *2 decken?) Damit reicht der L6203 locker.
Ich würde zum L6203 raten, wobei für IN1 und IN2 je ein eigener PWM-Kanal (eines Timers) verwendet wird. Die PWM-Frequenz sollte über dem Hörbereich liegen. Schon immer einmal wollte ich ein Beispiel mit ATtiny45 dafür machen, bin aber bislang über einen Schaltplan nicht hinausgekommen. Bedarf? Eine andere Möglichkeit wäre eine Drehzahlregelung mit dem IRFZ44, wobei die EMK gemessen und die PMW entsprechend angepaßt wird. Hier muß deutlich langsamer getaktet werden (100 - 300 Hz), damit man die Generatorspannung sauber messen kann. Dafür habe ich wohl auch ein Programm für den ATmega328 gemacht (Sollwertvorgabe mit Poti). Zur Umpolung ist aber noch ein Relais erforderlich. Mit einem high-side-Treiber (BTS462) ist der Schaltungsaufwand etwas geringer und automatisch ein Überlastschutz vorhanden. Mit einem anderen µC betreibe ich den L6203 mit 1%-Stufen von 0 - 100% und Rampen zum Anfahren und Bremsen.
@ m.n. (Gast) >Ich würde zum L6203 raten, wobei für IN1 und IN2 je ein eigener >PWM-Kanal (eines Timers) verwendet wird. Die PWM-Frequenz sollte über >dem Hörbereich liegen. Nö. Weder muss sie das noch kann sie das bei allen Motoren.
Falk B. schrieb: > @ m.n. (Gast) > >>Ich würde zum L6203 raten, wobei für IN1 und IN2 je ein eigener >>PWM-Kanal (eines Timers) verwendet wird. Die PWM-Frequenz sollte über >>dem Hörbereich liegen. > > Nö. Weder muss sie das noch kann sie das bei allen Motoren. Offensichtlich fehlt in Deinem Wortschatz das Wort "sollte". Ich verwende nur Motore, die sich betreiben lassen, ohne mir die Ohren vollzupfeifen.
m.n. schrieb: > Ich würde zum L6203 raten, Wäre auch mein Favorit, einfach weil ich SMDs liebe und die geplante Verkleinerung mit den Relais schwer realisierbar ist. Zwischen den Zeilen haben ich AUCH bei Falk gelesen, dass es problemlos machbar "wäre"? > wobei für IN1 und IN2 je ein eigener > PWM-Kanal (eines Timers) verwendet wird. Kann ich machen (statt PWM am Enable), die PRO-Begründung für diese Ansteuerung ist mir nur noch nicht klar. > Mit einem anderen µC betreibe ich den L6203 mit 1%-Stufen von 0 - 100% > und Rampen zum Anfahren und Bremsen. Du schriebst etwas von diversen Code-Bespielen und "Bedarf?". Klar ein Blick auf Fremde Schnipsel zur Ideenbereicherung kann nie schaden. @Falk: Welche Foren/Schaltbeispiele könnte ich mir denn mal anschauen, um die äußerern Beschaltungen der Brücke richtig zu dimensionieren? (Speziell Boot1/2 müsste ich nun eher raten. Oder ist Figure 17: Bidirectional DC Motor Control (aus dem Datenblatt) für meinen Anwendungsfall schon ideal und kann 1:1 übernommen werden? Grüße Oekel PS: zu C++ : ja ich weiß, dass es zu 99,9% C Konstrukte sind und C++ garnicht seine Vorteile ausspielen kann. Oder war der Wink mit dem Zaunpfahl in eine andere Richtung?
@ D a v i d K. (oekel) >> wobei für IN1 und IN2 je ein eigener >> PWM-Kanal (eines Timers) verwendet wird. >Kann ich machen (statt PWM am Enable), die PRO-Begründung für diese >Ansteuerung ist mir nur noch nicht klar. Mit der PWM an IN1/2 kann man aktiv bremsen. Mit PWM an ENA nicht. Wenn man nur eine einfache Richtungsumschaltung mit PWM Steuerung braucht, reicht auch EIN PWM Kanal an IN1 oder IN2. Den Rest kann man per Software machen (Invertierten PWM-Wert bei Richtungsumkehr ausgeben). >@Falk: Welche Foren/Schaltbeispiele könnte ich mir denn mal anschauen, >um die äußerern Beschaltungen der Brücke richtig zu dimensionieren? >(Speziell Boot1/2 müsste ich nun eher raten. Beim L620x reicht ein Blick ins Datenblatt. Was ist an 2 einfachen 15nF Kondensatoren groß zu beschalten? >Oder ist Figure 17: Bidirectional DC Motor Control (aus dem Datenblatt) >für meinen Anwendungsfall schon ideal und kann 1:1 übernommen werden? Ja, wobei der Snubber mit 10 Ohm/22nF und die beiden Extradioden BYW98 nicht wirklich benötigt werden. Die hat möglicherweise ein Praktikant aus alten Schaltungen mit anderen ICs einfach rüberkopiert ;-) >PS: zu C++ : ja ich weiß, dass es zu 99,9% C Konstrukte sind und C++ >garnicht seine Vorteile ausspielen kann. Eben. >Oder war der Wink mit dem Zaunpfahl in eine andere Richtung? Nein.
Ok, letzte Frage, da ich mich gerade sehr schwer tue das Datenblatt bezüglich "Compare Match output Pins" (PWM) zu überfliegen. Welche beiden sollte ich kombiniert für die H-Brückenansteuerung verwenden können? Zur Auswahl stehen: OC0A OC0B OC1A OC1B OC2A Die Frage läuft darauf hinaus, dass ja eigentlich immer nur EIN PWM Signal generieren brauche, welches ich dann an zwei verschiedenen Pins ausgebe. Dabei soll auch (nur) der zweite PIN "schweigen" und nicht wegen der Logikverknüpfung des Atmeagas komische Seiteneffekte veranstalten, wenn ich ihn auf PWM-Mode = Dissable setze. Also besser OC0A & OC0B oder OC0A & OC1A? Grüße Oekel
:
Bearbeitet durch User
@ D a v i d K. (oekel) >Welche beiden sollte ich kombiniert für die H-Brückenansteuerung >verwenden können? Ist egal, da du eigentlich nur EIN PWM Signal brauchst. Der andere IN Kanal wird statisch geschaltet! >OC1A >OC1B Das ist Timer 1, der ist 16 Bit und etwas flexibler. >Die Frage läuft darauf hinaus, dass ja eigentlich immer nur EIN PWM >Signal generieren brauche, welches ich dann an zwei verschiedenen Pins >ausgebe. Nein, es reicht EIN PWM Signal.
Soweit ich das heute bei Sonnenschein zusammenstellen konnte: Beitrag "Drehzahlregler für DC-Motor, ATmega48-328" ;-)
Falk B. schrieb: > Nein, es reicht EIN PWM Signal. Mein Basiswissen ist nicht sonderlich ausgeprägt, was die H-Brücke angeht. (https://de.wikipedia.org/wiki/Vierquadrantensteller) Dabei bekomme ich im Kopf: https://de.wikipedia.org/wiki/Vierquadrantensteller#/media/File:Ansteuerlogik_H-Bruecke.svg noch nicht auf: https://de.wikipedia.org/wiki/Datei:Vierquadrantensteller-tiefsetzsteller-linkslauf.svg gemappt :( Habe aber Mal die Schaltung fertig gemacht und würde mich freuen, wenn Jemand kurz drüber schauen könnte. (Dann könnte ich einen Prototypen anfertigen lassen und weiter mit dem C-Code spielen ;) M. N. schrieb: > Beitrag "Drehzahlregler für DC-Motor, ATmega48-328" > ;-) Danke, ich hoffe/denke, dass sollte auch mit der H-Brücke funktionieren. Wie genau berechnet sich denn die maximale PWM-Frequenz aus der Reaktionszeit des ADCs? Grüße Oekel
D a v i d K. schrieb: > Danke, ich hoffe/denke, dass sollte auch mit der H-Brücke funktionieren. Das ist nicht so einfach, da bei einer Regelung mit L6203 PWM am ENABLE liegen und die EMK irgendwo auf fliegendem Potential gemessen werden müssen. Anders wäre es, zwei Halbbrücken zu nehmen, bei der jede einen separaten Enable-Eingang hat. > Wie genau berechnet sich denn die maximale PWM-Frequenz aus der > Reaktionszeit des ADCs? Willst Du nur steuern mit 25, 50, 75, 100% oder die Drehzahl auch regeln? Um nur zu steuern, gibts Du beim L6203 das Tastverhältnis der PWM entsprechend vor. Hier kannst Du eine hohe PWM-Frequenz verwenden. Dabei reicht die 8 Bit Auflösung von T0 oder T2. T1 wäre mir zu schade dafür, aber das ist egal, solange T1 sonst nicht gebraucht wird. Wichtig ist, wie Du es auch gezeichnet hast, daß die PWM-Signale auf IN1 und IN2 kommen. ENABLE sollte einen Pulldown-Widerstand bekommen, damit die Brücke beim Einschalten passiv ist. Erst wenn Du mit der EMK regeln willst, kommt der ADC ins Spiel, dessen Reaktionszeit aber relativ egal ist. In meinem Beispiel mit IRFZ34N lasse ich alle ADC-Kanäle permanent einlesen und bewerte die Motorspannung erst direkt vor dem Einschalten der PWM. Wie hoch die PWM-Frequenz sein kann, hängt in erster Linie vom verwendeten Motor ab. Bei hohem Tastverhältnis (= hoher Drehzahl) muß noch Zeit gelassen werden, damit der Rückschlagimpuls über die Freilaufdiode abgeklungen ist. Bilder vom Skope finde ich momentan nicht, aber sieh Dir das Signal selber an. Die Regelung ist gut für langsame Drehzahlen und schwankende Last geeignet. Ob die Versorgungsspannung nun 8 V oder 15 V beträgt, die Drehzahl bleibt stabil. Bei höherer Drehzahl muß auf jeden Fall auch die Versorgungsspannung hoch sein, und wenn Du einen 24 V Motor hast, dann ruhig 30 V. Um Rampen einzubauen, mußt Du dafür sorgen, daß die Änderung des Sollwertes begrenzt wird. Man kann entweder filtern, oder im z.B. 100 Hz Raster eine maximale Änderung zulassen. Wenn z.B. alle 10 ms der Sollwert sich nur um 1% ändern kann, wird die Rampe von 0 - 100% eine Sekunde brauchen. Noch etwas zu Deiner Schaltung. Du wolltest einen ATmega88 nehmen, dann nutze ihn auch mit seinen verbesserten Eigenschaften gegenüber einem Mega8. Der ADC hat eine interne 1,1 V Referenz, sodaß der LM358 das Stromsignal des L6203 nicht verstärken muß. Selber bin ich bei diesen Strommessungen immer recht großzügig mit der Verlustleistung. Pro 1 A Motorstrom nehme ich 1 Ohm Widerstände und lasse Vref bei 5 V. Wie gesagt, beim Mega88 bieten auch T0 und T2 jeweils zwei PWM-Ausgänge. Feierabend!
So "Feierabend" -->Morgen wird ein harter Arbeitstag :( Hat einer die Zeit noch mal drüber zu schauen? Insbesondere auch die brd, ob ich irgendein Bauteil offensichtlich unterdimensioniert habe. [Der OpAmt ist eine optionale Bestückung] Gibt es noch elegantere (günstige) Möglichkeiten das Netzteil von 20-30V --> 5V zu designen? Grüße Oekel
Mir fällt auf, das du C13 (den dicken Elko) sehr weit weg vom eigentlichen Störer, nämlich der Motorendstufe, plaziert hast. Der sollte in die unmittelbare Nähe des Dings, damit die Störungen des Motors nicht auf der ganzen Platine mit ihren relativen dünnen Bahnen herumschwirren. Am besten trennst du Leistungs- und Steuerteil weit voneinander und sorgst für klare Verhältnisse von Masse und VCC. m.n. schrieb: > Um Rampen einzubauen, mußt Du dafür sorgen, daß die Änderung des > Sollwertes begrenzt wird. Man kann entweder filtern, oder im z.B. 100 Hz > Raster eine maximale Änderung zulassen. Wenn z.B. alle 10 ms der > Sollwert sich nur um 1% ändern kann, wird die Rampe von 0 - 100% eine > Sekunde brauchen. Ich baue für solche Fälle meistens schon mal den PID Regler aus AVR221 mit ein und setzte die Parameter erstmal auf null (speichern tue ich sie im EEPROM). Im simpelsten Fall (nur steuern) schicke ich die Einstellwerte auf den PID und nutze den Ausgang für die Endstufe. Dann kann man mit I die Rampenzeit schon mal steuern und mit P und D den Endwert treffen.
:
Bearbeitet durch User
Matthias S. schrieb: > Ich baue für solche Fälle meistens schon mal den PID Regler aus AVR221 Wozu? Es handelt sich hier um einen Drehzahlsteller und nicht um einen Regler. Sofern ich in einer Beispielschaltung shunt-Widerstände eingefügt habe, dienen diese der Überstromerkennung. Die aktuelle Drehzahl aus dem Strom abzuleiten dürfte bei PWM-Ansteuerung etwas aufwendiger sein. D a v i d K. schrieb: > Gibt es noch elegantere (günstige) Möglichkeiten das Netzteil von 20-30V > --> 5V zu designen? Hier können die Bauteile deutlich kleiner gewählt werden: http://www.reichelt.de/MCP-16331T-E-CH/3/index.html?&ACTION=3&LA=446&ARTICLE=153661&artnr=MCP+16331T-E%2FCH&SEARCH=mcp16 R35 kann 10 kOhm betragen und vor dem ADC-Eingang wäre ein Kondensator 1 - 10 nF sinnvoll. D7 wird nicht gebaucht. Da Du SMD bestücken möchtest, wäre der L6201PS auf kleiner Fläche schwer zu kühlen. Eine Alternative wäre ein VNH2SP30, beim dem RDSon um Faktor 10 kleiner ist und damit deutlich weniger Verlustleistung anfällt. Er kann bis zu 20 kHz getaktet werden. Wenn Du bei Schukat kaufen kannst: https://www.schukat.com/schukat/schukat_cms_de.nsf/index/CMSFFEDE67DB7032C11C1256DF1003EF651?OpenDocument&wg=B1495&refDoc=CMSFAE64106A6555CCAC125716200277FC7&kb=VNH2SP30#VNH2SP30
m.n. schrieb: > Eine Alternative wäre ein VNH2SP30, Es muß ein VNH3SP30 sein, da nur dieser auch die höhere Versorgungsspannung von 24 V aushält. PWMmax. liegt dann bei 10 kHz. Bezug: http://www.reichelt.de/VNH-3SP30/3/index.html?&ACTION=3&LA=446&ARTICLE=115923&artnr=VNH+3SP30&SEARCH=vnh3
Zur Ansteuerung eines L6203 mit einem ATtiny25 gibt es nun auch ein Programm: Beitrag "Re: Drehzahlregler für DC-Motor, ATmega48-328"
Wer sucht der findet BTS7960b H-Brücken mit 28V / 40A Auf der Seite http://ups.bplaced.de habe ich auch was gefunden. Die Ansteuerung ist im Schaltplan und auch in der BASCOM Software beschrieben. Die Brücken werden mit 16kHz betrieben, nicht hörbar! Joe
m.n. schrieb: > m.n. schrieb: >> Eine Alternative wäre ein VNH2SP30, > > Es muß ein VNH3SP30 sein, da nur dieser auch die höhere > Versorgungsspannung von 24 V aushält. PWMmax. liegt dann bei 10 kHz. > Bezug: > http://www.reichelt.de/VNH-3SP30/3/index.html?&ACTION=3&LA=446&ARTICLE=115923&artnr=VNH+3SP30&SEARCH=vnh3 Kann mir Jemand sagen, ob bzw. warum nicht der VNH7013XP http://www.mouser.com/ds/2/389/DM00040392-251551.pdf Für diesen Anwendungsfall funktionieren würde? (Preislich fast die Hälfte vom VNH3SP30) Grüße Oekel
@ D a v i d K. (oekel) >Kann mir Jemand sagen, ob bzw. warum nicht der VNH7013XP >http://www.mouser.com/ds/2/389/DM00040392-251551.pdf Der geht bei 24V Versorgung auch, denn die MOSFETs haben 36V Durchbruchspannung, da ist ausreichend Luft. >Für diesen Anwendungsfall funktionieren würde? >(Preislich fast die Hälfte vom VNH3SP30) Ja, aber der VNH3SP30 ist ein VOLLSTÄNDIGER Treiber incl. Pegelwandler während der VNH7013XP nur 4 MOSFETs enthält.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.