bunu yorumlayacak varmı?

Başlatan fractal, 23 Şubat 2009, 21:43:53

fractal

.step motor sürüyorum.hızlanma ve yavaşlama rampalarım aynı aynı sayıda puls  çıkıyor.tam 1 tur dönmek için hızlan ve yavaşla rampası arasında bekleme koyuyorum. bu arada max hızda gidiyorum.max hız yani max frekansım  ve adım oranım 3200.örneğin adım 0,5 tur dönmem gerekiyorsa.rampalarda 0.5 tur döndüğümü varsaydım. frekansımda pwm 5khz ise saniyede  5000/3200 tur atması lazım.ozaman 0.5 tur için ne kadar zaman geçmesini buluyorum.örneğin  diyelimki 200ms.
ama gerçekte bu 200 ms tutumuyor.proteusta  3200 puls göre bu süreyi ayarklıyorum olmuyor.motor kayıyor.ama3204 puls yapınca 150 devir artırdım kaymadı.şimdi bu zamanı ben nasıl ayarlarım bu komut işleme zamnındamı oluyor.sadece araya delay_ms(xxx).diyorum.hadi 1 tur için yaptım.zamanı 2 katına çıkarıncada 2 tur atmıyor.yine deneyerek bulmak kalıyor...
Restantum cogniscutur Quantum deligutur

eLectronbLue

Konunun hakimi değilim ama edindiğim izlenime göre forumdaki üstadların sana garezi var, ya da problemi çözecek düzeyde değiller.Çünkü çok uzun süredir aynı konuyu farklı başlıklarla açıp duruyorsun ama bir allahın kulu bana mısın demiyor. Umarım aradığını bulursun...

fractal

aylardan beri bu konu üzerine çalışıyorum.bu işin olmayacağı yolların %90 buldum.sanırım biraz maddi kaygılar var.bu tür şeyler otomasyonun temel işlevlerini yerine getiriyor.düünün kendi pozisyon kontrol cihazınızı yaptınız.bununla okadar cok şey yapabilirsinizki.....cünkü bize gerekli olan bir çok linner hereket ve pozisyonlamayı yapmış olacağız.

birde iş aslında okadrda amatör bir olay değil.matematiksel modeller var.rampa için ve buna uygun mimari şeçmek lazım.çok şey bilmek gerekiyor.kendi cabamla ancak kartımı yapabildim.liner bir rampa geliştirebildim.yüksek rpm lere cıkamasamda deneyerek sabit devirlerde pozisyonlama yapabiliyorum.

proje bitince herkese inat tüm çalışmayı yayınlayacağım...
Restantum cogniscutur Quantum deligutur

erkan614

:)

plc al ve programla delta 28ss modeli 400ytl civarı birşey istediğin rampaları tek komutla yapıyor girş ve çıkışları nasıl yapıcam beslemem ne olucak diye hiç bir derdin kalmaz ve toplam 1 haftada projeni bitirirsin, ayrıca satan firma 6x8 telefon desteği veriyor ve çok da karlı çıkarsın, kendi yaptığın kartı da deltanın çıkış sinyallerini kopya ederek programını geliştirirsin en azından elinde sağlam bir referans olur hatta ileride rs 485 eklemen için hazır çalışan modulun olur kendi kartına eklerdin vs vs vs
ben ilk makine otomasyonumda telemecanique'in 1000ytl lik plc sini satın aldım ondan esinlenerek 20 girş 12 çıkışlı bi kart tasarlayıp panonun içine sakladım 2 sene oldu hala bi arıza çıkarmadı hatta mekaniği bozuldu elektroniği hala sağlam (arıza çıktı dediklerinde elektronik diye çok korkmuştum) şimdi o tlelmekanik plc çektyatın altında duruyo bakalım nolcak

problemin biraz hesap kitapla hallolucak gibi ama ne biliyim bi önceki başlığında yapiyim diye bi giriştim ama çözemedim enteresan
inşallah çözersin

fractal

