Hallo alle zusammen, ich habe ein merkwürdiges Problem und hoffe, dass jemand vielleicht schon einmal mit einem ähnlichen Problem zu tun hatte und mir somit weiterhelfen kann. Ich steuere mit meinem Arduino UNO zwei H-Brücken-Treiber (STK681-332-E) u. a. mit einem PWM-Signal an. Die beiden Treiber wiederrum steuern je einen meiner beiden DC-Motoren. Die Motoren lassen sich nun über entsprechende Eingangssignale, welche ich momentan noch mit Netzteil, Breadboard und Potis/Dip-Switch realisiere, steuern. Die Signale sollen später mal von einem Prüfstand gesendet werden (s. Anhang, unten links). Das ganze funktioniert eigentlich auch ganz gut. Aber nachdem ich die Schaltung auf meiner Lochrasterplatine zum Laufen gebracht habe, musste ich feststellen, dass die Motoren je nach PWM-Signal am entsprechenden Treiber-Pin anfangen etwa alle 1,5 Sekunden einmal zucken. Dies fällt besonders bei langsamen Drehzahlen (also geringem Tastgrad der PWM an den ENABLE-Pins) auf. Am Netzteil kann man bei manchen Motor-Rucklern sehen, dass der Strom kurz auf ein vielfaches steigt und die Spannung in dem Moment auf etwa die Hälfte zusammenbricht. Was ist da los??? Ich möchte mit dem Arduino und ein paar Sensoren noch eine Regelung umsetzen. Da das ganze recht präzise werden soll, passt mir so ein Motorzucken also Störgröße gar nicht ins Projekt. Hier noch ein paar Infos zu den Motoren, um die kurze Umschreibung der Situation abzurunden: Die DC-Motoren mit Bürsten haben einen Nennstrom von 2,3A bei 24V. Ich habe sie bisher nur im Leerlauf getestet. Bin für jegliche Hilfe und Anregungen über die mögliche Fehlerquelle sehr dankbar! Beste Grüße Dennis
> Am Netzteil kann man bei manchen Motor-Rucklern > sehen, dass der Strom kurz auf ein vielfaches steigt und die Spannung in > dem Moment auf etwa die Hälfte zusammenbricht. Was ist da los??? Nur am Netzteil? Hast du ein Labornetzteil? Welche PWM Frequenz? Wie sieht die Pufferung der Treiber aus? Leider hast du keine Werte in deinen Schaltplan eingefügt. Somit ist dieser nichtig! Wie steuerst du die Motoren an? Inventierende eingänge an In1, In2 ? mfg
Ach ja, Motordaten sind unvollständig. -Blockierstrom? -Induktivität? cya
>Nur am Netzteil? Hast du ein Labornetzteil? Ja, ich habe ein Labornetzteil. Die Strombegrenzung sollte groß genug eingestellt sein. >Welche PWM Frequenz? Die PWM-Frequenz vom Arduino habe ich schon variiert. Momentan laufen die Treiber mit 62,5kHz an ihren ENABLE-Pins (über Pin 5 und 6 vom Arduino). Ich habe die Frequenz aber auch schon auf 7,81kHz runtergesetzt mit dieser Funktion: http://playground.arduino.cc/Code/PwmFrequency Es zeigte sich kein Unterschied, obwohl laut Datenblatt vom STK681-332-E die PWM-Frequenz zwischen 32 und 62kHz (typ. 47kHz) liegen soll. Ich habe auch mal das Datenblatt zu dieser fertigen Schaltung gelesen: http://de.farnell.com/on-semiconductor/stk681-332gevb/evaluation-board-stk681-332-e/dp/2250538?ost=stk681-332-e&selectedCategoryId=&categoryNameResp=Alle%2BKategorien&searchView=table&iscrfnonsku=false Hier wurde mit 20kHz erfolgreich getestet, weshalb ich die PWM-Frequenz als mögliche Fehlerquelle eigentlich ausschließe. >Wie sieht die Pufferung der Treiber aus? Leider hast du keine Werte in >deinen Schaltplan eingefügt. Somit ist dieser nichtig! Was meinst du mit Pufferung? Die Werte habe ich vorerst noch nicht eingefügt in der Hoffnung, sie seien nicht notwendig. Der neue und hoffentlich vollständige Schaltplan ist jetzt im Anhang. Die Widerstände und Kondensatoren habe ich alle gemäß Datenblatt ausgewählt. R5 und R10 sind Dickschichtwiderstände an denen ich später noch eine Strommessverstärkerschaltung anbringen möchte. R3, R4, R8 und R9 sind Strombegrenzer an den IN1/2-Pins, die laut Datenblatt zwischen 100 und 1000Ohm liegen sollen. Vref soll unter 2V liegen (Datenblatt), was durch den Spannungsteiler mit R1 und R2 bzw. R6 und R7 auch umgesetzt wurde. Der DC/DC-Wandler wandelt von 24V auf 5V herunter. >Wie steuerst du die Motoren an? Inventierende eingänge an In1, In2 ? Laut Datenblatt brauchen die Treiber für Rechtslauf IN1=HIGH && IN2=LOW und für Linkslauf Rechtslauf IN1=LOW&& IN2=HIGH. Die Signale (5V für HIGH) liegen auch solide an, schon geprüft. >Ach ja, Motordaten sind unvollständig. >-Blockierstrom? >-Induktivität? Also bei den Motoren handelt es sich um "MOT-AE-B-024-010-042-F-A-AAAA" von Igus. Im zugehörigen Datenblatt finde ich nichts über den Blockierstrom und die Induktivität. Inwiefern könnten diese Werte denn eine Rolle spielen? Im Anhang dieses Post habe ich das Datenblatt mal hochgeladen.
:
Bearbeitet durch User
Ersetze mal die Attrappen von C1 und C4 durch richtige Kondensatoren
>= 2200 µF.
Ruckelt denn auch die PWM-Ansteuerung? Beim Programmieren vom Arduino
wird gerne und viel falsch gemacht. Beispiel: delay() womöglich noch im
Interrupt.
R5 und R10 ergeben, wie eingebaut, keinen Sinn. Du hast keine Stromüberwachung.
> Es zeigte sich kein Unterschied, obwohl laut Datenblatt vom STK681-332-E > die PWM-Frequenz zwischen 32 und 62kHz (typ. 47kHz) liegen soll. Das hast du hier falsch verstanden. Das ist die interne PWM für die Stromüberwachung. Irgendwo wird mit max. PWM 50khz angepriesen. Man muss die PWM so einstellen, dass der Rippelstrom des Motors vom Nennstrom <10% ist. Größtenteils hängt das von der anliegenden Spannung und der Motorinduktivität ab. Falls man einen Shunt hat, dann kann man mithilfe des Oszi sich ein Bild malen. Oder man rechnet ein wenig. Ich würde erstmal C1/C4 etwas aufstocken (low esr cap!) + noch 100nF Kerko (X7R). Weiterhin kann es sein, dass der Motor entstört werden muss. > Vref soll unter 2V liegen (Datenblatt), was durch > den Spannungsteiler mit R1 und R2 bzw. R6 und R7 auch umgesetzt wurde. > Der DC/DC-Wandler wandelt von 24V auf 5V herunter. Hier musst du mal die Datenblätter besser studieren: >Vref = (R2 /(R1+R2))* VDD >Output current peak (Iop) = (Vref/4.9)/Rs Viel Erfolg.
>Ersetze mal die Attrappen von C1 und C4 durch richtige Kondensatoren >>= 2200 µF. >Ruckelt denn auch die PWM-Ansteuerung? Beim Programmieren vom Arduino >wird gerne und viel falsch gemacht. Beispiel: delay() womöglich noch im >Interrupt. Die Kondesatoren habe ich so gewählt, weil es im Datenblatt so stand. Habe das entsprechende Schaltbild daraus mal im Anhang hinterlassen. >R5 und R10 ergeben, wie eingebaut, keinen Sinn. Du hast keine >Stromüberwachung. Vielen Dank für den Hinweis... Wie geschrieben, ich möchte die Stromüberwachung später noch realisieren.
Dennis V. schrieb: > Die Kondesatoren habe ich so gewählt, weil es im Datenblatt so stand. > Habe das entsprechende Schaltbild daraus mal im Anhang hinterlassen. Das Datenblatt ist richtig schlecht! Es finden sich keine Angaben zum Timing von den Ein- und Ausgängen.
m.n. schrieb: > Das Datenblatt ist richtig schlecht! > Es finden sich keine Angaben zum Timing von den Ein- und Ausgängen. Wozu brauchst du die? >On-chip output short-circuit detection function >The maximum PWM frequency is 50kHz. >The product can run at a minimum external PWM pulse width of 1µs. >In the case when the high pulse width is less than 16µs, however, >the IC may fail to detect a short-circuit condition when an output >short-circuit occurs.
Ich habe den Fehler gefunden!
Tja, normalerweise würde ich ja sagen: "Da wäre ich nie drauf gekommen",
aber ich hab's ja irgendwie doch herausgefunden.
Das Problem lag wohl in meiner Programmierung. Ich habe mir
vorsichtigerweise diverse Größen und die Zyklusdauer über die serielle
Schnittstelle vom Arduino (also USB) auf dem PC anzeigen lassen. Dazu
musste ich entsprechende Serial-Befehle nutzen. Habe im Anhang mal
entsprechende Zeilen aus meinen Code hinterlassen (die gemeinten Stellen
habe ich mit lauter "////////" eingegrenzt). Genau in dem Rhythmus, in
dem ich mit etwas habe ausgeben lassen, zuckten auch die Motoren. Und
ich habe mir - wie ihr sehen könnt - echt viel anzeigen lassen. Ich
vermute mal stark, dass es etwas mit der Zyklusdauer zu tun gehabt haben
muss, da diese im Falle einer Ausgabe wohl ordentlich lang wurde. Mein
Code besteht beinahe ausschließlich aus if-Abfragen und sollte somit
eine recht kurze Zyklusdauer haben.
Nachdem ich sämtliche Ausgabebefehle aus meinem Code gelöscht habe
laufen die Motoren sehr rund! Aber so richtig erklären kann ich mir das
immernoch nicht. Hat jemand da vielleicht ein Idee? Hat es vielleicht
doch nur etwas mit der seriellen Schnittstelle zu tun? Gehen da die
PWM-Ausgänge vom Arduino vllt auf 100%, oder so?
Auch wenn das Problem beseitigt ist, wäre ich froh über Erklärungen der
Ursache.
Gruß
Dennis
PS:
>Das Datenblatt ist richtig schlecht!
Auch wenn das Problem scheinbar nicht hier lag... ich finde das
Datenblatt auch extrem schlecht. Es sind einige Fehler und Widersprüche
enthalten. War echt ein Akt, die Schaltung nach dem Wisch umzusetzen.
Dennis V. schrieb: > Hat es vielleicht > doch nur etwas mit der seriellen Schnittstelle zu tun? nicht vielleicht, sondern vermutlich sicher je nach dem welche IDE, ist die serielle Ausgabe schon per IRQ und der Buffer ist auch nicht besonders groß HardwareSerial.ccp
Dennis V. schrieb: > (über Pin 5 und 6 vom > Arduino) Pin 5 & 6 werden von Timer0 angesteuert. Timer0 macht allerdings auch das millis() usw Gedöns. Abhilfe: Verwende die anderen Timer. Dann sollte es auch keine Probleme mit der Seriellen geben.
U. F. schrieb: > Abhilfe: > Verwende die anderen Timer. > Dann sollte es auch keine Probleme mit der Seriellen geben. meinst du? jede serielle Ausgabe die eine IRQ auslöst stoppt doch andere IRQ mir war mal so das im IRQ IRQ gesperrt sind wenn also per IRQ ständig Zeichen ausgegeben werden muss der PWM stottern wenn er in SW ist. Ist die PWM nun SW oder HW ?
Joachim B. schrieb: > meinst du? Ich gehe davon aus, dass er HW PWM nutzt. In https://www.arduino.cc/en/Reference/AnalogWrite findet sich ein Absatz "Notes and Known Issues" Das Problem hat schon so manchem Pin 5&6 Nutzer einen Streich gespielt. Z.B. flackernde LEDs. Hier halt ein zuckender Motor. Bei SW PWM kommt einem natürlich jeder Interrupt in die Quere. Dagegen ist kein Kraut gewachsen.
Joachim B. schrieb: > nicht vielleicht, sondern vermutlich sicher Den Satz sollte man sich einrahmen (am besten golden) und ins Wohnzimmer hängen. :-D
So, liebe Community, ich konnte über's Wochenende leider nicht auf mikrocontroller.net zugreifen, deshalb nu die verspätete Antwort. Vielen Dank erstmal für die Hilfe! Ich habe jetzt die Pins 5 und 6 auf 9 und 10 verlegt. Klappt alles super! Die serielle Ausgabe habe ich nun zwar gelöscht, da ich sie nur zur Überprüfung meiner Variablen benötigte. Aber es ist gut zu wissen, dass ich diese nun notfalls doch noch nutzen kann. >Ich gehe davon aus, dass er HW PWM nutzt. Ja ich benutze die AnalogWrite-Funktion. Weiter oben habe ich den Beitrag von aSma leider völlig übersehen: >> Es zeigte sich kein Unterschied, obwohl laut Datenblatt vom STK681-332-E >> die PWM-Frequenz zwischen 32 und 62kHz (typ. 47kHz) liegen soll. > >Das hast du hier falsch verstanden. Das ist die interne PWM für die >Stromüberwachung. > >Irgendwo wird mit max. PWM 50khz angepriesen. Das habe ich wohl tatsächlich missverstanden. Da ich aber nun Pin 9 und 10 nutze, welche mit 31,25kHz laufen, sollte ich da wohl kein Problem mehr mit haben. >> Vref soll unter 2V liegen (Datenblatt), was durch >> den Spannungsteiler mit R1 und R2 bzw. R6 und R7 auch umgesetzt wurde. >> Der DC/DC-Wandler wandelt von 24V auf 5V herunter. > >Hier musst du mal die Datenblätter besser studieren: >>Vref = (R2 /(R1+R2))* VDD >>Output current peak (Iop) = (Vref/4.9)/Rs Die Formeln in diesen Passagen sind mir bestens bekannt und dienen meines Erachtens nur der Begrenzung des Stroms, welche mit dem im Datenblatt als Rs bezeichneten Widerstand umgesetzt werden kann aber nicht muss. Ursprünglich hatte ich das geplant, lasse nun aber doch die Finger davon, da mir für die Umsetzung des Projektes einfach die Zeit fehlt. Nochmals vielen Dank, an alle die geholfen haben! Beste Grüße Dennis
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.