avatar_Mucit23

Sabit mesafede değişken hızlı ivmelenme Algoritması

Başlatan Mucit23, 08 Temmuz 2014, 18:16:51

Mucit23

Selamlar,

Enkoderli DC motor üzerinde yapmaya çalıştığım bir uygulama var. Motorun dönüş hızını PWM ile ayarlayabiliyorum. Nekadar döndüğünü ise Motor üzerine Tümleşik Encoderden gelen pals'leri sayarak tespit ediyorum. Elimde motora dair bu iki parametre var.

Yapmaya çalıştığım şeyi kısaca açıklayayım. Encoderden gelen puls'lara göre Timer değerim otomatikmen Motorun dönüş yönüne göre artıyor veya azalıyor. Burada Motor üzerinde sabit bir mesafe belirleyebiliyorum kendime. Örneğin başlangıçta timer değeri 0 iken motor 10 tur döndüğünde timer değerim 4000 oluyor.

4000 benim sabit mesafem. Bu mesafe içerisinde tamamlamak şartıyla motora kalkış rampası uygulamam gerekiyor. Yani bu 4000 puls'lık mesafe içerisinde belirli bir ivmelenme oranına göre PWM Duty değerini örneğin %80 Yapmam gerekiyor.

Bir grafik çizmeye çalıştım.

Grafikteki Ti süresi bu işi yapmak için geçen süre. Bu sürenin ne olduğu önemli değil. Önemli olan verilen ivmelenme hızına göre 4000puls'lık mesafe içerisinde yapılması.

Örneğin ben ivmelenme oranını 1 veriririm. Motor 0-4000 puls'luk mesafe içerisinde 0-%80 Duty oranına (Ti)3 saniyede çıkarken, İvmelenme oranını 5 verdiğimde (Ti)1 saniyede çıkabilmeli. Bu 3 saniye veya 1 saniye gibi değerlerin bi önemi yok.

4000puls'lık mesafe işi çok aklımı karıştırdı. Yani Belirli bir ivmelenme oranına göre 0'dan %80 Duty'ye çıkabilirim ama Bu işi nasıl 4000 puls'lık süre içerisinde tamamlayacağım? Çok kafam karıştı.

Bu iş için nasıl bir algoritma kurabilirim? Veya nasıl bir yöntem izleyebilirim?

Ete Hocam sizin fikrinizi almak isterim.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Maxim


ete

4000 puls süresi senin ip ucun oluyor. Burada pwm frekansı devreye girmeli. Diyelimki motora uygulayacağın frekans 5 khz. Bu durumda 1 puls peryodu =1000/5=200 us olacaktır.
O halde 4000 puls süresi 200 x 4000=800000 us=800 ms.
Bu durumda motoru sıfırdan %80 duty oranına 800 ms de çıkarman gerekiyor.  Gerisi döngü kurmaktan başka bir şey değil. Mesela 0 to 80 arası döngü kur her adımda hem 10 ms bekle hemde duty olarak döngü değişkenini kullan.

Ete

Mucit23

Hocam galiba sorumu yanlış anladınız.

Hocam motora kaç khz frekans uyguladığımızın veya motorun kaç rpm hızla döndüğünün hiçbir önemi yok.

4000puls dediğim şey enkoderden gelen sinyallerin toplamı. Örnek veriyorum diyelim motor 10 tur döndüğü zaman enkoderden gelen puls'ları sayan timerin değeri 4000 oluyor. Bu söylediğim rakamlar örnektir.

Bize burada referans olacak şey 4000 değeridir. Motora uyguladığımız pwm frekansının duty oranını arttırdığımız zaman motor dönmeye başlıyor. Dolayısıyla enkoderden kara dalga gelmeye başlıyor. Timer'in değeri artıyor.. Duty arttırma işlemini öyle bir yapmalıyımki Timerin değeri 4000 olduğunda Duty oranı %80 olsun. Buradaki duty arttırma hızınıda ivmelenme oranına göre yapmalıyım.

Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

Motor rampa ilişkisi benim yapmaya çalıştığım şekildedir. Anlattıkların ise farklı bir ilişkiyi açıklıyor. Ancak eksik şeyler var. 4000 rakamı referans olacak diyorsun ama onu yaratan şeyin motora bağlı encoderin vereceği palsler olacak da diyorsun. Ohalde kesinlikle encoderden ref bilgisi alman gerekecek. Pwm - frekans önemli değil diyorsun ama bunların hepsi motorun hızlanmasında etkin rol oynayan unsurlardır.  Aklıma öneri olarak verebileceğim son bir şey daha geliyor. O da şu,
Madem encoder pulslarını sayabiliyorsun. O halde 4000/80=50 eşitliğine uygun olarak encoderin her 50 değer saymasına karşılık duty değerini %1 artırırsın. Böylece encoder 4000 sayınca duty değeride %80 e ulaşmış olacaktır.
Burada tek sorun motora belirli bir duty oranı vermeyince motorun dönmeyeceğini ve encoderinde saymayacağıdır. Bu durumda duty oranını motoru en azından en düşük hızda çevirecek bir değere ayarlaman ve dönmesini sağlaman olacaktır. Tabiiki başka tersliklerde var. Düşük hızda 50 puls saymak için epeyce bir süre geçebilir buda beklenenden daha uzun bir rampa oluşmasına sebep olabilir.
Bu anlattıklarımda sana bir yol gösteremiyorsa bu konu benden ızak bir konu anlamına gelir. Yolunu kendin bulacaksın bu durumda.

