You are on page 1of 25

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

Makaleler

Hz Ayarl oklu DC Motor Kontrol

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

Hz Ayarl oklu DC Motor Kontrol


Yazan: Mustafa Tufaner, Dzenleyen: Canol Gkel - 18 Kasm 2006

Giri
Robotikte ska kullanlabilecek bir uygulama ile karnzdayz. Nasl ki uygulamalarnzda robotunuzun beynine mikrodenetleyici yerletiriyorsunuz, bu beynin eli aya olarak da tabii ki motorlar kullanacaksnz. Bu uygulama ile robotumuza, beyniyle elini nasl kontrol edebileceini reteceiz. Tabii hangi hzda hareket ettireceini dardan gelen kullanc komutlar belirleyecek. Bu hz da bilmesi iin kullancya 7-segment'ler araclyla motorlarmzn hzn gstereceiz. oklu motor olmas amacyla uygulamamzda 3 motor ve bu 3 motorun hzn gsterecek 6 tane de 7-segment display kullanmaya karar verdik. Unutmadan; hz kullanc belirleyecek diyorduk, onun iin de 6 tane hz arttrma ve azaltma dmesi kullanacaz. Bu uygulamann ileriki robotik almalarda size faydasnn dokunmas dileiyle J iyi almalar

Pulse Width Modulation (Darbe Genilii Modlasyonu)


Balang olarak motorlarn hzn nasl kontrol edebileceimizi incelemeliyiz.Kullandmz mikrodenetleyicinin klarndan logic olarak 1 veya 0, elektriksel karl olarak da +5V veya 0V alabiliriz. Fakat bu uygulamamzda olduu gibi, eitli uygulamalarda bu iki seviye arasnda kalan herhangi bir deeri k olarak almamz gerekebilir. Bu durumda bavuracamz yntemlerden birisi Pulse Width Modulation (PWM)dr. PWM rneklemek gerekirse; dz bir sokakta kay kay ile kayan bir ocuu dnn. Ayayla yeri ittii an +5V, kayan zerinde gittii an da 0V olarak kabul edelim. Bu ocuun ivmesini belirleyecek olan faktr birim zamanda yeri ne kadar ittii olacaktr. Eer yeri srekli itiyorsa ivmesi maksimum (yani bizim sistemimize gre +5V) eer yeri hi itmiyorsa ivmesi 0 (sistemimize gre ise 0V) olacaktr. Fakat bu ocuk toplam zamann yars kadar sre ile yeri itiyorsa ortalama ivmesi maksimum ivmesinin %50si olacaktr. Sistemimize dnecek olursak; bu bizim iin ortalama olarak 2.5V ka denk gelmektedir. Grld gibi ocuun (mikrodenetleyicinin) yeri ittii (+5V k verdii) srenin toplam sreye oran ocuun ortalama ivmesini (mikrodenetleyicinin ortalama kn) verecektir.

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

Gerilim (Volt)

Vort = 3V

0 0 1 2 3 4 5 6 7 8 9 10

PWM = %60

ekilde de grld gibi toplam 10 birim zamann 6 biriminde k olarak +5V verilmitir.
Ortalama k= 5V6 Birim =5V% 60=3V 10 Birim

Denklemde verildii gibi maksimum k deerinin %60n ortalama k deeri olarak gryoruz. %60 PWM oran olarak da adlandrmamzda bir saknca yoktur.
PWM Oran= Maksimum Olma Sresi Toplam Sre

Uyguladmz k sinyalinin Vmaks olma oran arttka ortalama k voltajmz da artacaktr.


Gerilim (Volt) Gerilim (Volt)

Vmaks 4

Vmaks

Vort = 4V

1 0 0 1 2 3 4 5 6 7 8 9 10

Vort = 1V t
0 1 2 3 4 5 6 7 8 9 10

PWM = %80

PWM = %20

k sinyalinin periyodunu motorun tepki sresinden ksa setiimiz vakit, k sinyalinin ortalama deerini motor zerinde duraan bir biimde grebiliriz. Ancak setiimiz periyodun ok uzun olmas durumunda sinyaldeki deiimleri motor zerinde dorudan grebiliriz, bu da motorun kesik kesik hareket etmesine neden olacaktr. Motoru dorudan mikrodenetleyicinin kna baladmz zaman mikrodenetleyicinin kndan motoru istediimiz hzda evirecek kadar akm alamayz. k +5V olarak kabul eden mikrodenetleyici gerekli akm salamaya alacak ancak baarl olamaynca kullanlamaz hale

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

