çok küçük voltaj değişiklerini algılama

Başlatan iskender1984, 26 Mayıs 2017, 18:26:23

iskender1984

selamlar ete hocam ve  hocalarım..

2.400 volt ile 2.520 arasındaki 120mV değişikliği nasıl kullanabilirim.. 120/10 = 12 kademe olarak algılatmak istersem bunun için lm358 yeterli olur mu..Sanırım pic yazılımında da bikaç teknik kullnamam gerekecek adc dışında...Yani şöyle düşünün.. 12 led var ve ben bu ledleri şu şekilde yakmak istiyorum. 2.400 v = 1.ledyansın - 2.410v = 2.ledyansın , 2.420v = 3.ledyansın vb.

Teşekkürler...

Maxim

10bit adc girişi neden yeterli olmuyormu?
5000 mv / 1023 = 4.88mv her step

yani 120mv / 4.88 = kabaca 24 kademe demek

İlyas KAYA

10 bit adc ile

2.40 volt da 491 adc değeri
2.41 volt da 493 "        "
2.42 volt da 495  "        "

olarak değişkeni okursun. Aradaki 2 farkı ortak nokta olarak alırsan if adc>490 and adc <492 olarak yaparsan çok küçük kaymayı da engellmiş olursun.

Tabi bunun için temiz bir besleme gerekir. adc referansını harici bir kaynaktan beslemek daha iyi olacaktır.
Lm358 ile de yaparsın ancak çok fazla entegre kullanmak ve kullanacağın dirençler dahil çok hassas olması gerekir. Tabi bir de buna referans gerilimini çok net ayarlaman gerekir.
ADC daha kolay olacaktır.

Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

ete

#3
Aslında adc okumadaki artış kademesi 2,4 ama 0,4 u ihmal etmek zorunda kalacaksın.
Buda 10 adet okuma kademesinde bazılarının 2 değil 3 olmasını gerektirecektir. Teorik olarak her 3 okumadan biri 3 birim adc ye denk gelir.
Yapılabilecek ikinci iş 2520 mv olan maksimum voltajı opamp ile 5000 mv ta yükseltmek olurdu.
Bu sana ilave 2-3 birim Adc çözünürlüğüde getirebilir. Tabiiki voltajın 2520 mv tu aşmıyor ise bu önerim geçerlidir.
Ete

iskender1984

derğerli hocalarım..henüz yeni yazma şansı buldum..Önerilerinizi denemek için kolları sıvadım..Umarım yapabilirim.Çok çok teşekkürler...İyi çalışmlar...

iskender1984

tekrar selamlar değerli hocalarım...Ete hocam dediğiniz şekilde uyguladım..Delikli pertinaksa devremi kurdum 16f877a ile adc yi uyguladım.. fakat ham değerde 7 rakamlık bir oynama oluyor..bu benim için büyük bir sapma.. örneğin hamdeğer gerçekte 505 iken 497 ye kadar sapma oluyor..Bunu stabil hale getirmek mümkünmüdür..Yoksa dediğiniz gibi sağlam bir filtremi gerekir..Esasında lm2576t ve bobinle filtrelenmiş 5v reg. kullandım..Ayrıca pici ve 5v çıkışı 100nf la bağladım..yazılımsal olarak bi öneriniz varmıdır.. Örnek kodlar olarak ta sizin derslerinizde adc kodlarını kullandım..Lcd de üstte ham alt satırda da voltaj gösteren devreyi yaptım kodlarıyla birlikte.. Teşekkürederim

ete

Temelde ADC ölçümü dahili bir kondansatörün şarj edilip deşarj süresinin sayılması ile yapılmaktadır.
Bu ise ard arda okumalarda ufak tefek sapma yaratabilmektedir.
Çözüm olarak önerebileceğim şeyler;
1. Okuma sayısını artırarak okunanları toplayıp sonunda okuma sayısına bölmek. Word değişkeni kullandığımıza göre 65535/1023=64 yaklaşık 64 adet okumayı üst üste yapıp ortalamasını alabilirsiniz anlamına gelir. Tecrübelerim bana 40 civarında okumanın iyi sonu almak için yeterli olduğunu söylüyor. Sen ister 40 ister 50 ister 60 tane okuma yapıp hepsini topla ve okuma sayısına böl. Böylece nispeten hatasız bir ortalama değer elde edebilirsin.

2. Digital filtreleme yaptır. 20-30 arası okuma yapıp bunları br dizi değişkenine yerleştir. Sonra bunları küçükten büyüğe doğru sıraya sok ve en yüksek 2-3 değer ile en düşük 2-3 değeri göz ardı edip kalanları topla ve ortalamasını al. Bu konuyla ilgili örnek sitede mevcut. Digital filtreleme diye aratırsan bulabilirsin.

Ete

iskender1984

hocam sizin kadar konuya hakim olamadığım için son önerilerinizi anlamakta zorlanıyorum.. 1. ve 2. madde için küçük birer örnek verebilir misiniz size zahmet.. Teorik olarak dediklerinizi anladım sanırım fakat uygulamaya nasıl yerleştireceğimi bilemedim..

Teşekkürler.

iskender1984

Bunlar kodlarımız hocam..

