ADXL345 değişen değerler

Başlatan fofo, 09 Şubat 2016, 15:30:53

fofo

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

Gökhan BEKEN

Sensör çok hassas olduğundan biraz değişmesi normaldir.
Özel mesaj okumuyorum, lütfen göndermeyin.

fofo


Maxim

mutlaka yazılım ile filtreleme yapmak lazım diye biliyorum ben

Cemre.

MPU serisinde Low Pass Filter özelliği vardı.



Filtre tamamen pasifken sonuç.


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.

tekosis

sensöre bakmadım ama medyan filtrelemeyi araştırmanızı tavsiye ederim.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

berat23

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.