pulsout nasıl kullanılır

Başlatan yasargunaydin, 05 Ekim 2009, 21:22:23

yasargunaydin

Arkadaşlar merhaba,

sw1 basılı iken portd.7 den 300ms ile pals üretmesini istiyorum.Step motor sürmek için.Ama proteuste anime ederken portd.7 ye taktığım led sw1'e basınca sürekli yanıyor.300ms ile yanıp sönmesi gerekmiyormu

IF sw1=0 THEN
pulsout port.7,300

endIF

Maxim

300 = 3 ms olması lazım o komut için ,
yani 300ms için 3000 yazmak lazım

muhtemelen hata o dur ,
sürekli yanık gibi gözüküyordur haliyle

ete

Pulsout komutunda süre osc frekansınada bağlıdır.
4 MHz kristal kullanıyor iseniz yazdığınız süre 10us ile çarpılarak uygulanır.
Yani süreyi 300 verirseniz puls süresi 3000 us yani 3 ms olacaktır.

20 Mhz kristal kullanıyorsanız yazılan süre 2us ile çarpılır. AYnı örneğe göre 300 yazarsanız puls süresi 600 us olarak uygulanacaktır.

dolayısıyla 300 ms yani 300.000 us puls süresi için 4 MHzde 300 00 yazmak gerekir.

Ama bu değer kabul edilirmi denemedim.

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

yasargunaydin

Her sayıyı denedim.3,30,300,3000,30000,300000....
300000de hata verdi.Ama hiçbirinde led yanıp sönmedi.
Bu komut yerine
IF SW1=0 THEN PORTD=%10010000:PAUSEUS 300:PORTD=%10000000 :PAUSEUS 300

SÜPER ÇALIŞIYOR.Step motorda süper çalışıyor.
Ama bu pulsout komutunada inat ettim.neden olmuyor.

ete

İlk mesajında 300 ms puls vereceğini belirtmene rağmen, süper çalışıyor dediğin satırda 300 us pals veriyorsun.
Aslında 300 us High puls ve 300 us low puls veriyorsun. Aynı işi pulsout komutu ile yapmak istersen aşağıdaki komutu kullan,

Pulsout PortD.7,30:PAUSEUS 250

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

yasargunaydin

Hocam;olmadı yine. Acaba aşağıdaki kısımdamı hata var 4mhz kullanıyorum.Led yanıp sönmüyor,step motorda çalışmıyor.

TRISA=%11111111     'portA giriş yapıldı
TRISB=%11111111     'portB giriş yapıldı
TRISC=0
TRISD=0
'-------------------------------------------------------------------------------
@ DEVICE pic16F877A              
@ DEVICE pic16F877A, WDT_on        
@ DEVICE pic16F877A, PWRT_ON
@ DEVICE pic16F877A, PROTECT_OFF
@ DEVICE pic16F877A, XT_OSC


DEFINE OSC 4
ADCON1=7 '7. bit 1 yapıldı 10 bit sonuç almak için.
OPTION_REG.7=0 'pull-up dirençleri aktif

ete

Programda ADC kullandığın anlaşılıyor. Diğer komutlar low süresini etkiler. Bu nedenle simulasyonda bakıp pulsout komutundan sonraki Pauseus komut değerini ona göre ayarlamak gerekir.

Bu komut yapmayı düşündüğün iş için uygun değil aslında neden pulsout komutu ile yalnızca high süresini kontrol edebiliyorsun. Low kısmını kendin ayarlaman gerek. Ama programın diğer parçalarının yarattığı gecikme seni etkiler.

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

yasargunaydin

Hocam;bu projemde adc kullanmıyorum.Başlangıçtaki device kısımlarını sizin derslerinizdeki proğramlardan kopyalayıp yapıştırdım.biraz ezbere bir iş oldu ama pic süper çalışıyor.(pulsout komutu hariç)

Ben şuanda yaptığımız basit bir makinanın  proğramını yaptım ve çalıştırdık,deneme aşamasındayız.yalnızca ilerdeki projelerimizde step motor çok kullanacağız gibi görünüyor.Yani pulsout basit olur diye düşünmüştüm ama niye çalışmadı hala çözemedim

ete

Step motorlar için en uygun olanı PWM kullanmaktır. HPWM üzerinde çalış bence. Step motor frekans arttıkça  hızlanır azaldıkça yavaşlar. Genelde 250 Hz ile 4-5.000 Hz arasında uygun şekilde çalışır. Frekans ayarlı bir HPWM sistemi yaparsanız hem geri planda çalışır hemde çok kararlı çalıştığı için step kaybınız olmaz.

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