Sensör hesabında doğru değerleri yakalayamıyorum?

Başlatan transistor, 01 Kasım 2023, 00:10:08

transistor

Merhabalar, elimde 500psi anolog basınç sensörü var yaklaşık 34.474 bar'a denk geliyor. Bende bu ürünü  boruda ki suyun basıncını ölçmek için kullanmak istiyorum. Sensör için detaylı bilgi yok, sadece tek bildiğim sensörün data uçlarından basınca göre değişen 0,5V-4.5V değerlerini okuyarak LCD ekranda 1-34bar değeri görmek istiyorum. Okuma kısmında bir yerde hata yapıyorum. İstediğim değerleri nedense elde edemedim sanki. Dönüştürme kısmında ise, 0.5V'da 102 değerini alırken, 4.5V da 921 değerini alıyorum. Bu iki değerin farkı ise 819, toplam 34bar ölçme yapacağım için 34'e böldüm yani her birim başına 24,088 değeri çıktı. Bu değeri ise, okuduğum voltaj değerini de 10 ile çarpıp 100'e böldüm. İstediğim değerleri elde edemedim. 



'-------------------------------------------------------------------------------
#CONFIG
cfg = _HS_OSC                ; HS oscillator
cfg&= _WDT_ON                ; WDT enabled
cfg&= _PWRTE_ON              ; PWRT enabled
cfg&= _BODEN_OFF              ; BOR disabled
cfg&= _LVP_OFF                ; RB3 is digital I/O, HV on MCLR must be used for programming
cfg&= _CPD_OFF                ; Data EEPROM code protection off
cfg&= _WRT_OFF                ; Write protection off; all program memory may be written to by EECON control
cfg&= _DEBUG_OFF              ; In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins
cfg&= _CP_ON                  ; Code protection on
__CONFIG cfg
#ENDCONFIG
'-------------------------------------------------------------------------------
DEFINE OSC 20

TRISA=%00000001                                
'-------------------------------------------------------------------------------
DEFINE    ADC_BITS    10      'A/D çevirim sonucu kaç bit olacak
DEFINE    ADC_CLOCK    2      'Clock kaynağı (3=rc)
DEFINE    ADC_SAMPLEUS 100    '100 Örnekleme zamanı mikro saniye cinsinden.
'-------------------------------------------------------------------------------
DEFINE LCD_DREG PORTB        'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT 4            'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG PORTB        'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT    3            'LCD Enable Bacağı Hangi bite bağlı ?
define LCD RWREG PORTB      'LCD R/W Bacağı Hangi Porta bağlı?
define LCD_RWBIT 2          'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG PORTB        'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1            'LCD RS bacağı Hangi Bite bağlı  ?
DEFINE LCD_BITS    4            'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 4            'LCD 4 satir
'-------------------------------------------------------------------------------
ADCON1=%10001110            '7. bit 1  yapıldı 10 bit sonuç almak için.                    
'-------------------------------------------------------------------------------
V VAR WORD : T VAR WORD : P VAR WORD : D VAR WORD : E VAR BYTE
'-------------------------------------------------------------------------------    
BASLA:
    
ADCIN 0,V
    
V=(V*5)/1024
T=(5/1024)  '0.483
P=(V-t)*125
D=(P*100)/10
E=P//10

LCDOUT $FE,1,DEC2 D,".",DEC2 E

PAUSE 250
                                        
GOTO BASLA
'------------------------------------------------------------------------------- 
end

aRci

Merhaba 34 barda 921 değeri alıyorsanız yani max değeriniz 921 olduğunu soylersek

819/340 = 2,40 bunuda 10 la çarparak 24 sabit sayımız olmalı

analog ölçülen değeri 24 ile bölmek gerekiyor.

819*10/24 = 341 buda 34,1 bar olarak hesaplanabilir.

ete

Doğru hesap aşağıdaki şekilde olmalı;
ADC den ölçülen değere HAM diyelim.
4,5V da yani 34,474 Bar karşılığı okunan değer 921 ise direk bu değer üzerinden yada 0,5V farkını düşerek hesap yapılabilir. Fark üzerinden gidecek olursak,
Net ADC değerimiz =921-102=819 birim olacaktır.
Maksimum basınç ise 34,474 olduğuna göre;
34,474 / 819= 0,042092796 bizim sabit çarpanımı olacaktır.
Şayet Basic derleyici kullanmıyorsanız bu sayıyı Float olarak tanımlayıp aşağıdaki formülü uygulayabilirsiniz.
Basınc=(HAM-102)*0,042092796 
Şayet basic de bu hesabı yaptıracaksanız ,Basic'e uygun bir formül için sabit çarpanımızı önce 256 ile çarpıyoruz. Sonuç 10,7757558 çıkacaktır. Bu rakamı biraz küsürattan kurtarmak için 100 ile çarpıyoruz (formülde tekrar 100 e bölünmesi gerekecektir)
Çarpım sonucu 1077,57 çıkacaktır. Bu rakamı şayet 1078 şeklinde kullanırsak sorun olmayacaktır.
Bu durumda formülümüz;
Basınc=((HAM-102)*/1078)/10  şeklinde olacaktır. Sonucu 100 yerine 10 a bölerek virgülden sonra 1 hanelik ondalık elde edeceğiz.
Basic de A */ B çarpanı iki sayıyı çarpıp sonucu 256 ya bölerek verir. Bu nedenle önce 256 ile çarpmıştık.
Hemen denemesini yapalım; Adc den 921 okuduğumuzu varsayalım.
Basınc=(921-102)*/1078=344 şeklinde hesaplanacaktır. Bu ise 34,4 Bar şeklinde düşünülmelidir.

Ete

transistor

#3
'-------------------------------------------------------------------------------
HAM VAR WORD : TAMSAYI VAR WORD : TOPLAM VAR WORD : I VAR BYTE
'-------------------------------------------------------------------------------     
BASLA:

GOSUB SENSOR

TAMSAYI=((HAM-122)*/1106)/10

LCDOUT $FE,1,"BASINC:",DEC tamSAYI/10,",",DEC tamSAYI//10," Bar"
LCDOUT $FE,$C0,"HAM:",#HAM

PAUSE 200
                                        
GOTO BASLA
'-------------------------------------------------------------------------------
SENSOR:

TOPLAM=0
FOR I=0 TO 9    
ADCIN 0,HAM : PAUSE 2
TOPLAM=TOPLAM+HAM
NEXT I 
I=0
ham=(TOPLAM+HAM)/10
IF HAM<122 THEN HAM=122
IF HAM>920 THEN HAM=920

RETURN
'------------------------------------------------------------------------------- 
end

Teşekkür ederim yardımınız için. Gerekli düzenlemeleri yaptım güzel oldu. Ama dediğiniz gibi c dilinde ki gibi formulü böyle yazmak varmış.

Basınc=(HAM-102)*0,042092796

Bir de sensör üzerindeki voltajı 10 defa okuyup ortalamasını alınca 0.5V değeri 102'den 122, 4.5V değeri 920 oldu. Orada ki değişikliği de yaptım ama gerçekte ne olur merak ediyorum.


Powered by EzPortal