Picproje Elektronik Sitesi

DERLEYİCİLER => Proton+ => Konuyu başlatan: fofo - 09 Şubat 2016, 15:30:53

Başlık: ADXL345 değişen değerler
Gönderen: fofo - 09 Şubat 2016, 15:30:53
ADXL345 sensörünü aşağıdaki kodla okuyorum sensör hiç hareket etmesede değerler sürekli değişiyor. Tecrübesi olan var mı?


DEVICE = 16F628A

CONFIG FOSC_INTOSCCLK, WDTE_OFF, PWRTE_ON, MCLRE_ON, BOREN_OFF, LVP_OFF, CPD_ON, CP_ON

;**** End of Fuse Configurator Settings ****
;-------------------------------------------------------------------------------
DECLARE XTAL = 4           
CMCON = 7                   
DECLARE ALL_DIGITAL = True 
TRISA=%00000000 
TRISB = %00000011
DECLARE LCD_TYPE         0
DECLARE LCD_DTPORT PORTB     
DECLARE LCD_DTPIN  PORTB.4
DECLARE LCD_ENPIN  PORTB.3 
DECLARE LCD_RSPIN  PORTB.2   '
DECLARE LCD_INTERFACE    4   
DECLARE LCD_LINES        2
DECLARE I2C_SLOW_BUS ON 'SLow el bus I2C
DECLARE HBUS_BITRATE 100
SYMBOL SDA = PORTB.1   'I2C data pin. Pullup connection is required.
SYMBOL SCL = PORTB.0   'I2C clock pin. Pullup connection is required.
SYMBOL W_DAT = $A6     'Used to perform a Write operation.
SYMBOL R_DAT = $A7     'Used to perform a Read operation.
SYMBOL D_FRM = $31     'Data Format.(Full Resultion,Range,Invert)
SYMBOL BW_RT = $2C     'Low Power,Rate.
SYMBOL P_CTL = $2D     'Send continuous Measurement mode.
SYMBOL F_CTL = $38     'Send Fifo Bypass mode
SYMBOL X_LSB = $32     'Read Register, Output of X LSB 8-bit value.
SYMBOL X_MSB = $33     'Read Register, Output of X MSB 8-bit value.
SYMBOL Y_LSB = $34     'Read Register, Output of Z LSB 8-bit value.
SYMBOL Y_MSB = $35     'Read Register, Output of Z MSB 8-bit value.
SYMBOL Z_LSB = $36     'Read Register, Output of Y LSB 8-bit value.
SYMBOL Z_MSB = $37     'Read Register, Output of Y MSB 8-bit value.
DIM READX AS WORD
DIM READY AS WORD
DIM READZ AS WORD

         DELAYMS 50
     I2COUT SDA,SCL,W_DAT,P_CTL,[$08]
        DELAYMS 2
            I2COUT SDA,SCL,W_DAT,F_CTL,[$00]
              DELAYMS 2
            I2COUT SDA,SCL,W_DAT,BW_RT,[$0C]
                DELAYMS 2
       I2COUT SDA,SCL,W_DAT,D_FRM,[$0B]  ' Send continuous output command
          DELAYMS 2

READI2C:
        I2CIN SDA,SCL,R_DAT,X_MSB,[READX.HIGHBYTE]  'Read the data starting at x_msb
        DELAYMS 100
         I2CIN SDA,SCL,R_DAT,X_LSB,[READX.LOWBYTE]
        DELAYMS 100
         I2CIN SDA,SCL,R_DAT,Y_MSB,[READY.HIGHBYTE]
         DELAYMS 100
              I2CIN SDA,SCL,R_DAT,Y_LSB,[READY.LOWBYTE]
             DELAYMS 100
          I2CIN SDA,SCL,R_DAT,Z_MSB,[READZ.HIGHBYTE]
         DELAYMS 100
                I2CIN SDA,SCL,R_DAT,Z_LSB,[READZ.LOWBYTE]
            DELAYMS 40
    PRINT AT 1,1, "X=",SDEC READX," "
PRINT AT 1,9, "Y=",SDEC READY,"  "
  PRINT AT 2,1, "Z=",SDEC READZ,"          "
   delayms 500
              GOTO READI2C

END
Başlık: Ynt: ADXL345 değişen değerler
Gönderen: Gökhan BEKEN - 09 Şubat 2016, 15:36:50
Sensör çok hassas olduğundan biraz değişmesi normaldir.
Başlık: Ynt: ADXL345 değişen değerler
Gönderen: fofo - 09 Şubat 2016, 15:48:33
8-10 değer normal mi?
Başlık: Ynt: ADXL345 değişen değerler
Gönderen: Maxim - 09 Şubat 2016, 15:52:02
mutlaka yazılım ile filtreleme yapmak lazım diye biliyorum ben
Başlık: Ynt: ADXL345 değişen değerler
Gönderen: Cemre. - 09 Şubat 2016, 19:06:53
MPU serisinde Low Pass Filter özelliği vardı.


(http://s7.postimg.cc/lz3i4znk7/LPF_0.jpg) (http://postimg.cc/image/lz3i4znk7/)
Filtre tamamen pasifken sonuç.

(http://s10.postimg.cc/9oey6fqlh/LPF_6.jpg) (http://postimg.cc/image/9oey6fqlh/)
Filtre tamamen aktifken sonuç.

Siyah renkli grafik ortam sıcaklığını gösteriyor. Ortam sıcaklığı sabitken bir süre çipe dokunup bırakınca oluşan görüntüleri karşılaştırabilirsiniz. Onun dışında sensör sabit duruyor. Yine sabit durduğu durumlardaki grafikleri karşılaştırabilirsiniz.

Sonuç, yazılımsal filtreleme yapmanız gerekiyor.
Başlık: Ynt: ADXL345 değişen değerler
Gönderen: tekosis - 09 Şubat 2016, 21:43:11
sensöre bakmadım ama medyan filtrelemeyi araştırmanızı tavsiye ederim.
Başlık: Ynt: ADXL345 değişen değerler
Gönderen: berat23 - 09 Şubat 2016, 21:58:39
sensörün ölçmünün sürekli değişmesine biz literatürde gürültü diyoruz ve çok doğal bir olay. ucuz mems sensörlerde gürültü yksektir ve düşürmek pek kolay ve mümkün değildir. zaten öyle olsaydı yüzlerce/binlerce dolara sensör satılmazdı.

şimdi gürültü en temel olaraak zero mean gaussian desek en basit alçak geçiren filtre yani ortalama almak bu işi azaltır. fakat filtrenin dezavantajları var, mesela tepkiyi sağırlaştırır ki bu dinamik tepki bakımından istenilen birşey değil. iir lp filtre yapsanız faz kayar ki bu daha beter olabilir. yani filtre bu işin palyatif çözümü, sabunlar sadece. bu arada median bu işe yaramaz, median daha çok spike tipindeki gürültülerde işe yarar.

aslında bu işin çözümü kalman dır. kalman, gasussian noise altında otimum estimate yapmanızı sağlar. ne seviyedesiniz, niye sordunuz bilemem ama bence kalman konusuna eğilmeniz doğru olacaktır.