ADCON1=%10001110 '7. bit 1 yapıldı 10 bit sonuç almak için.
'-------------------------------------------------------------------------------
HAM var word 'ADC den okunan ham Digital değer.
VOLT var word '16 bit değişken tipi seçtik kullanacağımız değer 10 bit olacak.
Mvolt var byte
'-------------------------------------------------------------------------------
Low PORTB.2 ' LCD R/W line Low (W), şemada direkt GND ye bağlanabilir.
LCDOut $FE,1 ' LCD de CLS yapar
pause 200 ' LCD nin açılması için gerekli süredir.
'-------------------------------------------------------------------------------
BASLA:
ADCIN 0,HAM '0 nolu kanaldan Analog değeri oku ve RAW değişkenine aktar.
BAK: IF ADCON0.2=1 THEN BAK 'Çevirme işlemi tamamlanınca Adcon0.2=0 olacak.
lcdout $FE,1," HAM =",# HAM
Ham=ham+1 'Hesap kolaylığı açısından Ham değerini bir artırdık
'Okunan değer 0-5 volt için 0-1024 olacağından okunacak değer başına volt değeri
' 5/1024 =0,0048828 olacaktır. Sayı çok küçük olduğundan bu değeri 1000 ile
'çarpmalıyız. O halde (Okuma/V)= 4,8828 bu değeri 256 ile çarpar isek
'4,8875 x 256 = 1250 değerini buluruz. Bu değeri kullanarak 32 bit işlem yapabiliriz.
'1250 değeri (5/1024)*256 değerine karşılık gelmektedir.
'sonuçta ADC HAM değerini bu sayı ile çarpıp 256'ya bölersek sonucu elde etmiş oluruz.
'ancak sonuç 32 bitlik sınırda olduğundan bu işi 32 bit çarpma ile yapıyoruz ve orta
'baytı aldığımızda ise zaten sayının 256'ya bölünmüş halini aldığımızdan başka bir
'işlem yapmadan sonucu elde etmiş oluruz.
Volt=(ham */ 1250)/100 'Ham ile 1250 yi 32 bit olarak çarp ve 100'böl
Mvolt=Volt // 10 'Mvolt= Volt MOD 10
'Burada yeni bir komut veya işlem şekli görüyorsunuz. MOD alma yani (//) kalan bulma
'Bir sayını başka bir sayıya bölünmesinden sonra kalan miktarı bulma işlemine MOD
'alma denir. Örnek W=A//1000 , A'yı 1000'e böl kalanı W değişkenine koy anlamındadır.
'bizde yukarıda Mili volt değerini bulmak için volt (10 ile çarpılmış halini) 10'a
'bölüp kalanı Mvolt değişkenine yerleştiriyoruz.
Volt=Volt/10
LCDOUT $FE,$C0," VOLT=",#VOLT,",",#Mvolt
PAUSE 400
GOTO BASLA

ete

1. ci önerime örnek vermek gerekirse,

HAM VAR WORD
TOPLAM VAR WORD
I    VAR BYTE
...
...
BASLA:
TOPLAM=0
FOR I=0 to 29 'toplam 30 okuma yapacağız.
ADCIN 0,HAM
TOPLAM=TOPLAM+HAM
PAUSEUS 50
NEXT
HAM=TOPLAM/30       

Bu örnekte 30 okuma yapıp bunu toplam değişkeni altında topladık. Sonra toplaı 30 a bölerek ortalama almış olduk.
Elmizde ortalama değer olarak HAM değişkeninin taşıdığı değer var. Artık bu değeri kullanıp Volt değerlerini hesaplayabilirsin.
Volt=(ham */ 1250)/100
Mvolt=Volt // 10
VOLT=VOLT/10
şeklinde.
Ben bütün detayı vermedim. Sen verdiğim örnek kısmını kendi programına adapte etmelisin.

İkinci önerim olan digital filtreleme için aşağıdaki konuda verdiğim örneği incelersen ne yapılacağını anlarsın.

http://etepic.com/index.php/topic,207.msg1755.html#msg1755

Ete


iskender1984

hemen odaklanıyorum hocam..Ellerinize sağlık.. Bakalım yapabilecek miyim :)

Teşekkürler..

iskender1984

ete hocam valla ne diyeyim bilmiyorum..ellerinize aklınıza sağlık..Gerçekten müthiş istikrarlı çalışıyor.. Kıt bilgimle aklıma bişey geldi onla uğraşıyorum hocam..Sizde bu konuda baya çalışmışsınız..LPG seviye göstergesi..Kendi işimde kullandığımız bir MR sensor (magnethic resistor)  var.. Bu sensörle net ve kararlı sonuç alabilirim diye düşünüyorum..Şamandıra milini manyetik olarak çok tutarlı okuyacak kanaatindeyim..tahminimce depo boşken ve depo doluyken yaklaşık 120mv luk bi oynama olacak..Yakında montajını yapıp testlere başlayacağım..Ve başarılı olursam burada sizinle paylaşacağım.. Teşekkürederim tekrar..

İyi çalışmalar..

iskender1984

tekrar selamlar..ete hocam ve ustalarım..16f877a ile istikrarlı bi şekilde çalışabiliyorum..Fakat sakarlığım sonucunda entegreyi bozdum..elimde 18f4520 var..Buna göre derleyip yüklediğpimde adc sonuçları çok farklı ve değişken çıkıyor..Bunun sebebi nedir hocam?

Teşekkürler.

ete

18F4520 data sheet bakıp ADC kriterlerini inceledinmi. Fark ediyordur mutlaka.

Ete

iskender1984

hocam 40 dakikaıdr inceliyorum..neredeyse herşey aynı..açıkçası anlam çıkarmakta da zorlanıyorum..Belkide bu yüzden farkı göremiyorum..Bana bu konuda da yardımcı olabilir misiniz?

Teşekkürler..

Powered by EzPortal