12f675'de PWM ile cebelleşiyorum....

Başlatan mustafa_cmbz, 01 Mart 2009, 19:00:36

mustafa_cmbz

arkadaşlar elektro şok aleti yapmaya çalışıyorum...ve osilatör niyetine 12f675'in pwm'ni kullanmaya çalışıyorum...ama verimli bir şekilde çalıştıramıyorum...

aslında kullanmaya çalıştığım komut bu iş için uygunmudur değilmidir onuda bilmiyorum...

PWM_SEVIYE_4:
DUTYCYLE=120
PWM GPIO.2,DUTYCYLE,1
If SET_BUTON=0 Then SEVIYE_4
GoTo  PWM_SEVIYE_4


yukarıdaki gibi bir kod yazdım...ama dediğim gibi tam verimli çalıştıramıyorum..

yanlız komutlar ile ilgili de sormak istediklerim var mesela dutycyle değişkenine atanacak  max. ve min. değer ne olmalıdır_?

bu değerlerin karşılığını hangi frekansa ve voltaja denk geldiğini nasıl hesaplarız_?

bunlar merak ettiğim ve takıldığım noktalar....iyi çalışmalar...

Maxim

herşey helpte yazıyor musti ,

PWM Pin , Duty , Cycles

Pin -Port.Pin (sen GPIO.2 demişsin)

Duty - (0-255) (sen 120 demişsin)

Cycles - (0-255),(sen 1 demişsin) bu değer çıkışta kullandığın kondansatöre göre değişirmiş .



adamlar demişki ,

eğer duty 255 yazdıysan çıkış 5 volt olur .


eğer 100 yazdıysan ;
255 = 5 volt olduğuna göre

100/255 = 0.392, aşağı yukarı %39 eder .

(100/255) * 5 = 1.96 volts

ama bu değer çıkıştaki kondansatöre göre falan değişir diyor galiba

ipek

Mustafa işini görürmü bilmiyorum C ile yapılmış bir örnek var
başlığın altına yakışmadı .belki faydalı olabilir.
http://www.semifluid.com/?p=34

mustafa_cmbz

ben çıkışa kondastör bağlamadım hocam...direkt direnç üzerinden opto'ya gidiyor...

ipek hocam veriğiniz site faydalı bilgiler içeriyor...şu sıralar c ye geçtim geçicem gibi bir durumdayım....şimdi olmasa bile geçişten sonra çok işime yarayacak....proton ve basic artık yapmayı düşünüğüm projelerde yeterli olmuyor...

maxi hocam yanlız şu pwm pin olayını anlayamadım benim yazdığım doğru değilmi_? tam olarak ne demek istediğinizi anlayamadım...iyi çalışmalar...

Maxim

pwm komutu yazılımsal bir komut, 8bitlik yani 0-255 arası ayar sahası var .mesela duty değerine 127 yazdıysan çıkışta %50 dutylik bir pwm alırsın .

pwm üretip ve onun ayarlarını değiştirerek çıkış tan voltaj almaya yarıyor.
ama dc voltaj alabilmek için çıkışa kondansator koymak şart ,
sen anladığım kadarıyla sadece frekans üretmek istiyorsun.

Çıkış herhangibir ayak olabilir ,pin burada ayak demek ,
porta.1 olabilir ,portb.4 olabilir, yani yazdığın da olur .


detay bilmediğim için detay veremiyorum .
ama eğer düzgün bir pwm istiyorsan HPWM komutunu kullanmalısın ,
haliyle bu komut için donanımsal pwm barındıran bir pic lazım 12F683 gibi,
yok kullanamam dersen o zaman 12F675 in kendi timer1 ini kullanarak kendin pwm de üretebilirsin kesme ile.

Maxim

yok senin istediğini yapmaz o komut ,ben onu anladım .

2 deneme yaptım ,

test1 :

Device = 16F877
XTAL = 4
ALL_DIGITAL=TRUE

TRISA=%00000000
TRISB=%00000000
TRISC=%10000000
TRISD=%00000000
TRISE=%00000100

loop:

PWM PORTB.0 ,127,127

GoTo loop


scope çıktısı






test2:
Device = 16F877
XTAL = 4
ALL_DIGITAL=TRUE

TRISA=%00000000
TRISB=%00000000
TRISC=%10000000
TRISD=%00000000
TRISE=%00000100

loop:

PWM PORTB.0 ,127,1

GoTo loop


scope çıktısı



görüldüğü üzere 2 çıktı arasında fark yok ,
çıkışta direnç ve kondansatör yok çünkü.
daha önce dediğim gibi ,bu pwm kodu aslında dc voltaj üretebilmek için tasarlanmış

mustafa_cmbz

peki biz frekans ile oynamak için nasıl bir koda ihtiyacımız var_?

timer_?
pause komutu_?
donanımsal pwm_?

bunlardan hangisiyle işim olur sence hocam....

birde kullandığın osilaskop programı güzel bişeye benziyor paylaşabilirmisin hocam_?

Maxim

