Jump to content
elektro-skateboard.de

Wii Nunchuck mit Teensy 3.1


barney

Empfohlene Beiträge

Nochmal wegen der 4,7V Z-Diode am Gate des IRFP3206: Wieso? ;)

Um den vor Spannungsspitzen zu schützen, würde ich eine 12-15V einbauen. Nicht dass die 4,7V noch die eh schon knappen 5V kastriert.

Ich meine, ich kann das Mißverständniss aufklären. Im Schaltplan ist eine 5V Z-Diode eingezeichnet, obwohl ich in fritzing 12V als Durchbruchspannung ausgewählt habe. Der Kenner (Beatbuzzer, Barney) sieht das an der Typbezeichnung sofort, ich nicht. Daher meine Verwunderung, dass Beatbuzzer immer mit den 5V anfängt, wo ich doch eine 12V Diode drin habe. Zwischenzeitlich habe ich auch die richtige Typbezeichung der 12 V Z-Diode im Schaltplan und alles ist Jiggy ... bis auf die Tatsache, dass ich lieber einen Optokoppler verwenden sollte (lese ich gerade).:o

Link zu diesem Kommentar
Auf anderen Seiten teilen

Anbei die Schaltung!

 

Der IRF510 ist nur Stellvertreter für den Leistungs-MOSFET!. Der Virtuelle Optokoppler hat drei Anschlüsse am Ausgang, den an der Basis kannst Du ignorieren. Der Rest sollte so passen. 15V Ugs sind durch die Z-Diode sicher gestellt.

Der Optokoppler wird mit 10mA angesteuert. Du musst natürlich im Datenblatt nachsehen, ob das dann zu deinen passen wird.

 

VG

 

Barney

dude02.thumb.PNG.a810de0e6ed4f1780e0c5facf9381226.PNG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gibt auch noch LTspice. Das ist kostenlos. Nur so als weiterer Vorschlag...

 

Da möchte ich noch erwähnen:

 

Externe Links nur für Mitglieder sichtbar

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Optokoppler wird mit 10mA angesteuert. Du musst natürlich im Datenblatt nachsehen, ob das dann zu deinen passen wird.

Muss ich aufpassen, dass er bei 10mA durchsteuert oder dass er nicht durchbrennt?

VG

Dude:o

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also bei 10mA ist Ic ca. 7mA. Udiode soll ca. 1.5V sein. Also 3.3V-1.5V= 1.8V/10mA 180 Ohm. Das solte passen.

Aber nur 7mA am Ausgang des Optokoppler. Da müsste ggf. der 10k Ohm Widerstand angepasst werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bei der Simulation war zu sehen, dass aufgrund des hohen Widerstand zwischen GS das Abschalten eine Weile dauert. Ca. 10ms.

Solte reichen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Dude,

eine Sache hatte ich noch vergessen. Die MOSFETs für Licht und Hupe sollten auch bei 3.3V sicher schalten. Dafür gibt es logic level MOSFETs. Die sind dafür geeignet ohne das Optokoppler Geraffel sicher zu schalten. Die Ströme liegen bei erster Sichtung um die 30A bei 55V Typen. Ich liefer genaue Daten am Montag.

Link zu diesem Kommentar
Auf anderen Seiten teilen

IRLR3114ZPbF -> 40V, 20-30A bei 3.3V, geringer Innenwiderstand

IRLR2905 -> 55V, 30-40A bei 3.3V hattest du selbst schon ausgesucht.

 

Und immer daran denken:

Pv=I^2*R

PVerlust= Strom im Quadrat * Widerstand

Link zu diesem Kommentar
Auf anderen Seiten teilen

Neue Teensy Lib Version 1.19 ist raus!

 

Es kann jetzt auch 72MHz als Takt gewählt werden, ohne den Teensy zu übertakten. Für die ganz harten sind versteckte overclocking Einstellungen bis nahezu 170MHz möglich.

  • Add slow clock options, 2, 4, 8 & 16 MHz
  • Increase flash overclocking when CPU is overclocked to 168 MHz