gelecektir. Ayn zamanda Vmaks olarak +5V kullanmak yerine daha kk yada daha byk voltaj ile motoru srmek isteyebiliriz. Bu yzden mikrodenetleyici ile motor arasnda balant kuracak bir elemana ihtiyacmz var. Ara eleman olarak motor srmek iin hazrlanm olan motor src entegreleri kullanabileceimiz gibi transistrlerin anahtarlama zelliinden de faydalanabiliriz.
+12V

VSS M1 giri 1 M1 giri 2 M2 giri 1 M2 giri 2

M1 k 2 M1 aktif letirme Toprak

L293D

M1 k 1

M2 k 1 M2 k 2 M2 aktif letirme Toprak

Mikrodenetleyici k

1K

Motor src entegre

Temel olarak transistrden bahsetmek gerekirse; NPN tipi transistrn base'i ile emiter'i arasna 0,6V (ve fazlas) uygulanrken transistorn collector' ile emiter'i arasnda akm geii (balant) salanr. Eer base ile emiter aras gerilim 0,6V'un altna inerse, collector ve emiter arasndaki akm geii kesilir. Bu sayede transistre verdiimiz sinyalin ekil olarak aynsn motor zerinde grebiliriz. Ancak motor zerinde grlebilecek Vmax motorun dier ucunun bal olduu voltaj kaynana gre deiir. Bu zelliiyle k gc +5V olan mikrodenetleyici ile +12Vla alan bir motoru srebiliriz. imdi bu k sinyallerini, kullandmz mikrodenetleyici ile nasl verebileceimize bakalm.

Motor kn 1 yap

1 birim sre bekle

4 birim sre bekle

Motor kn 0 yap

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

Yukarda verilene benzer bir algoritma mikrodenetleyiciden almak istediimiz sinyali verebilir (PWM oran %80). Verilen algoritmada bekleme srasnda istediiniz ilemleri yapmak mmkn. Beklemeler esnasnda 7-segment display'lere motor hzlarn yazabiliriz. Motor PWM kontroln saladmz bu algoritmay biraz daha sadeletirelim.

Motor kn tersle

y birim sre bekle

x birim sre bekle

Motor k ne? k = 0 k = 1

lk yazdmz algoritma 4 seviyeden oluuyordu ama ikinci yazdmz algoritma 3 seviyeden oluuyor. Bylelikle programmz fazla kodlardan kurtarm olduk. nceden de deindiimiz gibi mikrodenetleyicinin yapaca tek i bu PWM' ayarlamak olmayacaktr. Bu yzden algoritmamz biraz daha genelletirmemiz ve dier ilemleri de hesaba katacak ekilde geniletmemiz gerekiyor. Mikrodenetleyicinin dier ilemlerde (2. ve 3. motorun PWM k, 7-segment display'lerde gsterim, buton kontrol) sabit vakit harcadn ve geen toplam zamann da birim zaman olduunu kabul edelim. Bu durumda motor k 1 (+5V) iken 4 defa (x defa), motor k 0 olunca 1 defa (y defa) dier ilemleri yapacak ve tekrar motor pwm k ayarlamasn yapacak.

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

Sayac 1 azalt

Saya 0 m? Hayr

Dier lemler (birim sre)

Evet

k = 0 Motor k ne?

k = 1

Saya = 100 - x = y

Saya = x

Motoru tersle

Bu aamada bir nceki algoritmada bulunan motoru tersle ilemi ile motor kn kontrol etme aamasnn yerini deitirdik. Motor k ne diye sorduumuzda eer k 1 ise sayaca attmz deer motorun sfr kalma sresi olmaldr nk hemen bir sonraki ilemde motoru tersleyeceiz.

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

