motor kalkış ve duruş rampalama hesabı

Başlatan skara1214, 23 Kasım 2012, 17:07:11

skara1214

motorlarda(step,dc,brushless v.s) başlangıç ve duruş  rampalaması nasıl hesaplanır?yani 1 m/s hızla giden 3 kiloluk bir nesneyi ne kadar mesafede  durdurabilirim,yada 1 metre sonra durmasını istiyorsam 1 metre kalaya kadar nasıl bir hıza ayarlamalıyım(encoderdan hız verisi okuduğumuzu düşünürsek)?buna göre pwm duty cyclı değiştiren bir algoritma yazmak istiyorum.Tecrübeleriniz haricinde dökümanda önerebilirseniz çok faydalı olur.
Herkes ölür ama herkes gerçekten yaşamaz

galenga

   Kolay gelsin öncelikle. Çok fazla tecrübem yok fakat otomasyon konusundan örnek verecek olursak , öncelikle kullanacağınız motorun fren gücüne , kalkış ve yavaşlama değerleri sizin sınırlamanız olacaktır. Verdiğiniz değerlerde ki yanılmıyorsam motorun cismi durdurma mesafesi ancak motorun demin dediğim değerlerinin hesabı ile olur ama tabiki üst sınır alt sınırı illa bilmenize gerek yok belirli bir yavaşlatma rampa değerini bilseniz kafi . Genelde bu konulardaki uygulamalar yapılırken biraz karadüzen bir yol izleniyor da ondan . Ayrıca 1 metre kala durduracağınız cismin bu son 1 metrelik mesafede sabit bir hız oranıyla mı yavaşlıyacağını yoksa , atıyorum yolun % 75 inde şu oranda yavaşla geri kalanında yavaşlamayı şu orana çıkar gibi oranları belirlemeniz lazım . Bu yazacağınız algoritmayı da etkleyecek çünkü .

skara1214

Sabit hızla durmak çok önemli değil yeterki dursun.Hızlanma ve yavaşlama değerleri benim asıl ulaşmak istediğim nokta yani bu motordan motora çok farklımıdır?Yani bir motor %100 hızdan %0 a ortalama ne kadar sürede inmelidir benim aradığım konu bu tecrübeli arkadaşlardan kaba bir hesap öğrenebilirsem elimdeki motorlara uydurabilirim.Örnek vermek gerekirse elimdeki bir sistem 68 cm lik yolda 44000 puls veriyor(quadrature) %100 pwm ile giderken %0 a indirdiğimde ortalama 5000 sonra duruyor(tabi kaç sn %100 ile gittiğide önemli).Bu  rakamları nasıl bir algoritmaya yerleştireceğim onu öğrenmeye çalışıyorum.
Herkes ölür ama herkes gerçekten yaşamaz

Okan AKÇA

#3
butür sistemlerde yapılması gereken redüktor kullanmaktır.
redüktor oranları istege göre yapılmaktadır.tabi burda yük oranıda onemlidir. redüktorü secerken buna göre secim yapmalısınız

servo motor kullanmadan 20cm  yürüyen ve pres baskı ile şekil veren makina yaptık.

pisayisi

Encoder dan sadece hız bilgisi değil dolayısı ile pozisyon bilgisi de okunmakta. Motorun durmasını istediğiniz encoder pozisyonu sizin hedefiniz olarak seçtiğiniz nihayi pozisyon olacak, bu durumda mevcut pozisyonunuzu bu nihayi pozisyona yaklaştırmak için pid ya da pd kontrol algoritması kullanarak istenilen pozisyonla mevcut pozisyon arasındaki hata terimi oranın da pwm duty i belirlenmesi gerekecek. Hedeften nekadar uzaksanız pwm duty o kadar yüksek olacak, sadece pd algoritması yada lineer p kontrolü de kullanabilirsiniz. Hedefe yaklaşıldıkca duty düşürülecek sistemin yanıtına göre kontrol sistemi için gerekli katsayıları tecrübe etmeniz gerekli. Her sistem her motor aynı sistem cevabına sahip değildir. P ya da  PD pozisyon kontrolü işinizi fazlası ile görecektir. Sadece lineer kontrol P kullanılırsa mevcut pozisyonla istenen pozisyon arasındaki farkı(hata terimi) alıp duty oranı belirlencek. Hata terimi sıfırsa DUTY sıfır olcak motor durmuş olcak...
Murat