konuya getirdiğin yaklaımlar için teşekkürler erkan614.şimdi tabi hareket kontol cihazı yada puls cıkışı olan herhangi bir ürün kullanabilirim.daha önceleri 6 eksen senskronize çalışan cok hassas pozisyonlama gereği olan sıçak tel cekmesi olan ,cok sayıda giriş çıkışı olan,dokunmatik ekran kontrollü bir makineyi omronun cj1m plc trajexia motion control ve HMI kullanarak yaptım.delte plc de kullandım.puls cıkışınıda.aslında benim bu tasarladığım sistemi 1.8 nt motor için sürücü artı besleme motor 400euro gibi bir fiyatı var.aslında olay inada bindi.bu adamlar yapmış.açtım baktım içindede bişey yok.plc kartımı yaptım süper çalılıyor.12 den fazla çıkış bi okadrda giriş var.ama şu puls ile step sürme de takıldım...
daha öncede şöylemiş olabilirim.ben iki noktası belli doğru denklemi kullanıyorum.rampa için.her 10ms kesme üretip frekansı buluyorum sonrada bu frekansa karşılık gelen PR2 değeri.
#int_timer3
void timer3_kesme()
{
set_timer3(53036);//kesme 10 ms ayarlandı

if((k==1)&&(x<x2)) {x=x+10;}//hızlanma rampası seçili
if(k==2) {x=x-10;}                  //yavaşlama rampası secili
    PR2=(625000/(y3*(x-x2)+y2))-1;
    setup_timer_2(T2_DIV_BY_16,PR2,1);
   
}

bunlarda hızlanma yavaşlama alt programlarım

void hızlanma_rampa_step()
{

  // k=1;

           
           setup_ccp2(CCP_PWM);
           set_pwm2_duty(2);
           
          setup_timer_2(T2_DIV_BY_16,255,1);
          setup_timer_3(T3_INTERNAL|T3_DIV_BY_8);
          set_timer3(53036);

    while(x<x2)
{
}
setup_timer_3 (T3_DISABLED);          
}


void yavaşlama_rampa_step()
{
k=2;
setup_timer_3(T3_INTERNAL|T3_DIV_BY_8);
          set_timer3(53036);
while(x>0)
{

}
       
         setup_timer_2(T2_DISABLED,0,1);
          setup_ccp2(off);
      //  output_low(pin_a5);        
           setup_timer_3 (T3_DISABLED);
             
         //  glcd_text57(40,50,durdu,1,on);
}


ana programda ise

hızlanma_rampa_step()
delay_ms(bekleme);
yavaşlama_rampa_step()


yapıyorum..ancak yukardaki bekleme süresiher tur için orantısız değişiyor.örneğin 1 tur için 200ms ise 2tur için 400ms olmuyor.rampada oluşan puls sayıları elle hesapladığım ve proteusta gördüklerim aynı.zaten hep aynı rampayı kullanıyorum.

mesela aşağıda 2 tur dönme için ayarladığım değerler.tur sayısı 2 olması gerekirken 5 oldu.kodları uzatıyorum protesutan float işlemlerde bazun sorun oluyor.acaba bu 4xpll de bir etkisi varmı....

 adim_orani=3200;
 adim_acisi=1.8;
 max_hiz=130;   //devir/dakika
 ilk_hiz=46;    //devir/dakika
 ivme=1.4;           //devir/sn^2 max.50
 rampa_z=300.0;    //ms
 tur_s=5;  //tur
 tur_bz=2.0*(ivme*(rampa_z/1000.0));//rampalar arası bekleme i
 tur_bz=tur_s-tur_bz;
 tur_bz=tur_bz*(60/max_hiz);
 tur_bz=tur_bz*1000; //ms yaptım
 ef=tur_bz+145;

eğer bu cözmler olmassa.daha matematiksel cözümler bulacağım.ama ben bu cihazı yapacağım.birde kullandığım 452 pic yerien başka birşey kullanmalıyım sanırım.hızlı kod işlesin dedim 40mhz yaptım ama.gördüğün gibi 46 devirden başlıyorum.birde bana kalırsa bu pwm modu piclerdeki bi halta yaramıyor.cözünürlüğü düşük.cünkü benim hesaplamalarımda çok sayıda ara PR2 değerler çıkıyor.ben onları yuvalarlıyorum.

...............................
....
.
Restantum cogniscutur Quantum deligutur

Salih

PWM yerine kendiniz kare dalga üretip yapsanız daha iyi olur gibime geliyor. Herhangi bir Tmr kesmesi kullanarak palsler üretilir. Palslerin arasındaki süre ile rampa ayarlanır. Palslerin sayısı ilede mesafe ayarlanır.
Kolay gelsin.

fractal

