Pwm & Hpwm en basit şekilde yardım...

Başlatan esco, 21 Kasım 2006, 01:37:30

esco

Merhaba arkadaşlar 4 mhz ile çalışan 16F876 dan analog çıkış alıp bir transistor sürmek istiyorum. Arama yaparak pwm ve hpwm ile ilgili bütün yazıları okudum. Fakat genel olarak pic konusuna yeni başladğım için anlayamadım.

Açıklamalı sade örnek bir kod yazabilirmisiniz. Örnek derken sadece bir portan çıkış almak mesela. kod ve parametreleri bir anlasam gerisini projemin içine uyarlayacam ama temel komut ve parametreleri anlamadım.

Yardımlarınızı bekliyorum.

Teşekkürler.

ete

@Esco,

PWM komutu her hangi bir pinden duty (iş zamanı) ayarlanabilir ve darbe genişlik modulasyonlu kare dalga çıkartır. Sinyal sürekli değildir. Parametreleri
PWM  pin,Duty,Cycle şeklinde kullanılır.
Pin= sinyalin çıkartılacağı pic pin'i dir. Buraya PortA.0 veya PortB.1 gibi değerler yazabilirsin.
Duty= İş zamanı yani pals'in genişliğini ayarlar. Minimum 0 değerini maksimum 255 değerini alır. %50 pals genişliği için 127 verilmelidir.
Cycle= Belirlenen pin den çıkartılacak periyot sayısıdır. Buraya 100 yazdığın zaman çıkan sinyal 100 kez tekrarlanır ve durur.

HWPM ise bazı piclerin donanımsal olarak sahip oldukları bir özelliktir. Yalnızca bu özelliğe sahip olan pic lerde kullanılabilir. Arka planda çalıştığı için ana programdan bağımsız olarak sürekli çalışabilir. Parametrelerine gelince;
HPWM pin,duty,frekans şeklinde kullanılır.
Pin= yine aynı ancak pic de CCP1 veya CCP2 pinlerinden birisi olmalıdır.
Duty= 0-255 arasında iş zamanıdır. %60 için 127 verilir.
Frekans çıkan sinyalin frekansını belirler. Min 245 HZ ve maksimum 32767 HZ (4 MHz osilatör ile) değer alabilir.

Tabiiki ön ayarlamada kullanılacak pin'in çıkış olarak ayarlanması gerekmektedir.
Kolay Gelsin
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

esco




TRISC=1   ' C portları çıkış oldu
portc=0     ' portu sıfırladık...


hpwm portc.1, 127,30000 ' frekans 30000 hz %50 pals genişliği portc.1 den??


pwm portc.2, 127,300 ' 300 kez tekrarlıyor fakat burda frekans nerde?

bu yazımlar doğru oldumu?

hpwm arka planda programdan bağımsız çalılşır demişsiniz peki hpwm yi nasıl durdururuz? Parametreleri değişken ile kullanabilirmiyiz?

butonlar ile voltaj ayarı yapmaya çalışıyorum hangi komut uygun olur?

teşkkür ederim.

OG

PIC OSC değerine bağlıdır.

SOFT PWM de bir alternans süresi
4MHz çalışmada 5msn (200Hz)
20MHz çalışmada 1msn (1KHz)

olarak biliyorum.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ete

@Esco,

Parametreleri değişken ile kullanabilirsin. Aslında bunları hemen deneyerek daha çabuk neticeye ulaşırsın ama her halde ayağını sağlam basmak istiyorsun.

PWM komutunda frekans yok. Sadece saykıl verebiliyorsunuz.

Gerek HPWM ve gerekse PWM da durdurma duty=0 yaparsanız zaten otomatikman PWM kesilir.
PWM komutu zaten saykıl sayısı bitince kendisi duruyor. HPWM durdurmanın diğer bir yolu da;
CCP1 pinini kullanıyorsanız
CCP1CON.2=0
CCP1CON.3=0

CCP2 pinini kullanıyorsanız
CCP2CON.2=0
CCP2CON.3=0
komutlarıdır.

PWM komutu geçici olarak kullanılabilen bir komut olduğu için süreklilik isteyen işlerde kullanılmaz. Birde program orada komutun tamamlanmasını bekler. Bu yüzden her zaman için HPWM komutunu öneririm.
PBP da bu komut 8 bit çalışır. Ancak aslında bu özelliği 10 bit çalıştırmak mümkün. Bu durumda Duty değeri 0-1023 arasında değişerek %0-%100 değerlerine ayarlanabilir. Buda işlem hassasiyetini etkiler. Nasıl olduğunu göstereyim;
'diyelimki Duty değerin 512 dir ve CCP1 pinini kullanıyorsun. 
DUTY=512
X=DUTY
CCP1CON.4=x.0
CCP1CON.5=X.1
X=X>>2
CCPR1L=x
CCP1CON.2=1
CCP1CON.3=1

Bu sistemde HPWM komutunu kullanmıyorsun yerine yukardaki satırları kullanıyorsun. Dene göreceksin.

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

esco

bu kod örneğine help dosyasından ulaştım.