Eer motor k 1 ise mikrodenetleyici Saya deikeninin iine y deerini atayacak ve ardndan motor kn tersleyerek 0 yapacaktr. Mikrodenetleyici, dier ilemleri gerekletirdikten sonra Saya deikenini bir azaltacak, deiken 0 olana kadar dier ilemleri tekrarlayacaktr. Yani mikrodenetleyici Saya deikeni 0 olana kadar toplamda y kere dier ilemleri yapacak. Dier ilemlerde harcadmz sreyi birim sre olarak kabul etmitik. Bu durumda motor kmz terslenip 0 olduktan sonra y birim sre beklemi olacaz. Algoritmamz bir aama daha ilerletmi olduk. Artk dier ilemler diye belirttiimiz ksmda istediimiz ilemleri yapabileceiz. Hz (Vort) leimizi 100 olarak alacak olursak Y=100-X olacaktr. kn 1 olma oran %80 ise 0 olma oran %20'dir. Baka bir deyile, 80 birim zaman boyunca k Vmaks ise 20 birim zaman boyunca 0'dr. X bize
V ort orann, yani hz oranmz verdiine gre X'i bundan sonra hz V maks

deikeni olarak tanmlayabiliriz. X'e verdiimiz deer arttka PWM'deki 1 sresi artacak ve bu art da beraberinde motora uygulanan ortalama voltaj ykselterek motorun hzn arttracaktr. Artk uygulamamzda kullanacamz PWM algoritmasnn sonuna geldik. En son yazdmz algoritma 2 PWM deeri hari tm PWM'larda sorunsuz alacaktr. PWM oran 0 veya 100 olduunda algoritmada sorun olmamas iin bu iki durum iin zel ekleme yapmalyz.

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

Motor 1 sayacn 1 azalt

Saya 0 m?

Hayr

Dier lemler (birim sre)

Evet

Motor 1 k ne?

k = 0

k = 1 Motor 1 Sayac = 100 - Hz 1 = y Motor 1 Sayac = Hz 1 = x

Evet

Hz 1 = 100?

Hz 1 = 0?

Evet

Motor 1 kn 0 yap Hayr Hayr

Motor 1 kn 1 yap

Motor 1'i tersle

Bylelikle uygulamamzda PWM k retecek algoritmamz yazm olduk. Kesikli izgilerle belirtilen ksm motorlara bal olarak deien deikenleri deitirerek 2. ve 3. motor iin tekrarlayabiliriz. Makalenin buradan sonraki blmlerinde kesikli izgilerle belirtilen ksm 3 motoru da kontrol ettiimizi kabul ederek motor kontrol olarak adlandracaz.

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

7-Segment Display'lerde Gsterim


7-segment display'lerin yaps ve de oklu 7-segment'lerin kullanm hakkndaki bilgilere http://robot.ee.hacettepe.edu.tr/v5.0/dosyalar/makaleler/9_geri_sayim_cihazi.pdf adresindeki makalemizden ulaabilirsiniz. Yzeysel olarak bahsetmemiz gerekirse, 7-segment display ierisinde 8 adet led bulunur. Bu led'lerin 7 tanesi ekranda saynn gsteriminde kullanlrken 1 tanesi ondalk noktas olarak kullanlr. Led'lerin iletime geerek k verebilmesi iin led'in anoduna +5V, katotuna 0V vermeniz gerekmektedir. 7-segment'lerde bulunan led'lerin bu iki bacandan birisi ortak balanmtr. rnein ortak katot 7-segment display ierisindeki led'lerin katot bacaklar ortaktr. Bu ortak bacaa 0V verdiiniz zaman hangi led'e +5V verirseniz 7segment'in o ksm yanacaktr. oklu 7-segment kullanrken alan 7-segment'i ortak bacana verdiimiz voltaj ile deitirebiliriz. rnek olarak 3 tane ortak katotlu 7-segment dnn. Sadece ortak bacana 0V verdiimiz 7-segment'ler alacaktr. Dier 7-segmentler ise snk kalacaklardr. Yani programda yapacamz ey, 7-segment'te hangi say gsterilecekse o gsterime uygun bir ekilde 7-segment'in giri ularna +5V yada 0V vermek ve de alacak olan 7-segment'in ortak bacana 0V, dier 7-segmentlerin ortak bacana +5V vermek olacaktr. Bu ilem sra ile dier 7segment'lere de uygulanmaldr. Uygulamamzda 3 motorun hzlarn gstermek istiyoruz. Hz leini nceden 100 kabul ettiimiz iin her motorun hzn gsterebilmek iin 2'er adet 7-segment display'e ihtiyacmz olacaktr. Toplamda kullanacamz 7-segment says bylece 6 oldu.

Bu 7-segment'lere 0-5 aras sra ile numara verelim. Sra numaras hangi 7-segmenti altracamz ve hangi rakam yazdracamz belirtecek. Gstergeleri altrma srasnn 0dan 5e doru olduunu kabul edersek motor hznn nce onlar basama sonra da birler basama ekrana yazdrlacak demektir. Hazrlayacamz algoritmada hzlarn onlar basaman

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

