Propeller im Quadrocopter

Alles was Du selbst gebaut hast, hier herein. Das Projekt muss allerdings mit einem oder mehreren Parallax Propeller µC realisiert worden sein.
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller im Quadrocopter

Beitrag von PIC18F2550 »

Die Änderungen brachten auch kein Erfolg. :x

Da ich nicht vorhabe das Teil ein weiteres mal zu schrotten bekommt jetzt wie ursprünglich gedacht jeder Sensor seine eigene Anbindung und siehe da es geht.
Der Testaufbau
Der Testaufbau
Der Sensortest
Der Sensortest
Die Sensorwerte
Die Sensorwerte
Trotz Videoausgabe komme ich auf ca. 40 Messungen/sec.
Das nächste Ziel ist das jeder sensor mit seinem eigenem COG läuft.

WIKI überarbeitet http://hive-project.de/wiki/sen_gyro_itg3200:start
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: Propeller im Quadrocopter

Beitrag von drohne235 »

Wie du schon auf dem KC-Treffen angemerkt hast, ist es wahrscheinlich aus Sicherheitsgründen eh besser, wenn die Sensoren getrennt sind, damit nicht ein Baustein den ganzen Bus blockiert. Kostet mehr Pin`s, aber in Verbindung mit einer eigenen COG wahrscheinlich extrem sicher, wenn nicht gerade die ganze Bordstromversorgung ausfällt.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller im Quadrocopter

Beitrag von PIC18F2550 »

Bei einem Sensor Ausfall kommt es unweigerlich zum Absturz das ist immer so.
Nur die Warscheinlichkeit das sich sie Busteilnehmer oder Software Teile sich gegenseitig Stören ist damit geringer.

So 9 Stunden dauertest und alles funktioniert noch.

So und jetzt noch Sensorsoftwate auf die COG's verteilen. ;)
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller im Quadrocopter

Beitrag von PIC18F2550 »

Kleiner Test 58 Sensorloop's in der Sekunde. Mit VGA.CLS und ausgabe eines Zählers.

Aber wenn ich den ADXL345 in einen COG laufen lasse kommt er wieder mit dem HMC5843 ins gehege. :cry: also I2C Treiber umbauen.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller im Quadrocopter

Beitrag von PIC18F2550 »

Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
TuxFan
Beiträge: 1022
Registriert: So 6. Sep 2009, 11:18

Re: Propeller im Quadrocopter

Beitrag von TuxFan »

Hallo!
Ein paar Fragen zu dem Projekt :
Wie steuerst Du das Gerät eigentlich?
Mit einer klassischen Fernsteuerung oder via http-Server (siehe http/ftp-Fred) und Browser auf dem Smartfone. Oder läßt Du das Teil autark mit eingegebenem Einsatzplan fliegen (quasi als Roboter).
Machst Du noch ein Notprogramm um das Teil noch halbwegs ganz zu Boden zu bringen wenn Sensoren versagen oder machst Du redundante Sensorzweige?
Kriegen die Rotoren noch einen Berührungsschutz. Solche Propeller, auch wenn sie von einem E-Motor angetrieben werden, können einem ganz schön die Pelle aufschlitzen (eigene und fremde Erfahrung im Verein). Nun ja die Rotoren von normalen Hubis sind ja auch nicht ohne.
Gruß
TuxFan
Wunder gibt es immer wieder.......
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller im Quadrocopter

Beitrag von PIC18F2550 »

PIC18F2550 hat geschrieben:Wie steuerst Du das Gerät eigentlich?
autark mit eingegebenem Einsatzplan
TuxFan hat geschrieben:Machst Du noch ein Notprogramm um das Teil noch halbwegs ganz zu Boden zu bringen wenn Sensoren versagen oder machst Du redundante Sensorzweige
weder noch
Ein Notprogramm ohne Lageregelung bringt nichts daher Motoren Aus und mit Hupsignal abwerts.
TuxFan hat geschrieben:Kriegen die Rotoren noch einen Berührungsschutz
nein ist auf dem Feld nicht von nöten und beim Abdriften wegen Fehler werden alle Rotoren Ausgeschaltet(GPS)
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller im Quadrocopter

Beitrag von PIC18F2550 »

Es ist schon ein Ding der ITG-3200 geht mit dem HMC5843 nicht zusammen am Prop selbst auf unterschiedlichen port's und in seperaten COG's wollwn sie nicht.
beide arbeiten aber mit den ATXL345 ohne Probleme.
Der HMC5843 liefert keine werte oder vollkommenen plötsinn.
Werd mir nochmal das lmm-tim projekt von Parallax anschauen vieleicht mache ich da was falsch.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller im Quadrocopter

Beitrag von PIC18F2550 »

Viel Ärger mit einem schlechten Steckbord. :x Irgendwie habe ich mit dem Ding von Conrad in die S... gegriffen.
Da ich die vielzahl von Änderungen nicht mehr herauspusseln wollte habe ich kurzerhand das die Sensorabfrage in Spinn neu geschrieben.
Von der Verteilung auf mehrere COG's und Pinn's habe ich mich auch getrennt.
So hier was zum lesen :mrgreen:

Code: Alles auswählen

CON
  _clkmode = xtal1 + pll16x
  _xinfreq = 5_000_000

#0,     SCL                   'pin 0  I2C SCL
        SDA                   'pin 1  I2C SDA
        GPSTX                 'pin 2  RS232
        GPSRX                 'pin 3

#8,     BLC1TX                'pin 8  BLC1 - motor front right send
        BLC1RX                'pin 9  BLC1 - motor front right empf
        BLC2TX                'pin 10 BLC2 - motor front left  send
        BLC2RX                'pin 11 BLC2 - motor front left  empf
        BLC3TX                'pin 12 BLC3 - motor back  right send
        BLC3RX                'pin 13 BLC3 - motor back  right empf
        BLC4TX                'pin 14 BLC3 - motor back  left  send
        BLC4RX                'pin 15 BLC3 - motor back  left  empf

#16,    VGA_BASEPIN           'pin 16-24 VGA-Anschluß
#24,
#28,    I2C_SCL_EPROM         'pin 28 BOOT-EEPROM
        I2C_SDA_EPROM         'pin 29 BOOT-EEPROM
        DEBUG_RS232_TX        'pin 30 DEBUG_RS232
        DEBUG_RS232_RX        'pin 31 DEBUG_RS232

CON ' All the I2C registers for the ITG-3200 gyro I2C address maximum bus speed is 400kHz.
'  ITG3200                       = %1101_0010   '0xD0 if tied low, 0xD2 if tied high
  ITG3200                       = %1101_0000   
  ITG3200_WHO_AM_I              = $00 {{R/W    ID(6-1)}}
  ITG3200_SMPLRT_DIV            = $15 {{R/W    SMPLRT_DIV(7-0)}}
  ITG3200_DLPF_FS               = $16 {{R/W    FS_SEL(4-3) DLPF_CFG(2-0)}}
  ITG3200_INT_CFG               = $17 {{R/W    ACTL(7) OPEN(6) LATCH_INT_EN(5) INT_ ANYRD_2CLEAR(4) ITG_RDY_EN(2) RAW_ RDY_ EN(0)}}
  ITG3200_INT_STATUS            = $1A {{R      ITG_RDY(2) RAW_ DATA_ RDY(0)}}
  ITG3200_TEMP_OUT_H            = $1B {{R      TEMP_OUT_H(7-0)}}
  ITG3200_TEMP_OUT_L            = $1C {{R      TEMP_OUT_L(7-0)}}
  ITG3200_GYRO_XOUT_H           = $1D {{R      GYRO_XOUT_H(7-0)}}
  ITG3200_GYRO_XOUT_L           = $1E {{R      GYRO_XOUT_L(7-0)}}
  ITG3200_GYRO_YOUT_H           = $1F {{R      GYRO_YOUT_H(7-0)}}
  ITG3200_GYRO_YOUT_L           = $20 {{R      GYRO_YOUT_L(7-0)}}
  ITG3200_GYRO_ZOUT_H           = $21 {{R      GYRO_ZOUT_H(7-0)}}
  ITG3200_GYRO_ZOUT_L           = $22 {{R      GYRO_ZOUT_L(7-0)}}
  ITG3200_PWR_MGM               = $3E {{R/W    H_RESET(7) SLEEP(6) STBY_XG(5) STBY_YG(4) STBY_ZG(3) CLK_SEL(2-1)}}

CON 'All the I2C registers for the ADXL345
'  ADXL345                       = %0011_1010 acc I2C address maximum bus speed is 100kHz.
  ADXL345                       = %1010_0110   
  ADXL345_ID                    = $00
  ADXL345_BW_RATE               = $2C
  ADXL345_POWER_CTL             = $2D
  ADXL345_DATA_FORMAT           = $31
  ADXL345_OUTX_L                = $32
  ADXL345_OUTX                  = $33
  ADXL345_OUTY_L                = $34
  ADXL345_OUTY                  = $35
  ADXL345_OUTZ_L                = $36
  ADXL345_OUTZ                  = $37
  ADXL345_FIFO_CTL              = $38

CON 'All the I2C registers for the HMC5843 mag I2C address maximum bus speed is ???kHz.
  HMC5843                       = %0011_1100
  HMC5843_CONFIG_A              = $00
  HMC5843_CONFIG_B              = $01
  HMC5843_MODE                  = $02
  HMC5843_DATA_X_MSB            = $03
  HMC5843_DATA_X_LSB            = $04
  HMC5843_DATA_Y_MSB            = $05
  HMC5843_DATA_Y_LSB            = $06
  HMC5843_DATA_Z_MSB            = $07
  HMC5843_DATA_Z_LSB            = $08
  HMC5843_STATUS                = $09
  HMC5843_ID_A                  = $0A
  HMC5843_ID_B                  = $0B
  HMC5843_ID_C                  = $0C

OBJ                                                     '1 Cog here
  vga           : "vga_text"

DAT
  TXT008  byte  "ok    ", 13, 0
  TXT009  byte  "failed", 13, 0
  TXT010  byte  "DEBUG: ITG-3200 HMC5843 ADXL345", 13, 0
  TXT011  byte  1, "ITG-3200 init: ", 0
  TXT012  byte  "ADXL345  init: ", 0
  TXT013  byte  "HMC5843  init: ", 0

VAR
  long XG, YG, ZG, TG                    'Gyro
  long XA, YA, ZA                        'Acc
  long XC, YC, ZC                        'Compass
  long time

PUB main |  a, b, c
  vga.start(VGA_BASEPIN)
'  vga.str(@TXT010)
  waitcnt(clkfreq + cnt)                                  'start-up delay
  repeat
'******************************************************************************************************
'  a := gyro.Initi(I2C_SCL1, I2C_SDA1, @XG, @YG, @ZG, @Temp)  'init itg3200
    vga.str(@TXT011)
    XG := YG := ZG := TG := 0
    WriteLocation(ITG3200, ITG3200_PWR_MGM, %1000_0000)                                 'reset to defaults
    waitcnt(clkfreq/200 + cnt)                                                          '5ms
    WriteLocation(ITG3200, ITG3200_DLPF_FS, %0001_1010)                                 '2000/sec, 1Khz, 98Hz low pass
    WriteLocation(ITG3200, ITG3200_SMPLRT_DIV, %0000_0011)                              '4 samples per sample
    WriteLocation(ITG3200, ITG3200_PWR_MGM, %0000_0001)                                 'PLL with X Gyro reference
    WriteLocation(ITG3200, ITG3200_INT_CFG, %0000_0001)                                 'Enable data ready status
    readLocation (ITG3200, ITG3200_INT_STATUS)                                          'reset data ready
    if ((readLocation(ITG3200, ITG3200_WHO_AM_I)<<1)&$FC) == (ITG3200 & $FC)            'check device id
      vga.str(@TXT008)
    else
      vga.str(@TXT009)
'******************************************************************************************************
'  b := acc.Init(I2C_SCL2)                          'init adxl345, default to ±16G
    vga.str(@TXT012)
    XA := YA := ZA := 0
    if ReadLocation(ADXL345, ADXL345_ID) == %1110_0101
      WriteLocation(ADXL345, ADXL345_POWER_CTL, %0000_0000)   'Standby mode
      WriteLocation(ADXL345, ADXL345_POWER_CTL, %0000_1000)   'Measurement mode
       WriteLocation(ADXL345, ADXL345_DATA_FORMAT, %0000_1000) '±2G
  '    WriteLocation(ADXL345, ADXL345_DATA_FORMAT, %0000_1001) '±4G
  '    WriteLocation(ADXL345, ADXL345_DATA_FORMAT, %0000_1010) '±8G
  '   WriteLocation(ADXL345, ADXL345_DATA_FORMAT, %0000_1011) '±16G
      WriteLocation(ADXL345, ADXL345_BW_RATE, %0000_1010)     '100Hz
      WriteLocation(ADXL345, ADXL345_POWER_CTL, %0000_1000)
      WriteLocation(ADXL345, ADXL345_FIFO_CTL, %0000_0000)    'bypass mode
      vga.str(@TXT008)
    else
      vga.str(@TXT009)
'******************************************************************************************************
'  c := compass.Init(I2C_SCL3, I2C_SDA3, @XC, @YC, @ZC)                'init compass
    vga.str(@TXT013)
  '  FourFive := _FourFive
    writeValue(HMC5843, HMC5843_ID_A)
    if readValue24(HMC5843) == $00483433'"H43"
      vga.str(@TXT008)
    else
      vga.str(@TXT009)
    writeLocation(HMC5843, HMC5843_CONFIG_A, $3C)
    writeLocation(HMC5843, HMC5843_CONFIG_B, $02)
    writeLocation(HMC5843, HMC5843_MODE, $00)
'******************************************************************************************************
    if readLocation(ITG3200, ITG3200_INT_STATUS) & 1
      XG := readLocation16(ITG3200, ITG3200_GYRO_XOUT_H)
      vga.hex(XG,4)
      vga.out(" ")
      YG := readLocation16(ITG3200, ITG3200_GYRO_YOUT_H)
      vga.hex(YG,4)
      vga.out(" ")
      ZG := readLocation16(ITG3200, ITG3200_GYRO_ZOUT_H)
      vga.hex(ZG,4)
      vga.out(" ")
      TG := readLocation16(ITG3200, ITG3200_TEMP_OUT_H)
      vga.hex(TG,4)
      vga.out(" ")

    vga.out($0D)
'******************************************************************************************************
    XA := readLocation16(ADXL345, ADXL345_OUTX_L)
    XA := (XA>>8 + XA <<8) & $FFFF          ' H<>L
    vga.hex(XA,4)
    vga.out(" ")
    YA := readLocation16(ADXL345, ADXL345_OUTY_L)
    YA := (YA>>8 + YA <<8) & $FFFF          ' H<>L
    vga.hex(YA,4)
    vga.out(" ")
    ZA := readLocation16(ADXL345, ADXL345_OUTZ_L)
    ZA := (ZA>>8 + ZA <<8) & $FFFF          ' H<>L
    vga.hex(ZA,4)
    vga.out(" ")

    vga.out($0D)
'******************************************************************************************************
    XC := readLocation16(HMC5843, HMC5843_DATA_X_MSB)
    vga.hex(XC,4)
    vga.out(" ")
    YC := readLocation16(HMC5843, HMC5843_DATA_Y_MSB)
    vga.hex(YC,4)
    vga.out(" ")
    ZC := readLocation16(HMC5843, HMC5843_DATA_Z_MSB)
    vga.hex(ZC,4)
    vga.out(" ")

' hier i2c.spin einfügen
WIKI zum ITG3200 http://hive-project.de/wiki/sen_gyro_itg3200:start
WIKI zum ADXL345 http://hive-project.de/wiki/sen_beschl_adxl345:start
WIKI zum EMC5843 http://hive-project.de/wiki/sen_komp_emc5843:start
WIKI zum I²C Treiber http://hive-project.de/wiki/i2c:treiber
Zuletzt geändert von PIC18F2550 am Mo 8. Okt 2012, 12:47, insgesamt 5-mal geändert.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
TuxFan
Beiträge: 1022
Registriert: So 6. Sep 2009, 11:18

Re: Propeller im Quadrocopter

Beitrag von TuxFan »

Moin moin!
Ich will ja nicht meckern, aber wäre es für die Übersichtlichkeit der gesamten Threadseite nicht günstiger solch langen Code als .PDF anzuhängen?
Gruß
TuxFan
Wunder gibt es immer wieder.......
Antworten