L298N PWM ile sürmek?

Başlatan futureng, 22 Ocak 2009, 15:06:15

Tagli

Hayır. Bilindiği üzere PWM'yi tanımlayan iki değer var, periyod ve duty cycle. 16F877A'da iki donanımsal PWM çıkışı için periyod ayarında tek bir register (PR2) kullanılır. Buraya yazacağın değer iki çıkış için de ortak olarak çalışır, bu yüzden ikisinin de periyodu aynı olur. Ama duty cycle ayarında kullanılan CCPR1L ve CCP1CON register'ları (ve tabi CCPR2L ve CCP2CON) bu bacaklar için ayrıdır, yani bu iki çıkışa birbirinden bağımsız duty cycle'lar verebilirsin.
Gökçe Tağlıoğlu

eistain_54

tagli arkadasım ben bu konuda çok fazla derin detaylı bilgilere sahpip değilim o yüzden bişey sormak istiyorum periyottan kastın nedir acaba periyod dediğin frekans mıdır acaba
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

Tagli

Hemen hemen aynı şey. Periyod = 1 / Frekans. Yani frekans birim zamandaki (genelde saniye kullanılır) çıkışların (veya inişlerin) sayısı iken periyod ise bu çıkışların (veya inişlerin) arasındaki zamandır.
Gökçe Tağlıoğlu

eistain_54

yani frekans için belirli periyotlar(zaman aralıkları(çalışma süreleri)) belirliyorsun ve iş süresi seçiyosun seçtiğin iş sürelerini iki pin arasında farklı değerlerde seçebiliyosun.877a için konusursak iki pin içn hpwm kullanacaksak pinlerin çıkışında farklı değerlerde iş süresi seçebiliriz ancak(iş süreleri iki pinde birbirinden bağımsız olarak farklı değerlerde olabilir)belirli bir periyot belirleriz ve bu periyot iki pin içinde stabildir yani sabittir atıyorum ccp1 pininden 165 iş süresini,ccp2 den ise 125 iş süresini seçtiğimizde her iki pin içinde atıyorum 50snlik  bir periyot belirliyoruz bu periyot iki pin için de stabil yani sabit


doğru anlamısmıyım???
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

Tagli

Evet. Bu sitede güzel bir örnek var. Gerçi verdiği kodlar ASM'ye yönelik ama ASM bilmeden de kolaylıkla anlaşılabilir, çünkü her işlemin açıklamasını yazmış.
Gökçe Tağlıoğlu

eistain_54

çok sağol açıklaması var ancak hepsi sanırım ingilizce bunun hangi dil olduğunu tam olarak biliyormusun google çeviriden ona göre çeviri yapmak istiyorum...
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

Tagli

Dil İngilizce. Ama Google çevirisi tam anlamıyla berbat. Sanırım ben çevirsem daha iyi olacak:

****** Daha önce bashetmiş olduğum siteden çeviridir. ******

Varsayalım ki PIC 4 MHz'de çalışıyor ve 1000 Hz'lik ve %50 iş zamanı olan bir PWM sinyali istiyoruz.

Aşağıda anlatılan adımlar 16F87X datasheet'inden alınmıştır.

1) PWM periyodunu (1000 Hz = 0.001 saniye) PR2 register'ını kullanarak ayarlayın
PWM Periyodu = [PR2 + 1]*4*Tosc*TMR2 PreScale değeri
TMR2 prescale değeri 4 olsun. Diğer değerleri de deneyebilirsiniz ama aynı değeri iş zamanı hesaplamalarında da kullanmayı unutmayın.
Tosc = 1/4000000 = 2.5*10-7
Denklemi düzenlediğimizde:
PR2 = (Periyod/(4 * Tosc * TMR2 Prescale)) - 1
Değerleri yerine yazarsak:
PR2 = (0.001/(4 * 2.5 * 10-7 * 4)) - 1 = 249
bsf STATUS,RP0
movlw d'249'    ; TMR2 = 249 olduğunda periyodu sonlandır
movwf PR2
bcf STATUS,RP0


2) PWM iş zamanını CCPR1L register'ı ve CCP1CON<5:4> bitlerini kullanarak ayarlayın
CCPR1L iş zamanı değerinin büyük 8 bitini tutarken CCP1CON'un 4. ve 5. bitleri iş zamanı değerinin küçük 2 bitini tutarlar.
PWM Duty Cycle = (CCPR1L:CCP1CON<5:4>)*Tosc*TMR2 Prescale değeri
CCPR1L:CCP1Con<5:4> = PWM iş zamanı / (Tosc * TMR2 Prescale)
PWM iş zamanı = Periyodun %50'si
PWM iş zamanı = 0.001 / 2 = 0.0005 saniye
CCPR1L:CCP1Con<5:4> = 0.0005 / (2.5 * 10-7 * 4)
CCPR1L:CCP1Con<5:4> = 500
500'ün 2'lik tabanda 10 haneli karşılığı = 0111110100
CCPR1L = 01111101 ve CCP1Con<5:4> = 00
movlw b'01111101'  ;Bit 2 - 9 ayarlanıyor
movwf CCPR1L
bcf CCP1CON,CCP1X  ; Bit 1 ayarlanıyor
bcf CCP1CON,CCP1Y  ; Bit 0 ayarlanıyor


3) TRISC<2> bitini sıfırlayarak CCP1 bacağını çıkışa ayarlayın.
bsf STATUS,RP0
movlw b'11111011'
andwf TRISC
bcf STATUS,RP0


4) T2CON register'ı ile TMR2 prescale değerini ayarlayın ve TMR2'yi açın.
Daha önceden prescale değerinin 4 olmasına karar vermiştik.
movlw b'00000101'   ; TMR2 = açık, prescale = 1:4 için gereken değerler
movwf T2CON


5) CCP1 modülünü PWM için ayarlayın.
movf CCP1CON,W
andlw b'00110000'  ;Önceden ayarlanmış PWM bitleri haricindeki bitleri maskele
iorlw b'00001111'  ;ve PWM modülünü aç
movwf CCP1CON


Bu işlemlerin ardından 1000 Hz'lik %50 iş zamanlı kare dalganın RC2 bacağından geliyor olması gerekir.

************ Çeviri Sonu *************

Gerçi bu anlatımlar ASM'ye göre yapılmış. Belki kullandığın derleyicinin HPWM üretmek için kolay kullanılabilir bir komutu vardır.
Gökçe Tağlıoğlu

eistain_54

ben basic pro kullanıyorum onun için uygun komutlar bulabilirmyiz acaba bunlar birer harika çok sağol anlatımların için
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

eistain_54

ya bişey sorcam herşey iyi güzel ama ben bütün bunlaı işletim sistemi gibi bir sistemle çalıştıramazmıyım ki bi gerçek zamanlı işletim sistemi falan kullanamazmıyız
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!