ve birler basaman hesaplayacak ilemler de yapmalyz nk hz deikenimizde lek olarak 100 kullanmtk. Eer 1. motorun hz 67 gibi bir deerse, hazrlayacamz algoritma 0 nolu 7segment'te 6 rakamn, 1 nolu 7-segment'te 7 deerini gstermelidir. nce onlar basaman ekranda gstereceimiz iin bu say deerlerini her motorun onlar basaman gsterirken hesaplamamz bizim iin daha kolay, programmz iin daha kullanl olacaktr.

Motor Kontrol

Dier ilemler (birim sre 2) Gsterim sras hangisinde?

Birler basamanda

Onlar basamanda

Onlar ve birler basaman hesapla

Onlar basaman gstergeye yazdr

Birler basaman gstergeye yazdr

Sradaki 7-segment display'i aktif yap

Gsterge srasn 1 arttr

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

Bu algoritma iimizi grecektir ancak ok hzl bir ekilde gsterge srasn deitirirse saylar 7segment'lerde snk grnecektir. Ayn ekilde gsterge sras ok yava deiirse saylar 7segment'lerde sra ile grnecektir. Bu iki istemediimiz koulu ortadan kaldrmamz gerekiyor. lk koul iin motorda kullandmz yntemi kullanabiliriz. Bir saya yardm ile belli defa motor kontrol + dier ilemleri yaptktan sonra gsterge deiimini gerekletiririz. kinci koul iinse dier ilemler + motor kontrol kodlarnn ok uzun sren ilemler olmamas gerekmektedir. 4MHz ile alan mikrodenetleyicimizin 1 ilemi 1 sde yaptn dnecek olursak yaptmz uygulama zaten ok ksa srecektir. O halde yeni algoritmamz yazalm.

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

Motor Kontrol

Hayr Gsterge sayac 0 m?

Dier ilemler (birim sre)

Evet

Gsterim sras hangisinde?

Birler basamanda

Onlar basamanda

Onlar ve birler basaman hesapla

Onlar basaman gstergeye yazdr

Birler basaman gstergeye yazdr

Sradaki 7-segment display'i aktif yap

Gsterge srasn 1 arttr

Gsterge sayacna deer ata

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

Buton Kontrol
Gsterge algoritmamz da yazdmza gre geriye sadece dier ilemler diye tabir ettiimiz blmde hz butonlarn kontrol etmek kald. Hz butonlarn kontrol edeceiz, eer bir motorun hz arttr butonuna baslmsa ve o motorun hz zaten 100 deilse motorun hz deikenini arttracaz. Eer hz azalt butonuna baslmsa bu durumda da hzn 0 olup olmadn kontrol ettikten sonra hzn azaltacaz. Bu ilem bu kadar basit.

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

7-segment display'de gsterim

Hzn 0 veya 100 olup olmadn kontrol et

Hz arttr butonuna basld m?

Evet

Hayr Hz 100 m? Evet Motor Kontrol

Hz azalt butonuna basld m?

Evet

Hayr

Hz arttr Hayr

Hz 0 m?

Evet

Hayr

Hz azalt

nceki algoritmalarda yaptmz gibi buton kontrol aamasna da bir saya yerletirmeliyiz. Mikrodenetleycimiz ok hzl ilem yapt iin kullanc elini butondan ekemeden hz

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

deikenimiz 100e ulaabilir. Bu yzden bir saya yardmyla belirli srede bir butonlar kontrol edebiliriz. Bu sayac da ekledikten sonra programmzn algoritmasn bitirdik demektir. Algoritmamzla ilgili deinmemiz gereken ok nemli bir nokta daha var. Dikkat ederseniz dier ilemler olarak tabir ettiimiz ilemleri yani motor kontrol srasnda buton kontrol + 7-segment gsterim, 7-segment gsterim srasnda motor kontrol + buton kontrol, buton kontrol srasnda ise motor kontrol + 7-segment gsterim ilemlerini hep sabit sreli olarak kabul ettik ve programmz ona gre hazrladk. 7-segment gsterimde pek nemli olmasa da PWM k rettiimiz motor kontrol ilemlerinde zamanlama olduka nemlidir. Bu yzden hazrladmz program ana dngde 1 tur attnda her koulda ayn zaman harcamaldr. Bunun iin de kullandmz sayalar sfrlanp motor, gsterim, buton kontrol ilemlerine girse de girmese de ayn zamanda dngy tamamlayabilmesi iin gerekli yerlere gereken gecikme ilemlerini koymalyz. Bu gecikmelerin uzunluunu program yazdmz zaman kontrol edebiliriz.