Externe Links nur für Mitglieder sichtbar

Link zu diesem Kommentar
Auf anderen Seiten teilen

Werte Mitbastler,

 

es war lange überfällig, ab heute wird das Programm von den Parametern getrennt!

 

D.h.:

Jeder hat sein eigenes

* Elektroskate_Custom_Settings.h -> BT vorhanden, Strom und Spannungsmessung erwünscht? u.s.w.

* Elektroskate_Custom_Parameters.h -> Hier können die Spannungsmessbereiche oder Überströme, Nunchukverhalten eingestellt werden.

* Elektroskate_Changelog -> Was wurde am Programm verändert?

* Elektroskate_Connection -> Wo wird was angeschlossen und was macht überhaupt das Programm?

 

Und die Debug Ausgabe wurde von der Datenausgabe getrennt. D.h. Debug über USB und Daten über BT-Modul!

 

Elektroskate_Custom_Settings.h

// Debugflag
#define DEBUG TRUE         // Aktivieren der Debugausgabe DEBUG = TRUE, FALSE

// Wie soll gesteuert werden
#define DirectDrive FALSE  // TRUE -> Direct Drive, FALSE -> Integrations Drive

// Sonderfunktionen
#define UIMESS TRUE        // HW UI-Messung vorhanden (TRUE,FALSE)
#define LICHTHUPE TRUE     // HW Licht, Hupe vorhanden (TRUE,FALSE)
#define TEMPMESS TRUE      // HW Temperaturmessung vorhanden (TRUE,FALSE)
#define LESOFT TRUE        // HW Leistungselektronik langsam hochfahren vorhanden (TRUE,FALSE)

Elektroskate_Custom_Parameters.h

// Serielle Geschwindigkeit
#define BT_BAUDRATE    115200      // Datenrate fuer das Bluetooth Modul, ggf. fuer ein anderes BT-Modul anpassen, Ausgabe über Serielle Schnittstelle 1
#define DEBUG_BAUDRATE 115200      // Datenrate fuer das Debugging in der Arduino IDE per USB

//Wertebereich von (Min..Max,SinnvollUntererWert..SinnvollObenrerWert)

// Nunchuk - Steuerparameter Sollwertvorgabe und Programmablaufsteuerung 
#define MinYAchse 27               // Minmalwert y-Achse ganz unten (0..255, 0..30)
#define MaxYAchse 255              // Maximalwert y-Achse ganz oben (0..255, 240..255)
#define NeutralstellungYAchse 130  // Neutralstellung Y-Achse (0..255, 125..135)

#define ObererTotpunkt  145        // Wenn dieser Wert von der Nunchuk Y-Achse ueberschritten wird, wird beschleunigt (Integrationssteuerung) (0..255, 136..145)
#define UntererTotpunkt 124        // Wenn dieser Wert von der Nunchuk Y-Achse unterschritten wird, wird die Beschleunigung zurueckgenommen (Integrationssteuerung) (0..255, 115..124)

#define PairingLostTrigger   50    // Schwellwert fuer Funkabriss, wird dieser Wert ueberschritten liegt ein Funkabriss vor (0..255, 20..70)
#define PairingSuccessTrigger 5    // Schwellwert fuer erfolgreiche Verbindung (0..255, 5..10)

// Temperatursensoren
#define TempSensorAnzahl 1                                                       // Die Temperatursensoranzahl -1 hier eintragen
byte TempAddress[3][8] = {{ 0x28, 0x75, 0x3F, 0x2A, 0x04, 0x00, 0x00, 0x73 }     // Seriennummer der Temperatursensoren, diese muss extra ermittelt werden
                        ,{ 0x28, 0x0D, 0xE2, 0x00, 0x04, 0x00, 0x00, 0x93 }     // Seriennummer der Temperatursensoren, diese muss extra ermittelt werden
                        ,{ 0x28, 0x0D, 0xE2, 0x00, 0x04, 0x00, 0x00, 0x93 }};   // Seriennummer der Temperatursensoren, diese muss extra ermittelt werden