skara1214

Alıntı yapılan: pisayisi - 23 Kasım 2012, 23:08:24
Encoder dan sadece hız bilgisi değil dolayısı ile pozisyon bilgisi de okunmakta. Motorun durmasını istediğiniz encoder pozisyonu sizin hedefiniz olarak seçtiğiniz nihayi pozisyon olacak, bu durumda mevcut pozisyonunuzu bu nihayi pozisyona yaklaştırmak için pid ya da pd kontrol algoritması kullanarak istenilen pozisyonla mevcut pozisyon arasındaki hata terimi oranın da pwm duty i belirlenmesi gerekecek. Hedeften nekadar uzaksanız pwm duty o kadar yüksek olacak, sadece pd algoritması yada lineer p kontrolü de kullanabilirsiniz. Hedefe yaklaşıldıkca duty düşürülecek sistemin yanıtına göre kontrol sistemi için gerekli katsayıları tecrübe etmeniz gerekli. Her sistem her motor aynı sistem cevabına sahip değildir. P ya da  PD pozisyon kontrolü işinizi fazlası ile görecektir. Sadece lineer kontrol P kullanılırsa mevcut pozisyonla istenen pozisyon arasındaki farkı(hata terimi) alıp duty oranı belirlencek. Hata terimi sıfırsa DUTY sıfır olcak motor durmuş olcak...
hocam aynı fikirdeyim böyle bir algoritma yapacağım fakat  tam pozisyona geldiğinde duty0 dediğimde durmayıp biraz daha hareket edebilir yani tam durma durumu nasıl olur onu kestiremiyorum hangi hızdayken duty0 dendiğinde 0 olur yada %100 de düzgün çalışır ama %10 a indiğimde motor hareket etmeyebilir.yoksa pd kullanacağım.p terimi pozisyona bağımlı  d terimide doğal olarak hız olacak
Herkes ölür ama herkes gerçekten yaşamaz

skara1214

son geldiğim nokta şöyle sistem(dc motor) ;
-3 khz ses çıkartıyor düşük dutylerde onu 10 khz ye çıkartınca ses sıkıntısı çok azaldı fakat hala azda olsa düşük dutylerde var .20 khz de hiç hareket etmiyor 10 khz ideal gibi görünüyor.
-sistemin hızını pozisyondan datasından hesapladım %100 dutyde 64 birim %10 dutyde 32 birim gidiyor ve %5 dutyde hiç gitmiyor.
-%10 dutyde giderken durdurunca 1000 aşıyor .Benimse +-200 birimlik seviyeye inmem gerekli.
-P denedim olmuyor,PI denedim olmuyor,PID denedim olmuyor bir türlü.
%10 a indikten sonra 1000 önceden dur diyorum 700 önce duruyor 1100 önce duruyor yani orantılı değl.
Önerebileceğiniz bir yol varmı?
Herkes ölür ama herkes gerçekten yaşamaz

z

Hata = Gitmek istediğin Hedef - Encoderın tanımladığı o anki pozisyon

PWM = K x PID(Hata)

Burada PID, PID tekniğini kullanan ve hata sinyalini işleyecek kontrol üniten.
K ise PıD çıkışını normalize eden devrene bağlı bir katsayı yada formülasyon.

Türev bileşenden vazgeç (çok gerekli değil) iyi ayarlanmış PI, uzun vadede sana 0 count hata ile hedef üzerinde durmayı garanti edecektir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

skara1214

hocam sistemin en yavaş gidebildiği hızda dahil 1000 hata var bunu nasıl aşacağım bunu kestiremedim.Dediğiniz gibi  k*pwm tam olarak olmuyor hocam.%10 unun altına inildiğinde system duruyor durmasın diye ben offset ekliyorum bu seferde gene yüksek hatalar çıkıyor ortaya.yani tam olarak %100 ile %0 duty aralığında çalışmıyor system.
Herkes ölür ama herkes gerçekten yaşamaz

z

#9
PID yi yapamamışsınız gibi görünüyor.

Eğer PID bir hataya maruzza bunu integre ederek motor voltajını (Duty'yi) artırır ve motor kımıldar.  Eğer hata var buna ragmen sistem kılını kımıldatamıyorsa kesinlikle algoritmalarınız yada kodlamanız hatalıdır. İntegral katsayınız düşüktür.

Çok düşük değerli hataların integrale katkısı yoktur vs vs.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

skara1214

sistemde anlayamadığım bir nokta ise yaylanarak hareket  bir bölgede rahat hareket ediyor başka bölgede zorlanarak yani bir sistem hareket başlıyorsa tüm yol boyunca sabit hızla gitmesi lazım değilmi?
Herkes ölür ama herkes gerçekten yaşamaz

z

Kodlamanızda sorun yoksa sisteminiz bozuculara maruz olabilir.

Sözkonusu bozucu, sisteme isteğiniz dahilinde olmayan sinyallerin girmesi yada sisteminizin homojen olmayan yapısı neden olabailir.

Örneğin raylı bir sistemde rayın belli bir mesafesindeki sürtünme değişimine neden olan fiziksel hatalar, redüktörde belli açılarda ortaya çıkan sıkışmalar bahsettiğiniz tipte yaylanmalara neden olur.

Overflow ve saturasyon gibi durumlara ait kodlamadan da kaynaklanabilir.   
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

skara1214

Alıntı yapılan: z - 25 Kasım 2012, 17:20:25
Overflow ve saturasyon gibi durumlara ait kodlamadan da kaynaklanabilir.   
overflow ve saturasyon durumunu hiç hesaba katmadan sabit duty cycleda(%50) işlem yapıyorum.bu yaylanmalar sabit dutycycla oluyor.Bir diğer şüphemde ccs c dili ve kullandığım 18f2431 pici ccs c kullanmama rağmen tüm kodları register düzeyinde yazıyorum hiç hazır kod kullanmıyorum.Fakat bazen 500 e kadar git diyorum sonra dur diyorum okuyorum 485 diyor mümkün olmaması gerekli ama oluyor acaba bir yerde hatamı yapıyorum anlamadım.Registerden dataları okurken nasıl bir yol izlemeliyim?register adresini tanımlayıp loop içinde içeriğni okuyorum.
Herkes ölür ama herkes gerçekten yaşamaz

SpeedyX

ivme, pozisyon, Jerk kontrol kullanmalısın. S-Curve profile ismiyle araştır. Sonucu paylaşırsan sevinirim.

skara1214

sistemde sabit hız,accelelaration la düzgün bir hale getrdim güzel stabil 20 khz de sessiz bir şekilde çalışıyor.FAKAT şimdi çok enteresan bir problem fark ettim.PİC18F2431 in qei si yanlış sayıyor encoder heds5500 500 cpr(datasheette belirttiği gibi 2.7 k pull up var).40000 e git deyince  40000 e gidiyor ama 40000 hep aynı yer değil gözle görülecek kadar fark var nasıl oluyor anlamıyorum.Kanallardan max  20 khz lik sinyal geliyor ben qei yi 625 khz de okuyorum ve girişede filtre (kendi filtrelemesi) uyguluyorum.Enteresan bir şekilde bazen hedefe giderken 40000 yerine 39955 gibi daha erken bir rakama gidiyor böyle birşeyin imkanı olmaması gerekli ama oluyor.
hiç qei yi kullanmadan direk olarak ;
a=input(pin_a4);
b=input(pin_a3);
f=0x00|ax<<3|bx<<2|a<<1|b;
if(f==1||f==7||f==0x0e||f==8)
counter++;
if(f==2||f==0x0b||f==0x0d||f==4)
counter--;
ax=a;
bx=b;

bu şekilde sistemi elimle hareket ettirince bu seferde bazen yukarı sayıyor bazen aşağı sayıyor.Sizce pic yavaşmı kalıyor 30f serisine geçsem problem çözülürmü?ve ben şu anda indexi kullanmıyorum onuda kullansam problem çözülürmü?
Herkes ölür ama herkes gerçekten yaşamaz