Assembly Program
list #include p=16f877A <p16f877A.inc>

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ; PORTA motorlar, PORTB 7-segment, PORTC butonlar, PORTD 7-segment degisimi w_temp status_temp pclath_temp BUTONSAYACI KONTROLTEMP BUTONTEMP EQU HIZ1 EQU 0X23 HIZ2 EQU 0X24 HIZ3 EQU 0X25 M1SURESI EQU M2SURESI EQU M3SURESI EQU GOSTERGE_SIRASI BIRLER_BAS EQU ONLAR_BAS EQU GOSTERGE_SAYAC TEMP EQU 0X2D #DEFINE #DEFINE #DEFINE #DEFINE EQU EQU EQU EQU EQU 0X22 0x71 0x72 0x73 0X20 0X21

0X26 0X27 0X28 EQU 0X2A 0X2B EQU

0X29

0X2C

M1 PORTA, 0 M2 PORTA, 1 M3 PORTA, 2 HIZART1 PORTC, 0

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

#DEFINE #DEFINE #DEFINE #DEFINE #DEFINE ORG NOP goto ORG movwf movf movwf movf movwf

HIZAZ1 HIZART2 HIZAZ2 HIZART3 HIZAZ3 0x000

PORTC, PORTC, PORTC, PORTC, PORTC,

1 2 3 4 5

main 0x004 w_temp STATUS,w status_temp PCLATH,w pclath_temp

movf pclath_temp, w movwf PCLATH movf status_temp, w movwf STATUS swapf w_temp, f swapf w_temp, w retfie LUKAP ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW

PCL,F B'00111111' B'00000110' B'01011011' B'01001111' B'01100110' B'01101101' B'01111101' B'00000111' B'01111111' B'01101111' B'10000110'

; 10 ise 1. eklinde grlecek.

GOSTERGE_GECIKME_TAMAMLAMA MOVWF TEMP MOVLW D'245' ADDWF TEMP,F GOTO $+1 NOP

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

INCFSZ GOTO $-3 RETURN ONMIKROGECIKME MOVLW D'1' MOVWF 0X74 DECFSZ GOTO $-1 GOTO $+1 RETURN

TEMP

0X74

BIRLER_GECIKME MOVLW D'29' MOVWF TEMP DECFSZ TEMP GOTO $-1 GOTO BIRLER_GOSTER GOSTERGEYE_YAZDIR MOVWF TEMP

CLRF CLRF MOVLW SUBWF

ONLAR_BAS BIRLER_BAS D'10' TEMP, F

; ; ; ;

Bu altprograma girdiimizde her seferinde W'da bir hz deeri bulunacaktr. Bunu TEMP deikenine atyoruz. Gerekli deikenler sfrlanyor. ; ; ; ; ; ; ; ; ; ; ; W'ya 10 deerini verdik. TEMP'ten 10 deerini karp TEMP'in iine yazyoruz. PIC'in komutlar arasnda blme ilemi olmad iin karma ilemini kullanarak blme yapyoruz diyebiliriz. Ka karma ileminde sonu pozitifse bu bize hz deikenlerimizin birisinin onlar basaman verecek. Sonu negatif mi? Evet, 3 satr aadan devam et. Hayr, ONLAR_BAS deikenini bir artr.

BTFSS GOTO INCF GOTO ADDWF

STATUS, C $+3 ONLAR_BAS $-4 TEMP, W

MOVWF BIRLER_BAS

MOVFW ONLAR_BAS

; ; ; ; ; ; ; ; ; ;

Son ilemde a saysndan 10 karnca sonu negatif olmutu. Demek oluyor ki a says 10'dan kk yani bizim birler basamamz. TEMP'te bulunan negatif sayya W'da bulunan 10'u eklersek birler basaman buluruz. Birler basaman da BIRLER_BAS deikenine yazdk. Bu noktaya kadar gsterge hesaplamalarn yaptk. Grld gibi herhangi bir gsterme ilemi yaplmad. Sra ona geldi. W'ya onlar basaman attk ve 2 komut satr aa

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

