PIC 16f877a veL298 N Motor Sürücüsü ile DC Motoru İleri Hareket Ettirmek

Başlatan MG33, 30 Ağustos 2021, 16:31:45

ete

L298 için bir modül kullandığını en baştan söyleseydin başka şekilde konuşurdum.
Modül kullandığına göre mutlaka modül üzerinde sensA ve SensB pinlerine uygun direnç bağlanmıştır yada direk GND ye bağlanmışlardır. Resimlere bakılırsa modül üzerinde bu işe uygun direnç yok sanırım bu uçlar direk GND ye bağlanmış dolayısıyla bir akım kontrolü yok ama açıklamalarda 2A den fazla akım çekmeyin şeklinde ikaz mevcut.

Modül'ü doğru kullandığından pek emin değilim. Elbette emin olabilmek için buraya bir bağlantı şemesı koyman iyi olurdu.
Her neyse ufak bir inceleme yapınca (farklı sitelerde aynı modül için daha iyi açıklamalar mevcut.) kimin nereye bağlanması gerektiği anlaşılıyor.
Modül üzerinde ön tarafta pinler mevcut. Her şeyden önce bu modülün 2 ayrı DC motora kumanda edebildiğini unutmamak gerekir. Bu nedenle 1 motor için açıklama vereceğim aynısını diğer motor içinde uygulayabilirsin.
Pinlerdin başıda (sol tarafta ENBA pini yer alıyor. Ancak bu pine birde Jumper takılmış. Jumper orada kalırsa A kanalı otomatik ve direk ENABLE sinyalini alıyor olacaktır. Enable ucunu işlemci ile kontrol edeyim dersen jumper sökülüp ENB_A pini işlemciye bağlanmalı ve motor çalışacağı zaman bu uca HIGH verilmelidir.
Enable pininin yanında IN1 ve IN2 pinleri mevcut bunlara 0-0, 1-0, 0-1 ve 1-1 gibi kombinasyon lojik değer verilerek motor hareket ettirilir. Motoru hareket ettireccek değerler 1-0 ve 0-1 kombinasyonlarıdır. Diğerleri motoru stop ettirecek değerlerdir.
Modül üzerinde giriş pinlerinin sol tarafında 3 li klemens mevcut. Bu klemensin en solda yer alan iki tanesi ana voltaj girişi  oluyor. Bu iki uçtan en soldaki +9-12V girişi oluyor. Ortadaki uç GND oluyor. sılaı pinlere yakın olanı ise +5V çıkışıdır. Bu ucdan işlemciye +5V verilmektedir. Ayrıca bir voltaj regülatörü kullanmaya gerek kalmıyor.
Yine kartın sol yan tarafında bir adet 2 li klemens bulunuyor ki bunada motor bağlanacaktır.

Şimdi diyelimki modüle açıklanan pinlerden 12V verdin. +5V tu ve GND den bir uç alarak onuda işlemciye bağladın. ENABLE_A (ENA) ucundaki jumperi sökmedin.
IN1 ve IN2 uçlarını işlemciye bağladın ve motor ucunada 12V' a dayanabilecek bir motor bağladın.
IN1=1 ve IN2=0 verdiğin zaman motorun bir yöne dönmesi gerekir.
ENA ucundaki jumperi söktün ve bucuda işlemciye bağladın diyelim. Bu durumda ENA=1 , IN1=1 ve IN2=0 vermen gerekir ki motor bir yöne dönebilsin. ENA=1, IN1=0 ve IN2=1 verdiğinde de motor diğer tarafa (ters) dönmesi gerekir.
Bu sonucu alamıyor isen o modülü bozmuşsun demektir bir başka modül alıp doğru bağlantı yaparak yeniden deneme yapmanı öneririm.

Arduino- Pic işlemcileri lojik seviye olarak aynı seviyeli çıkışlar üretirler. İşlemciyi 3V3 ile beslersen çıkışları HIGH olduğunda voltaj seviyesi 3V3 seviyesindedir. Yinede Lojik 5V ile çalışan girişleri rahatlıkla sürebilir bu çıkış. İŞlemci 5V ile çalışıyor ise ki bu modülde hazır 5V çıkış olduğundan burada işlemci için 5V giriş olduğunu kabul edeceğiz çıkış seviyeleri hep 5V dur ve sürmede sorun olmaz. Kısaca Arduino veya pic aynı lojik seviyelerle çalışır.
Sonuçta ya sen bu modülü doğru bağlamadın, yada modülü bağlarken yanlış pinlere voltaj vererek onu bozdun yada aldığında o modül bozuk idi. Dediğim şekilde bağlantı yapıp deneyerek kolaylıkla sorunu bulabilirsin.
Daha iyi modül açıklamalarını şu linklerde görebilirsin.

https://www.robotistan.com/l298n-voltaj-regulatorlu-cift-motor-surucu-karti?gclid=Cj0KCQjwnJaKBhDgARIsAHmvz6f19tgrdl3c3upIFMLT1ElUUcCAluR0Z6a-ixl3WZd1HBzRJ0YVUYIaAixLEALw_wcB

https://www.direnc.net/l298-dc-step-motor-surucu?gclid=Cj0KCQjwnJaKBhDgARIsAHmvz6fPOE_pyPullWrumq3IR5qbTJRquHe24x3RKBxYiAlMNFWOw_8Q5I0aAgKUEALw_wcB

Ete

MG33

Sağolun hallettim bir de son bir şey sormak istiyorum bir videoda gördüm, adam dediki pic le motor sürmek istiyorsanız, 16f877a nın kendini resetlememesi için, kapasitör bağlamaanız lazım demişti. Şimdi ben l298n 'e baktığımda zaten kapasitörleri var. Yani devreye kristalin bacaklarına bağladığım mercimek kapasitörlerden hariç bir kapasitör bağlamama gerek var mı ?

ete

Hemde ne kadar gerekli tahmin bile edemezsin. İşlemcinin besleme bacaklarına en yakın yere mümkünse direk besleme bacaklarına 100nf kapasitör bağlaman hayat kurtarır.

ete

alisumer

ete hocam baştan konuyu burada sorduğumdan devam ettiriyorum konu sahibinden özür bu başlıkta RC esc yapma ile ilgili size danışmıştım capture ile en hassas ölçümü alabilirsin demiştiniz mantığını kavradım da motoru sürmek için de hpwm full bridge kullanmayı da düşünüyordum iki sistemde aynı modülü kullanıyor sanırım aynı anda çalışmıyor değilmi? eğer anladığım gibi çalışmıyorsa bu capture yerine değişiklik kesmesini kullansam kesme içerisinde timeri manuel çalıştırsam diyorum ama kafa gene kısa devre  yaptı düşünüyorum gelen 0-2 ms yi ölçtüğü gibi aradaki 20 ms yi de ölçecek benim kafamdaki yapı henüz program yazmadım ilkönce kafamda oturtmaya iş akışı çıkarmaya çalışıyorum akış sırası hususunda fikrinize ihtiyacım var 
Hep meraktan

ete

16F877A data sheet'ine baktım. Capture için işlemci Timer-1 kullanıyor. PWM için ise Timer-2 yi kullanıyor. Bu durumda sorun olmaması gerekir. Programda aynı anda Timer-1 sayacını başka işlerde de kullanırsan sorun olabilir.
Ancak he riki işlemi yöneten CCP1CON ve CCP2CON registerlerine bakınca, registerin Capture içinmi yoksa PWM içinmi ayarlanacağına karar vermen gerekiyor. Bu şu demek CCP1 registerini Capture için ayarladığın zaman aynı registeri PWM için kullanamıyorsun.
BU durumda düşünmek gerekiyor. Full bridge sistemin şayet çift kanal PWM kullanacak ise bu işi Capture ile yapamazsın demektir. Tek kanal PWM ile yapabiliyor isen kanalın diğerini capture için kullanabilirsin.

Gelelim işin Timer ile çözülmesine. Değişiklik kesmesi ile kesmeye girdikten sonra sayacı maksimum ölçülecek zaman değerine göre kurarsan daha küçük zaman dilimlerinide aynı kurgu içinde ölçebilirsin. Belki çözünürlük yeterli gelmeyebilir. Ama sorun 0-2 ile 0-20 aralukları ise geleceğini düşünüyorum.

Sen yinede capture üzerine yoğunlaş derim.

Ete

alisumer

hocam f 690 kullanıyorum 877 boyut olarak da fiyat olarak ta çok pahalı .690 da ccp2con yok anladığım kadarıyla capture ile ölçüp sonra onu kapatıp pwm kurup falan diye giden bir yol görünüyor. sanırım bu donanımla değişiklik kesmesi hızlı olacak gibi diğer seçeneklerden.şöyle bir iş akışı düşünüyorum kesmeyi yükselende yakalayıp kesme  içinde tekrar  pin in yüksekmi düşükmü olduğunu kontrol ediyorum düşükse timer değerini değişkene yazıyorum timeri tekrar uygun değere kuruyor yükselen kenar kesmesini kurup kesmeden çıkıyorum. yüksek kenar yakalanmışsa zaten önceki kesmede timer ayarlandığından sadece düşen kenar yakalaması için kesmeyi ayarlayıp çıkıyorum .daha kısa bir algoritma mevcutmu bu şartlarda?
Hep meraktan

ete

İmkanlar kısıtlı olunca alan da daralıyor. Bu şekilde çalışmanın daha kısası olmaz sanırım.
Birde iki kesmeli sistemi deneyebilirsin. Tabiiki iki kesme arasında yeterli zaman olacak ise bu yapılabilir.
- Kesmeyi yükselen kenar için kur
- kesme oluşunca hemen timer'ı sıfırla ve bu seferde düşen kenar için kesme kurup kesmeden çık
- İki kesmeyi bir birinden ayırt etmek için bir bit değişkeni kullan ve onu set edip çık.
- yeniden kesme oluştuğunda ya set edilen değişkene bakıp set ise timer değerini alıp çık kesmeden timer değeri sana puls süresini verecektir.
Ete

alisumer

teşekkürler hocam üzerinde çalışacağım ayrı bir başlıkta belki gene paylaşırım ilerleyişi ve testleri zaman buldukça
Hep meraktan

Powered by EzPortal