-
Gesamte Inhalte
3.658 -
Benutzer seit
-
Letzter Besuch
-
Tagessiege
8
Inhaltstyp
Profile
Forum
Articles
Wiki
Galerie
Kalender
Alle erstellten Inhalte von barney
-
Links dabei festgehalten? Es kann sein, dass dein Stick keine X-Werte unter 30 liefert. Ändere mal im Quelltext die <30 auf <40. Kannst du den das Licht auf Pin 11 ein- und ausschalten? // Geschwindingkeitsumschaltung per X-Joystick und dreimal Z-Taste druecken if (nunchuk.zButton == HIGH && nunchuk.analogX < 30) { // wenn Z-Knopf getastet und Nunchuk X < 3 -> Counter für Geschwindigkeitsumschaltung hochzaehlen ObererStellWertMotorUmschaltCounter ++; // Es muss dreimal die Z-Taste und der X-Joystick ausgeloest werden digitalWrite(Pin_Hupe, HIGH); // Zur Bestaetigung 200ms hupen delay (200); digitalWrite(Pin_Hupe, LOW); if (ObererStellWertMotorUmschaltCounter == 3) { // Wenn dreimal gedrueckt // Umschalten der maximalen Geschwindigkeit if (ObererStellWertMotor == ObererStellWertMotorHase) ObererStellWertMotor = ObererStellWertMotorIgel; else if (ObererStellWertMotor == ObererStellWertMotorIgel) ObererStellWertMotor = ObererStellWertMotorHase; ObererStellWertMotorUmschaltCounter = 0; // Counter zurücksetzen digitalWrite(Pin_Hupe, HIGH); // Zur Bestaetigung der Umschaltung 500ms hupen delay (500); digitalWrite(Pin_Hupe, LOW); } } zButtonZero = HIGH; // Routine gegen Festhalten des Z-Tasters sperren }
-
Mir ist noch was allgemeines aufgefallen: Seit der Version 2.6 wird bei Überstrom gedrosselt und bei Kurzschluss abgeschaltet. Diejenigen, die keinen Stromsensor einsetzen, müssen den Messeingang Pin A0 mit einem Widerstand (1-10K Ohm) auf Masse legen. Es besteht sonst die Möglichkeit, dass durch das Floaten den Eingangspin die Überstromroutine ausgelöst wird. Der Pin A1 für die Spannungsmessung kann, muss aber nicht auf Masse gelegt werden. VG Barney
-
Tausche mal den Block Motorsteuerung aus, es gibt jetzt keine Einstellmöglichkeit mehr für die Neutralstellung beim Benutzen des Z-Knopfes und Joystick: // Subroutine fuer die Motorsteuerung void Motorsteuerung(){ // Beschleunigen bei gehaltenen Z-Knopf if (nunchuk.zButton == HIGH && F_Ueberstrom == LOW){ StellWertMotor = UntererStellWertMotor + (nunchuk.analogY)*((ObererStellWertMotor-UntererStellWertMotor)/256); // direkte Ansteuerung } // Freilauf des Motors bei losgelassenen Z-Knopf else if (nunchuk.zButton == LOW) StellWertMotor = Leerlauf; if (F_Ueberstrom == HIGH){ StellWertMotor = Leerlauf+(StellWertMotor-Leerlauf)*Reduktionsfaktor; // Serial.print("Reduktionsfaktor: "); // Debugausgabe Reduktionsfaktor // Serial.println(Reduktionsfaktor); F_Ueberstrom = LOW; // Flag loeschen } OCR1A = StellWertMotor; // Geschwindigkeitsvorgabe Motor in PWM-Register OCR1A setzen // Serial.print("StellWertMotor: "); // Debugausgabe Motorsteller // Serial.println(StellWertMotor); // Ende Abschnitt Motorsteuerung }
-
Ja, das liegt an der Eigenschaft der if-Abfrage mit der Erkennung des Totpunktes für den Joystick. Ich werde dir nachher eine neue Zeile senden, wo dieses nicht mehr darin sein wird. Nein, Joystick (wie für Licht) nach links bis zum Anschlag drücken, dann die Z-Taste dreimal drücken. Jedes mal wenn der Umschaltwunsch erkannt wurde, wird ein kurzes Hupsignal ertönen. Beim dritten mal hupt es länger. Wir arbeiten uns langsam ans Ziel! VG Barney
-
Ähhh, ich sagemal Nunchuk. Da kannst Du Strom, die Spannung und die Leistung, sowie die Temperatur aufs Handy senden. VG Barney
-
Ich hätte nicht gedacht, das den jemand versteht.
-
Ja, das ist so, wie ein Yamaha FJ1200 (offen) mit Kurzhub Gasgriff. Man muss es mögen. :devil: Du musst es nur aktivieren.
-
Hallo Gerald-Z, was heißt nicht zufrieden? Die Umschaltung funktioniert einwandfrei. Ich musste aber leider beim Programmieren feststellen, dass ich bei dem if-Statement zu viele Anfragen an den Nunchuk stelle. Ich muss jetzt Hilfsvariablen anlegen, die ca. 10 mal die Sekunde den Nunchuk abfragen und die Ergebnisse speichern. Das Bedeutet ein kleines Redesinn meines Programms. Das werde ich in den nächsten Tagen angehen. Ansonsten habe ich die Umschaltung ausprobiert und kann sagen, es funktioniert einwandfrei. Auch die Direktsteuerung klappt jetzt ohne große Einschränkungen. Der Nunchuk hat nun mal als Minimum keine Null sondern 10-15 und als Maximum ca. 243. Zu mindestens meiner. Mit der Integrationsroutine war das kein Thema. Ich habe die Ansteuerung auf der Werkbank getestet, ich möchte damit nicht fahren. Der 2400W Motor ist recht giftig und durch die Headway Zellen ist auch der passende Strom vorhanden. Berichte mal aus deiner Sicht, wie sich solch eine direkte Steuerung in der realen Welt so macht. Viel Freude damit Barney
-
Hallo Gerald, Anbei die Direktsteuerung und Hase Igel. Mit Hase Igel bin ich noch nicht zufrieden. VG Barney
-
Hi Gerad-Z, Hase Igel habe ich jetzt auch fertig. Ich probiere das lieber selber bei mir aus, bevor ich dir noch weitere Geistige Entgleisungen zukommen lasse. Kann bis ins Wochenende dauern! Bestätigung der Umschaltung durch kurzes Hupensignal! Ich hoffe Du kannst damit leben! VG Barney
-
Auch bremsen war falsch! StellWertMotor = Leerlauf - (NeutralstellungYAchse-nunchuk.analogY)*((Leerlauf-UntererStellWertMotor)/NeutralstellungYAchse); // direkte Ansteuerung Probe: leichtes Bremsen und Vollbremsen: leichtes Bremsen = 3000 - (127-110) * ((3000-2000)/127) = 3000 - 133 = 2877 passt Vollbremsung = 3000 - (127-0) * ((3000-2000)/127) = 3000 -127 * ((1000)/127) jetzt die 127 kürzen: = 3000 - 10000 = 2000 -> UntererStellWertMotor passt! Schalt mal das Debugging unten an!
-
alt: StellWertMotor=StellWertMotor+((nunchuk.analogY-NeutralstellungYAchse)/BeschleunigungsDaempfung); neu: StellWertMotor = Leerlauf + (nunchuk.analogY-NeutralstellungYAchse)*((ObererStellWertMotor-Leerlauf)/NeutralstellungYAchse); // direkte Ansteuerung Zwei Rechenbeispiele: = Leerlauf + (nunchuk.analogY-NeutralstellungYAchse)*((ObererStellWertMotor-Leerlauf)/NeutralstellungYAchse) = 3000 + (200-127)*((4000-3000)/127) ~ 3500 -> sollte jetzt richtig sein!
-
In der Zeile StellWertMotor=Stell...
-
In der ersten if Abfrage
-
Ich habe gerade nachgerechnet: Da ist ein Fehler im Divisor. Es müsste nicht leerlauf/neutralstellung heissen. Ich schreibe gerade mit dem Handy... Mach mal aus leerlauf/neutral 1000/neutral
-
Hi Gerald-Z, ups, die Welt ist voller Missverständnisse. Ich hatte die Korrektur schon ins Forum eingepflegt. Hase- Igel werde ich bald umsetzen, ich grübel schon darüber. Beatbuzzer hat eindeutig recht. Eine Freilaufdiode ist "Plflicht" und nicht die Kür. Viele Grüße Barney
-
Hi Gerald-Z, da ich nichts mehr von dir höre, gehe ich im ungünstigsten Fall davon aus, dass du eine Probefahrt gemacht hast und jetzt an der nächsten Häuserwand klebst :pizza: Er war doch so jung......
-
Sehr gerne, ich habe gerade keine Testumgebung und muss die Werte im Kopf nachrechnen. Schreib mal...
-
Hi Gerald-Z, der Aufbau sieht erst mal ganz ordentlich aus. Das zweite Relais ohne MOSFET ist mir noch nicht ganz klar in der Funktionsweise. Normalerweise gehört über ein Relais eine Freilaufdiode. Diese solle Spitzenspannung beim Ausschalten des Relais verhindern. http://de.wikipedia.org/wiki/Schutzdiode Mit dem Programm von heute Morgen tut mir leid, da war ich noch nicht ganz geistig da. Hast Du mal den Dämpfungswert angepasst? Mach den mal kleiner, dann sollte das System schneller reagieren. VG Barney
-
Hallo Gerald-Z, im heutigen Morgenkoma hatte ich noch einen Fehler in den beiden Zeilen. Diese Fehler habe ich gerade korrigiert. Ich teste das Programm bei Gelegenheit nochmal aus. Deine Schaltung sehe ich mir nochmal in Ruhe an. VG Barney
-
Ja, sende mir als PN deine E-Mail Adresse. VG Barney
-
1. Bevor Du eine Erstfahrt vornimmst, musst Du den Motorregler am Arduino Board anlernen. D.h. den Motorregler muss erst mal beibringen, was Vollpower, Neutral und Bremse ist, sonst kann es Dir passieren, dass dein Board nicht annhält, richtig bremst oder nur zu 60% maximal beschleunigt. Da jeder Motorregler individuell ist, kann ich nur auf das Handbuch verweisen. Bei mir war es nur Power an und alle drei Punkte mit den Nunchuk zügig ansteuern. Wenn ich das Programm ausliefere, dann immer im "Soft Crusing Mode". D.h. mit Kick Push leicht anfahren und dann sehr sanft beschleunigen. Du findest am Anfang des Programms mehrere Parameter, die es ermöglichen, sportlicher damit umzugehen. Sonni ist neulich mein Board gefahren und hat sich auch "beschwert", das es recht träge im Verhalten ist. Dafür hatte ich mit seiner Einstellung (auch Nunchuk) anfängliche Probleme. Dann kommt noch das Beschleunigungsverhalten deines Motorreglers dazu. Wenn dieser auf Soft steht, wird alles zusammen zu Soft. Was kannst Du ändern: byte BeschleunigungsDaempfung = 30; // je groesser die BeschleunigungsDaempfung, desto langsamer wird Beschleunigung Das kling aber sehr seltsam. Konnte ich so noch nie beobachten. Die 10 Km/h kann der Thematik von ganz oben geschuldet sein. Da schließe ich mich an. Kommen da auch wirklich 5V raus? Stell mal ein Foto von deinem Schaltungsaufbau ins Forum. Ein Tempomat ist nicht inkludiert, da ich keine Motordrehzahl messe. Ja kein Thema, ich habe schon öfters darüber geschrieben, wie gefährlich ich es halte, aber das muss jeder selber wissen, ich bin nicht eure Mutter .... Alt + Neu: // Subroutine fuer die Motorsteuerung void Motorsteuerung(){ // Beschleunigen bei gehaltenen Z-Knopf und überschreiten des Oberern Totpunktes if (nunchuk.zButton == HIGH && nunchuk.analogY > ObererTotpunkt && F_Ueberstrom == LOW){ // StellWertMotor=StellWertMotor+((nunchuk.analogY-NeutralstellungYAchse)/BeschleunigungsDaempfung); StellWertMotor = nunchuk.analogY-NeutralstellungYAchse; // direkte Ansteuerung if (StellWertMotor > ObererStellWertMotor) StellWertMotor = ObererStellWertMotor; // obere Grenze fuer den Motorregler } // Verlangsamen bei gehaltenen Z-Knopf und unterschreiten des UntererTotpunkt else if (nunchuk.zButton == HIGH && nunchuk.analogY < UntererTotpunkt && F_Ueberstrom == LOW){ //StellWertMotor=StellWertMotor+((nunchuk.analogY-NeutralstellungYAchse)/BeschleunigungsDaempfung); StellWertMotor = nunchuk.analogY-NeutralstellungYAchse; // direkte Ansteuerung // Auf Wunsch kann die Bremsfunktion hier heraus genommen werden // StellWertMotor <= Leerlauf , StellWertMotor = Leerlauf if (StellWertMotor < UntererStellWertMotor) StellWertMotor = UntererStellWertMotor; // untere Grenze fuer den Motorregler } // Freilauf des Motors bei losgelassenen Z Knopf else if (nunchuk.zButton == LOW) StellWertMotor = Leerlauf; // Bremsfunktion bei losgelassenen Z Knopf durch zurueckziehen // der X-Achse und unterschreiten des unteren Totpunktes if (nunchuk.zButton == LOW && nunchuk.analogY < UntererTotpunkt){ // Der Nunchuk liefert einen Bremswert von 127 bis zur 0 runter. Der Motorsteller benötigt aber einen // Winkel unter 90 Grad. nunchuk.analogY - (NeutralstellungYAchse - Leerlauf) liefert einen geeigneten Wert. StellWertMotor = Leerlauf-(NeutralstellungYAchse-nunchuk.analogY)*(Leerlauf/NeutralstellungYAchse); if (StellWertMotor >= Leerlauf){ // Sicherheitsfunktion, damit nicht mit der Bremsfunktion StellWertMotor = Leerlauf; // Beschleunigt wird. Der oberste Wert darf nicht über den Leerlauf liegen } if (StellWertMotor < UntererStellWertMotor) StellWertMotor = UntererStellWertMotor; // untere Grenze fuer den Motorregler } if (F_Ueberstrom == HIGH){ StellWertMotor = Leerlauf+(StellWertMotor-Leerlauf)*Reduktionsfaktor; F_Ueberstrom = LOW; // Flag loeschen } OCR1A = StellWertMotor; // Geschwindigkeitsvorgabe Motor //Serial.println("StellWertMotor"); //Serial.print(StellWertMotor); // Debugausgabe Motorsteller //Serial.print(" "); // Ende Abschnitt Motorsteuerung } Im Endeffekt werden nur zwei Zeilen auskommentiert und ersetzt: alt: StellWertMotor=StellWertMotor+((nunchuk.analogY-NeutralstellungYAchse)/BeschleunigungsDaempfung); neu: StellWertMotor = Leerlauf + (nunchuk.analogY-NeutralstellungYAchse)*(Leerlauf/NeutralstellungYAchse); // direkte Ansteuerung alt: StellWertMotor = StellWertMotor+((nunchuk.analogY-NeutralstellungYAchse)/BeschleunigungsDaempfung); neu: StellWertMotor = Leerlauf - (NeutralstellungYAchse-nunchuk.analogY)*(Leerlauf/NeutralstellungYAchse); // direkte Ansteuerung Alle anderen Funktionen (Überstrom und Parameterbegrenzung) habe ich hier nicht angefasst. BITTE TESTE ES ZUERST TROCKEN AUF DEM TISCH AUS, BEVOR DU DAMIT AUF DIE STRASSE GEHST!!!!:devil: VG Barney
-
Hi HMP, Willkommen im Forum. Wenn Du fragen zum Nunchuk hast, leg einfach im passenden Thema los. VG Barney
-
Der Arduino ist leider zu langsam. Das Protokoll arbeitet im µs-Bereich. Damit kommt der Arduino leider nicht hinterher:mad: Die Hardware SPI des Arduino scheint eine Chance zu haben. Da weiss ich aber leider nicht, an welcher Position sich das Datenpaket gerade befindet. Diese #%&! Schnittstelle schreit nach einen FPGA oder einen schnelleren Prozessor. Alternativ kann ggf. auch der Empfänger Prozessor entfernt werden. Dann müsste aber das gesamte Verbindungsprotokoll nachgeahmt werden. So eine SCH...... Momentan keine Idee mehr dazu.... VG Barney
-
Mit: 3 Frame Sync 5 Clock 7 Data2 Können die Daten des Nunchuk ermittelt werden. X- und Y-Achse sind schon gefunden. Jetzt fehlen nur noch die Taster:D Die finde ich auch noch :devil: