Brushless Motor per Arduino steuern

das_copter_198

Erfahrener Benutzer
#61
Im Multiwii Code, also im ProMini Teil(läuft auch mit nem Atmega328p) werden alle vier Motoren mit einem 8Bit Signal gesteuert. Es wird wohl das beste sein, dann die beiden Motoren und die beiden Servos später mit nem 8Bit Signal zusteuern. Dafür reicht dann: TCCR1A |= _BV(COM1A1); oder?
 

donvido

Erfahrener Benutzer
#62
Damit verknüpfst du nur den Pin mit dem Timer.
Du musst noch dein Duty Cycle bzw. die Pulsweite festlegen.
Das geschieht dann über das Output Compare Register OCRnX (n - Timer, X - Channel).
Bei 8-Bit PWM schreibst du da dann einfach einen Wert von 0-255 rein.
//for Arduino Uno
OCR1A=128; //Set Duty Cycle on digital Pin 9 to 50%
 

das_copter_198

Erfahrener Benutzer
#63
Gut, wen das zum intialisieren reicht, bei nem 8Bit Signal. Dannach muss natürlich ein Wert rein geschrieben werden, alles andere wäre iwie sinnlos ;)Ich glaube ich werde später ein anderes Board benutzen das min. 2 16Bit Timer hat, weil 8Bit ist jetzt nicht gerade das beste, was ich mir vorstellen kann.
 

donvido

Erfahrener Benutzer
#64
Du musst aber auch darauf achten, dass deine ESCs die höhere Auflösung verarbeiten können. Die SimonK Regler schaffen 11-Bit, andere können vielleicht nur 8 Bit. Wär zwar kein Problem, die mit 11-Bit zu betreiben, aber würde nichts bringen.
 

das_copter_198

Erfahrener Benutzer
#66
Auch wen das jetzt nicht wirklich zu dem Thema des Threads passt, frag ich trotzdem mal ;) Ich kann die MPU6050 ganz normal auslesen wie hier im obersten Code. Das ist relativ simpel. Gibt es da auch noch einen andere Variante um die Werte zubekommen, wie bei den Motoren wo es auch noch eine bessere Lösung gab. Oder ist das schon ein sehr gute Lösung?

Lg Vincent
 

donvido

Erfahrener Benutzer
#67
Dann schau dir mal die I2Cdev-lib von Jeff Rowberg an. Der hat sich auch mit dem MPU6050 beschäftigt.
Man kann sowohl die Rohdaten auslesen, als auch nachträglich im DMP (Digital Motion Processor) aufbearbeitete Werte.
Das wird übrigens in deinem Link im Abschnitt "Code" auch aufgeführt.
 

donvido

Erfahrener Benutzer
#69
Kommt darauf an, was du brauchst.
Ich lasse mir bei meinem Projekt zum Beispiel die Rohdaten ausgeben und dann durch einen Kalmanfilter laufen.
Ich will aber auch die DMP Variante testen um so die CPU zu entlasten. Das dürfte aber auf einem Arduino Due vernachlässigbar sein, da ich auf meinem Mega schon eine 100Hz Regelrate habe.
Auf jeden Fall ist die DMP Variante anfälliger für Fehler.
 

das_copter_198

Erfahrener Benutzer
#71
Hallo,

ich denke ich werde die DMP Daten nehmen, um so die CPU zu entlasten, weil ich zur Zeit nur ein Uno verwende. Das sollte doch funktionieren, wen ich die Daten noch durch einen Kalmanfilter schicke?

Lg Vincent
 

donvido

Erfahrener Benutzer
#72
Kommt halt drauf an, durch was für einen Kalmanfilter du das jagst, bzw. ob es überhaupt noch erforderlich ist.
Leider ist über die verwendeten Algorithmen des DMP nichts bekannt.
 

das_copter_198

Erfahrener Benutzer
#73
Ja einen Kalmanfilter wollte ich schon verwenden, weil die Daten nach einer Zeit sowohl beim Gyro als auch beim Acc driften. Und dann nehm ich lieber einen Kalmanfilter der besser sein soll, als einen Komplemetärfilter.
 

donvido

Erfahrener Benutzer
#75
Multiwii und alle anderen (Ausnahme die neue Arducopter Firmware [hier auch nur Testweise]) verwenden einen einfachen Komplementärfilter, eine entsprechend summierte Gewichtung von Gyro und Acc.
 

donvido

Erfahrener Benutzer
#78
Sensors.cpp Zeile 1367++
Es werden nur Rohdaten ausgelesen und verarbeitet.
Das ganze ist in der Multiwii natürlich im Gegensatz zu Jeff Rowbergs Version stark vereinfacht um den Code kompatibel zu halten.
 

das_copter_198

Erfahrener Benutzer
#80
Hallo,

ich habe gestern schon mal eine PID Regelung geschrieben, welche ich auch bald testen werde, wenn ich neue Motoren habe, nachdem sich die anderen "selbständig" gemacht haben ;) Die PID Regelung ist erstmal nur für ein Gyro gedacht, aber am Ende hatte ich vor die Daten von Gyro + Acc zunehmen. Das will ich mit einem Kalmanfilter dann machen und nicht mit einem Komplementärfilter, wie Multiwii. Motoren werde über ein 8-Bit PWM Signal gesteuert ;) Ich bin jetzt nur noch am überlegen, wie ich die Daten von der MPU hole. Die DMP Daten zu nutzen wäre am einfachsten, aber ich denke ich werde die Rohdaten nehmen. Ich weiß nur noch nicht genau wie ich das realisiere, bzw. die das funktioniert. Ich werde mir noch mal die dev-lib anschauen und Multiwii und mal hoffen das ich das dann auch richtig verstehe ;) Wir das schlauste sein die Rohdaten zunehmen??

Lg Vincent
 
FPV1

Banggood

Oben Unten