Alıntı yapılan: "mustafa_cmbz"peki biz frekans ile oynamak için nasıl bir koda ihtiyacımız var_?

timer_?
pause komutu_?
donanımsal pwm_?

bunlardan hangisiyle işim olur sence hocam....

birde kullandığın osilaskop programı güzel bişeye benziyor paylaşabilirmisin hocam_?

frekans geniş bir konu ,
kaç herz ? kaç megaherz ?
yapılacak devreye görede değişen bir tasarım olabilir , bilemem .

ama en kolayı donanımsal pwm ve HPWM komutu bence.

en doğrusuna sen karar vereceksin .

usb scopumu paylaşamam ,üzgünüm  :)

mustafa_cmbz

12f675 sevdasından vazgeçtim hocam bizim işimizi  555'ten başkası görmeyecek gibi...

ilk olarak kodda yanlışlık yapmışım opto analog pinlerden birine bağlıymış bende analogları digital olarak ayarlamadığım için pwm alamıyormuşum...onu farkedip düzeltmeler yaptım...bu seferde pic tam pwm ile fet'i sürmeye başlayınca pic ve fet aynı besleme kaynağına bağlı olduğu için pic'in besleme voltajını sindiriyor....3.30v gibi bir gerilim ölçüyorum...böyle olunca da pwm çıkışı tam olarak 5v olmuyor buda fet'i etkiliyor sonuç olarak fet yine 5v ile tetiklenmiş oluyor ve tam randıman alamıyorum aynı zamanda da gevv hocamın da dediği gibi fet acayip ısınıyor....

en iyisi 555 eğer ucuz yollu  digital pot bulabilirsem 555'in potunu 12f675 ile ayarlayıp seviye ayarını bu şekilde yapmayı düşünüyorum....pic'te sadece butonlar ile girilen seviyede pot'u kontrol edecek....ama böyle oluncada pic'i de ayrı bir pil ile beslemek gerekecek...

şimdi bende basicte kod yazılmış pic misali  hem güncel hayatımı sürdürmeye çalışıyorum hemde kesemeler aktif bir şekilde nasıl olur diye düşünüp birinde karar kılmaya çalışıyorum....

yardımlarınız için çok teşekkürler...iyi çalışmalar..

tyildizak

Mustafa, fet her neyi anahtarlıyorsa, besleme voltajını göçertiyor, bu koşullarda 555'in de stabil çalışması mümkün değil. Dijital pot, 555 derken gereksiz kalabalık.. Mikrodenetleyiciler ne için var?

Bence 16f628 kullan, donanımsal pwm en kolayı.

Bu arada , yük şu acaip ısınan fet'in source'una mı bağlı, drain'ine mi?

mustafa_cmbz

drain hocam...yük dediğimiz de 5v standby trafosu... 16f628 ile uygulama yaparken pwm çıkışına kondastör bağlamak gerekliymiş...bunun amacı nedir_? birde bu kondastör nasıl bağlanacak onu merak ediyorum....iyi çalışmalar

tyildizak

Pwm çıkışına neden kondansatör bağlanır? Eğer D/A converter uygulaması yapacaksak, yani pwm darbelerini eşdeğer genlikte temiz bir Dc voltaja dönüştürmek istiyorsak, r-c filtreden geçiririz. Tıpkı ac/dc dönüşümü yaparken köprü diyotun çıkışına bağladığımız kondansatör gibi. Amaç, pozitif darbeler arasındaki boşlukları doldurmak.. Alttaki grafiğikteki sinüs dalga şeklini karedalga olarak düşün:



Trafoyu sürerken ise ihtiyacın olan son şey DC voltaj, yani pwm'i filtrelememen gerekiyor. Sekondere dc uygularsan primer'den herhangi bir voltaj alabilir misin? Mümkün değil.

Devrende büyük olasılıkla fet iletimde kalmış, sekonderin omik direnci çok düşüktür, kısadevreye yakın birşey olmalı, voltajın çökme sebebi bu olabilir.

Bunun dışında, yükün endüktif olduğundan, bobinin (trafonun sekonderi) uçlarına ters hızlı diyot takman doğru olabilir.

mustafa_cmbz

hocam bu bilgilerin dışında bişey daha sormak istiyorum...555'li şemada gate ucuna hiç direnç atmamış...

peki aynı devreyi pic'ile kontrol ederken fet'in önüne direnç atmamız gerekiyormu yoksa direkt olarak gate ucuna 18v vermemiz sorun yaratırmı_?

tyildizak

Evet, 1k gibi bir direnç konabilir fakat 18 Volt'u anlayamadım..

mustafa_cmbz

devreyi 2 adet 9v pil ile beslemeyi düşünüyorum hocam...fet'i direkt olarak pic ile sürmek sorun yaratabilir bende pic-opto-bc547-fet sıralaması ile fet'i sürmekyi denedim...bu şekilde sürerken gate ucuna direkt 18v vermek sorun yaratırmı yoksa direnç atmak oluşacak olan soruna çözüm getirirmi_?

iyi çalışamlar...kafam biraz dalgın tam cümle kuramıyorum kusra bakmayın....