Ok,... Dann mach ich das ganze mal schön minimal...
werde aber ein paar freie i/os rausführen sodass man es einfach erweitern kann..
da bin ich ja mal gespannt.... :-Dso.. platine habe ich bald fertig...
Ich würde sagen, das ist nicht nötig. Für was auch immer diese Platine benutzt wird, der Empfänger wird immer bereits mit Spannung versorgt sein.das summensignal kommt ja vom empfänger über einen servostecker, allerdings hat der empfänger ja schon strom vom mainboard... soll ich dann den empfängeranschöluss mit einem jumper stromversorgbar machen?Ich wäre eher dafür das so einfach/ klein/ leicht wie möglich zu halten...sollen wir vielcht noch eine sd-karte draufmachen?? für waypoints/flug speichern und am rechner visualisieren oder sonstige spässe ??Das ist das xbee wireless UART modul. M.m nach muss das nicht unbedingt auf der Platine berücksichtigt wrden. Für position hold ist es nicht notwendig, und für den späteren waypointflug hat wohl sowieso jeder seine eigenen Präferenzen, oder? Ich habe mich für xbees entschieden weil die so einfach zu benutzen sind. Aber es gibt wohl auch günstigere Lösungen....und auf dem bild von der platine oben.. was ist denn das unter dem gps??
Aber ich möchte ja möglichst bald schon autonom fliegen und nicht erst 2016 wenn Galileo wirklich fertig ist...Eine alternite gibt es Bald mit dem europäischen Satellitenprogramm, doch ja....
Ich nutze dieses 65 Kanal 10Hz GPS:Was für ein GPS verwendest du?
http://www.watterott.com/de/65-Kana-...er-mit-Antenne
Die Brushlessmotoren regel ich mit PID² Regelkreisen und normalen Modellbauempfängern die mit 417Hz angesteuert werden.
Bald werde ich mal auf der Wiese herumspringen und gucken was das GPS so rausgibt...
Viele Grüße, William
-> http://william.thielicke.org/
Ok,... Dann mach ich das ganze mal schön minimal...
werde aber ein paar freie i/os rausführen sodass man es einfach erweitern kann..
meine projekte: robotik.dyyyh
Hey Willa den Shop kannte ich noch garnicht der hat ja extrem tolle Sachen und noch dazu billig! Danke :-D
so... habe das Board fertig. mal bitte drüberschauen, ob irgdnwo was verdreht ist..
SO sieht das ganze aus:
Bild hier
die Dateien dazu gibt es hier: http://robotik.dyyyh.de/repository/navi.tar.gz
Verbaut sind die drei Sensoren, ein Atmega32 sowei +5V und +3,3V regler für die Versorgung. das GPS ist an der UART, die andern zwei an I²C (Auf den Sensorboards sind schon Pullups, habe sie trotzdem nochmal vorgesehen, falls das Board mit den Pullups nicht bestückt wird. Ansosnten einfach frei lassen..
links unten sind noch 3 LEDs drauf zum debuggen und 8 GPIOs für die Kommunikation mit dem 2. Board oder sonstiges..
(der schaltplan ist noch etwas chaotisch, müssen noch Signal-Ports rein statt dem Kabelsalat)
meine projekte: robotik.dyyyh
Hi Goran,
sieht so weit gut aus, ber iuch konnte es mir noch nicht näher anschauen. Aber ganz schön groß ist das Board, oder? Größer als meine Lochrasterversion. Das würde ich auf meinen micro-Tricopter gar nicht drauf bekommen. Wenn man schon zweiseitiges Layout macht, köntne mabn dann nicht auch die 2.54mm Teile zweiseitig bestücken? direkt unter das GPS passt doch prima der mega32, auf die andere Seite können dann auch noch bauteile. Unter den Kompass können allerlei Widerstände/ Kondensatoren. Und Luftdruck könnte senkrecht. Außerdem gehen statt Elkos auch smd Tantal kondensatoren ganz gut. Und quarze gibt es auch in deutlich kleiner glaube ich. Ich würde auch eine 3.3V version vom mega32 nehmen (ich glaube 8MHz reicht) und auf den 5V regler ganz verzichten. Dann einfach einen 1k Widerstand zum VCC des ISP steckers, dann funktioniert das flashen trotzdem.
Ich bekomme halt leider keine Platine auf meinen micro-tricopter die deutlich größer als 45x45mm ist... Sieh bitte meine zahlreichen Anmerkungen nicht als Kritik... Es sind nur meine Wünsche wenn ich heut Geburtstag hätte ;-D
Viele Grüße, William
-> http://william.thielicke.org/
Ok, kein ding, war ja nur als erster Vorshclag gemeint.. 45x45 ist recht klein, aber mit zweiseitiger bestückung sollte es machbar sein.. Stimmt die 5V können wir weglassen.. werde es nochmal überarbeiten und dann wieder einstellen.. Denke halbsogross ist schon möglich..
Weist du zufällig wie das ist mit GPS/Kompass und so wegen abschirmung?
Stört sich das irgdnwei /muss da ne massefläche dazwischen oder ehrr nicht??
meine projekte: robotik.dyyyh
Hi,
das GPS hat eine dicke Metallplatte an der Unterseite. das wird wohl so eine Art Abschirmung sein. Ob der Kompass das bracuht weiss ich noch nicht. Andererseits darf der ja eh nicht sonderlich empfindlich sein, sonst kann man das mit 3-4 Motoren in der Nähe sowieso vergessen... Nach meinen ersten Tests mit dem kompass weiss ich nun, dass der Kompass wirklich stark auf eine Neigung reagiert. Evtl. muss der am Ende eh gegen einen Neigungskompensierten ausgetauscht werden.... Wäre sehr ärgerlich, da die ca. 5mal so teuer sind...
Viele Grüße, William
-> http://william.thielicke.org/
die neigungskompensierten sind wirklich sehr teuer... kann man das nicht softwaretehcnisch lösen? beispielsweise, dass er sich immer seine ausrichtung holt wenn es gerade messbar ist und dann bis zur nächsten messung das yaw-gyro dazuintegriert oder so ähnlich... naja muss man mal schaun.. denke fürs erste wird es auch so gehen, ausserdem steht er ja wenn er im navimode ist eher wagrecht und fliegt keine fiesen manöver..
meine projekte: robotik.dyyyh
Genau, deswegen wird das für Position-hold bei wenig bis keinem Wind erstmal funktionieren.ausserdem steht er ja wenn er im navimode ist eher wagrecht und fliegt keine fiesen manöver..
Ja, das geht wohl. Man kann auf der Naviplatine einfach die gleichen Berechnungen ausführen wie auf der Tricopterplatine und den errechneten Winkel dazu benutzen den Kompass zu kompensieren. Dazu müsste man den IMU-cube abzweigen und bräuchte 4 AD Kanäle. Aber die hast du ja eh schon nach außen geführt.kann man das nicht softwaretehcnisch lösen? beispielsweise, dass er sich immer seine ausrichtung holt wenn es gerade messbar ist und dann bis zur nächsten messung das yaw-gyro dazuintegriert oder so ähnlich...
Aber erstmal Position-hold, das ist auch schon eine Art "Meilenstein"... :-D
Viele Grüße, William
-> http://william.thielicke.org/
Der Drucksensor läuft jetzt auch. Ich frage den EOC pin ab und errechne die Höhe so schnell wie der Sensor kann. Da das Signal ziemlich stark verrauscht ist bilde ich danach den Mittelwert aus 8 Messungen. Dann ist es immer noch verrauscht, aber vielleicht reicht es ja.
Also laufen eigentlich alle Sensoren, ich werde bald mal die einzelnen Code-Stückchen zusammenfügen. Dann kann ich bald auch mit der Programmierung der Regelung anfangen.
Code vom Drucksensor (modifiziert nach kh-gps.de):
Code:'===CHIP SETTINGS=== $regfile = "m328pdef.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 8000000 $baud = 38400 Config Pind.2 = Input 'eoc Dim Ac1 As Single Dim Ac2 As Single Dim Ac3 As Single Dim Ac4 As Long Dim Ac5 As Long Dim Ac6 As Long Dim B1 As Single Dim B2 As Single Dim B3 As Long Dim B4 As Long Dim B4a As Single Dim B5 As Single Dim B6 As Single Dim B7 As Long Dim Mb As Single Dim Mc As Single Dim Md As Single Dim Ut As Long Dim Up As Long Dim X1 As Single Dim X2 As Single Dim X3 As Single Dim Zwr1 As Single Dim Zwr2 As Single Dim Zwr3 As Single Dim Zwr4 As Single Dim T As Single Dim T_str As String * 4 Dim P As Single Dim P2 As Single Dim Po As Single Dim A As Single Dim A2(8) As Word Dim Mittelwert As Word Dim Averaging As Byte Dim I As Byte Dim Adres As Byte Dim Value As Byte Dim Result As Integer Dim Hi As Long Dim Lo As Long Dim Xlo As Long $lib "i2c_twi.lbx" ' we do not use software emulated I2C but the TWI Config Scl = Portc.5 ' we need to provide the SCL pin name Config Sda = Portc.4 ' we need to provide the SDA pin name I2cinit Declare Sub Write_bmp(byval Adres As Byte , Byval Value As Byte) Declare Sub Read_bmp(byval Adres As Byte , Value As Byte) Declare Sub Read_reg Const Addressw = &B11101110 'slave write address Const Addressr = &B11101111 'slave read address 'hole Kalibrierungsdaten '------------------------------------------------------------------------------- Adres = &HAA 'Startadresse calibration data Call Read_reg Ac1 = Result Call Read_reg Ac2 = Result Call Read_reg Ac3 = Result Call Read_reg Ac4 = Result Call Read_reg Ac5 = Result Call Read_reg Ac6 = Result Call Read_reg B1 = Result Call Read_reg B2 = Result Call Read_reg Mb = Result Call Read_reg Mc = Result Call Read_reg Md = Result Averaging = 1 Do 'hole Rohdaten Temperatur '------------------------------------------------------------------------------- If Averaging = 1 Then 'datasheet: would be enough to get temp every second Call Write_bmp(&Hf4 , &H2E) While Pind.2 < 1 'wait until EOC is 1 ca. 5ms Waitms 1 Wend Call Read_bmp(&Hf6 , Value) 'read it back Hi = Value * 256 Call Read_bmp(&Hf7 , Value) 'read it back Ut = Hi + Value End If 'hole Rohdaten Luftdruck '------------------------------------------------------------------------------- 'Call Write_bmp(&Hf4 , &HF4) 'ultra-high precision mode 'Call Write_bmp(&Hf4 , &H34) 'normal mode Call Write_bmp(&Hf4 , &HB4) 'high precision mode While Pind.2 < 1 ''wait until EOC is 1 ca. 26 ms in ultra high precision mode Waitms 1 Wend Call Read_bmp(&Hf6 , Value) 'read it back Hi = Value * 256 Call Read_bmp(&Hf7 , Value) 'read it back Up = Hi + Value 'kalkuliere tatsaechliche Temperatur '------------------------------------------------------------------------------- Zwr1 = Ut - Ac6 Zwr2 = 2 ^ 15 Zwr2 = Ac5 / Zwr2 X1 = Zwr1 * Zwr2 Zwr1 = 2 ^ 11 Zwr2 = Mc * Zwr1 Zwr3 = X1 + Md X2 = Zwr2 / Zwr3 B5 = X1 + X2 T = B5 + 8 Zwr3 = 2 ^ 4 T = T / Zwr3 T = T / 10 T_str = Str(t) T_str = Left(t_str , 4) 'Print "T= " ; T_str ; " C" 'kalkuliere tatsaechlichen Luftdruck '------------------------------------------------------------------------------- B6 = B5 - 4000 Zwr1 = 2 ^ 11 Zwr2 = 2 ^ 12 Zwr3 = B6 / Zwr2 Zwr3 = B6 * Zwr3 Zwr4 = B2 * Zwr3 X1 = Zwr4 / Zwr1 Zwr1 = 2 ^ 11 Zwr2 = B6 / Zwr1 X2 = Ac2 * Zwr2 X3 = X1 + X2 Zwr1 = Ac1 * 4 Zwr1 = Zwr1 + X3 Zwr1 = Zwr1 + 2 B3 = Zwr1 / 4 '1010(orig) Zwr1 = 2 ^ 13 Zwr2 = B6 / Zwr1 X1 = Ac3 * Zwr2 Zwr1 = 2 ^ 12 Zwr2 = 2 ^ 16 Zwr3 = B6 / Zwr1 Zwr3 = B6 * Zwr3 Zwr4 = B1 * Zwr3 X2 = Zwr4 / Zwr2 X3 = X1 + X2 X3 = X3 + 2 X3 = X3 / 4 Zwr1 = X3 + 32768 Zwr2 = 2 ^ 15 Zwr3 = Zwr1 / Zwr2 B4a = Ac4 * Zwr3 B4 = Abs(b4a) B7 = Up - B3 Dim B7a As Long B7a = B7 * 50000 Zwr1 = B7a * 2 Zwr1 = Zwr1 / B4 Zwr2 = B7a / B4 Zwr2 = Zwr2 * 2 If B7a < &H8000000 Then P = Zwr1 Else P = Zwr2 Zwr1 = 2 ^ 8 Zwr2 = P / Zwr1 X1 = Zwr2 * Zwr2 Zwr1 = 2 ^ 16 X1 = X1 * 3028 X1 = X1 / Zwr1 X1 = Abs(x1) Zwr1 = -7357 * P Zwr2 = 2 ^ 16 X2 = Zwr1 / Zwr2 Zwr1 = X1 + X2 Zwr1 = Zwr1 + 3791 Zwr2 = 2 ^ 4 Zwr1 = Zwr1 / Zwr2 P = P + Zwr1 P = P / 100 'kalkuliere Hoehenwerte '------------------------------------------------------------------------------- 'Po = 1013.25 'Pressure auf Seepegel Po = 1020.3 Zwr1 = 1 / 5.255 Zwr2 = P / Po Zwr3 = Zwr2 ^ Zwr1 Zwr4 = 1 - Zwr3 A = 44330 * Zwr4 A = A * 100 'höhe in zentimetern If Averaging <= 8 Then A2(averaging) = Int(a) Averaging = Averaging + 1 End If If Averaging = 9 Then Mittelwert = 0 For I = 1 To 8 Mittelwert = Mittelwert + A2(i) Next Mittelwert = Mittelwert / 8 Print Mittelwert 'ausgabe der höhe in zentimetern Averaging = 1 End If Loop End '------------------------------------------------------------ Sub Read_reg Call Read_bmp(adres , Value) Hi = Value * 256 Adres = Adres + 1 Call Read_bmp(adres , Value) Result = Hi + Value Adres = Adres + 1 End Sub '---------------------------------------------------------- Sub Write_bmp(byval Adres As Byte , Byval Value As Byte) I2cstart 'start condition I2cwbyte Addressw 'slave address I2cwbyte Adres 'address of register I2cwbyte Value 'value to write I2cstop 'stop condition End Sub '---------------------------------------------------------- Sub Read_bmp(byval Adres As Byte , Value As Byte) I2cstart 'generate start I2cwbyte Addressw 'slave address I2cwbyte Adres 'address of register I2cstart 'repeated start I2cwbyte Addressr 'slave address (read) I2crbyte Value , Nack 'read byte I2cstop 'generate stop End Sub
Viele Grüße, William
-> http://william.thielicke.org/
Lesezeichen