; indik. CALL GOSTERGE_GECIKME_TAMAMLAMA MOVFW ONLAR_BAS GOTO $+2 BIRLER_GOSTER MOVFW BIRLER_BAS

; Eer onlar basaman W'ya atmsak program bu satr ; okumayacak. CALL LUKAP ; W'daki deer LUKAP tablosuna gnderildi. MOVWF PORTB ; LUKAP tablosundaki deeri PORTB'ye yazdrdk. GOTO GOSTERGEYE_DEVAM

KONTROL BCF BCF BTFSC BSF SUBLW BTFSC BSF

KONTROLTEMP, KONTROLTEMP, STATUS, Z KONTROLTEMP, D'100' STATUS, Z KONTROLTEMP,

0 1 1

; Deerler sfrland. ; Kontrole gonderilen hz deeri sfr m? ; Evet, KONTROLTEMP'in 1. bit'ini 1 yap. ; Hz'dan 100 kar ve sfr m diye kontrol et. ; Evet, KONTROLTEMP'in 0. bitini 1 yap. Yani hz ; 100'm

RETURN HIZBUTONKONTROL MOVFW HIZ1 CALL KONTROL BTFSC HIZART1

; HIZ1'i kontrole gnderiyoruz (kontrole baknz). ; HIZ1'i arttr butonu basl deilse 1 satr atla, ; baslysa aadaki komutu ile. BTFSC KONTROLTEMP, 0 ; HIZ1 100 m? 100 ise aadaki komutu ile, ; deilse bir satr atla. GOTO $+2 INCF HIZ1 ; HIZ1 100 ise bu komut ilenmeyecek. BTFSC HIZAZ1 BTFSC KONTROLTEMP,1 GOTO DECF MOVFW CALL BTFSC BTFSC GOTO INCF $+2 HIZ1 ; HIZ1'i azalt butonu basl m? ; HIZ1 sfr m? Sfrsa bir aadaki satr ; ile, deilse bir satr atla.

; HIZ1 sfrsa bu komut ilenmiyor.

HIZ2 KONTROL HIZART2 KONTROLTEMP, 0 $+2 HIZ2

BTFSC HIZAZ2

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

BTFSC KONTROLTEMP, 1 GOTO $+2 DECF HIZ2 MOVFW CALL BTFSC BTFSC GOTO INCF HIZ3 KONTROL HIZART3 KONTROLTEMP,0 $+2 HIZ3

BTFSC HIZAZ3 BTFSC KONTROLTEMP,1 GOTO $+2 DECF HIZ3 NOP RETURN main BCF BCF CLRF CLRF CLRF BSF CLRF CLRF CLRF MOVLW MOVWF MOVLW MOVWF STATUS, RP0 STATUS, RP1 PORTA PORTB PORTC ; Portlar sfrland. STATUS, RP0 TRISA TRISB TRISD D'255' TRISC ; Gerekli ynlendirmeler yapld. B'0111' ADCON1 ; PORTA varsaylan olarak analog giri olarak ; ayarl. PORTA'y k yaptktan sonra emn olmak ; iin A/D modln kapattk. STATUS, RP0 ADCON0, 0

BCF BCF

MOVLW D'32' MOVWF PORTD MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF D'6' TEMP H'23' FSR D'50' INDF

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

INCF FSR DECFSZ GOTO $-4 MOVLW MOVWF MOVLW MOVWF CLRF CLRF CLRF

TEMP ; Pepee birka deikene ayn deeri atamak gerekiyordu ; FSR'yi de programda kullanm olalm dedim. D'250' GOSTERGE_SAYAC D'250' BUTONSAYACI GOSTERGE_SIRASI BIRLER_BAS ONLAR_BAS

