Dude Geschrieben 8. Juni 2014 Geschrieben 8. Juni 2014 Hi Barney, echt super:thumbsup: Ich bin jetzt erst mal in Urlaub, das bedeutet kein Lötkolben aber volle LiPos ... testen der Fahrfunktion satt. Ich hab so das Gefühl, dass meine Z-Taste nicht ganz astrein funktioniert. Wenn ich die nicht richtig fest drück springt mir das Board aus voller Fahrt in dem Leerlauf. Das ist wie wenn Dir einer unerwartet das Board nach hinten wegzieht und du einen Laufsprint hinlegst :devil: Hatte jemand schon mal ähnliche Probleme mit seinem Nunchuk? Danach mach ich mich an's Umsetzen der kompletten Schaltung. VG Dude Zitieren
barney Geschrieben 8. Juni 2014 Autor Geschrieben 8. Juni 2014 Hi Dude, das Phänomen ist nicht unbekannt. Ich hatte schon mal nachgedacht die Tastenabfrage mit einet zeitlichen Komponente zu versehen. D.h. z.B. 100ms Selbsthaltung. Zitieren
sonni Geschrieben 8. Juni 2014 Geschrieben 8. Juni 2014 Besorg dir den madcatz nunchuck. Da hast du das problem nicht . Zitieren
Dude Geschrieben 8. Juni 2014 Geschrieben 8. Juni 2014 (bearbeitet) Wo hast Du Deinen Madcatz bestellt? Bin bisher nur bei Amazon in US fündig geworden. Dude Erl.: z-catz bearbeitet 8. Juni 2014 von Dude Gefunden Zitieren
sonni Geschrieben 9. Juni 2014 Geschrieben 9. Juni 2014 Ich hatte meinen von ••••. Aber den gibt es wohl nichtmehr .... Zitieren
barney Geschrieben 11. Juni 2014 Autor Geschrieben 11. Juni 2014 Es wurde ein unbemerkter Brems-Bug ausgemerzt! Die Motorsteuerung wurde durch ISR in ein festes Zeitraster eingebracht. 3.4P1 05.06.2014 Barney: Fuer die vereinfachte Konfiguration sind jetzt Custom_Settings und Parameters in eine eigene Datei ausgelagert worden. Überstromroutine überprüft. 3.4P2 08.06.2014 Barney: Steuerung funktioniert jetzt wieder. Unnoetige nunchuk.init wurden entfehrnt. Es werden durch die Nunchuk abfrage nur 20 Motorstellwerte/s erzeugt. Spaetere Version mit Teensy optimierter Lib ist angestrebt. Messungen sind O.K. Strombegrenzung nicht optimal, wird noch nachgearbeitet. Es fehlte ein if () wenn gembremst wird sollte die Strombegrenzung nicht die Bremse abschalten. Beim fahren klappt die Strombegrenzung nicht so optimal. 3.4P3 09.06.2014 Barney: Alle #Define mit Typendefinition versehen. Die Debugzwecke kann die Ausgabe der Messwerte von Serial1 auf Serial (USB) umgeleitet werden (Custom Settings) Bremsen auch mit Ueberstrom ist jetzt moeglich. 3.4P4 11.06.2014 Barney: Fehler in Auswertung der Y-Achse und der Bremswertberechnung beseitigt. Wenn der gemessene Wert der Y-Achse unter MinYAchse lag, wurde ein negativer Überlauf errechnet, welches die direkte Bremsfunktion abgeschaltet hat. Wenn jetzt analogY < MinYAchse ist wird analogY = MinYAchse. Vorsichtshalber wurde dies mit MaxYAchse auch begrenzt. Dies fällt nur bei der Verwendung mehrerer Nunchuks auf. Die Berechnung des Motorstellwertes wird jetzt durch den Timer3 zeitlich festgelegt. Durch das Weglassen einer unnoetigen Nunchuk Abfrage und Umstellung der (wieder) Verbindung zum Nunchuk im Sekundentakt, ist ein zeitliches äquidistantes Steuern den Motors moeglich. Zitieren
barney Geschrieben 12. Juni 2014 Autor Geschrieben 12. Juni 2014 3.3V MOSFET für Licht und oder Hupe: Simuliert mit 3.1V! Zitieren
Dude Geschrieben 12. Juni 2014 Geschrieben 12. Juni 2014 Ich hab um die Ströme zu checken den Optokoppler mit LTspice simuliert - das sieht in der Simulation auch alles i.O. aus ... vor allem gibt es mir als Nicht-Elektrotechniker etwas mehr Sicherheit, bei dem was ich tue:thumbsup: Wie hast Du den Überstromfall in der Praxis getestet? Schickst Du uns noch die V3.4P4? VG Dude Zitieren
Waiti Geschrieben 12. Juni 2014 Geschrieben 12. Juni 2014 Huhu, verbringe gerade die Zeit damit noch ein paar Kleinteile aus Externe Links nur für Mitglieder sichtbar zu beschaffen. Vielen Dank @Dude Diese sind: - - - (Habe ich mir bei Conrad gekauft) - - R-78 3.3-0-5 & Wolle nochmal sicher gehen ob das die aktuelle Liste ist, welche ich jetzt noch benötige um ein funktionierendes Board ans Laufen zu bringen. @ Barney Vielen Dank für die Zusendung des Quelltextes. Die Überprüfung war erfolgreich und das Board wurde erfolgreich geflasht. Vielen Dank Jungs Waiti Zitieren
barney Geschrieben 12. Juni 2014 Autor Geschrieben 12. Juni 2014 Wie hast Du den Überstromfall in der Praxis getestet? Welchen Überstrom Fall? Zitieren
barney Geschrieben 12. Juni 2014 Autor Geschrieben 12. Juni 2014 Diese sind: - Externe Links nur für Mitglieder sichtbar - - (Habe ich mir bei Conrad gekauft) - - R-78 3.3-0-5 & -> DS1820 ! Wie soll ich es sagen? 1. Wenn Du nur steuern willst und keine Telemetrie benötigst, brauchst du nur den Teensy und den R-78 3.3-0.5. 2. Willst Du dein Board (Leistungsteil) über den Teensy einschalten, dann IRFP3206 und den Optokoppler. 3. Benötigst du telemetrische Daten, dann BT-Modul, DS1820, ACS756-050, u.s.w. VG Barney Zitieren
Dude Geschrieben 12. Juni 2014 Geschrieben 12. Juni 2014 Welchen Überstrom Fall? Du meintest doch, dass die Überstromroutine jetzt funktioniert. Ich vermute mal, dass man bei Normalbetrieb nicht in den Überstrom kommt, oder? Daher hab ich mich gefragt, wie Du das getestet hast, also den Fall "Überstrom" erzwungen hast ... oder passiert das einfach so beim Gasgeben ... VG Dude Zitieren
Dude Geschrieben 12. Juni 2014 Geschrieben 12. Juni 2014 Hallo Zusammen, anbei der aktuelle Schaltplan - danke an Barney und Beatbuzzer für die vielen Ratschläge. Dude Eboard_Teensy_Opto_small_Schaltplan.pdf Zitieren
barney Geschrieben 12. Juni 2014 Autor Geschrieben 12. Juni 2014 Du meintest doch, dass die Überstromroutine jetzt funktioniert. Ich vermute mal, dass man bei Normalbetrieb nicht in den Überstrom kommt, oder? Daher hab ich mich gefragt, wie Du das getestet hast, also den Fall "Überstrom" erzwungen hast ... oder passiert das einfach so beim Gasgeben ... Hi Dude, manchmal stehe ich auf dem Schlauch: Ich habe ein Testboard mit zwei Potis. Damit kann ich jeden "Strom" einstellen und damit die Routinen testen VG Barney Zitieren
barney Geschrieben 12. Juni 2014 Autor Geschrieben 12. Juni 2014 Hallo Zusammen, anbei der aktuelle Schaltplan - danke an Barney und Beatbuzzer für die vielen Ratschläge. Dude Auf die Schnelle einen kleinen Hinweis: Der Spannungsteiler für A0 (Spannungsmessung) ist noch auf 30V -> 5V ausgelegt. Da der Teensy 3.1 nur 3.3V verträgt, sollte hier ein anderes Verhältnis eingestellt werden! (R1+R2)/R2 für die Auslegung! Zitieren
barney Geschrieben 12. Juni 2014 Autor Geschrieben 12. Juni 2014 Und der Optokoppler benötigt einen 10k Widerstand zur UBatt-Seite! Sonst geht er drauf! Zitieren
Dude Geschrieben 13. Juni 2014 Geschrieben 13. Juni 2014 Hi Dude, manchmal stehe ich auf dem Schlauch: Ich habe ein Testboard mit zwei Potis. Damit kann ich jeden "Strom" einstellen und damit die Routinen testen VG Barney My two Cents: Ich hab mir den Code mal angesehen und dabei ist mir folgendes aufgefallen. Bei der Integrationssteuerung werden im Überström nur bei einer Beschleunigungsanforderung die Werte für StellwertMotorAlt NICHT upgedated. Du fängst das in der ersten if Anweisung ab. Bei nicht gedrückter Z-Taste werden auch im Überstrom neue Vorgaben für StellwertMotorAlt gemacht. Ich kann mir vorstellen, dass das beabsichtigt ist, da in diesen Fällen ja eine Reduktion des Stromes statt findet ... ist das der Grund? Bei DirectDrive dagegen kann auch im Überstrom jede der If-Zweige durchlaufen werden, das passt dann nicht zu meiner Interpretation. Ich kann jetzt leider nicht testen, da ich die notwendige HW nicht besitze, habe aber die Vermutung, dass man bei der Integrationssteuerung die Einschränkung "F_Ueberstrom == LOW" komplett aus der ersten if-Abfrage raus nehmen könnte. Wäre zumindest konsistent zum DirectDrive. Andernfalls müsste man die Einschränkung im DirectDrive auch rein nehmen. Ist wie gesagt nur eine Analogiebetrachtung, testen kann ich's nicht und liege möglicherweise komplett daneben P.S.: der Schaltplan hatte natürlich noch die von Dir erwähnten Fehler, es war wie ich bemerkt habe auch nicht meine aktuellste Version. :devil: Ich werde von der aktuellen Version ein pdf erzeugen und versuche die hochzuladen - ist bei der miserablen Internetverbindung hier im Urlaub aktuell meine größte Herausforderung;) Zitieren
barney Geschrieben 13. Juni 2014 Autor Geschrieben 13. Juni 2014 Hi Dude, danke für den Hinweis. Irgendwann wird man Code Blind. Integrationssteuerung: Das letzte "if" könnte auch ein "else if" sein. Ich war scheinbar der Meinung, dass Bremsen vor Beschleunigung sein muss. Im Prinzip nicht falsch, aber beim Abarbeiten der Routine etwas übertrieben. Direct Drive: if (analogY >= NeutralstellungYAchse) { sollte eher ein if (analogY >= NeutralstellungYAchse && F_Ueberstrom == LOW) { sein. Da ich wegen der Überstromerkennung und Trennung der Parameter soviel daran herumgefummelt habe, setze ich mich mal am Wochenende hin und gehe die Motorsteuerungs Routine in Ruhe nochmal durch. Leider habe ich mein Testboard nicht zur Hand. Ich muss mal an dieser Stelle improvisieren. Es zeigt sich immer wieder, Software sollte nicht nur von einer Person geschrieben werden, es sollte mindestens ein zweiter die Zeilen durchgehen. Wie findest du die Trennung der Parameter in eigene Files? VG Barney Zitieren
barney Geschrieben 13. Juni 2014 Autor Geschrieben 13. Juni 2014 Hi, derzeit erstelle ich unter Eagle ein Layout, die eine Platine oder einen Schaltplan zur Folge hat. Schlussendlich will ich mir eine "echte" Platine fertigen lassen, damit der Kram nicht wild herumfliegt. Den Schaltplan stelle ich in der ersten Version am Wochenende ins Forum. Wer Fehler findet oder Anmerkungen hat, kann mir diese gerne aufzeigen. VG Barney Zitieren
barney Geschrieben 13. Juni 2014 Autor Geschrieben 13. Juni 2014 if (zButton == LOW && analogY < UntererTotpunkt){ // Unmittelbares Abbremsen bei losgelassenem Z-Knopf StellWertMotor = UntererStellWertMotor + (analogY-MinYAchse)*(LeerlaufStellWertMotor-UntererStellWertMotor)/(NeutralstellungYAchse-MinYAchse); if (StellWertMotor >= LeerlaufStellWertMotor) StellWertMotor = LeerlaufStellWertMotor; // Sicherheitsfunktion gegen beschleunigen if (StellWertMotor < UntererStellWertMotor) StellWertMotor = UntererStellWertMotor; // untere Grenze fuer den Motorregler } Dieser Code kommt zweimal vor. Da Direct Drive und die Integrationssteuerung den selben Code verwendet wird dieser zukünftig zentral stehen. Zitieren
Dude Geschrieben 13. Juni 2014 Geschrieben 13. Juni 2014 (bearbeitet) Hi Barney, mit der Modifikation if (analogY >= NeutralstellungYAchse && F_Ueberstrom == LOW) { sieht es schön symmetrisch aus, danke.:thumbsup: Die Trennung der Parameter ist für mich o.k.. Ein einziges File hat halt den Vorteil, dass man gleich alles zur Hand hat, wenn man was ändern möchte. Gut ist allerdings, dass es nicht mehr nur ein DEBUG-Flag gibt! Was mir besonders gefällt ist, dass die Motorsteuerung jetzt mit 50Hz abläuft - ich habe manchmal das Gefühl, dass die Steuerung unterschiedlich schnell auf eine neue Vorgabe anspricht; vllt. hilft die Änderung (kann es momentan leider nicht testen, da ich kein USB-Kabel für den Teensy dabei habe ... kommt aber noch). Ich wollte den Schaltplan auch schon in EagleLight reinprfrimeln, kenne mich aber mit der Bedienung nicht aus, daher bin ich noch nicht so weit gekommen. Wenn Du es schaffst, die Bauteile auf einer 110x50 mm Platine unterzubringen wäre das richtig super, da ich unter meinem Gehäuse auf dem Board leider nicht mehr Platz habe:D Grüße Dude P.S.: Ich restrukturiere gerade die Motorsteuerungsroutine - wenn's klappt wird sie recht übersichtlich und macht zudem noch das gleiche wie zuvor - Stay Tuned bearbeitet 13. Juni 2014 von Dude Zitieren
Dude Geschrieben 13. Juni 2014 Geschrieben 13. Juni 2014 Sneak Preview if (zButton == HIGH) { if (DirectDrive == FALSE) { // INTEGRATIONSSTEUERUNG bei gehaltenem Z-Knopf if (analogY > ObererTotpunkt && F_Ueberstrom == LOW) { // Beschleunigen bei Ueberschreiten des Oberern Totpunktes wenn kein Ueberstrom vorliegt StellWertMotor = StellWertMotor + (analogY - NeutralstellungYAchse)/BeschleunigungsDaempfung; } else if (analogY < UntererTotpunkt) { // Verlangsamen bei Unterschreiten des UntererTotpunktes StellWertMotor = StellWertMotor + (analogY - NeutralstellungYAchse)/BeschleunigungsDaempfung; } } else if (DirectDrive == TRUE) { // DIRECT DRIVE bei gehaltenem Z-Knopf if (analogY >= NeutralstellungYAchse && F_Ueberstrom == LOW) { // Beschleunigen wenn kein Ueberstrom vorliegt StellWertMotor = LeerlaufStellWertMotor + (analogY-NeutralstellungYAchse)*(ObererStellWertMotor-LeerlaufStellWertMotor)/(MaxYAchse-NeutralstellungYAchse); } else if (analogY < NeutralstellungYAchse) { // Unmittelbares Abbremsen unterhalb der Neutralstellung der Y-Achse StellWertMotor = UntererStellWertMotor + (analogY-MinYAchse)*(LeerlaufStellWertMotor-UntererStellWertMotor)/(NeutralstellungYAchse-MinYAchse); } } if (StellWertMotor < UntererStellWertMotor) StellWertMotor = UntererStellWertMotor; // untere Grenze fuer den Motorregler if (StellWertMotor > ObererStellWertMotor) StellWertMotor = ObererStellWertMotor; // obere Grenze fuer den Motorregler StellWertMotorAlt = StellWertMotor; // Bei Ueberstrom wird der alte Wert benoetigt } if (zButton == LOW) { // Gleichbehandlung von INTEGRATIONSSTEUERUNG UND DIRECT DRIVE bei losgelassenem Z-Knopf StellWertMotor = LeerlaufStellWertMotor; // Freilauf des Motors if (analogY < UntererTotpunkt){ // Unmittelbares Abbremsen wenn zusätzlich der untere Totpunkt unterschritten wird StellWertMotor = UntererStellWertMotor + (analogY-MinYAchse)*(LeerlaufStellWertMotor-UntererStellWertMotor)/(NeutralstellungYAchse-MinYAchse); } if (StellWertMotor < UntererStellWertMotor) StellWertMotor = UntererStellWertMotor; // untere Grenze fuer den Motorregler if (StellWertMotor > ObererStellWertMotor) StellWertMotor = ObererStellWertMotor; // obere Grenze fuer den Motorregler } // Uberstrom detektiert, Motor abbremsen bis maximal Neutralstellung if (F_Ueberstrom == HIGH && StellWertMotor > LeerlaufStellWertMotor){ StellWertMotor = LeerlaufStellWertMotor+(StellWertMotorAlt-LeerlaufStellWertMotor)*Reduktionsfaktor; if (DEBUG_Motorsteller){ Serial.print("Reduktionsfaktor: "); Serial.println(Reduktionsfaktor); } } analogWrite(Pin_Motorstelleranschluss, StellWertMotor); // Geschwindigkeitsvorgabe Motor in PWM-Register setzen Dude Zitieren
barney Geschrieben 14. Juni 2014 Autor Geschrieben 14. Juni 2014 Hi Dude, danke für die Überarbeitung und Optimierung. Da werden sich die 72MHz freuen:D Eine kleine Anmerkung: Bitte keine Tabs verwenden, damit kommt die Arduino IDE nicht immer zurecht. Was du da so mühselig einrückst ist nachher bei mir völlig durcheinander. Ich habe mal ein Diff von unseren Versionen hinein gepackt. Natürlich nur die Motorsteuerung! Für diesen Vergleiche benutze ich Notepad++ mit Compare Plugin. VG Barney Zitieren
Dude Geschrieben 14. Juni 2014 Geschrieben 14. Juni 2014 Hi Barney, das mit den Tabs ist natürlich doof, zumal ich absichtlich keine verwende ... ich vermute mal dass mein Editor (jedit) die Leerzeichen umwandelt. Notepad++ hab ich auch installiert, bin in der Verwendung von Editoren emotionslos. Bevor ich raus kriege, wie ich die Tab-Umwandlung in jedit abschalte nehm ich eben den Notepad++. Dude Zitieren
Empfohlene Beiträge
Tritt dem Gespräch bei
Du kannst jetzt posten und dich später registrieren. Wenn du bereits einen Account hast kannst du dich hier anmelden.