Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

hpwm pic16f877 50hz

Başlatan ismshn, 07 Şubat 2009, 14:23:35

ismshn

hpwm kullanarak pic16f877 de 50hz frekans üreterek 2 servo motoru nasıl kontrol edebilirim?

OG

HPWM için alt sınırlar sözkonusu.

XTAL Frequency         Lowest Useable PWM frequency
 4MHz                       145Hz
 8MHz                       489Hz
 10MHz                      611Hz
 12MHz                      733Hz
 16MHz                      977Hz
 20MHz                      1221Hz
 24MHz                      1465Hz
 33MHz                      2015Hz
 40MHz                      2442Hz
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ismshn

program veya donanımla kesinlikle yapılamaz mı Yapacağım devrede arka planda en az bir hpwm çalışması gerekiyor PAUSEUS gecikmesi ile servoları kontrol ettiğimde aksamalar oluyor.

hatmeto

PWM çıkışını yüksek tutup 2 - 10 böldürebilirsin. Lojic entegreler var. ama tam hatırlayamadım. (Sanırım 4093 galiba..)

Kolay gelsin....
Bir admin ataasözü derki: "biliyorsan paylaş mod yapsınlar. bilmiyorsan sus banlamasınlar"

tyildizak

Alıntı yapılan: "OG"HPWM için alt sınırlar sözkonusu.

XTAL Frequency         Lowest Useable PWM frequency
 4MHz                       145Hz
 8MHz                       489Hz
 10MHz                      611Hz
 12MHz                      733Hz
 16MHz                      977Hz
 20MHz                      1221Hz
 24MHz                      1465Hz
 33MHz                      2015Hz
 40MHz                      2442Hz

programı 4 mhz tanımlayarak derler, devrede de 4 yerine 1.379 MHz kristal bulup kullanırsan, Hpwm komutunda 145 Hz kullandığında bu pic bacağında 50 Hz olarak oluşması gerekir. (Ama bu değerde kristal bulunabilir mi, bilmiyorum:) )

ismshn

Hpwm kullanımında 50hz yapmak yerine yine arka planda çalışan bir program derlenemez mi?
(bir servo çalışırken diğeri geç kalıyor onun için)

ete

4 Mhz de elde edilebilecek en düşük PWM frekansı 244,141 Hz dir.  Bu durumda 145 değeri yanlıştır.

Listeyi kim yaptı ise küsuratları yuvarlayarak değerleri yazmış 245 yazacağına 145 yazmış. Hata, muhtemelen buradan geliyor. Zira, 8 Mhz de en düşük frekans 488,281 Hz olup listeye  489 olarak yazılmış, 10MHz de bu değer 610,352 Hz olup tabloda 611 verilmiştir.
Hesaplarınızı 145 üzerinden yaparsanız yanılırsınız.

PWM frekansı aşağıdaki formül ile hesaplanır;

F(PWM)=1000000/(PR2+1) *4*(1/Fosc)*TMr2_Prescaler (en düşük frekans için 16 alınmalıdır ) yani
Fpwm=1000000/(PR2+1) * 4 * (1/Fosc) * 16
Fpwm=1000000/(PR2+1) * 64/Fosc, buradan Fosc yi çekersek,
Fosc=(Fpwm * (PR2+1))/15625
Fpwm=50 değerini yerine koyar isek
Fosc= 50 * (PR2+1) / 15625
Fosc= (PR2+1)/312,5  şeklinde formül sadeleşmiş olur.
PR2 değeri en büyük 255 olabilir. O halde PR2=255 alır isek,
Fosc= 256/312,5 = 0,8192 MHz = 819,2 KHz lik bir frekans elde edilmiş olur.
PR2=249 alır isek
Fosc= 250/312,5 = 0,8 MHz = 800 KHz lik bir osilatör frekansı elde edilmiş olacaktır.
Bana kalırsa en tutarlı değerde budur.  Basit bir rc osc yapılarak istenen frekans elde edilebilir.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

ismshn

RC osilatör yapabilmek için 10k direnç ve 22pf kondansatör kullanarak 800khz elde edilebilir sanırım.
Ben programda;
PORTC.1=1
PAUSEUS 1500
PORTC.1=0
PAUSEUS 18500
yazarak servoyu orta konumunda tutuyorum  1500değerini birer artırıp azaltıyorum hpwm ilede bu kadar küçük değerlerde değişme yapılabilir mi?