onuda düşündüm ama uygulamadım.diyelim ana işlemci 452 olsun 84 de pwm üretsin.port açıp kapama ile.ön yükleme değerleri hız ivme adım sayısı 84 e gönderilecek.oda port açma kapama ile pwm üretecek.aslında baka bir işlemci ile denedim.877 ile cok güzel rampa oluyor.adım sayısıda kolay hesaplanıyor.for yapmayı düşünmüştüm.n ile gidilecek adım sayısı formül ilede   n ci adımdaki bekleme zamanı hesaplanacaktı.ama olurmu bilmem.birde burda n tane adım atarken toplamda ne kadar zaman geçtiğini hesaplayanda bir bağlantı oluşturmak lazım..

for(n=0;n<=3200;n++)
{
output_high(pin_a0);
delay_ms(1);
output_low(pin_a0);
delay_ms(formül);

}
Restantum cogniscutur Quantum deligutur

Tagli

@salih'in dediği şekilde yaparsan ikinci bir PIC'e ihtiyaç kalacağını sanmıyorum. Gerçi rampa olayı nedir onu bilmiyorum ama normal bir PWM uygulamasında bacakları her açıp kapadığında bir sayacı azaltarak tam sayıyı kontrol edebilirsin. Rampa eğer tahmin ettiğim gibi motorun hız kontrolünü sağlayan bir sistemse (cahilliğimi bağışlayın), yani PWM'nin iş zamanı ile ilgiliyse, her PWM sinyali için iki değişken gerekecek, bir de ortak sabit değer. Mesela sabit değer 100 olsun. Başlangıçtaki iş zamanı %50 olacak ise sinyalin değişkeni 50 yapılır. Her PWM için bir sayaç olur, 100'den 0'a sayar. Kesmede bu sayaç kontrol değeri (başlangıçta 50 yaptığımız) ile karşılaştırılır. Büyükse bacak 1, küçükse 0 yapılır. İş zamanını değiştirmek için başlangıçta 50 olan bu değerle oynanır. Bu işlem zaman yönüyle ne kadar hassas olur ondan emin değilim. Durumu daha net görmek için kod ASM'de yazılabilir. Mesela sayma değeri 100 değil de 255 yapılarak karşılaştırma ve sıfırlama işlemlerinden kurtulunabilir ve birkaç us kazanılabilir, eğer bunun önemi varsa tabi.

Bu arada yukarda belirtmeyi unutmuşum; bu sayaçlar kesmeye her girişte 1 azaltılacak. Timer kesmesi olarak TMR2 kulanmak, daha esnek oluşu sebebiyle periyod ayarını kolaylaştıracağından tercih edilebilir.
Gökçe Tağlıoğlu

fractal

üretiğimiz pwm sinyalini yakalama kesmesi ile sayıp kaç puls gidilecekse ona ayarlayarak olurmu.hem yakalama hemde pwm modunu aynı anda çalışırmı?
Restantum cogniscutur Quantum deligutur

erkan614

pwm harici tip sinyal kabul ediyormu sürücü?
step dır mesela veya linedriver giriş gibi
ayrıca pwm ile hassas pozisyonlama yapabilmek için feedback lazım
herşeyden önce sürücünün bi datasheeti varsa ekle ki sinyali nereye veriyorsun bilelim,
datasheeti incele pic registerinde ccp ile ilgili olana bak eğer capture-pwm modu var ise yapabilirsin

fractal

step dir ile linedriver nedir?daha öncede duymuştum.sürücünün manuelini ekliyorum.bu sürücüyü aldığım kişi bana pwm sinyalimin high süresinin 5us geçmemesi gerektiğini söyledi.ben bunu bu manulede bulamadım...bende geri beslemeyi düşünüyorum.pwm den gönderdiğim puls leri yakalam kesmesi ile sayrsam.istediğim puls syısını göndermiş olurum.ama bu durumdada motorun o pulsı alıp almdığını nasıl anlarım?..

http://s1.dosya.tc/Manual_Sdlwd170vxxxx_r.0.2_GB.pdf.html
Restantum cogniscutur Quantum deligutur

erkan614

arkadaşım ne pwm'inden bahsediyorsun? bu öyle sürülmez pwm diye bişiy yok bu surucu için

girişler pals ve yön olarak line driver sayfa 16 da görüceksin nasıl birşey olduğunu  entegresi var onu kullanıcaksın aşşada açıklıycam öncesinyal tipini anlatıyim

