C

DC motor ile Açı Kontolü

Başlatan castle, 26 Mayıs 2013, 03:15:38

castle

Öncelikle herkese merhaba. Yapmak istediğim proje 16f877a , keypad , l293d , lcd  ve özellikle DC motor  ve pot kullanarak bir açı kontol sistemi kurmak. Normalde motoru döndürebiliyorum. keypad kullanmışlığımda var lcd ile. Fakat tüm bu sistemi yapmanın bir türlü içinden çıkamadım.

keypad ile üst üste 5 kere açı değeri gireceğiz. Daha sonra DC motorumuz bizim girdiğimiz 5 değeri dönmeye başlayacak sırası ile. -90 - 90 yada 0-180 derece şeklinde gösterebiliriz. Bu arada da girdiğimiz 5 değer lcd miz üzerinde görülecek. Kısaca mantık bu şekilde. Devre şeklini az çok tarif edecek olur isem :




Resimdeki gibidir. ( RESİM TEMSİLİDİR )

Kod ise CCS ile yazılmış olmalı. Tahminlerime göre de timer1 yada timer2 kullanacağız ama pot tan geri bildirim almayı ve motoru tam olarak orada durdurma kısmında büyük sıkıntı var.

internette de çok arama yaptım ama bu konuda net birşey bulamadım.

Neden DC motor derseniz proje mutlaka DC motorla olmalı. Yoksa step motor ile daha basit olabilirdi. Zaten amaç da aslında DC motoru servo gibi çalıştırmak. umarım buradan bir yardım alabilirim.

mustafa

motorlarda yön ve pozisyon kontrolü yapmak için en uygun motor servo motorlardır. Dc motorda bu işlemi yapabilmek için motorun o anki konumunu alman gerekir. Bunun için motora bir encoder bağlayarak gelen puls ları sayman ve motorun ne kadar hareket ettiğini ölçüm açı değerini hesaplaman gerekir. Yada step motor kullanarak dödürmen gereken açı değerini hesaplayıp ona göre puls göndererek bu işi yapabilirsin. Ama senin isteğine göre bence en zor yöntem dc motor kullanman olacaktır.

castle

#2
Malesefki yapmam gereken projede dc motor kullanimi sart. Malzemeler de saydigim gibi l293d pic lcd pot keypad. Bunun dsinda birsey kullanmak da yasak. Universite son sinif ogrencisiyim ve ders projem bu sekilde.
Ayrica motoru pwm ile yavaslatacagim onda sknti yok. Belli bir mikrar yavaslatabiliyoruz. Derecede tam tutmali diye birseyde yok +5-5 hata payi hakkimiz var. Diyelimki 45 girdik motor 60 a dondu bir anda. Iste bu kisimda pot bunu pic e iletmeli ve motor geri donmeli 45 e yakin biryerlere.

mustafa

O zaman aklıma şöyle bir şey geldi. Motor dönmeye başladı diyelim , örneğin 255 duty değerinde motor 1 turu 1 saniye de dönüyrosa bu 1 tur 360 derecedir. O halde ben motoru 0,25 saniye 255 duty değerinde döndürürsem 90 derecelik bir bir dönüş elde etmiş olurum.
http://tr.wikipedia.org/wiki/A%C3%A7%C4%B1sal_h%C4%B1z linkinde açısal hız formüllerine bakarsan eğer , buradan biraz hesap yapıp sanırım istediğin şeyi yapabilirsin.

F®T

ama dc motor uçlarına verdiğin voltaj değişirse ne açı kalır ne hesap.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

castle

mustafa yanıt için teşekkürler. pwm kullanacağım için açıkcası motorun hızını istediğim oranda belirleyebilirim. Yani açısal hız biraz da benim elimde diyebiliriz bu olayda. Fakat benim en büyük sorunum keypad e bir değer girdiğimizde motorun dönmesini sağlayacak kod için tıkanmam diyebiliriz. Yani tamam keypad e değer gireriz l293d ye giden bacaktan output veririz fln ama tıkanıp kalıyorum. Yani o kod hakkında yardımlarınıza ihtiyacım var.

mustafa

motorun rpm ini biliyorsan eğer ve pwm çözünürlüğü olarak 8 bit kullanacaksan ;

örneğin motor rmp i 100 olsun ;

255   -->>>>      100
x       -->>>>         y rpm

ise burda x olarak vereceğin pwm değeri

y*255/100 olur ki burada y değeri senin keypad den girdiğin değerdir. Sorduğun bu değilmiydi ?



castle

#7
#include<16F877A.h>
#fuses NOWDT,XT,PUT,NOPROTECT,BROWNOUT,NOLVP,NOCPD,NOWRT
#use delay(clock=4000000)
#use fast_io(B)
#use fast_io(C)
int1 Input1,Input2;
long duty=0;
void main() {
set_tris_b(0x00);
set_tris_c(0x00);
setup_timer_2(T2_DIV_BY_1,249,1);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);

Input1=1;
Input2=0;
output_bit(PIN_B1,Input1);
output_bit(PIN_B2,Input2);
for (;;) {
duty=600;
set_pwm1_duty (duty);
delay_ms(10000);
duty=800;
set_pwm1_duty (duty);
delay_ms(10000);
}
}


Şimdi örnek olarak bu kodda duyt=600 , duty=800 de pwm ayarlarıyla motorun hızlarıyla oynayabiliyorum.

Benim sorum direk olarak şu şekilde ki keypad den gelen değer kadar motoru döndürebilecek kod konusunda sıkıntım var. Yani keypad i input olarak göstereceğim l293d ye girdiğim değer output gidecek ve motor okadar saniye dönecek sadece.

Powered by EzPortal