Protonda ufak bir program yazdım .
Program bir butona bastıkça bir porttaki LED lerin her biri sıra ile yanıyor.Birinci LED yandığında 1,5 volttan başlayıp yarım volt farkla artıyor.Bu kısmı çalışıyor.
Toplam 6 LED var.Program tekrar çalıştırıldığında örneğin 3 kere basıldığında ayarlanmış olan örneğin 2,5 voltun PWM çıkışından verilmesi gerekiyor.
10 ,20 gibi bir değeri EEPROM a kaydederim de butona bastıkça değişen değeri- bir döngüden- alıp nasıl kaydedeceğim?
İkinci sorun ise sistem ışık algıladığında PWM uçlarındaki o voltajın polaritesi değişmesi gerekiyor.
Yani ışık yokken PWN uçlarında 0,75 volt varsa ,ışığı algılayınca bu voltaj 2,5 volta çıkacak ve + ucu - olacak ,- ucu ise + olacak
Bu iki konu nasıl yapılabilir?
Yardımlarınız için şimdiden teşekkürler.
..pwm dalgasının darbe süresini değiştirince voltajıda ayarlanmış olacak..
ilk soruyu ise anlamadım.
Alıntı yapılan: elek - 01 Ocak 2019, 22:54:11..pwm dalgasının darbe süresini değiştirince voltajıda ayarlanmış olacak..
ilk soruyu ise anlamadım.
Hocam farklı voltajları elde etmekte bir sorun yok.
Çözemediğim kısmı butona bastıkça artan bu değerin -örneğin 3,5 voltta kalmışsa .Tekrar açıldığında PWM çıkışının 3,5 volttan açılması.
Diğer sorun ise ışık algıladığında bu pWM voltajının kutuplarının değişmesi(Işık algıladığında saat yönünde dönen motorun ,bu sefer saat yönünün tersinde dönmesi gibi düşünün )
Ödev mi acaba?
Alıntı yapılan: mehmet - 01 Ocak 2019, 23:18:43Ödev mi acaba?
Hayır değil?
Neden öyle dediniz anlamadım
Koduda ekleyeyim
Device = 16F877A
Xtal=20
TRISA=0
TRISC=0
TRISB=%00010000
TRISD=0
TRISE=0
Dim SAYAC As Byte
Dim Loop As Byte
DEFINE CCP1_REG PORTC 'HPWM PORTC.1
DEFINE CCP2_REG PORTC 'HPWM PORTC.2
DEFINE CCP1_BIT 2 'CCP1 PİNİ PORTC.2
DEFINE CCP2_BIT 1 'CCP1 PİNİ PORTC.1
Declare All_Digital = TRUE
Declare PortB_Pullups = On ' Enable PORTB pull-ups
Output PORTC
PORTD = 0 ' Set PORTD (LEDs) to all output
Main:
If PORTB.4 =0 Then 'butona basıldı mı?
While PORTB.4 ==0 :Wend 'butona basmayı bırakana kadar bekle
Inc SAYAC 'sayac değerini bir artır
If SAYAC >=7 Then SAYAC =1 'eger sayac degeri 5 ve 5 den büyükse sayacı 1 yap yani başa dön
EndIf
If SAYAC =1 Then PORTD =%00000001:HPWM 1,39,1400
If SAYAC =2 Then PORTD =%00000010 :HPWM 1,45,1400
If SAYAC =3 Then PORTD =%00000100 :HPWM 1,49,1400
If SAYAC =4 Then PORTD =%00010000 :HPWM 1,56,1400
If SAYAC =5 Then PORTD =%00100000 :HPWM 1,65,1400
If SAYAC =6 Then PORTD =%01000000 :HPWM 1,78,1400
DelayMS 100
GoTo Main
.. butona basıldıkça artan değişken kaydedilecek ve sonra bu değer istenen yerde kullanılabilir.
Amaç bir motorun ters çalışması ise dc motor sürücüsü ile bu kolayca yapılabilir.
Ama önce yapılmak istenen devrenin tam olarak ne amaca hizmet edeceğinin bilinmesi gerekir..
pwm nin kutuplarının ters yapılması ne demek anlamadım..
Gerilim olarak değil de, pwm
dalga oranı olarak düşünün.
0-255 aralığında; 0-127 arasında
ise sola dönüş olsun. Aynı şekilde
128-255 için de sağa dönsün.
Bir pin sağ/sol seçimi için
röleyi kontrol edebilir.
Pwm dalga oranı da buna göre
oranlanır.
Tabii bunun tam ne işe yaradığını
bilmeden söyledim.
@mehmet hocam
dedikleriniz olabilir.Aşağıdaki resmi bir videodan aldım.Resimdekini de deneyebilirim aslında
Protonda PWM komutununun syntaxın da terslemek ile ilgili bir ek özellik yokmudur?
Döngü sonucu buton değerini sanırım Vlookup gibi bir komutla yapabileceğim sanırım
(https://i.ibb.co/gPWZsHn/pwm-terslemek.png) (https://ibb.co/gPWZsHn)
..pwm çıkışı nereye bağlanacak?
Alıntı yapılan: elek - 04 Ocak 2019, 19:58:43..pwm çıkışı nereye bağlanacak?
Bir cihaza bağlanacak
..pwm çıkışının terslenmesini anlayamadım hala..
yani darbelerin boşluk ,boşlukların darbe olmasımı?
neticede pwm çıkışı tek bir pinden çıkıyor..referans olarak
0 voltajı alıyor..
Yukarıda örneğini verdim.Bir durumda motorun sola dönmesi başka bir durumda sağa dönmesi gibi ve voltajlar aynı olacak.
Dolu boş oranı ile ilgili değil.Onunla ilgili olsa maximumdan o duty yi çıkartırım
..pwm çıkışı bir cihaza bağlanacak ise o cihazın pwm ye tepkisini bilmek lazım..
@ elek aşağıdaki videoda izah ediliyor(18:45)
Videoda yanlış anlatım var. Transitor inverter olark çalıştığında giriş 0 oldufunda çıkış vcc giriş bir direnç üzerinden vcc olduğunda çıkış 0 olur.
Anladığım kadarı işe sizin istediğiniz yüke giden beslemenin polaritesinin değişmesi.
high bridge transistor sürücüsü gerekiyor.
https://www.youtube.com/watch?v=tCADp0we_54
@sadogan Cevabınız için teşekkürler.
Sistemi çalıştırabildim.Bu tersleme işlemlerine gerek kalmadı.
Cihaz 40-80 hz arasında çalışıyor.Ben 250 hz de çalıştırabildim .
Frekansı düşürebilmek için 4 mhz lik kristal kullandım.Bu frekansa kadar inebildim
HPWM komutuyla elde ettiğim bu 250 Hz i en azından 80 hz e nasıl düşürebilirim?
Band pass filtre olabilirmi?
Frekans bölücü entegre kullanmanız lazım.
Yada işlemci ile 80 hz üretmek için tmr kesmesi kullanarak bu işi yapmanız lazım.
Veyahut 80 hz elde etmek için xtal frekansınızı dahada düşürmeniz gerekecek.
4MHz yerine 1Mhz kristal kullanırsanız frekansınız 250/4 olur.