analog ölçüm ve hesabı

Başlatan enrique_iglesias, 11 Ağustos 2008, 17:02:50

enrique_iglesias

arkadaşlar merhaba....
ben pic ile kendi çapımda birşeyler yapmaya çalışıyorum ama bugüne kadar hiç anlayamadığım bir konu var ve bu konuda yardımlarınızı bekliyorum....

piyasada 4mA-20mA çıkışında bir çok sensör var örnek veriyorum elimde 0-10bar basınç aralığında çalışan bir basınç sensörü var ben bunu nasıl ölçeceğim vede nasıl bara çevireceğim..???

matematiğim çok iyi sayılmaz bana biri bunu anlatabilirmi? yani pic ile voltajımı amperimi ölçüyoruz birde neden 0mA-20mA değil neden 4mA bunları anlamış değilim....

bunu biraz anlatarak yazarsanız diğer sensörler içinde aynı soruyu sormak zorunda kalmayıp belki benim gibi kişilere ışık tutacaksınız teşekkür ediyorum görüşmek dileğiyle...

707yunus

PIC ile adc de voltaj ölçülür.genelde sensörler lineer olduğu için iş kolay olur.
önce sensör çıkışı akım  verdiği için akımı bi direncten şaseye doğru geçir.
direnc ile sensörün bağlanıdığı kısmı pic e bağla.tabi pic te max 5 v adc yaparsın.onun için maksimun basınç maksimun akımı verecekse diyelim max akım 5 ma olsun.sen 1k bağlarsan 5v elde edersin.diyelim max akımda 200 bar okuyorsun.adc 1023 bitlik olsun.((200/1023)*okunan_adc) dersen ve bunu lcd ye yazarsan ölçüm sonucunu elde edersin.

selamlar....

enrique_iglesias

biraz anlar gibi oldum ama biraz anlamadım :)
şimdi bu basınç sensörü 0barda iken 4mA , 10barda iken 20mA mi çıkış veriyor?

enrique_iglesias

ya çok özür dilerim arkadaşlar ama hesapları daha açıklayıcı yazabilirmisiniz tabiricaize kalın kafalıyım biras :) birde virgüllü olarak daha hassas yapmak istiyorum bu işi mesela 1k ile pull down yapacağımı yazmışsın eğer 20mA gelseydi ne olacaktı??

Klein

evet 0 barda 4 10 barda 20mA verir.  0 yerine 4mA olmasının iki sebebi var.  Eğer iki telli kullanırsanız , sensörün kendi devresinin çektiği akım da çıkış akımına toplanmaktadır. Bu durumda sensör devresinin 0mA çekmesi düşünülemez. Eğer 0-20mA isteniyorsa 3 telli kullanılmalıdır.
diğer sebep ise offset hatası ve  negatif değer gösterme gerekliliği olması durumudur. 4-20mA bir endüstri standardıdır. Olayı sadece basınç sensörü gibi de algılamamak lazımdır. Örneğin bir loadcell transmitteri var. Eğer transmitter çıkışı 0-20 mA olursa  sensöre uygulanan ters yöndeki bir kuvveti algılama gibi bir şansımız olmaz.
Basitçe şöyle yapabilirsin.
Transmitter çıkışından GND'ye bir direnç bağla. Ama direncin değerini istediğin kadar büyük seçemezsin. Bu değer  sensörün besleme gerilimi ve sensörün devresine bağlıdır. Sensörün datasheetinde bulabilirsin. benim önerim 100-200ohm civarında bir değer olsun. Direnç ve sensör çıkışının birleşitiği noktayı ADC'ye gir.
Aşağıdaki şekilde hesapla.
Aralık = 10 (bar)
offset =  0Bar da okuduğun değer
span = 10 Bar da aldığın değer.
kazanç = (span-offset)/aralık

basınç= (okunan değer - offset) / kazanç

stlg

Yada bu tur devrelerle once akımı gerilime cevir ,sonra picin analog girislerinden birisine gir ve olcumunu bu sekilde yap



ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

enrique_iglesias

sayın klein ewt buraya kadar çok iyi anladım öncelikle teşekkür ederim....

sensör elimde olmadığı için uygulayamıyorum bu nedenle kafamda oluşturuyorum.peki biz adc'den voltajı ölçüyoruz verdiğiniz formule göre hesaplar yapılabiliryor ama mA bazında hesaplar yapılıyor peki bunu voltaja vurduğumuzda tamamen değişiyor bu işlem..