step + ve - girişinden clock palsi uyguluycaksın dir +ve- ise yön yani in english direction kısaltması, bu giriş ilede verdiğin clock palsi kadar saat yönünde veya tersi yönünde dönmsini sağlarsın
sürüçün microstep bi sürücüdür 1/16 ustep modunda 1.8derecelik bir palsde motorun bir turu 200*16=3200 palsdir.
pin çıkışından  her bir pozitif kenar tetiklemesinde motorun 0.1125 derecelik bir konum değiştirmesi yapar vreceğin bu çıkan kenar palslerin sıklık zamanıda motorun devrini belirler, max 200khz lik bir pals girişi uygulayabilirsin bu tip bir motoru rampalı 1 tur döndürmek için 3 kademe uygulaman yeterli olabilir. yani 100 palsi 10khzde sonra 50 pals 50 khzde sonra bir 50 pals daha 100 khzde toplam 200 pals sonra 2800 pals 200khzde sonrada yavaşlama rampası hızalanmanın aynisi olarak uygularsan herhangi bir kayma olayı olucasgını zannetmiyorum tabi mekanik sistemi görmediğimden rampa olayını sen biraz değiştirirsin,
ama kesinlikle pwmle yapamazsın bu işi.

line driver konusuna gelince
önce entegre tavsiyesiolarak http://www.ortodoxism.ro/datasheets/texasinstruments/am26ls31.pdf çalışma mantığı ise 1 girişi ile iki çıkışı olan bi durumdur A1 girişi high iken X1 çıkışı High Y1 çıkışı LOW dur A1 girişi LOW iken X1 çıkışı low Y1 çıkışı Hİgh durumdadır.
bu iş için yapılmış entegreler vardır diferansiyel çalışır muadil devresini yapmaya kalkışma ben kendi denemelerimde hiç iyi sonuçlar almadım mutlaka bi falso veriyor.
seninkine benzer bi problemi ben servo sürücüde yaşadım işte başlık
https://www.picproje.org/index.php/topic,19706&highlight=line

fractal

aldığım yer bana pwm le sürebilirsin dedi.tekrardan okudum  yazıyor manulede line dirver ne olduğunu bilmediğin için pwm yormuşum.şimdi.bu entegri yada benzlerini bulabilirmiyim.birde bu entegre bağlantısı nasıl olucak.bu entegreyi işlemci ile nasıl kontrol edicem.yanlışmı anladım:şimdi puls çıkışımı bu entegrenin a1 girşine sonra x1 step artıya y1 de step - bağlıyacağım.?ozaman pwm sinyallerimi a1 mi vereceğim...
bu diferansiyel çalışır derken neyi kastediyorsun.?anlamadım.

konuya getirdiğin açıklıklar için çok teşekkürler...
Restantum cogniscutur Quantum deligutur

fractal

aklıma gelmişken pwm çıkışımı tersleyip ccp2 den versem yani..ccp1 +step ccp2 -step olsa  olurmu.line drive olurmu böyle...
Restantum cogniscutur Quantum deligutur

erkan614

Alıntı yapılan: "fractal"aklıma gelmişken pwm çıkışımı tersleyip ccp2 den versem yani..ccp1 +step ccp2 -step olsa  olurmu.line drive olurmu böyle...
olmaz ve olsa bile bence yapma entegresi ucuz ve bulunur birşeydir istanbul www.grupelektronik.com var kargo ile bulunduğun şehre postalarlar.
ayrıca illaki line driver surmiycem dersen pin çıkışını step- ucuna bağla step+ girişini ise vcc ye bağla her sıfır verdiğinde bir yukselen kenear oluşturmuş olursun manuelindeki npn bağlantı şekli

gelgelegim pwm işlemine, istersen pwm verebilirsin çok da güzel olur pwm pwm sürersin motor sana mutlaka bir hareket yapar, ama bu hareket hoşuna gidermi gitmezmi bilemem :lol:

bak hemşerim hernekadar trabzon sürmeneli de olsam doğum yerim giresun piraziz yani doğduğum yerin yerlisinin (yani senin) zorluk çekmesini istemem bırak şu pwm'i bu iş için yapman gereken pwm üretmek değil, rahat rahat clock palsi ver de sürücüde adam akıllı verdiğin komutları icra etsin hem yakalama gibi bi derdinde olmaz

ee hadi sana kolay gelsin