avatar_Mayhoş

PIC ile PWM Üretimi

Başlatan Mayhoş, 25 Aralık 2019, 10:54:59

Mayhoş

#include <16f877A.h>
#fuses hs,nowdt,put,noprotect
#use delay(crystal=20MHz,clock=20MHz)

void main()
{
   setup_timer_2(T2_DIV_BY_1,99,1);
   setup_ccp1(CCP_PWM);
   set_pwm1_duty(49);
 
   while (TRUE)
   {
 
   }
}

Merhaba arkadaşlar,

Yukarıdaki kodda pwm ayarını PWMWizard ile yaptım ve derledim. Proteusta denedim çalıştı fakat belli bir süre sonra simülasyon hataya düşüyor

"Simulation is not running in real time due to excessive cpu load"

Biraz araştırdım sanırım bu durum normalmiş. Çok üstelemedim ve gerçekte denemek için pic'e attım ccp1 pinine osilaskopla baktığımda evet 50khz görüyorum ama 3-4 sn kadar görünüyor 1-2 sn kadar gidiyor. Bu süreler çok kararsız olabilir. Bazen 5-6 sn görüyorum yarım saniye kadar gidiyor. Yani kararlı ve sabit bir 50Khz çıkış alamadım. Sebebi ne olabilir?

Pic16f877a kullanıyorum. 20Mhz osilatör bağlı devreye. Başka hiçbir şey bağlı değil pic'e.

ete

KOnu CCS olunca elim kolum bağlanıyor.
Normalde 20Mhz OSC frekansında 50 Khz lik PWM sinyalini sürekli elde etmek için;
T2CON= %00000100 yani 1/1 bölme oranı ile TMR2 sayac registerini set edersin.
Ardından PR2 registerine PR2=99 değerini verirsin.
CCP1CON=%00011000 değerini vererek PWM çıkışını aktif edersin.
Ardından DUTY=%49 olarak vermek için ise
Duty=(PR2+1)*%DUTY/25  formülünü kullanarak, Duty=(99+1)*49/25=196 değerini bulurum ve bunuda;
CCP1CON.4=Duty.0
CCP1CON.5=Duty.1
CCPR1L=(Duty>>2)
şeklinde yerine koyarak %49 duty oranına sahip 50 Khz lik sinyali CCP1 pininden çıkarmış olurum.
Sinyal sürekli değil ise bir yerlerde sıkıntı var demektir. Zira CCS yukarıda verdiğim ayarlamaları otomatik yapıyor olması gerekir. Sende registerlere benzer değerleri vererek de aynı sinyali çıkartmayı dene bence.

Ete

Mayhoş

#2
Her sorunuma koşturuyorsunuz gerçekten çok teşekkür ederim yardımlarınız için. CCS C dışında çalışmam olmadı hiç. Biraz amatör kalıyorum bu konuda.

Yazdığınız bu kodları yalnızca pwm çıkışımı deneyebilmem için hex olarak yükleme şansınız var mı acaba?

16f877a'da ccp1'den sabit bir pwm görebilecek miyim sizin kodlarla merak ettim. Osiloskop görüntüm aşağıdaki gibi. Birden sinyal kesiliyor ve ardından geri geliyor. Yalnızca picten ürettiğim pwm'de bu sorunu yaşıyorum. Başka picle de denedim sonuç aynı. Programsal bir hataya mı düşüyorum en azından onu öğrensem iyi olur.

Teşekkürler.



ete

Dosya ilişiktedir. BAs-Hex ve deneme şeması birlikte
Görünüşe göre düzenli ve sürekli sinyal çıkıyor.

Ete

Mayhoş

#4
Alıntı yapılan: ete - 25 Aralık 2019, 15:42:46Dosya ilişiktedir. BAs-Hex ve deneme şeması birlikte
Görünüşe göre düzenli ve sürekli sinyal çıkıyor.

Ete


Paylaşımınız için çok teşekkür ederim. Simülasyonlarda gayet iyi, hex'i pic'e attığımda ccp1 pinine osiloskopla baktığımda hiçbir hareketlilik göremiyorum. Pic'e 20Mhz osilatör bağlı. Pickit3 ile programlıyorum pic'i. Acaba programlama anında mı sorun çıkıyor. Çözmeye çalışacağım. En azından programsal bir hata olmadığına eminim artık. Çok teşekkürler @ete

Bir şey daha danışacağım aslında. Farklı bir devrede de IR Led alıcım olacak. Diyelim vericim 50Khz'de çalışıyor. Alıcıma yazılımsal bir filtre yapmam mümkün müdür? Ortam ışığından vs. çok etkileniyor çünkü. Yalnızca 50Khz seviyelerini aldığında işlem yapmasını yazılım ile sağlayabiliyor muyuz yoksa filtre devreleri ile mi mümkün sadece?