ANADONGU ; ; ; ; ; Bu anadng her tamamlandnda her koulda eit sre gemektedir. Bu sre 228us (4MHz kristal iin)'dir. Biraz sonra greceiniz BUTONSAYACI deikeni ka 228 mikrosaniyede bir butonlar kontrol edeceimizi belirlemeye yarar. Daha sonra greceiniz GOSTERGE_SAYAC deikeni de benzer bir ilem gerekletirmektedir. DECFSZ BUTONSAYACI GOTO $+5 CALL HIZBUTONKONTROL ; (65 mikrosaniye) bu rutinde butonlar kontrol ; ediliyor. Aklamalar iin alt rutine baknz. MOVLW D'250' MOVWF BUTONSAYACI ; Sayaca tekrar deer verdik. GOTO $+7 ; Ana dngye devam ediyoruz. MOVLW D'5' ; Bu satra gelmesi demek butonlar kontrol etmemi ; olmamz demek. Ana dngnn her koulda eit sreyi ; vermesi iin buton kontrol ederek geirdiimiz sreyi ; butonlar kontrol etmediimiz zaman da harcamalyz. ; bu yzden bu noktaya gecikme koyuyoruz. MOVWF BUTONTEMP CALL ONMIKROGECIKME DECFSZ BUTONTEMP GOTO $-2 GOTO $+1 ; ; ; ; ; ; MOTOR RUTNLER Bir motorun PWM'n belirleyen motorun ak kalma ve kapal kalma sreleridir. Ak kalma sresi/tm sre bize motorun PWM'n verecektir. Ana dngnn bu noktaya srekli eit srede geleceini dnrsek ana dngnn att ka turda kapal, ka turda ak kald ayn ekilde bize PWM' verecektir. M1SURESI deikeni ana dng bu noktaya her geldiinde

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

; ; ; ; ; ;

bir azalyor ve ka tur sonra girmesini istemisek o noktada sfrlanp motoru 1 yada 0 yapyor. Motoru 1 veya 0 yaptktan sonra motorun ak ya da kapal kalma sresine gre tekrar M1SURESI degiskenine say atyor. Ana dng gerekli sayda tur attktan sonra yukardaki ilem tekrarlanyor. Programn bu ksmnn da her koulda eit srede ilenmesi gerekmektedir. Bunun iin gerekli yerlere gecikme yerletirdik.

MOTOR1ACKAPA DECFSZ M1SURESI GOTO MOTOR1ACKAPASONU

; Eer motorda deiiklik yaplmayacaksa burada ; harcayaca zaman geirmek zere gecikmeye ; gidecek. MOVFW HIZ1 ; Hz orann W'ya attk. BTFSC M1 ; Motorun durumunu kontrol ediyoruz. Eer motor aksa ; M1ACIKTA'ya kapalysa M1KAPALI satrlarna gidecek. GOTO M1ACIKTA M1KAPALI BTFSC STATUS, Z ; W'daki deeri yani hz orannn sfr olup olmadn ; kontrol ediyoruz. Eer sfrsa motoru ayoruz. ; Programn ilerleyen satrlarnda deilini ; alma (tersleme) ilemi yaptmz iin motoru ; ayoruz. 2 mikrosaniye sonra tekrar kapayacaz. BSF M1 ; Motorun hz oran 0'sa deilini alma ileminde motorun ; sfr kalmas iin bu noktada motoru atk. GOTO SON1 ; W'daki deerimiz HIZ1 iken SON1'e gidiyoruz. M1ACIKTA SUBLW D'100' ; Motorun hz orannn 100 olup olmadn kontrol ; ediyoruz. Hz oran 100 ise yukardaki aklamaya ; benzer bir ekilde deilini alma ilemi ncesi ; motoru kapyoruz. BTFSC STATUS, Z BCF M1 ; W'daki deerimiz 100-HIZ1 iken SON1'e gidiyoruz SON1 MOVWF M1SURESI ; W'daki deerimiz ya HIZ1'e yada 100-HIZ1'e eittir. ; Eer motorkapal ksmndan geliyorsak W'da HIZ1 (yani ; ak olma oran); motor aktan geliyorsak 100-HIZ1 ; (kapal olma oran) bulunuyor. Bu deerleri ; M1SURESI'ne atayarak motorun ana dngnn ka turunda ; 1 yada 0 olacan ayarlyoruz. MOVLW B'1' XORWF PORTA ; Motor 1'in bulunduu pin terslendi. GOTO MOTOR2ACKAPA MOTOR1ACKAPASONU CALL ONMIKROGECIKME ; Eer motorda deiiklik yaplmayacaksa yukarda ; harcayaca zaman burada harcayacak. NOP

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

