projeler · robot proje · 2008-11-29 · OTOKON Bilişim Ekibi

Fırçalı DC motorlar sürülürken belli bir voltaj değerinde sabit bir hız elde etmek istenirse, istenen değerin elde edilmesi için motora uygulanacak olan gerilimin hassas bir şekilde sürekli değiştirilmesi gerekir. Dolayısıyla bir sistemin motorun hızını sürekli ölçmesi, istenen hızla karşılaştırması ve buna göre gerilimi değiştirmesi gerekir. uC kullanarak yazılan basit bit koşullama programı, veya oransal kontrol ile bu iş otomatik olarak yapılıp sistemin referans değere ulaşması sağlanabilir. Ancak bu durum sürekli hal hatasına ve sistemin oturma süresinin uzamasına yol açabilir.

Koşullama tekniğiyle yazılan kod, motordan aldığı hız ölçümüne göre gerilimi değiştirecektir. Eğer motorun hızı istenilen değerden düşükse gerilimi arttıracak, yüksekse gerilimi azaltacak şekilde çalışan bir sistemde tasarlanan kontrolörün iyi olmaması durumunda, bu işlem sonsuza kadar gerilimi arttır/azalt şeklinde devam edecek ve motorun hızı istenilen değere hiçbir zaman oturamayacaktır.

Sürekli hal hatasına verilebilecek en basit örnek: Çizgi izleyen robotların düz çizgi üzerinde sinüs dalgası şeklinde ilerlemesi durumudur.

Sürekli hal hatası bulunmadığında, sistem istenen hız değerine çok yakın bir değere oturabilir. Ancak bu oturma süresi sadece koşullama ile çok uzun olmaktadır. Bu da hassas işlerin kısa sürede yapılamamasına sebep olur.

Bu noktada kontrolör devreye girer. Kontrolör sayesinde oranlanan değer en yüksek ve en düşük değerler olmak yerine ara değerler de olabilmektedir. Bu işlem de hatanın (mevcut değer ve referans değer arasındaki fark) uygun katsayılarla çarpılıp motora giriş olarak verilmesiyle yapılabilir. Uygun kontrolörün tasarlanması için öncelikle kontrolü yapılacak sistemin modelinin çıkartılması gerekir. Daha sonra bu modelden faydalanılarak sistem için bir kontrolör tasarlanabilir.

Sistem modeli, o sisteme verilen giriş karşılığında alınacak çıkışın önceden hesaplanabilmesini sağlayan bir fonksiyondur. Bu projede sisteme verilecek olan giriş gerilim, alınacak çıkış ise hızdır (rpm). Motora verilen farklı gerilim değerlerinde hız ölçülerek sistemin transfer fonksiyonu çıkarılır, bu da sistemin modelidir.

Projenin tamamlanması için öncelikle motorun sürülmesi ve hızının sürekli olarak sürülmesi, daha sonra motor modelinin çıkarılması, kontrolörün tasarlanması ve sistemin birleştirilmesi gerekmektedir.

Kullanılan siyah ve beyaz dilimlere sahip dairenin önüne yerleştirilecek bir adet CNY70 sensör kullanıldı ve sensörden gelen verileri kare dalga şeklinde alabilmek amacıyla kullanılan 74HC14 Schmitt-Trigger entegresinden oluşan basit bir devre tasarlandı. CNY70’in siyah ve beyaz renkler arasındaki farkı ayırdedebilmesinden faydalanılarak motor hızının ölçülmesi amaçlandı.

Motorun sabit durabilmesi, miline takılacak siyah-beyaz dairenin herhangi bir etkiye maruz kalmadan dönebilmesi ve zemine temas etmemesi amacıyla motorun üzerinde duracağı bir düzenek tasarlandı. Motorun istenen hızda dönmesini sağlamak amacıyla mikrodenetleyici üzerinden PWM dalgası üretildi. Mikrodenetleyicinin çıkışı motora doğrudan bağlandığında motor tüm akımı MCU üzerinden çekeceği için L293D motor sürücü entegresi kullanıldı. Üretilen PWM işaretinin periyodu ve duty-cycle değeri ayarlanarak motorun ilk aşamada tam olarak istediğimiz hızda dönmesi amaçlandı.

