Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

motor hızı sabitleme

Başlatan helloworld, 07 Ekim 2014, 04:00:25

helloworld

merhaba arkadaşlar.ismim URAL.pic i yeni öğrenmeye başladım.EEM 4.sınıf ögrencisiyim.
sizden fikir almak istiyorum.yardımcı olursanız çok memnun olurum.
(CCS C ile)
12v motor ve dinamo arasına şaft bağlayacaz.motoru döndürücez dinamodan analog çıkışı alıp pic e aktarıcaz.
yapmak istenen motor belli bi hızda dönerken şaft a iki parmagımızla dokunup yüke bindiricez ve motor voltajını arttırıp hızını koruyucak.
ve sonra parmagımızı çektiğimizde tekrar eski voltajına (ve eski hızına) geri dönücek.(pid kısmı da var ona da hoca yardımcı olucak )


sizden istediğim şu; nasıl yapılır? burada neleri öğrenmem gerek(pwm vs.)? hangi pic en uygunu? adc kısmı ? önemli kodları?
yukarıdaki sorulara cevap.

bilgi paylaşılınca güzel.değerli yorumlarınızı desteğinizi bekliyorum.şimdiden teşekkür ederim :)

Erol YILMAZ

Su devreyi kurmaniz lazim.
https://www.picproje.org/index.php/topic,55577.msg426552.html#msg426552

Pic kullanacaksan pic16 olmasin. En azından 18 olsun.

helloworld

bana pwm kısmı da lazım aslında.serdar çiçek 'in kitabında sadece motoru ileri geri ve hızlı stop olarak anlatmış.
ancak ben motorun hızını ayarlamak istiyorum.kodları nasıl olur acaba?

sadogan

#3
CCS de pwm kurmayı biliyormusun.

mesaj birleştirme:: 07 Ekim 2014, 16:28:15

void main()
{
  ///////// PWM ///////////// 
      setup_timer_2(T2_DIV_BY_1,255,1);
      setup_CCP1(CCP_PWM);
      setup_CCP2(CCP_OFF); 
	 set_pwm1_duty(0);	 
///////////////////////////////////// 
	while(true)
	{
	  unsigned int16 pmw_val;
          
          set_pwm1_duty(pmw_val);	
	}  	
}

pwm_val degişkeni 0 ila 1023 arasında bir değer olacak.
bu değer ile motorun hızını ayarlayacaksın.

helloworld

yeni yeni çalısıyorum.fakat kafam çok karıştı.pwm ile motorun hızı nasıl sabit olucak hiç anlamadım.parmakla biraz bastırdıgımda voltajı arttırıcam da nasıl?
sinirlerim bozuldu ya :D

HexfeT

Motor boşta ya da sabit bir yük altında dönüyorsa pwm değerine göre devir sabit kalabilir, fakat yüke bindiğinde devir düşecektir. Düşen devirin telafi edilmesi için motor hızının mcu ya geribildirimi ve pwm genişliğinin istenen sabit devir sayısına kadar otomatik arttırılması gerekiyor, aynı şekilde yük ortadan kalkınca azaltılması.

helloworld

Alıntı yapılan: HexfeT - 07 Ekim 2014, 16:54:58
Motor boşta ya da sabit bir yük altında dönüyorsa pwm değerine göre devir sabit kalabilir, fakat yüke bindiğinde devir düşecektir. Düşen devirin telafi edilmesi için motor hızının mcu ya geribildirimi ve pwm genişliğinin istenen sabit devir sayısına kadar otomatik arttırılması gerekiyor, aynı şekilde yük ortadan kalkınca azaltılması.

sanırım burada da adc işe giriyor.dinamodan pic e bi bağlantı yapmamız gerek.buradan da adc ile analog bilgiyi digital e çevirip yükte ya da boşta oldugunu haber vermemiz gerekiyor.bu kısımları kafamda çok iyi tarif edebiliyorum fakat kod kısımlarında iptal oluyorum.

LukeSkywalker

Alıntı yapılan: helloworld - 07 Ekim 2014, 04:00:25
12v motor ve dinamo arasına şaft bağlayacaz.motoru döndürücez dinamodan analog çıkışı alıp pic e aktarıcaz.

