RCLogger

Banggood

Foxtech

Flyduino.net

Pidso.com

FPV1.DE
Seite 1 von 10 1 2 3 ... LetzteLetzte
Ergebnis 1 bis 10 von 97

Thema: STM32F103C8 Plattformprojekt mit Display, FATFS, IMU MPU-9250 und Examples

  1. #1

    STM32F103C8 Plattformprojekt mit Display, FATFS, IMU MPU-9250 und Examples

    Hallo

    ich habe hier https://github.com/nichtgedacht/mini-sys ein komplettes
    Projekt für OpenSTM32 System Workbench (http://www.openstm32.org) hin
    gelegt.

    Das Projekt lässt sich auf Knopfdruck installieren und ist für mich die
    Grundlage für alles weitere. Der original Code für das LCD stammt wie
    der übrige hinzugefügte Code aus den Firmware Repos von STM für den
    STM32F4xx und den STM32F1xx. Diesen Code habe ich stark verbessert, so
    dass man 1. Display beliebig drehen kann und 2. mehr der Chip vom
    Display die Arbeit macht. Da der initiale Code mit CubeMX erzeugt wurde,
    kann man damit auch weiterhin die Konfiguration verändern. Dieses Tool
    und die IDE sind auch für Linux erhältlich und beide sehr einfach zu
    installieren.

    Als Hardware eignet sich eins dieser billigen Boards "STM32 minimum
    development system" oder ein marple mini clone mit STM32F103C8 oder
    STM32F103CB und eins dieser ST7735 gesteuerten Displays mit 128x160
    Pixel und SD Karten Slot wie z.B das Teil von Adafruit oder ähnliche.
    Was man noch braucht sind ein paar Drähte eine Lochrasterplatte,
    Buchsenleisten und ein ST-Link V2 Debug Adapter, den man ebenfalls
    günstig bei ebay bekommt.

    Als letzte Neuerung habe ich jetzt eine Breakout Platinchen mit einer MPU-9250 IMU
    hinzugefügt. Somit passt es hier zum Thema.

    Als kleine Application hiervon gibt es zunächst nur eine scheinbar durch Schwerkraft bewegte Kugel (Kreis)
    im Display.

    Vielleicht will es ja jemand clonen und was richtiges daraus machen.

    Hardwarekosten < 20€

    Gruß
    Dieter

  2. #2
    Hi

    inzwischen ist die Experimentierplatine fast als Flight Controller fertig. Dabei wollte ich ursprünglich nur ein Stehwellenmessgerät bauen und hatte mich auf den STM32 wegen der 12 Bit ADCs gestürzt.

    Nur mit dem P Anteil in den Reglern sträubt sich das Ding heftig gegen Lageänderungen und hat nicht die geringste Neigung zum Schwingen. Natürlich hört das Sträuben auf, wenn keine weitere Lageänderung erfolgt. Das heißt, nach dem gewaltsamen Drehen besteht das Ding nicht darauf wieder in die Ausgangslage zurück zu wollen. Ist ja noch kein I Anteil eingeschaltet. Die Steuerung wirkt sehr agil aber nicht nervös. Ich denke wenn man Hubschrauber fliegen kann ist das Ding schon so leicht beherrschbar. Bis jetzt habe ich es nur in der Hand getestet und warte noch auf die passenden Akkus.

    Die Lageregelung scheint jedenfalls keine Hexenwerk zu sein. Bei Timer Interrupt gesteuerten 400 Hz Update Rate bleibt sogar noch Zeit was auf das Display zu zaubern. Ich bin davon überzeugt, dass 400 Hz mehr als schnell genug ist.

    Bilder:
    Der billig Copter
    Das Prototyping (Ausschnitt: S-Bus Inverter)

    Gruß
    Dieter
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken 2016-06-14_17:25:29_1860_E-M10_SRGB-resized.JPG   2016-06-12_22:18:43_1856_E-M10_SRGB-resized.JPG   2016-06-12_22:18:43_1856_E-M10_SRGB-crop.JPG  

  3. #3
    Hi

    Nachdem ich die PID Regler durch Testen in der Hand einigermaßen eingestellt und noch ein Failsafe implementiert hatte war Gestern Erstflug. Beim ruckartigen Schubgeben neigt er etwas zu wackeln. Auf Gier kommt er sehr knackig. Ich habe das Ki für Roll und Nick noch etwas zurück genommen. Mal sehen ob das was gebracht hat. Das Problem ist ja, das beim Testen in der Hand eine mögliche Schwingung sich nicht entfalten kann durch die Dämpfung. Da merkt man erst im Flug was Sache ist.

    Eigentlich sollte diese Einstellverfahren funktionieren:

    Ki und Kd auf Null
    Kp erhöhen bis der Regelkreis schwingt.
    Die Frequenz der Schwingung messen.

    Dann:

    mit
    Tu als die Periode der Schwingung
    Kkrit als Kp bei der das Schwingen einsetzt
    Ti als Zeitkonstante für den Integrator
    Td als Zeitkonstante für den Differentiator

    und den Zusammenhängen:
    1 K = Kp
    2. Ki = K / Ti
    3. Kd = K * Td

    folgende Werte einstellen:

    Kp = 0.6 * Kkrit, Ti = 0.5 * Tu, Td = 0.12 * Tu

    Also mit einer Frequenz 20 Hz und Kkrit = 0.666 und 1. 2. 3.:
    Kp = 0.6 * 0.666 = 0.4 , Ki = 0.4 / ( 0.5 * 50 * 10^-3) = 16, Kd = 0.4 * 0.12 * 50 * 10^-3 = 0.0024

    Das Problem ist, dass man das nicht gefahrlos im Flug ermitteln kann und die Frequenz auch nur geschätzt ist.
    Immerhin kann man Kkrit einigermaßen in der Hand ermitteln und vorsichtig mit konservativen Annahmen weitermachen.

    Aber wahrscheinlich interessiert es hier ja doch wieder niemanden.

    Gruß
    Dieter

  4. #4
    Hallo,

    ich wollte nur mal sagen, dass das Teil inzwischen perfekt fliegt.
    Wenn man das Display weg lässt und 5V aus einem Motorsteller bezieht kann man damit eine winzig kleine Flightcontrol für 3,5€ bauen.

    Gruß
    Dieter

  5. #5
    Erfahrener Benutzer Avatar von amadeus
    Registriert seit
    15.02.2011
    Beiträge
    6.525
    Dieter , klasse Job und vor allem so schnell?!
    Mich interessiert es, leider hat die qualität hier im forum schon vor jahren abgenommen. hier wird eigentlich nur noch fertig zusammengesteckt und gut.

  6. #6
    Hi

    Nachdem ich die 9 PID Werte mit der Fernsteuerung einstellbar gemacht habe konnte ich die Regler für Nick und Roll noch etwas verbessern.

    Generell war ich so vorgegangen:
    1 .Nur P Anteil und diesen erhöht, bis in der Hand bei sehr losem Halten ein Schwingen auftrat.
    2. Den ermittelten P Anteil halbiert und soviel I Anteil dazu gegeben bis wieder ein Schwingen auftrat.
    3. Den ermittelten I Anteil halbiert und dann etwas D Anteil dazu gegeben.

    Danach flog er perfekt. Ich konnte allerdings sehen, dass nach einem Anstoß der Knüpppels auf Roll oder Nick ein kleines
    kurzes Nachwippen auftrat.

    Jetzt bin ich aber endlich in der Lage auf dem Flugfeld die Werte zu justieren. Ein nennenswertes erhöhen der P Werte
    ergab nur ein Schwingen im Flug. Also wieder zurück damit. Dann habe ich in kleinen Schritten den D Anteil erhöht.
    Jetzt ist das Nachwippen beim Knüppel Anstoßen ganz verschwunden. Das Ding ändert seine Lage im Raum genauso schlagartig wie ich den Knüppel anstoße und bleibt ohne Überschwinger so stehen.

    Die Einstellbarkeit habe ich so realisiert:

    Wenn die Motoren auf Halt stehen zeigt das Display die 9 Werte an.

    Miit einem Tastschalter kann ich die Werte nacheinander auswählen. Mit einem 2 Stufen Schalter wird der "Program" Mode ausgewählt. Der Tastschalter läßt die Auswahl dann nicht weiter springen. Ein weiterer 3 Stufen Schalter "WriteUse" bestimmt was dann passieren soll. Wenn letzterer Schalter auf Mittelstellung ist wird im Eintrag der gerade selektiert ist ein neuer Wert angezeigt, der mit einem Drehknopf "Variable" passend skaliert einstellbar ist. Wenn der "WriteUse" Schalter unten ist wird dieser Wert fortlaufend in die RAM Varialble geschrieben. Die neuen Werte sind dabei nur für die aktuelle Session gültig.

    Wenn der "WriteUse" Schalter in der oberen Position und "Program" on ist, bewirkt der Tastschalter ein abspeichern aller Werte in eine der oberen Flashseiten. Wenn diese Schalterstellung beim Anstecken des Akkus besteht, werden die Werte aus der oberen Flashseite in RAM kopiert. Bei allen anderen Stellungen werden die RAM Werte aus konstanten Werten im Programmtext erzeugt.

    Auf diese Weise habe ich auch ohne Editieren 2 alternative Sets von Werten am Flugfeld. Die konstanten default Werte kann ich
    dann später zu Hause anpassen.

    Gruß
    Dieter

  7. #7
    Hi

    Inzwischen habe ich als RC Protokoll UDI16(Jeti) aka SRXL(Multiplex) implementiert. Damit ist die Auflösung doppelt so hoch (max 4095 Schritte)

    Da ich gerade eine neue Platine mache, diesmal mit mehr Überlegung und alles gesockelt, habe ich mal die Verbindungen dokumentiert.

    Der Klotz auf der Oberseite ist übrigens ein TSR-1 2450 5V 1A Schaltregler. Das Display und der IMU Baustein werden aber
    aus den 3.3V vom Maple mine clone gespeist. Der Längsregler auf dessen Platine kann 1,5A.

    Der Beeper ist elektrodynamisch und für 5V vorgesehen. Daher der Transistor. Als Verpolungsschutz sitzt noch eine Schottkydiode an den Versorgungsstiften.

    Gruß
    Dieter
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken 2016-07-15_17:33:16_1868_E-M10_SRGB-mod-resized.JPG   2016-07-15_17:34:44_1869_E-M10_SRGB-resized.JPG   2016-07-15_17:38:39_1870_E-M10_SRGB-resized.JPG   2016-07-15_17:39:22_1871_E-M10_SRGB-resized.JPG  

  8. #8
    Erfahrener Benutzer
    Registriert seit
    24.09.2011
    Ort
    Köln, Unna
    Beiträge
    562
    Hallo Dieter,
    eine feine Sache!
    Hat mich veranlasst, System Workbench for STM32 auf dem LMDE2 aufzusetzen und mich damit etwas mehr zu befassen.
    Auch CubeMX steht bereit, auch wenn ich bis auf die Takt-Teiler Geschichten die meisten Geheimnisse noch nicht aufgedeckt habe.
    (Früher, zu Windows Zeiten, hatte ich CoIDE, aber das gibt es ja nicht für die Linuxwelt).
    Seit längerem liegt hier ein "Entwicklungsboard" von abusemark mit einem STM32F103CBT6 herum und blinkt ... immerhin...
    sollte eigentlich mit einem MPU6050 Platinchen eine "Naze für Arme" geben ;-) .
    Vielleicht verstehe ich irgendwann einmal ein wenig von Deinem Programmgerüst, um auch eigene Projekte zum guten Ende zu bringen.
    Weiterhin gutes Gelingen!

    Gruß
    Manfred

  9. #9
    Zitat Zitat von Zuse Beitrag anzeigen
    Seit längerem liegt hier ein "Entwicklungsboard" von abusemark mit einem STM32F103CBT6 herum und blinkt ... immerhin...
    sollte eigentlich mit einem MPU6050 Platinchen eine "Naze für Arme" geben ;-) .
    Vielleicht verstehe ich irgendwann einmal ein wenig von Deinem Programmgerüst, um auch eigene Projekte zum guten Ende zu bringen.
    Hallo Manfred,

    dann kannst Du ja mein Projekt einfach vom GIT importieren und fast 1:1 übernehmen. Da müssen doch höchstens ein paar Ports geändert werden, die vielleicht von Deiner Hardware schon anderweitig in Verwendung sind.
    Das MCU-Platinchen das ich verwende ist andererseits klein und billig. Davon kann man schon ein paar auf Halde legen.

    Du kannst ja auch großflächig die Sachen entfernen die Du nicht brauchst, wie Display oder SD-Card.

    Ich erkläre Dir gerne den Code, wenn Du Fragen hast.

    Ich will jetzt auch eine Version ohne Display machen und einen Bootloader der per DFU über USB die Software vom PC lädt.
    Dann könnte man über den Mechanismus auch ein Konfigurationstool laufen lassen. Dem User ist ja nicht zuzumuten, dass er einen Debugadapter anschließt;-) Der Bootloader an sich ist kinderleicht und funktioniert schon, aber das DFU Geraffel hat es in sich.

    Anbei noch ein paar ergänzende Bilder.

    Gruß
    Dieter
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken 2016-07-18_19:50:11_1888_E-M10_SRGB-mod-resized.JPG   2016-07-19_14:01:05_1889_E-M10_SRGB-resized.JPG   2016-07-21_16:57:28_1891_E-M10_SRGB-resized.JPG  

  10. #10
    Erfahrener Benutzer
    Registriert seit
    24.09.2011
    Ort
    Köln, Unna
    Beiträge
    562
    Moin Dieter,

    dann kannst Du ja mein Projekt einfach vom GIT importieren und fast 1:1 übernehmen. Da müssen doch höchstens ein paar Ports geändert werden, die vielleicht von Deiner Hardware schon anderweitig in Verwendung sind.
    dieser Import Schritt war der einfachste ;-)
    im Moment ist noch nichts belegt, außer gedanklich. So, wie Zeit ist, taste ich mich durch Deine Kreation ...
    Hattest Du einen Textfile mit der Belegung der Ports? Ich glaubte, einen solchen gesehen zu haben, finde ihn aber nicht mehr.

    Das MCU-Platinchen das ich verwende ist andererseits klein und billig. Davon kann man schon ein paar auf Halde legen.
    Stimmt, leider habe ich inzwischen so einiges auf Halde, aber das bleibt wohl nicht aus, wenn man in Fernost bestellt ...
    Meist habe ich mehr Ideen als Zeit.
    Inzwischen habe ich auch ein Breakout mit der MPU9250 (und Kompass u. Baro) im Bestand, aus DE. Ob sich für die 6050 Platinchen noch ein Verwendungszweck finden wird, muss sich zeigen.
    Ich komme aus der Arduino-Welt, davor Atmega; was die Copter angeht, habe ich mit MultiWii und dem Wii-Sensor angefangen :-)

    Du kannst ja auch großflächig die Sachen entfernen die Du nicht brauchst, wie Display oder SD-Card.
    Ich erkläre Dir gerne den Code, wenn Du Fragen hast.
    Werde ich machen, wird aber nicht zeitnah werden ... im August ist überwiegend Urlaub angesagt und dann ist Basteln keine sehr gute Idee ;-)
    Danke und bis dann!

    Gruß
    Manfred

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •