Çizgi izleyende pwm kullanmak???

Başlatan sanitarium, 28 Mart 2007, 14:27:44

sanitarium

Öncelikle herkese merhaba, okulumuzdaki çizgi izleyen robo projesi için çalışmalara başlayınca karşıma sürekli şu sorun çıktı; örnek projeler ve anlatımlarda hep sensörlerden biri bi tarafa dönülmesiyle ilgili veri yollayınca motorlardan biri dursun diğeri dönmeye devam etsin şeklinde bi yapım yolu izlenmiş...(kusura bakmayın çok fazla teknik bilgim olmadığı için bu şekilde düz yazıyorum)
Bu şekilde yapılan bişeyi yapmak çok zor olmadığı gibi çok da bana bişey katacak gibi gelmedi ve arkadaşlarımla, bi viraj algıladığı zaman birini tam gaz devam ettirip(burdaki tam gazı düz yoldaki dönme hızı olarak belirtmek isterim) diğerini viraja göre yüzde bilmem kaç hızla dönmesini sağlamak üzere pici programlamak istedik. Bunu nasıl yapabileceğimizi okuldaki abilerimize sorduğumuzda pwmle olur o iş dediler ve fazla bilgi vermediler...
İşte bu bilgiden sonra internetten arama yaparken buraya geldim ve burda da çok fazla pwmle ilgili başlık açıldığını gördüm. Yalnız genellikle hep pwmi belli bi hızdan belli bi hıza (motor için ya da led için) belli bi sürede götürmek üzere kullanıldığını gördüm yani yani motoru yüzde elli hızla pice yeni bi input verene kadar sür gibi bi komut verilebilir mi algılayamadım... Bu konuda beni aydınlatırsanız sevinirim..
Bir de ikinci bi soru daha oluştu kafamda pic pwm üretirken başka iş yapamaz gibi bişeyler söylenmiş yani bu şu mu demek oluyo benim pwmim dönerken sensörlerden algılama işi yapmayı kesecek mi? ve arkadaşlarım 16f84a aldığı için hpwm'i de yok (önce araştırıp sonra malzeme almadığımız için oldu bu da) eğer algılama işi olmayacaksa hpwmle bu dediklerim olur mu (pici değiştiririz bu durumda).
Ha eğer bu yavaş döndürme hızlı döndürme işi pwmle olmayacaksa neyle olabilir bi ipucu verebilir misiniz?? (döküman verecekseniz türkçe ya da ingilizce olması sroun oluşturmaz biraz ingilizcem var)
şimdiden çok teşekkürler...

ete

PWM frekansını belirli sınırla içinde kendin belirlediğin bir kare dalga sinyalidir.  Bu sinyalinbir peryodu içinde hem HIGH seviye hemde LOW seviye vardır. Bu siyali bir NPN transistörün Beys ucuna verir  isen sinyalin HIGH seviyesi oranında transistörden çıkış alırsın. İşin temel mantığı budur.
Peryoda ait HIGH seviyesini artırdığın oranda transistörden alacağın güç artacaktır. Azalttığın oranda da azalacaktır. Bunu daha iyi anlayabilmen için maksimum HIGH seviyesinde maksimum voltaj, minimum HIGH seviyesinde minum voltaj alacaksın şeklinde izah edebilirim.
Bu durumda bir PIC yardımı ile oluşturduğun bu sinyal ile bir motora xxx devirde dön diyebilirsin. Bu devri istediğin gibi artırıp azaltabilirsin.
PWM sinyali bir kare dalga olduğuna göre muhtelif şekillerde üretilebilir. Şayet pic de yazdığın programla bu sinyali oluşturur isen zorunlu beklemeler nedeni ile programının diğer kısımları düzgün çalışmayabilir. Bu nedenle bazı piclerde bulunan HPWM özelliğinden yararlanmak daha uygun olacaktır.
HPWM sinyali ana programdan bağımsız olarak tamamen geri planda çalışır ve sizin programınızı en ufak bir şekilde etkilemez. Bu sinyalin frekansını ve duty (iş süresini) istediğiniz gibi ayarlayabilirsiniz.
Benzer bir çalışmayı HPWM özelliği olmayan piclerde kesme kullanarak da yapmak mümkündür.  Bunun için tespit edeceğiniz PWM frekansında 1 peryodun süresini 255'e bölerek elde edeceğiniz miktar kadar süredelerde kesme oluşturmanız gerekir. Kısaca 0-255 arasında olacak olan Duty değerinin 1 birim karşılığı süre de bir kesme oluşturmanız ve duty değeriniz kadar sürede clock palsinizi high  seviyesinde tutmanız ve kalan sürede (255-Duty) ise Low seviyede tutmanız yeterli olacaktır.
Daha kolay anlayasınız diye örneğimizi şöyle verebiliriz.
Diyelimki 1 peryot 255 ms. olsun. Bu durumda 1 ms de bir kesme oluşturmanız gerekir. Duty değeri 127 olunca yaklaşık %50 high ve %50 low seviyesi yaratmış olacaksınız . Çıkış seviyenizi High yaptıktan sonra 127 kesme sonunda sinyalinizi LOW'a çekmeniz halinde %50 Duty değeri olan bir kare dalgayaratmış olacaksınız. Bu sistemle programınız diğer işlemleri yaparken herhangi bir gecikmeye uğramaz. Ancak program içinde pause komutlarını kullanmamaya ve kullanırsanızda süresini 10 us den daha fazla vermemeye özen göstermeniz gerekir.

Elinizde iki ayrı motor olduğuna göre iki ayrı PWM sinyaline ihtiyacınız olacak. Bu durumda iki adet HPWM çıkışı olan 16F876 kullanmanızı öneririm. Yok illaki bu işi 16F84 ile yapacaksanız kesme yöntemi ile iki ayrı pinden iki ayrı PWM sinyali çıkarmanız gerekecek. Bunu aynı kesme programı ile yapabilirsiniz. Bütün yapacağınız her birine ait Duty değerini iki ayrı değişkende tutup değerlerinize göre high - low seviyeleriniz ayarlamak olacaktır.
Elinizde bulunan iki motoru bir adet L298 entegresi ile sürebilirsiniz. Data sheetini incelerseniz orada detay bulunmaktdaır. Bütün yapacağınız köprü girişlerine iki ayrı PWM sinyalini girmek olacaktır.

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

sanitarium

Çok teşekkürler bu bilgileri bulmak için çok uğraşmıştım ama bulamamıştım şimdi kafamda bişeyler şekillendi....

sanitarium

Ben tekrar bişey sormak istiyorum, yaptığımız devrede aynı anda iki sensörün de mesaj yollaması gibi bi durum da söz konusu olabilir böyle durumlar için de döngüler yazdım ve anladığım kadarıyla da bi pwm uygulaması yazdım ama 16f84a için pbp derle dediğimde addresses limit exceed gibi bi sorun verdi... Galiba belleğinden daha fazla şey yazmaya çalıştım o yüzden derleyici hata verdi...
yazdığım proyu buraya yazıyım da bi göz atın eğer mümkünse...
hem o sorunu nasıl çözerim bi bakarsınız hem de pwmi doğru yapabilmişmiyim bi göz atarsınız şimdiden teşekkürler :)
Yazdığım pbp dosyası
http://www.students.itu.edu.tr/~dikkulak/deneme.zipDENEME