Potansiyometreden gelen değerleri işleme?

Başlatan mir_as82, 10 Eylül 2014, 08:11:08

mir_as82

Örneğin benim bir potansiyometrem var, ve bunu bir motor döndürüyor. Bende potansiyometrenin değer,ne bakarak pozisyonu kontrol etmek istiyorum.
Örneğin açı olsun. Potansiyometrem(270Kohm olsun rahat açıya dönüşsün diye bu değeri seçtim. Yani sistemin 0-270 derece dönüyor.) 0-270 K aralığında çalışıyor ve benim set ettiğim derecem 100 derece dolayısıyla potansiyometrenin 100K gösterip durmasını istiyorum . Bunu yapmak için nasıl bir algoritma gerekir? Dışarıdan gelen sinyale mi önlem almalıyım?MCU tarafında mı algoritma yazmalıyım? İkisini de mi yapmalıyım?

polleme

Servo motorun potansiyometrenin 100 derece olduğu konum için hangi darbe genişliği ile çalışacağını belirlemeniz gerek. Bunu tespit ettikten sonra 270 ve 0 derece için de servo darbe genişliğini tespit edin. Bundan sonra istenilen dereceye getirmek için darbe genişliğini hesaplayıp göndermeniz yeter. Her seferinde pot orta ucundan gerilimi ölçüp bir hata varsa düzeltebilirsiniz.

Maxim

bir sekilde potans degerini okumaniz lazim
yoksa disardan ek yaparak donus degerini tespit etmelisiniz.

mesela su an potas cikisi voltaj olarak okunabiliyormu?  0-5 volt yada direnc degeri?

sonrasinda egri uydurma formulu kullanilabilir
ornek 0 voltta 25 derece,  5 voltta 270 derece gibi.

ete

Aklından geçen motorun cinsini belirtmediğine göre DC motor düşünüyor olsan gerek. Dc motorlar direk pozisyon kontrolü için çok uygun değildir. Kullanmak için motor milinden hareket alan bir pot yada encoder olmadı gerekir. Aksi halde uygun konuma gelip gelmediğini ancak süre tutarak anlayabilirsinki buda pek tavsiye edilecek metod değildir. Motorun nadıl pozisyon kontrolü yaptığını bilirsen ona uygun bir pot algoritması geliştirilebilir. Örneğin mile bağlı bir pot var ise pozisyon verdiğin pot değeri ilemotor pot değerinin eşit olduğu konuma kadar dön diyebilirsin.
Mile bir encoder bağlı ise 0-270 derece aralığının motorda kaç pals'e denk geldiğini bulup pot değerinden kaç puls dönmesi gerektiğini hesaplayabilirsin.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

mir_as82

hocam dediğiniz gibi dc motor ile yapmaya çalışıyorum. Dc motorda bu tarz bir sistem için en optimum fayda sağlayacak optik encoder midir? Aslında yapmak istediğim motoru döndürüp potansiyometrenin çıkış gerilimini kontrol etmek. Yani motor pot u döndürecek, MCU bakacak ayarlanan gerilim ile potun verdiği çıkış gerilimi eşit motoru döndürmeyi bırakacak. 1-Burada motor orjinine nasıl gidecek nasıl orjinini bulacak?
2-Ayarlanan pozisyona giderken PID kullanılmalı galiba?
3-Gürültünün karışmaması veya egale edilmesi için ne yapılmalı?

ete

DC motor miline bağlı 270 derecelik bir pot ile pozisyon kontrolü endüstride sıklıkla kullanılan bir servo sistem modelidir. Bu konuda pek çok çalışmam oldu. Burada önemli olan sınır noktalarıdır. Motorun bu sınırları (0 derece ve 270 derece) aşmamasının sağlanmasıdır. Pot bir dişli yardımı ile çevrilerek sistem 0-45,  0-90 , 0-120 , 0-180, 0-270 , 0-360 derecelik konumlar arasında çalıştırılabilmektedir. Pot dış uçlarına GND ve +5V bağlanarak orta uçtan pozisyon değeri alınıp ADC girişinde okunarak pozisyon belirlenmelidir. Pozisyon bilgisi daima 0-1023 arasında bir değer olacaktır.
Motor sıfır noktasında (orijin) iken okuyacağınız ADC değeri size orijin değerini verecektir. Dolayısıyla motora pozisyon vermeden önce öncelikle motorun hangi konumda olduğunu bulmanız gerekir. Örnekle açıklayayım.
Orijin ADC değermiz 0 olsun. Konum bulmak amacı ile ADC okudun ve 680 buldun. Bu durumda sıfır noktasına ulaşmak için motor ters yönde döndürülmeli ve  sıfıra ulaşıncaya kadar döndürme devam etmelidir.
Konumun diyelimki Konum=260 okundu. Sen 800 konumuna gitmeek istiyorsun. O halde motor ileri döndürülecek ve KONUM=800 olana kadar dönme devam edecektir.

Bu kadar detay vermek bile gereksiz çok basit bir konu Zor olan motor milinden hareket alan Pot mekanizmasını yapmaktır.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

mir_as82

Hocam set ettiğim pot değeri 1000 olsun. Motor pot u devamlı bu noktada nasıl tutacak? Gürültü var , titreme var..Sormak istediğim asıl buydu aslında. Burada bir aralık mı tanımlıyorsunuz?Örneğin 990-1010 arası benim toleransımda deyip bu aralıktan çıkınca mı tekrar motor harekete geçiyor? Yoksa hep motor 1000 i görmek için devamlı dönüp duruyor mu?

ete

Hiç bir ADC değeri sabit değildir. Öncelikle motorun 1000 dediğin zaman hangi aralıklarda duruyor onu test etmelisin. Bu sana tanımlayacağın aralık limitlerini verir. Bunun için bir aralık belirle örneğin 980 - 1020 aralığı idealdir.
Sonra;
IF ADC>980 and ADC<1020  THEN MOTOR_DUR
şeklinde bir komut verip MOTOR_DUR isimli etiket altında ise durumada esas alınan ADC değerlerini eproma sıra ile kayıt et. En az 5 - 6 deneme yap ve sonuçta pici yerinden söküp eprodaki değerleri kontrol et. Orada aralığı göreceksin zaten.
Gerekirse aralığı daraltabilirsin 990-1010 veya 995 - 1005 giib aralıkları dene istersen
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

polleme

Aslında bu iş step motor ile yapılsa geribeslemeye, yani pot durumunu kontrol edip motoru buna göre sürmeye gerek kalmaz. Potun sınırlarını ve gerekli adım sayısını belirlersiniz, ondan sonra sadece adım sayarak pot pozisyonunu belirleyebilirsiniz.