ete

Bence yazılımsal filtre yerine modulasyon kullanın. HPWM ile 38Khz lik bir modulsayon sinyali üretin. Bunu iki girişli bir and kapısından geçirip kapının diğer girişine data sinyalinizi girin.
Alıcı olarak da 38Khz lik IR göz kullanın(SH1738 veya VS1838). Göz 38Khz'i ayıklayıp yalnızca data sinyalinin geçmesini sağlar otomatikman.
Böylece gün ışığından fazla etkilenmezsiniz.

Ete

İlyas KAYA

Aslında and kapısına gerekyok hocam. Ir ledin bir ayağını data pini Ne diğer ayağını pwm pini Ne bağlamak yeterli oluyor  :)
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

Mayhoş

#7
Bilgiler için teşekkürler. Ben data göndermekten ziyade alıcı ve vericinin arasına bir cisim girdiğinde algılamak için kullanacağım. Ama çevreden etkilenmemesi için uğraşıyorum.

Diğer bir sorunda aslında pic'e tek verici değil birden çok verici bağlamaya çalışıyorum. Mesela 1.pic'imde 8 tane verici olacak, 2.pic'imde 8 tane alıcı olacak. Vericilerin kendi aralarında aralıkları ve alıcıların kendi aralarında aralıkları 2 cm olacak. Verici-Alıcı arası mesafede 30cm gibi bir şey düşünüyorum şimdilik. Ben cisim hangi aralıkta onu öğrenmeye çalışacağım. Yani 8 alıcım toplamda 16 cm'lik bir yeri tarayacak gibi. Ama birbirlerinden etkilenmemeleri gerekiyor ve bunların hepsine tek pic'ten nasıl pwm vereceğim bakalım... şimdilik sırayla tarama yaptırmayı düşünüyorum. 1.verici 1.alıcıya bilgi göndersin dursun sonra 2.verici 2.alıcıya şeklinde... ama zaman kaybım oluyor tabi bu şekilde de.

Verdiğiniz bilgiler doğrultusunda denemelerimi yapıyorum tekrardan teşekkürler.

Hattuşa

yapmak istediğiniz aralık ölçmek mi?

ete

Tek pic le bile 16 adet (0-15) noktaya sırası ile PWM verilebilir. 4067 entegresini inceleyin.
Giriş pininden CCP1 çıkışını girin. ABCD adres bacaklarına 0-15 arası bir rakam verirseniz çıkış adrese karılık gelen bacaktan çıkar. Böylece sırası ile sinyali verip ölçümünüzü sırası ile yapabilirsiniz.
Biribirine çok yakın elemanlarda IR sinyali hepsine birden vermek zorunda kalırsanız bir birlerinin sinyallerini görme ihtimalleri çok yüksek olur. Bunu boru şeklinde yönlendiricilerle noktaya odaklayabilirsiniz dahada iyisi mercek kullanmak ama bu artık fabrikasyon üretime giriyor pek yapabileceğinizi sanmam.

Diğer çok kullanılan bir yöntem de fiber optik kablo kullanmak. Bu sayde noktalar ne kadar yakın olurlarsa olsunlar fiber optikten yayılan sinyal etrafa dağılmaz. Bildiğim bir kaç makinada bu sistem kullanılıyor ve 1 cm aralıklarla yerleştirilen sensörlere sinyal verilip karşılarında sinyal varmı yokmu algılanıyor hatasız bir şekilde.

Ete

Mayhoş

Alıntı yapılan: pro-TR - 26 Aralık 2019, 01:50:41yapmak istediğiniz aralık ölçmek mi?

Aralık ölçmek tam karşılamaz sanırım. Hangi aralıkata cisim var onu öğrenmek amacım. Aslında bir nevi de cismin boyutunu öğrenmiş oluyorum evet.

Alıntı yapılan: ete - 26 Aralık 2019, 08:52:53Tek pic le bile 16 adet (0-15) noktaya sırası ile PWM verilebilir. 4067 entegresini inceleyin.
Giriş pininden CCP1 çıkışını girin. ABCD adres bacaklarına 0-15 arası bir rakam verirseniz çıkış adrese karılık gelen bacaktan çıkar. Böylece sırası ile sinyali verip ölçümünüzü sırası ile yapabilirsiniz.
Biribirine çok yakın elemanlarda IR sinyali hepsine birden vermek zorunda kalırsanız bir birlerinin sinyallerini görme ihtimalleri çok yüksek olur. Bunu boru şeklinde yönlendiricilerle noktaya odaklayabilirsiniz dahada iyisi mercek kullanmak ama bu artık fabrikasyon üretime giriyor pek yapabileceğinizi sanmam.