Bu çok sağlıklı bir devir ölçme yöntemi değil. Ben sizin yerinizde olsam bir encoder veya hız ölçebilen bir düzenek kurardım.

fbkaya

Alıntı yapılan: Allegro - 07 Ekim 2014, 12:30:30
Su devreyi kurmaniz lazim.
https://www.picproje.org/index.php/topic,55577.msg426552.html#msg426552

Pic kullanacaksan pic16 olmasin. En azından 18 olsun.
Neden 18f serisini önerdiniz hocam ?

helloworld

Alıntı yapılan: LukeSkywalker - 07 Ekim 2014, 17:29:50
Bu çok sağlıklı bir devir ölçme yöntemi değil. Ben sizin yerinizde olsam bir encoder veya hız ölçebilen bir düzenek kurardım.

hocam şu an baktım da dediğiniz çok daha mantıklı.encoder i tercih edicem.kafamda yavaş yavaş birşeyler oluşuyor.gerçekten.bir de moderatöreler yazdıklarımı onaylasa daha hızlı ulaşıp daha seri haberleşicez ama onay bekliyorum :D

xoom

Alıntı yapılan: HexfeT - 07 Ekim 2014, 16:54:58
Motor boşta ya da sabit bir yük altında dönüyorsa pwm değerine göre devir sabit kalabilir, fakat yüke bindiğinde devir düşecektir. Düşen devirin telafi edilmesi için motor hızının mcu ya geribildirimi ve pwm genişliğinin istenen sabit devir sayısına kadar otomatik arttırılması gerekiyor, aynı şekilde yük ortadan kalkınca azaltılması.
Hocam motor'un o anki devir bilgisini siz nasıl bir yöntemle pic'e bildirirsiniz ?

helloworld

hiç c de yazıp isis de bunu çizebilecek olan yok mu aramızda? rica ediyorum yardımcı olun arkadaşlar. ???

hasankara

hall sensörünü araştırabilirsin. şöyle ki; 3 bacaklı olan ve bilindik transistör gibi bir kılıfı olan hall sensörünün dijital yada analog özelliğine göre bir seçim yapabilirsin. çalışması ise; üzerinde oluşan manyetik alana göre çıkış verir. analog ise manyetik alan değiştikçe analog gerilim çıkışı verir. dijital ise belirli bir manyetik alan seviyesi (eşik değeri) ne göre çıkışı ya besleme high yada besleme low verir.

basit bir bilgilendirmenin ardından bu komponenti motor devir sayısını ölçmek için nasıl kullanırız? bu sensörü motorun dönen bölgesine yakın bir şekilde sabitlenir (sensör hareket etmeyecek). sabitlenen nokta motorun arkasından olabilir yada dönen bölgesine paralel olabilir.

sabitleme noktanın belirlemesini şöyle yapabilirsin; analog sensör beslemesini yapıp gerilim çıkışını osilaskopa bağlarsın. sensörü buraya sabitlesem nasıl bir çıkış elde ederim diye osilaskopta gerilim seviyesini gözetlersin. sinyal olarak, motoru döndürdükçe en yüksek vpp (tepeden tepeye) gerilim seviyesini nasıl elde edebilirsen bu nokta sabitlemek için iyi tercih olabilir. motoru elinle döndürerek bunu gözlemleyebilirsin. daha sonra elde ettiğin bu sinyali istediğin gibi kullanabilirsin. en önemlisi sinyalin frekansını hesaplatıp motorun dönüş hızını hesaplayabilirsin. bu hız parametresini otomatik kontrol de kullanabilirsin.

diğer bir durum, artık denemeye karar verdin ama analog mu yoksa dijital mi seçmeliyim diye düşünüyorsun. dijital hall sensörün çalışması için bir eşik seviyesinden bahsettik. bu eşik seviyesi senin için uyumlu olup olmadığına göre dijital sensör seçebilirsin. yeterliliğine karar vermek için ise, beslemesini yaptığın hall sensörünü motora yakın tüm olabilecek bölgelerine yakınlaştırıp motoru döndürmene rağmen çıkışında bir anahtarlama göremezsen bu sensör işine yaramaz ama baktın anahtarlama alabiliyorsun bu sefer direk bu sensörü kullanmak üzere sabitlersin. şu avantajı olur dijital sinyalin frekansını daha kolay hesaplarsın. analog sensör için ise bunu bir şekilde dijital olarak yorumlaman gerekir.