DEFINE CCP1_REG PORTC 'Hpwm 1 pin port
DEFINE CCP1_BIT 2 'Hpwm 1 pin bit
DEFINE CCP2_REG PORTC 'Hpwm 2 pin port
DEFINE CCP2_BIT 1 'Hpwm 2 pin bit

sanıyorum buraya kadar varolan 2 portu kullanıma açtık....

DEFINE HPWM2_TIMER 1 'Hpwm 2 timer select
DEFINE HPWM3_TIMER 1 'Hpwm 3 timer select

Burayı anlayamadım

HPWM 1,127,1000 ' Send a 50% duty cycle PWM signal at 1kHz
HPWM 1,64,200   ' Send a 25% duty cycle PWM signal at 2kHz

burdaki değer khz cinsinden mi hz cinsinden mi?


---------------------------------
son olarakyapmaya çalıştığım şey budur. siz üstadlar böyle bir şey pwm ile olmaz derseniz hiç uğraşmayalım.  :(


mhk

PWM ile olur hatta şu eklemeyi yaparsan daha iyi olur.

"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

esco

pals olayı anlaşıldığı üzere benim çok yabancı olduğum bir konu bu olayı kaç Hz de denemeliyim sizce.

esco

Sonunda istediğim gibi hpwm yapıyorum fakat şöyle bir sorun oldu... isiste herşey normal görünüyor. ama gerçekte çalışmıyor sırf test için bir adet led koydum devreye pic in üzerine elimi yaklaşıtırınca led yanmaya başlıyor. yüksek frekanstan oluyor heralde bunu nasıl düzeltirim...


DEFINE CCP1_REG PORTC 
DEFINE CCP1_BIT 2 
trisa=0
trisb=%00000011
trisc=0
porta = 0 :portb = 0:portc = 0
symbol TUS1 = PORTB.0
symbol TUS2 = PORTB.1 
SYMBOL LED1 = PORTB.3
A VAR BYTE
A=127

high LED1

BASLA:
PAUSE 10

IF TUS1 =1 THEN A=A+1
IF TUS2 =1 THEN A=A-1
IF A= 0 THEN   A=A+1
IF A =255 THEN A=A-1
HPWM 1,A,20000
GOTO BASLA:







tamamdır bu sorunuda hallettik. elemanın biri tam oturmamış projeborda (malum eski biraz)  ;)

mhk

Alıntı yapılan: "esco"merhaba
yukarıdaki konuda bana yardımcı olmuştunuz . müsadenizle bir şey sormak istiyorum. pic ile lm317 li güç kaynağı yapmaya çalışıyorum. hpwm ile opamp747 kullanarak lm317 istediğim gibi hassas voltaj ayarı yapıyorum. tek sorun lm 317 regüle yapmıyor 2 volt kadar düşüş görüyorum yükte. lm317 temel devresindeki gibi opamp ı çıkartıp pot ile aynı değerlerde deneme yaptığımda voltaj düşüşü olmuyor. ne yapabilirim?

Sanırım sorun ,yüke girdiğinde opampın beslemesinin de yük tarafından düşürüldüğüdür. Yani opamp beslemesi düştüğünde doğal olarak çıkış oranı değişecektir. Bunun için opamp'ın beslemesini LM317 den bağımsız hatta LM317'nin girişinden değil, gerekirse 7824 vs gibi daha yüksek gerilim ile ayrıca sürülmesidir. Opamp beslemesi bu gibi uygulamalarda stabil olmak zorundadır.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

esco

Alıntı yapılan: "mhk"
Sanırım sorun ,yüke girdiğinde opampın beslemesinin de yük tarafından düşürüldüğüdür. Yani opamp beslemesi düştüğünde doğal olarak çıkış oranı değişecektir. Bunun için opamp'ın beslemesini LM317 den bağımsız hatta LM317'nin girişinden değil, gerekirse 7824 vs gibi daha yüksek gerilim ile ayrıca sürülmesidir. Opamp beslemesi bu gibi uygulamalarda stabil olmak zorundadır.

Hocam kullandığım opampı değiştirdim. beslemesinide 7812 ile ayrı olarak verdim pic içinde 7805 var lm317 inputu direkt köprü diyottan alıyor fakat yinede regüle yapmıyor. Çok güzel voltaj ayarı yapıyor ama regüle yok  :(  :cry:

dijitaltemas

Arkadaşlar bildiğiniz gibi 16F877 de iki adet ccp çıkısı var fakat ben 3. ccp çıkısınada ihtiyacım var. Bu nasıl yapacam bana yardımcı olabilirmisiniz. Sitede aradım fakat bulamadım. Pic basic pro da programı yazıyom.3. de frekans değerini nasıl belirleyecem. bu konuda yardımcı olabilirmisiniz? iyi çalışmalar :)

AB ELEKTRONİK

@ device pic16f877    'işlemci 16F877
@ device pic16f877, wdt_off  'Watch Dog timer kapalı
@ device pic16f877, pwrt_on  'Power on timer açık
@ device pic16f877, protect_off  'Kod Koruma kapalı
DEFINE OSC 10
bunu eklersen sanırım sorunun hallolur osc tanımlamamışın oyuzden kaynaklanıyor DEFINE OSC 10 kac mhz kırıstal kullanıyorsan burayı degiştir onagöre kolaygelsin