Motorun rpm cinsinden hızını kontrast sensörü yardımıyla hesaplayabilmek ve bir 7-segment display üzerinde gösterebilmek amacıyla mikrodenetleyiciden yararlanıldı. Bu projede PIC16F877A kullanıldı. PIC’in içine gömülen program ise C dilinde yazıldı. CNY70 sensörünün siyahtan beyaza geçişi aldıladığı noktalar arasındaki süreyi tutmak için MCU’nun Capture ve Timer1 kesmeleri kullanıldı. Capture modülünden elde edilen değerler program ile yapılan bir takım hesaplamalar sayesinde rpm cinsine dönüştürüldü ve 7-segment display üzerinde gösterildi. Gösterilen değer motor döndüğü sürece güncellenecek şekilde ayarlandı. Motorun modeli çıkartılırken Timer0 sayesinde örnekleme zamanı ayarlanarak bilgisayarla uC arasında seri haberleşme protokolü kullanıldı. Projenin son halinde ise Timer0 modülü kontrolör fonksiyonunu belirli aralıklarda devreye sokmak için kullanıldı. Motorun hız ayarı içinse PWM modülü kullanıldı.

Birinci aşamada bahsedildiği gibi motorun hız değerlerini gösteren program bu değerleri sürekli olarak güncellemekte ve tekrar göndermekteydi. Bu sayede sürekli olarak çok sayıda hız değeri elde edilebiliyordu. Sistem modelini elde edebilmek amacıyla giriş olarak birim basamak verildi ve elde edilen veriler sistem cevabı olarak düşünüldü. Elde edilen bu verilerin bir araya getirip incelenebilmesi amacıyla bilgisayara aktarılması gerekmektedir. Bu verileri bilgisayara aktarmak için bilgisayar ve miktordenetleyicinin bağlantısı seri port aracılığıyla kuruldu. Mikrodenetleyicinin UART modülü kullanıldı ve yazılan program sayesinde veriler bilgisayara aktarıldı. Seri haberleşme yoluyla bilgisayara aktarılan hız değerleri “Datalogger” programı kullanılarak bir araya getirildi bilgisayarda bir belgenin içerisine kaydedildi. Bilgisayara aktarılan ve bir dosyada tutlan veriler MATLAB programına aktarıldı. Verileri aktarmak amaıyla MATLAB’in “load()” komutu kullanıldı. Verileri daha rahat inceleyebilmek amacıyla grafiği çizdirildi ve bunun için MATLAB’in “plot()” komutu kullanıldı.

Herhangi bir sistemin kontrol edilebilmesi için öncelikle matematiksel modeli çıkartılmalı yani başka bir deyişle girişi ile çıkışı arasındaki ilişki matematiksel olarak ifade edilmelidir. Fırçalı DC motor, sürtünme ihmal edildiği zaman, giriş gerilim; çıkış ise açısal hız olacak şekilde birinci dereceden bir sistem olarak modellenebilir. Buradan yola çıkılarak elde edilen verilerden faydalanılarak buradaki K ve T değerleri bulunabilir ve kullanılan motorun sistem modeli elde edilebilir. Birim basamak girişi verilen sistemin çıkışından alınan veriler belirli bir noktaya kadar eğrisel bir grafik çizmekte ve daha sonra ise sabit kalmaktadır. Sabit kaldığı ilk değer K ve T değerlerini bulmak için kullanılabilir. Grafiğin oturmaya başladığı noktada ölçülen rpm değeri aslında fonksiyondaki K değeridir. T değerini bulmak için ise zamana bakılmalıdır. Grafiğin oturduğu noktadaki zaman değeri aslında 4T’ye karşılık gelmektedir. Fakat buradan elde edilen T değeri formülde direkt olarak kullanılamaz. Çünkü yapılan ölçümdeki zaman değeri aslında ölçüm sayısıdır. Örneğin o değer 100 ise bu 100‘üncü milisaniye değil; yapılan 100. ölçümdür. Bu değeri zamana çevirebilmek için, değerin örnekleme periyoduyla çarpılması gerekir. Böylece gerçek T değeri bulunmuş olur. Bu değerler transfer fonksiyonunda yerine yazıldığında kullanılan fırçalı DC motorun modeli elde edilmiş olur.