Ete

Mucit23

Hocam dediklerinizi biraz anladım. Benim 4000 dediğim değeri bir set değeri olarak düşünebilirsiniz. Timerin değeri ise motor döndüğü sürece artıyor. Yani timerden okuduğumuz değer bizim referansımız olacak.

Amacım Timerin Değeri = 4000 olduğunda Duty oranı %80 olsun. Arada lineer bir artış yapmaya çalışıyorum.

Sizin dediğiniz 4000/80=50 bağıntısına göre her 50 puls'te %1 artım bir noktada işe yarar ama lineer bir artış olmayacak hocam. Sebebi ise Örneğin %10 duty açık iken 50 puls gelmesi örnek veriyorum 100ms sürerken, %70 duty verildiğinde motor dahada hızlanacağı için 50 puls gelmesi 10 ms'de gelecektir. Bu durumda gelen lineer olmayan bir artış söz konusu

Tahminimce aşağıdaki grafikteki gibi bir artım söz konusu olur.


Hocam farklı yöntemlerde deniyebiliriz. Yukarıdaki bahsettiğiniz yöntemde benim için tek sorun lineer bir artış olmaması. Bu konuda birşeyler yapabilirsek sanırım problemi çözebilirim.

Edit; Grafik düzenlendi
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

Lineer artış birinci önerimde, bunun dışında hiç bir şekilde lineer artış sağlayamazsın. Artışın lineer olması için eşit zaman diliminde eşit oran artışları olması lazım gelirki bunun karşılığı birinci önerimdir. Bir çok rampa uygulamam oldu hep birinci öneri esasına göre yapmışımdır. Literatürü incelersen farklı bir şeyde göremeyexeksin zaten.

Ete

Mucit23

Alıntı yapılan: ete - 08 Temmuz 2014, 20:22:15
4000 puls süresi senin ip ucun oluyor. Burada pwm frekansı devreye girmeli. Diyelimki motora uygulayacağın frekans 5 khz. Bu durumda 1 puls peryodu =1000/5=200 us olacaktır.
O halde 4000 puls süresi 200 x 4000=800000 us=800 ms.
Bu durumda motoru sıfırdan %80 duty oranına 800 ms de çıkarman gerekiyor.  Gerisi döngü kurmaktan başka bir şey değil. Mesela 0 to 80 arası döngü kur her adımda hem 10 ms bekle hemde duty olarak döngü değişkenini kullan.

Ete

Hocam bu bahsettiğiniz yöntemi anlayamadım. Motora uygulanan PWM frekansı ile encoderden gelen puls'lar arasında nasıl bir orantı olabilir?   ???

Benim enkoderimden gelen puls'ların periyodunu belirleyen(Yani frekansını) şey motorun devri değilmidir. Motorun devrini değiştiren parametre ise PWM sinyalinin duty oranı değilmidir? Atladığım bir konumu var acaba
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

Bir bAğlantı yada orantı yok. Lineer hızlanma istiyorsan belirli bir zaman diliminde yavaş yavaş pwm duty oranını artırman gerekir. Hem bunu yapıp hemde encoderden gelen puls sayısı 4000 olsun diyorsan işin zor olacak. Düşünsene başlangıçta hız düşük ve sayılan encoder pals adedi düşük olacak. Hız artmak zorunda bir şekilde ama arttıkça puls adedide  neredeyse logaritmik artacak. Duty %80 lere gelince puls adedi çok hızlı artacak ve 4000 rakamını nasıl koruyacaksın bilemiyorum.
Ete

Mucit23

Hocam anlaşılan lineer bir şekilde yapmak pek mümkün değil. Sanırım lineerlikten vazgeçeceğim. Aslında düşününce rampa olaylarında lineer bir artışa gerek yok. İlk kalkış yavaş olsun. Sonrasında hızlasın. Ben birkaç deneme yapayım bakalım nasıl bir sonuç alacağım.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Mucit23

#10
Hocam Dün gece sizin bahsettiğiniz yöntem üzerinde bayapı bir çalıştım Diyelim her 50 pulslık bir artış sonunda pwm duty değerini 1 arttırdım. encoderin artışı sırasında if(Encoder_GetCounter()%50==0) ise pwm_duty++ şeklinde bir sorgulama yaptım. Yani Encoder değerinin 50'ye bölümünden kalan 0 ise duty değerini 1 arttır dedim. Motorda lineer bir artış olmadığı için ilk başlarda güzel çalıştı fakat motor hızlandığı için enkoderden gelen pulslar atlanmaya başladı. Yani 72Mhz'de çalışan işlemcim yukarıdaki kodu çalıştırma hızı enkoderin artış hızına yetişemedi.  :o Bu konuyu eledim. Belki önceki okumayla son okuma arasında ne kadarlık bir artış olduğu bulunup daha sonra bu artışa göre pwm duty oranı arttırılabilir. Oda nasıl olur hiç düşünmedim. Çok zor gibi.

Farklı birşeyler düşünüyorum.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Powered by EzPortal