Merhaba Arkadaşlar;
Ben bir step motorunu büyük açılarla değilde moturun en küçük açısında döndürmek istiyorum.
Yani 1 pulse 1 derece dersek örnek olarak.
360 pulse de tam tur dönmesini istiyorum.
Motor sinyal geldiginde devreye girecek girlen pulae kadar döenecek sonra durup tekrar sinyal geldiginde tekrar dönecek.
Tabi münkünse pulse ayarını dısarıdan arrtıralnilir olursa tadından yenmez.
Ben ileride geliştirerek ekran da gerekli ayarların ve bilgilerin gösterilmesinide yapıçagım ama ilk etapda dedigim gibi sadece programa yazılan pulse kadar döüp sinyal gelince tekrar ayni işlemi yapmadı yeterli
Şimdiden sağolun arkadaşlar
Step motorun hangi açılarla döneceği, motorun step açısı ve kullandığınız yazılım, donanımla ilgilidir. Örneğin adım açısı 15 derece olan bir motoru tam adım ile sürdüğünüzde her bir adımda 15 derece, yarım adımla sürdüğünüzde her bir adımda 7.5 derece, mikro adımla sürdüğünüzde ise her bir adımda çok daha küçük dereceler ile sürebilirsiniz. Önemli olan ihtiyacınızı belirleyip ona göre motor seçimîni yapıp yazılımınızı tasarlamanız gerekmektedir
http://urun.gittigidiyor.com/ev-elektronigi/a4988-step-motor-surucu-240826846?gclid=CjwKEAjw97K_BRCwmNTK26iM-hMSJABrkNtbEh9niK_hYt5Az9-xHe_49bKKNfAo1KTu2eEAdeH2YhoCkX3w_wcB&ggmktg=PaidSearch (http://urun.gittigidiyor.com/ev-elektronigi/a4988-step-motor-surucu-240826846?gclid=CjwKEAjw97K_BRCwmNTK26iM-hMSJABrkNtbEh9niK_hYt5Az9-xHe_49bKKNfAo1KTu2eEAdeH2YhoCkX3w_wcB&ggmktg=PaidSearch)*PLA*232249527*22324001847*58375852887*pla**pla-79002064407&mpch=ads&ggmktg1=PaidSearch*******&scxid=14489-145818-2357-0
Alıntı yapılan: burç tankal - 29 Eylül 2016, 13:21:56
Step motorun hangi açılarla döneceği, motorun step açısı ve kullandığınız yazılım, donanımla ilgilidir. Örneğin adım açısı 15 derece olan bir motoru tam adım ile sürdüğünüzde her bir adımda 15 derece, yarım adımla sürdüğünüzde her bir adımda 7.5 derece, mikro adımla sürdüğünüzde ise her bir adımda çok daha küçük dereceler ile sürebilirsiniz. Önemli olan ihtiyacınızı belirleyip ona göre motor seçimîni yapıp yazılımınızı tasarlamanız gerekmektedir
Aslinda dereceyle verdigim ornek htalı oldu sanırım kafa karıştırıyor
Benim ihtiyacim olan 1kere sinyal geldigin ayrladıgım adım sayısı kadar adım atması 10 adım dediysem 10 adım atıp tekrar sınyal gelmesını beklemesi
Bahsettiğiniz sinyali bir mikro denetleyiciye girerek, sinyal geldikten sonra motor sürücüsüne veya motora istediğiniz kadar pals gönderebilirsiniz. örneğin sinyal geldikten sonra step sürücüye 10 adet pals göndermek için:
if(sinyal)
{
for(i=0;i<10;i++)
{
motor=1;
delay_ms(1);
motor=0;
delay_ms(10)
}
}
Alıntı yapılan: burç tankal - 30 Eylül 2016, 02:59:49
Bahsettiğiniz sinyali bir mikro denetleyiciye girerek, sinyal geldikten sonra motor sürücüsüne veya motora istediğiniz kadar pals gönderebilirsiniz. örneğin sinyal geldikten sonra step sürücüye 10 adet pals göndermek için:
if(sinyal)
{
for(i=0;i<10;i++)
{
motor=1;
delay_ms(1);
motor=0;
delay_ms(10)
}
}
kodlar için sagol ama o kadar denememe rağmen senin for döngünü benim kodlarla birleştiremedim.
Kodlarım şöyle;
/******************************************************
PIC16F877 ile Step Motor Uygulaması (ULN2003A İle)
*******************************************************/
#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
// Giriş ve çıkış pinlerine isim atanıyor
#define buton_ileri pin_a0
int i=0,hiz=10;
const int yarim_adim[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09}; // Step motor yarım adım dönüş adımları
/********* ANA PROGRAM FONKSİYONU********/
void main ( )
{
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
setup_adc(ADC_OFF); // ADC birimi devre dışı
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı
output_b(0x00);
while(1) // Sonsuz döngü
{
if (input(buton_ileri)) // İLERİ Butonuna basıldı ise
{
output_b(yarim_adim
); // Step motor 1 adım ileri
while(input(buton_ileri));// Basılan tuş bırakılana kadar bekle
delay_ms(hiz); // Adımlar arası bekleme süresi
if (i==7) // i değişkeni 7 olunca i değeri -1 olsun
i=-1;
i++; // i değişkenini 1 arttır
}
}
}
Bunları nasıl birleştirebilirim
şu -1 olsun mantığı gereksiz olmuş sanki
if ile i++ satırını yer değiştirirsen
i yide 0 atarsan olur. bu şekilde i yi signed int tanımlaman gerekli
Bir yerde hata yapıyorumda bir türlü bulamadım rica etsem bi arkadaş su kodları birleştrirebilirmi
Öncelikle
output_b(yarim_adim);
ifadesinde portb'ye yarim_adim dizininin hangi elemanını gönderdiğinizi belirtmemişsiniz. Bu yüzden:
output_b(yarim_adim[i]);
olarak değiştirirsek her bir adımda motora uygun bilgi gönderilecektir.
for döngüsüne gelirsek, ilk olarak for için kullanacağımız s değişkeni
int s=0;
olarak tanımladıktan sonra:
while(1) // Sonsuz döngü
{
if (input(buton_ileri)) // İLERİ Butonuna basıldı ise
{
for(s=0;s<10;s++)
{
output_b(yarim_adim[i]); // Step motor 1 adım ileri
delay_ms(hiz); // Adımlar arası bekleme süresi
i++; // i değişkenini 1 arttır
if (i==7){i=0;} // i değişkeni 7 olunca i değeri 0 olsun
}
while(input(buton_ileri));// Basılan tuş bırakılana kadar bekle
}
}
Burç tankal kod için çok sağol.
Yanlız ben s yi 20 yapsam motor 21 22 tur dönüyor gerçi çok önemli değil.
Ama s değişkenini her seferinde pic yazdirmak zor oluyor bu değişkeni dişari alip 2 buyonla arttırıp azaltabilirmiyiz bide ekranda kaç olduğu nu görürsek süper olur .
Bu kodlarin üstüne bunlari eklemeniz münkünmüdür
Sağolun Arkadaşlar
Ama şimdi ne nereye bağlı, ekran dediğiniz nedir, bunları bilmeden ne yazayım ki şimdi. Lcd, glcd, tft, artık ne bağlayacaksanız devrenizi kurun, butonları takıp tanımlayın.en azından koda "hello world" kısmını ekleyin. Ondan sonra ilaveyi düzeltmeyi yaparız.