Kontrolörü tasarlayabilmek için öncelikle kontrol edilmesi istenen sistem için ne tip bir kontrolörün uygun olacağına karar verilmelidir. Bu durumda sistemin sürekli hal hatasını giderebilmek amacıyla P yani oransal bir kontrolör yeterli olmayacaktır. Bu sebepten dolayı bir integratör eklenerek PI kontrolör tasarlanması uygundur. PID kontrolör tasarlanarak süre hızlandırılabilir fakat PI kontrolör de yeterli olacaktır.

Kök eğrisinde kutup ve sıfırların yerleri değiştirilerek sistemin davranışı anlık olarak incelenmiş ve bu sayede sistemin oturma süresi ve aşımı istenilen şekilde ayarlanmıştır. Projede sistemin oturma süresi mümkün olduğunca kısa, aşım ise %5’in altında tutulmaya çalışılmıştır.

Yapılan ölçümler ve hesaplamalar sonucu aşağıdaki denklem çıkarıldı ve uC koduna gömüldü:

u(z) - u(z-1) = E(z)*0.9674 + E(z-1)

Denklemleri değişkenleri açıklamak adına, kontrolöre giren referans değeri ile ölçülen değer arasındaki fark E, yani hata olmaktadır. Kontrolörden çıkan değer ise u’yu temsil etmektedir. O halde “z = 1” için, E(0) bir önceki hata, E(1) mevcut hata, u(0) bir önceki kontrol işareti, u(1) mevcut kontrol işaretidir. Bu durumda motora uygulanacak olan gerilim u(1) işareti olmalıdır. Ancak en başta bahsedildiği gibi motora uygulanacak olan işaret gerilim olmasına rağmen u(1) işaretinin birimi rpm’dir. Bu yüzden arada birim dönüşümü yapılmalıdır. Bu dönüşüm PWM işareti kullanılarak yapılabilir. Bütün bunların ardından kontrolör tasarımı henüz bitmiş durumda değildir.

Kontrolör sistemi en hızlı şekilde referans değerine oturtmaya çalışacaktır. Bunun içinse anlık olarak vermeye çalıştığı gerilim değeri sistemin çalıştığı gerilim değerinin çok üzerinde olabilir. Bu değer sisteme verilemeyeceği için, kontrolör, kontrol işaretinin maksimum değerin üzerindeyken o değerde sabit kalmasını sağlamak için satüre edilmelidir. Minimum değer ise sıfır alınabilir. Ancak bu projede ölçüm yapılırken kullanılan Timer kesmeleri yüzünden motorun çok yavaş değerlerinde ölçüm bozulmaktadır. Bu sebeple minimum değer ölçümün bozulduğu rpm değerinin biraz üstünde ayarlanmıştır. Bu konuda çalışmalar devam etmektedir.

Kontrolör tasarımının tamamlanmasının ardından proje boyunca kullanılan tüm deney düzeneklerinin bir araya getirilmesi ve sabitlenmesi amaçlanmıştır. Deney seti esas olarak motorun hız ölçümünde kullanılan CNY70 sensörü, siyah-beyaz bölümlere ayrılmış disk, motorun kendisi ve hepsini bir arada tutan düzenekten oluşmaktadır.

Ölçümün hassas olarak yapılabilmesi için motorun ve dairenin çok düzgün bir biçimde sabitlenmesi gerekmektedir. Aksi takdirde istenilen değeri kontrolörün sağladığı değer ile karşılaştırmak zorlaşır. Bu sebeple deney düzeneği içerisinde motorun sabitlenmesine özellikle dikkat edilmiştir.