baktın analog sensör kullanman gerekti bunun üzerine sensörü sabitledikten sonra, analog sinyalinin çıkışına bir komparatör bağlayarak hassas bir şekilde eşik seviyesini kendine göre belirleyebileceğin kendi dijital çıkışını da elde edebilirsin. aklına adc gelmesin çünkü adc için fft tarzı bir algoritmaya ihtiyacın olur. bu tarz bir uygulama için çoğunlukla ihtiyaç duyulmaz.

helloworld

Alıntı yapılan: hasankara - 07 Ekim 2014, 20:59:57

sabitleme noktanın belirlemesini şöyle yapabilirsin; analog sensör beslemesini yapıp gerilim çıkışını osilaskopa bağlarsın. sensörü buraya sabitlesem nasıl bir çıkış elde ederim diye osilaskopta gerilim seviyesini gözetlersin. sinyal olarak, motoru döndürdükçe en yüksek vpp (tepeden tepeye) gerilim seviyesini nasıl elde edebilirsen bu nokta sabitlemek için iyi tercih olabilir. motoru elinle döndürerek bunu gözlemleyebilirsin. daha sonra elde ettiğin bu sinyali istediğin gibi kullanabilirsin. en önemlisi sinyalin frekansını hesaplatıp motorun dönüş hızını hesaplayabilirsin. bu hız parametresini otomatik kontrol de kullanabilirsin.


1.si bu sensör ugn3113 mü?
2.si motorun dönüş hızını hesapladım diyelim fakat bunu pic e digital olarak aktarmayı nasıl yapıcam.pic e,motorun yüke bindiğini nasıl bildiricem hocam? ???

hasankara



ugn3113 dijital olarak kullanabileceğin bir sensör. çıkışındaki bağlı olan transistör için bjt yada mosfet olabilir diyor ve low side anahtarlaması yapıyor. kullanabilmek için çıkış sinylini dirençle pull up yapman gerekebilir. dijital sensörü kullanman için söylediklerim bu sensör içinde geçerli.

hızını hesaplatmış olabilmek için bu sinyali denetleyici tarafından yorumlamış olman gerekiyor zaten. dijital sinyali denetleyiciye giriyorsun ve frekansı ölçüyorsun. periyot da hesaplayabilirsin. iki parametreden her hangi birisini, hız hesaplatmak için kullanabilirsin.



analog sensörlü devre için; comparatör yerine opamp kullanabilirsin. rail to rail olması gerekebilir. çünkü 0 volt yerine 1,1 volt gibi bir çıkış veren opamp kullanırsan denetleyici bunu high olarak algılayabilir. böyle bir opampla kuracağın devre bir işine yaramaz. lmv321 lmv324 işine yarayabilir. analog sensörle yapacağın devrenin sana olan avantajı, ayarlanabilir gerilim seviyesi (eşik seviye) sayesinde kendi motoruna göre istediğin seviyeyi ayarlayabilirsin. cs3503 hall sensörünü kullanabilirsin.

dijital sensör için verdiğim şemada pull up direnci taktım. her dijital sensörde bu direnci takmak zorunda olacağın anlamına gelmez. low side anahtarlamalı her sensör için bu tarz bir devreye ihtiyaç duyabilirsin. şimdi 3-4 tane model baktım hepsi low side anahtarlamalıydı.

frekansı hesapladıktan sonra gerisi yazılıma kalır. örnek vermek gerekirse; pwm %50 yaptın ama baktın ki motorun hızı beklediğinden daha düşük. bu noktada yük binmiş diyebilirsin. yük binip binmediğine karar vermek için bu algoritmayı kullanabilirsin. sen yük binip binmediğini kontrol etmekten ziyade motorun hızını biliyor olman motoru istediğin hız da tutman için yeterli olur. pid yerine daha basit algoritmalar da tercih edebilirsin denetleyicine daha az işlem yükü bindirmek için bunu araştırabilirsin. veya bu konuda ayrekten yardımcı olabiliriz yine. sen hızını önce bir hesapla otomatik kontrol kısmına sonra geçersin.