MOTOR2ACKAPA DECFSZ M2SURESI GOTO MOTOR2ACKAPASONU MOVFW HIZ2 BTFSC M2 GOTO M2ACIKTA M2KAPALI BTFSC STATUS, Z BSF M2 GOTO SON2 M2ACIKTA SUBLW D'100' BTFSC STATUS, Z BCF M2 SON2 MOVWF M2SURESI MOVLW B'10' XORWF PORTA GOTO MOTOR3ACKAPA MOTOR2ACKAPASONU CALL ONMIKROGECIKME NOP MOTOR3ACKAPA DECFSZ M3SURESI GOTO MOTOR3ACKAPASONU MOVFW HIZ3 BTFSC M3 GOTO M3ACIKTA M3KAPALI BTFSC STATUS, Z BSF M3 GOTO SON3 M3ACIKTA SUBLW D'100' BTFSC STATUS, Z BCF M3 SON3 MOVWF M3SURESI MOVLW B'100' XORWF PORTA GOTO GOSTERGE MOTOR3ACKAPASONU CALL ONMIKROGECIKME NOP ; Tek tek atmz iin gstergelere numara verdik.

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

; ; ; ; ; ;

GOSTERGE_SIRASI = 0 ise HIZ1 onlar basama GOSTERGE_SIRASI = 1 ise HIZ1 birler basama GOSTERGE_SIRASI = 2 ise HIZ2 onlar basama GOSTERGE_SIRASI = 3 ise HIZ2 birler basama Yani GOSTERGE_SIRASI'nn 0. biti 0 ise onlar basama, 1 ise birler basama gsteriliyor. 1. ve 2. bit ise hangi motor olduunu belirliyor.

GOSTERGE DECFSZ

GOTO

BTFSC

GOTO

MOVFW

ADDWF

MOVFW GOTO MOVFW GOTO MOVLW ADDWF

MOVFW

; nce buton kontrolnde yaptmz gibi ; ana dngnn ka turda bir gsterge ; rutinine gireceini belirlemek iin ; GOSTERGE_SAYAC deikenini kullandk. GOSTERGE_GECIKMESI ; Gsterge ilemlerini yapmayacaksa burada ; harcayaca sreyi gidip gecikmede ; harcayacak. GOSTERGE_SIRASI, 0 ; Gsterge srasnn tek mi ift mi ; olduunu kontrol ediyoruz. Yukarda da ; denildii gibi tekse birler basama ; iftse onlar basama grntlenecek. BIRLER_GECIKME ; Gerekli hesaplamalar onlar basaman ; grntlerken yapld iin birler basaman ; grntlemek daha ksa sryor. O yzden birler ; basaman grntlemeden nce araya gecikme ; koyuyoruz. GOSTERGE_SIRASI ; Eer onlar basaman grntleyeceksek ; (yani gsterge sras iftse) gsterge srasn ; W'ya atyoruz. PCL ; Eer HIZ1 gorntlenecekse W'da 0, HIZ2 ise W'da 2, ; HIZ3 ise W'da 4 bulunacak. Pepee GOTO kullanmak ; yerine ADDWF PCL komutu ile gerekli dallandrma ; saland. HIZ1 GOSTERGEYE_YAZDIR ; HIZ1'i W'ya atayp yazdrma ilemine ; devam ediyoruz HIZ2 GOSTERGEYE_YAZDIR D'250' GOSTERGE_SIRASI ; Gsterge srasn sfrlyoruz diyebiliriz. ; nk u anda gsterge srasnda 4 deeri var ; ve HIZ3 onlar basaman gsteriyoruz. Ana ; dng tekrar gsterge rutinine girince ; (HIZ3'n birler basaman grntlemek iin) ; GOSTERGE_SIRASI deikeni 5 olacak ama bu ; noktada 250 eklersek gstergeye tekrar ; girdiinde 255 olacak ve bir sonraki sefere de ; sfrlanacak. HIZ3

GOSTERGE_SAYAC

HUNRobotX - Makaleler - Hz Ayarl oklu DC Motor Kontrol

GOTO

GOSTERGEYE_YAZDIR

; Program yukarlarda bulunan ; GOSTERGEYE_YAZDIR'dan devam etmektedir.

GOSTERGEYE_DEVAM RLF PORTD MOVFW PORTD BTFSC PORTD,6 MOVLW D'1' MOVWF PORTD MOVLW D'255' MOVWF GOSTERGE_SAYAC

; Ana dngnn ka turda gireceini belirleyen ; register (nceden aklamtk).

INCF GOTO

GOSTERGE_SIRASI ANADONGU

GOSTERGE_GECIKMESI NOP ; Program gstergeye girmemise vakit harcamak iin gecikme ; program. MOVLW D'36' MOVWF TEMP DECFSZ TEMP GOTO $-1 GOTO ANADONGU END