Diğer çok kullanılan bir yöntem de fiber optik kablo kullanmak. Bu sayde noktalar ne kadar yakın olurlarsa olsunlar fiber optikten yayılan sinyal etrafa dağılmaz. Bildiğim bir kaç makinada bu sistem kullanılıyor ve 1 cm aralıklarla yerleştirilen sensörlere sinyal verilip karşılarında sinyal varmı yokmu algılanıyor hatasız bir şekilde.

Ete


4067 entegresine bakacağım teşekkürler. Fiber optik kablo kısmını anlayamadım. IR alıcı verici yerine fiber optik kablo mu kullanayım?



-- Bu arada sinyal kesilme sorunu 16f877a'nın reset ucunu boşta bıraktığımdan kaynaklanıyormuş dikkat etmemişim o sorunum çözüldü. Teşekkür ederim. Bu konuda başka sıkıntı yaşayan olursa diye not düşelim.

ete

IR ışık kaynağını bir aktarıcı ile fiber optik kabloya veriyorsun ve kablonun diğer ucunu ölçüm yapacağın yere aynı IR led gibi monte ediyorsun. Böylece fiber optik kablo orada IR verici gibi çalışıyor. Hepsi bu.Kablo yalnızca ışığı aktaran bir ara eleman burada. Bunun için piyasada her türlü parça var sanıyorum. Bir ara bende almıştım. Bi rucunda IR led diğer ucunda kablo başlangıcının monte edildiği ara aktarıcılar mevcut.
Bunun kolaylığı kablo çok ince olduğu için bir birine 3-5mm yakın bile monte edilebiliyorlar. IR ışık hüzme şeklinde yayılıyor ve direk altındaki sensöre aktarılabiliyor. Böylece bütün sensörler kendi ışık kaynağından IR ışık yada sinyal almış oluyor.
Aslında sistemini çok iyi bilmeden bu açıklamaları yapıyorum. Çünki ışık kaynağı bazen tek de olabiliyor geniş açılı bir kaç IR kaynağından gelen sinyaller bir birine yakın yerleştirilmiş sensörlere yansıtılabilirde. Üzeri kapanmış sensör ışığı alamayacağı prebsibine göre çalıştırıp kapalı olanları tespit etmek de bu şekilde kolaylaşmış olur. Dediğim gibi muhtelif çalışma şekilleri var işine hangisi geliyor ise onu denersin.

Ete


Hattuşa

hocam aralık ölçme konusunda bir noktaya şartlanıp kalmışsınız sanırım. aralık ölçmenin farklı yöntemleri de var, sesle aralık ölçebilirsiniz, ışıkla aralık ölçebilirsiniz. mesela TOF sensörleri ile 4m ye kadar 1mm hassasiyette aralık ölçebilirsiniz mesela...


Mayhoş

Cevaplar için teşekkürler. Fiber optik kablo ile iletimi inceleyeceğim.
TOF sensörlere de bakmaya başladım. Amacım biraz ucuz hale getirmek.
Yapmak istediğim aşağıdaki gibi aslında.



Solda 1 pic, sağda 1 pic olacak. Aralarındaki mesafe yaklaşık olarak 30 cm olacak. Vericilerin hepsi solda ve alıcıların hepsi sağda olacak. Sensörler kendi aralarında yaklaşık 2 cm aralıklı olacak. Cisim hangi verici ve alıcıyı kesiyorsa o sensörden bilgi alacağım. Böylece benim cismim yaklaşık olarak hangi aralıkta öğrenebileceğim.

TSOP ile yaptım şimdi. 38Khz ile çalıştırdım. Gün ışığından falan etkilenmiyor sadece kumanda tarzı şeylerden etkileniyor. Verici ve alıcıların etrafını kapatırsam başarılı olabilir.

Fakat daha kararlı çalışması açısından fiber optik kabloya ve TOF sensörleri araştıracağım.
Bu TOF sensörler için örnek bir malzeme linki gönderebilir misiniz? İnternette çok farklı farklı elemanlar çıktı karşıma.

Hattuşa

https://www.robotistan.com/vl6180x-time-of-flight-mesafe-sensoru-1

ustam ben bunu daha önce bir projemde kullanmıştım. 200 cm mesafeye kadar ölçüm yapıyor. ilk 70 cm mesafeyi 1cm hassasiyette ölçüyordu yanılmıyorsam. ebatı tek sensör olarak alırsan prinç tanesi kadar kit olarak temin ederseniz linktekini 500 kuruş kadar anca gelir. sizin resimdeki ölçüm yapılacak alan ne kadar bilemem ama tarama şeklinde sağdan sola doğru kaydırarak bir tarayıcı mantığında hatasız ölçüm yaparsınız diye düşünüyorum. tabi benimkisi bir seçenek

Powered by EzPortal