// PWM Motorsteuerung
#define PWM_ObererStellWertMotorIgel 1.7 // Wert berechnen fuer Oebere Pulsweite Igel (1.7ms Pulsweite) (0.0..5.0, 1.6..1.8)
#define PWM_ObererStellWertMotorHase 2.0 // Wert berechnen fuer Oebere Pulsweite Hase (2.0ms Pulsweite) (0.0..5.0, 1.9..2.1)
#define LeerlaufOffset 0                 // Offset zum schnelleren Ansprechen des ESC bei inkrementeller Steuerung (0..255, 0..200)
#define PWM_LeerlaufStellWertMotor   1.5 // Wert berechnen fuer Leerlauf (1.5ms Pulsweite)  (0.0..5.0, 1.4..1.6)
#define PWM_UntererStellWertMotor    1.0 // Wert berechnen fuer untersten Wert (1.0ms Pulsweite)  (0.0..5.0, 9.9..1.1)

// Incrementel Drive Parameter
#define BeschleunigungsDaempfung 7 // Je groesser die BeschleunigungsDaempfung, desto langsamer wird Beschleunigung oder Bremse angenommen (ggf. anpassen)   (0..255, 0..20)

// Spannungs/- und Strommessung
#define BattSpgMMax 30             // Maximale messbare Batterienspannung 30V,
#define StromMMax   50             // Maximal messbarer Strom in A (ACS756SCA-050B Stromsensor)

// Strombegrenzung und Kurzschlusserkennung
#define Ishort (uint8_t) 50        // Maximaler Strom, dieser fuehrt zur sofortigen Abschaltung (<= StromMMax)
#define Imax   (uint8_t) 30        // Grenzwert, ab dem die Strombegrenzung einsetzt
#define Strom0A (float)  StromMMax // 0A Messwert, wird angezeigt wenn kein Strom fliesst und Strom0A = 0 (muss kalibriert werden)

bearbeitet von barney
Link zu diesem Kommentar
Auf anderen Seiten teilen

Also der Teensy 3.1 sollte jetzt vollständig angepasst sein. Alle Funktionalitäten sind getestet. Leider funktioniert die Strombegrenzung Beschleunigungsreduktion nicht so soft, wie ich es gehofft hatte. Da ist noch etwas Arbeit, die gemacht werden muss. Der Grundsätzliche Ansatz scheint zu stimmen, aber die Umsetzung ist Schrott. (Beim Arduino funktionierte diese auch nicht!)

 

Debugging:

Wurde massiv verändert und Erweitert:

// Debugflag
#define DEBUG TRUE                 // Aktivieren der Debugausgabe (TRUE,FALSE)
#define DEBUG_Funktion     FALSE // Aktivieren der Debugausgabe Welche Funktionen werden aufgerufen (TRUE,FALSE)
#define DEBUG_ISR          FALSE // Aktivieren der Debugausgabe Aufruf der ISR Interrupt Service Routinen (TRUE,FALSE)
#define DEBUG_Nunchuk      FALSE // Aktivieren der Debugausgabe Nunchuk Werte x,y-Achse, Beschleunigung, c,z-Button(TRUE,FALSE)
#define DEBUG_Messung      FALSE // Aktivieren der Debugausgabe interne Messwerte und Berechnungen (TRUE,FALSE)
#define DEBUG_Motorsteller TRUE  // Aktivieren der Debugausgabe interne Werte Motorsteller (TRUE,FALSE)

Es werden jetzt auch dazu Erklärungen mitgeliefert:

Beschleunigung, Neutralstellung, Bremsen.

StellWertMotor: 4915 Neutralstellung
StellWertMotor: 5480 Beschleunigung
StellWertMotor: 3250 Bremsen

Diese Werte und Kommentarausgabe hilft beim Einstellen des Motorstellers, bzw. beim Überprüfen des Verhaltens bei Fehlfunktionen.

bearbeitet von barney
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...