|
Sayfa 2 Toplam: 2
Step Motor’un ve
Kodun Çalışma Şekli
Step motora 1 adım attırabilmek için sırasıyla B’00000001', B'00000010',
B'00000100',
B'00001000'
değerlerini step motorun data pinlerine gönderiyoruz. Bu veriler
sırasıyla gönderilmediği takdirde motor dönmeyecek ve titreme yapacaktır. Bu
verileri göndermek için de bir tablo oluşturuyoruz. Bu tablodaki verileri
sırayla çağırma işini de ADIM değişkenini
kullanarak yapıyoruz.
;Adım değişkenine ilk değerini
yüklüyoruz
MOVLW H'FF'
MOVWF ADIM
;Adım değerini 1 artırıyoruz,
00000011 binary sayısıyla adımı and leyerek adım değişkenindeki sayının 3 ten
sonra 0 lanmasını istiyoruz. Adım ın tabloyu çağırmadan önceki ilk değeri
böylece 00000000 oluyor ve tabloyu çağırıyoruz. Sıra tekrar bu rutine gelince
adım değeri 00000001 oluyor sonra 00000010, 00000011 değerlerini alıyor ve
böylece step motor 1 adım atmış oluyor. Bir sonraki adıma gelirken adım değeri
00000100 oluyor ancak tabloda sadece 4 tane değerimiz olduğundan ve bu
değerleri motora yükledikten sonra tekrar bir sonraki adım için başa dönmesini
istiyoruz, bu yüzden adım değerini 00000100’ı 00000011 ile AND lediğimizde adım
değeri tekrar 00000000 oluyor ve böyle devam ediyor.
INCF ADIM,F
MOVF ADIM,W
ANDLW b'00000011'
CALL ADIM_TABLOSU
;Tabloyu çağırmadan önce adım
değerini w yazmacına atıyoruz ve ADDWF PCL,1 işlemini yapıyoruz. PCL özel
yazmacı sayesinde w değeri 0 olduğunda ilk değeri, 1 olduğunda ikinci değeri, 2
olduğunda üçüncü değeri, 3 olduğunda ise dördüncü değeri çağırmış oluyoruz.
ADDWF PCL,1
RETLW B'00000001'
RETLW B'00000010'
RETLW B'00000100'
RETLW B'00001000'
;Benim kullandığım motorun her
adımı 7.5 dereceydi. ACI değişkenine d’48’ decimal değerini yükleyerek motoru
7.5*48=360 derece döndürmüş oldum. Siz de ACI değişkenine farklı değerler
yükleyerek motoru istediğiniz derecede döndürebilirsiniz.
MOVLW D'48'
MOVWF ACI
;Her adım arasına ise motorun
adımını tamamlayabilmesi için belli bir gecikme koymanız gerekiyor. Bu gecikme
olmazsa veya yetersiz olursa motor adım atlar ve istenildiği gibi dönmez.
Gecikme süresini artırarak motorun hızını yavaşlatmış, azaltarak ise artırmış
olursunuz. Ama sürenin belli bir değerin altına inmemesi lazım. Bu süreyi
deneme yanılma yoluyla bulabilirsiniz. Benim kullandığım motor için bu limit
süre 7.65 ms idi. Eğer bu süre sizin motorunuz için yeterli gelmez ve motor
adım atlarsa D’10’ değerini artırarak bu süreyi artırınız.
GECIKME
MOVLW H'FF'
MOVWF SAYAC1
DONGU1
MOVLW D'10'
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2,F
GOTO DONGU2
DECFSZ SAYAC1,F
GOTO DONGU1
RETURN
<< Başa Dön < Önceki 1 2 Sonraki > Sona Git >> |
|
|
pıc assembly
Yazan:: hunter (Kayıtlı ) Tarih: 19-11-2008 17:42
» Yorumu cevapla...
» Tüm cevap(ları) 1 gör