OG

Tablo, proton'un help dosyasından copy past idi.

Bu da MCSP Help'den
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ismshn

iki servoyu arka planda çok hassas olarak nasıl kontrol edebilirim.
(servolar adc ile kontrol edilmekte)

emrahse

ben 3 tane servoyu aynı anda hpwm olmadan kullanıyorum. programı ccs'de yazdım. Şuan yanımda değil ancak. okula gittiğimde burayada atabilirim.
Yaptığım şey şu timer1'i kurdum ve içerisinde seninde yapmış olduğun belirli bir süre 1 yap daha sonra sıfır yap.

Örneğin:
//timer1'in içerisi
{
output_high(pin_b4);
delay_us(sure0);
output_low(pin_b4);

output_high(pin_b5);
delay_us(sure1);
output_low(pin_b5);

output_high(pin_b6);
delay_us(sure1);
output_low(pin_b6);
}

ete

@ OG,

Birisi bir hata yapmış diğeri ondan kopyalayarak hatayı sürdürmüş.
En sağlam kanıt data sheet dir. Orada adamlar formül vermişler kullan ve uygula neyin doğru neyin yanlış olduğunu göreceksin.
MCS de aynı tablonun üstünde ne deniyor bir bak istersen;

Frequency is the desired frequency of the PWM signal. Not all frequencies are available at all oscillator settings. The lowest frequency at 4MHz is 245Hz. The highest frequency at any oscillator speed is 32767Hz.

Yani 4 MHz de en düşük PWM frekansı 245 Hz. diyor ama altta tabloda ise saçmalıyor.

Bu düşük frekans konusu pek çok kereler lazım oldu ve fiziki olarak yaptığım devrelerde de 245 Hz yi kesinlikle aşamadım. Demekki formül doğru.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

OG

Yok hocam doğrudur elbette, ben zaten aynı hatanın proton'da da olduğunu gösterdim.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

teknikelektronikci

merhabalar üstadlar
bunca yildir ilk defa pwm ile ugrasmam gerekecek fakat bir kac problemim var
öncelikle proton da normal pwm komutunun frekansi sabitmidir ?
ben 3 adc girisne bagli ollarak 3 pwm üretmek istiorum fakat isisde olsun normal hayatta olsun pwm ler ayni anda değil tek tek sira ile cikis veriyor özelikle isisde cok kasior acaba yaptigim bir hatami var yardimci olursaniz sevinirim  bu arada sormak istedigim diger konu timer ile pwm niye yapilir normal pwm komutu ile olmazmi ? yani niye timeri kullaniyoruz ? simdiden tesekür ederim kolay gelsin

Device = 18F452                             
XTAL = 20
TRISA=%11111111
TRISB=%11111111
TRISC=%10000100
TRISD=%00000000
TRISE=%00000000

PORTA=%00000000
PORTB=%00000000
PORTC=%00000000
PORTD=%00000000
PORTE=%00000000
 
Declare BOOTLOADER true 

Declare ADIN_RES 8 ' Çözünürlük 8 Bit 
Declare ADIN_TAD   FRC 
Declare ADIN_STIME 10 ' Örnekleme zamaný 50us 

Dim DEGER1          As Byte
Dim DEGER2          As Byte
Dim DEGER3          As Byte
Clear


ADC_AL:
 DEGER1=ADIn 0
 DEGER2=ADIn 1
 DEGER3=ADIn 2

PWM    PORTC.1,DEGER1,255
PWM    PORTC.2,DEGER2,255
PWM    PORTC.3,DEGER3,255

 GoTo ADC_AL
 End
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

emrahse

pwm ilw hpwm arasında fark vardır. örneğin

pwm portb.0,10,10 yazarsanız
portb'nin 0. bitinden %10 iş ile 10 saykıl'lık sinyal gönderir. Şuan hatırlamıyorum ama gönderdiği sinyalin frekansı sabit ve bu sabitte kristale göre değişiyo

Hpwm'e gelirsek
hpwm portc.1,10,10000 yazarsanız(hpwm sadece portc.1 ve portc2'ye yazılabilir.)
portc'nin 1. bitinden %10 iş ile 10 000 hz(10 kz)lik bir sinyal gönderir.

ve hpwm sürekli gönderir aynı anda portc.1'den ve portc.2^den sinyal göderirsiniz.

kolay gelsin...