yani bize gelen akım değerleri 4ile20mA arasında olucak 100ohm direnç ile bunu toprağa verdiğimizdeki gerilim ne olacak? yani biz bunu gerilime göre hesaplamamız gerekiyor peki bu nasıl olucak?

birde proteusta bunun simulasyonunu nasıl yapabilirim?

Klein

Gerilim hesabı bildiğimiz  E=I.R , I=E/R , R=E/I formülü ile hesap edilir.

diyelim ki direncin 100 ohm.  Direnç üzerinden akan akım 20mA bu durumda direnç uçlarındaki gerilim E=I*R = 100*0.02 = 2V bulunur.  Direncin bir ucu GND'ye bağlı olduğu için ADC girişinde 2V göreceksin.

Proteus hiç kullanmadım. SAnırım kullanmış arkadaşlar cevap yazacaktır.

enrique_iglesias

ya işte bu aradığım cevap çok teşekkür ederim inanın bir çok sayfada bir çok bilgi var..ama herkes bu tür basit ayrıntıları yazma gereksinimi duymuyor bu nedenle bu nasıl bulundu bu rakam nerden çıktı bir çok soru işareti kafamda çakıyor.....


son bir sorum olucak pic'de bu hesapları çevirebilmemiz için tam sayılar gerekli çünkü değişkenler içine ondalıklı rakam giremiyoruz.....bunu nasıl halledebilirim...birde LCD gibi ekranlara değeri yazdırırken float sonradan ekleniyor bu nasıl yapılıyor???

Maxim

Alıntı yapılan: "enrique_iglesias"arkadaşlar merhaba....
ben pic ile kendi çapımda birşeyler yapmaya çalışıyorum ama bugüne kadar hiç anlayamadığım bir konu var ve bu konuda yardımlarınızı bekliyorum....

piyasada 4mA-20mA çıkışında bir çok sensör var örnek veriyorum elimde 0-10bar basınç aralığında çalışan bir basınç sensörü var ben bunu nasıl ölçeceğim vede nasıl bara çevireceğim..???

matematiğim çok iyi sayılmaz bana biri bunu anlatabilirmi? yani pic ile voltajımı amperimi ölçüyoruz birde neden 0mA-20mA değil neden 4mA bunları anlamış değilim....

bunu biraz anlatarak yazarsanız diğer sensörler içinde aynı soruyu sormak zorunda kalmayıp belki benim gibi kişilere ışık tutacaksınız teşekkür ediyorum görüşmek dileğiyle...

Merhaba ,

daha önce aynı konu ile ilgili açmış olduğum bir topic var ,çok eski
ben genede özetlemeye çalışayım .
Zaten @Klein arkadaşımızın anlatmaya çalıştığıda buydu .

almış olduğunuz 4-20 mA basınç sensörünün 2 tane ucu vardır ,
bir tanesi giriş ucu ,diğeri çıkış ucu ..

giriş ucuna 11 volt ile 24 volt arası bir dc voltaj verin (zaten üzerinde yazıyordur) .
çıkış ucuna 250 ohm luk %1 toleranslı bir direnç takın ,
direncin diğer ucu saşede olsun ..

böylece ,
4mA de 1 volt ,
20mA de ise 5 volt çıkış alırsınız ,

yani ,
1 volt ta 0 bar ,
5 voltta 10 bar görüyorsunuz demektir ..

yeterince net mi ? :)

bundan sonra yapacağınız tek şey ,
pic ile adc girişini ayarlayıp gerekli formül ile ,
1 volt giriş geldiğinde ekrana 0 bar ,
5 volt giriş geldiğinde ekrana 10 bar yazdırmak olacaktır ..

bu kadar ..

işte bir şema ,





EDİT :

neden 250 ohm ?
neden %1 tolerans ?

çünkü endüstri`de ,otomasyon sistemlerinde PLC lerde ve makinalarda 4-20 ma sensörler için standart olarak 250 ohm direnç kullanılmaktadır .

%1 lik tolerans hem yüksek hassasiyet hemde direncin dış sıcaklıklardan  en az etkilenmesini sağlamak içindir .

enrique_iglesias

çok teşekkür ederim şimdi denedim kendi proteusumda ve artık bu konuyu daha iyi algılayabildim çok sağolun......daaa ufacık bir sorun var dediğim gibi mesela 1,5volt geldiğinde bunun hesabı nasıl olucak??10bit çözünürlükte okuyorum 5-1=4/1023 yapmam mı gerekiyor voltaj başına?? virgüllerle işlem yapamadığımız için ve matematik kötü olduğu için hep bi kayaya tosluyorum :(

Klein

Nasıl hesaplayacağını yukarıda yazdım.
Ondalık işlem için basit bir metod:
örn:
10/4=2,5  
ya da(10*10) /4= 25 son hanenin önüne bir nokta koyarsan , olur sana 2.5
3/2=1,5   ya da (3*10)/2=15 yanına nokta koy =1.5

707yunus

adc dönüşümde 1 volt yaklasık 205 lik bir değerdir 1023 çözünürlükte.1 volt ayrıca 4 ma geçtğini yani basıncın 0 bar olduğunu gösterir.10 barda 20 ma ve 250 ohm luk dirençle 5 v elde edilir.250*5ma=5v.şimdi sana yazman gerekn algoritmayı veriyorum.bu algoritma seni her volta  teker teker kaç bar  yazmaktan kurtaracak.mesela sen 1 volta 0 bar 1.5 volta bilmem kaç bar yazdırmaktan kurtaracak.


minimum 1 volt elde ediyorsun.250 ohm ile.bu adc de 205 e denk gelir.okuduğun her adc den 205 çıkar.maksimun değerde de 1023-205=818 olur.818 senin maksimum değerindir .çünkü her adc den 205 çıkarıyorsun.
sonra 10 ile çarpıp 818 e bölüyorsun.

((okunan_adc-205)*10)/818 bu temel algoritmandır.

örnekler;

4 ma okuduk.4ma*250ohm=1v
1volt adc de 205 tir.algoritmaya uyguluyorum,

(okunan_adc-205)*10/818=(205-205)*10/818=0



7 ma okuduk.7ma*250=1.75 volt
1.75 volt u pıc adc olarak yaklasık 358 olarak okur.
algoritmaya uygulaayalım;
(okunan_adc-205)*10/818=(358-205)*10/818=1.87 bar



17 ma okuduk.17ma*250=4.25 volt
4.25 volt u pıc adc olarak yaklasık 870 olarak okur.
algoritmaya uygulaayalım;
(okunan_adc-205)*10/818=(870-205)*10/818=8.1 bar



20 ma okuduk.20ma*250=5 volt
5 volt u pıc adc olarak  1023 olarak okur.
algoritmaya uygulaayalım;
(okunan_adc-205)*10/818=(1023-205)*10/818=10 bar


dikkat ettiysen bazı sonuçlar noktalı.bu senin kullanacağın derlayiciye bağlı.basic kullanıyorsan noktalı sonuçlar için kendin yeni birşeyler üertmelisin.gerisini sana bırakıyorum.



selamlar..............

Maxim

en basit formülü ben yazıyorum ,
gördüğünüz üzere her şeyin birkaç farklı yolu var  :lol:
(0-10 bar 4-20mA basınç sensörü için 250ohm dirençle)

BAR = 2.5 X VOLT - 2.5

giriş voltajı 1 volt ?
2.5 x 1 - 2.5 = 0 bar

giriş voltajı 3 volt ?
2.5 x 3 - 2.5 = 5 bar

giriş voltajı 5 volt ?
2.5 x 3 - 2.5 =10 bar

bu da noktalı sayı ,
giriş voltajı 2,571 volt
2.5 x 2.571 - 2.5 = 3,92 bar


EDİT :
unutmadan ,
sensör, absolute yani mutlak basıncı ölçecektir muhtemelen ,

yani deniz seviyesinde atmosfer basıncı 1 bar olduğuna göre ,

sensörü çalıştırsığınız zaman atmosfer basıncını görürüz yani 1 bar gösterir ,
eğer 0 görmek istiyorsak formülden çıkan basınç değerinden 1 çıkarmamız lazımdır .

707yunus

Güzel olmuş ellerine sağlık.ama kullanıcı programda 'BAR = 2.5 X VOLT - 2.5' büyük harfle yazılı olan voltu elde etmek için adc sonucunu extra bir işleme tabi tutmalı.