Motion FeedBack Modülü(MFM) Nasıl çalışır.

Başlatan Mucit23, 13 Nisan 2012, 07:51:42

Mucit23

Arkadaşlar 18F4431 ve PWM donanımını inceliyordum. 18F4431 de birde Motion Feedback Modüle denen bir yapı varmış.
Datasheet de İçyapısını göstermiş.

gif hosting

Okudıklarımdan anladığım kadarıyla Bu yapı Motor üzerine yerleştirilmiş hall sensörlerinden gelen bilgiyi alıp işleyip hem hız bilgisi hemde geri besleme olarak veriyor. Anladığım kadarıyla Motor control modülü ile direk ilişkilendirilebiliyor.

Şimdi bu modül tam olarak nasıl işliyor? Bana nasıl bilgi veriyor? Ve Motor control Modülü ile nasıl ilişkilendirilir bunları merak ediyorum. Daha önce hiç bu modülü inceleyen oldumu


skara1214

hocam qei yani quadrature encoder interface;encoderden gelen birbirine 90 derece faz farklı a ve b sinyalini(ve i =index opsiyonel ben kullanmıyorum) sayıyor size rakam veriyor.Bu encoderların bir çok çeşidi var tek turda100 sayan 300 sayan v.s gibi ne kadar çok sayanı bulursanız o kadar hassas hız kontrolü yaparsınız.
http://ww1.microchip.com/downloads/en/devicedoc/93002A.pdf
Herkes ölür ama herkes gerçekten yaşamaz

Mucit23

Hocam Ben yanlız şu hall sensörlerinden kullanmayı düşünüyorum. Dediğiniz encoderlerdende var elimde. 2 adet çıkışı var A ve B olmak üzere Birde Z çıkışı var. Başlangıc noktasını gösteriyor.
Şimdi Benim amacım Fırçasız DC motora Hall sensörler ekleyip Rotorun konumuna göre PWM sinyallerini belirlemek.
18F4431 de PWM İşini çözdüm sayılır. Yani PWM sinyali çıkartabiliyorum. Yanlız işte Zamana göre Farklı çıkışları tetikleme gerekiyor. Eğer Şu encoder modülünüde çözersem ESC yapmış olacağım.

Şimdi Şu PWM modülü ile Encoder modülü arasında nasıl bir bağlantı kuruluyor onu öğrenmeye çalışıyorum. PWM sinyalinin hangi pinlerden çıkacağını belirleyen iki adet Register var. OVDCOND ve OVDCONS registerleri. Bir şekilde  MFM modülü bu Registerlere sıra ile değerler yükleyerek PWM çıkışlarını aktif etmeli.
İşin ayrıntısını yavaş yavaş öğreniyorum

camby

Quadrature Encoder sinyallerini yazılımla takip etmek çok zor. Sürekli kesme oluşturmak zorundasınız , düşen kenar yükselen kenar , yüksek frekans derken işlemci iş yapamaz hale geliyor.

Bunun yerine basit bir donanım ile gelen sinyalleri sürekli XOR'layıp çıkan sonucu konum sayıcına gönderiliyor ( up yada down şeklinde ) , konum değişkeninin reset değerini istediğimiz gibi de belirleyebiliyoruz. Bu sayede konum okumanın PORT okumaktan farkı kalmıyor.

Konumu bu kadar hızlı okuduğunuzda , istediğiniz referans noktasına göre hatayı da tek cycle 'da okuyabiliyorsunuz. Bu sayede PID'ye çok fazla vakit kalmış oluyor.

Hız kontrolü için : Capture modülünün biraz daha geliştirilmişi bulunuyor , mantık olarak çok bir farkı yok. Hız için yine 2 puls arası süreden hesaplamanız lazım.

camby

Alıntı yapılan: Mucit23 - 13 Nisan 2012, 11:09:10
Hocam Ben yanlız şu hall sensörlerinden kullanmayı düşünüyorum. Dediğiniz encoderlerdende var elimde. 2 adet çıkışı var A ve B olmak üzere Birde Z çıkışı var. Başlangıc noktasını gösteriyor.
Şimdi Benim amacım Fırçasız DC motora Hall sensörler ekleyip Rotorun konumuna göre PWM sinyallerini belirlemek.
18F4431 de PWM İşini çözdüm sayılır. Yani PWM sinyali çıkartabiliyorum. Yanlız işte Zamana göre Farklı çıkışları tetikleme gerekiyor. Eğer Şu encoder modülünüde çözersem ESC yapmış olacağım.

Şimdi Şu PWM modülü ile Encoder modülü arasında nasıl bir bağlantı kuruluyor onu öğrenmeye çalışıyorum. PWM sinyalinin hangi pinlerden çıkacağını belirleyen iki adet Register var. OVDCOND ve OVDCONS registerleri. Bir şekilde  MFM modülü bu Registerlere sıra ile değerler yükleyerek PWM çıkışlarını aktif etmeli.
İşin ayrıntısını yavaş yavaş öğreniyorum

Hall sensörlerin çıkışları nasıl ? Tek yapmanız gereken hall sensör çıkışlarını saydırarak konumu takip etmek.

PWM ile feedback modülünün arasında hiçbir ilişkiyi yok. Daha doğrusu ilişkiyi kullanıcı tanımlar. PID'den çıkacak sonuca göre PWM oranını değiştirirsiniz okadar. PID fonksiyonunun girişi "konum hatası" , çıkışı da PWM oranı ve yöndür , ilişkiyi siz kuracaksınız yani.

Mucit23

Hocam Hall Sensörleri motor gövdesine 120 şer derece aralıklarla yerleşetiriliyor. Bu 3 adet hal sensöründen gelen bilgilere göre (1-0-1) Rotorun konumu belirleniyor. Bu sayede Rotorun konumu nerede olduğu tespit edilerek bir sonraki yapılacak olan hamle belirleniyor. 
Mesela Microchip in AN lerinde şöyle bir şema var.

gif hosting

Benim yapmak istediğimde böyle bir sistem kurmak aslında.

image hosting
Burada Encoderden gelen bilgiye göre hangi pwm çıkışlarının aktif edilmesi gerektiği gösterilmiş.
Şimdi şunu merak ediyorum. Eğer Ben her seferinde Encoderin konumuna bakıp OVDCON registerlerine değer yükleyeceksem bu benim yine çık zamanımı almazmı.
Yani açıkçası ben bu tür işlerle hiç uğraşmak istemiyorum.
Ben PWM sinyalinin frekansını belirleyeyim duty değerini belirleyeyim. Sonra İşlemci encoderin konumuna baksın ve sonraki hamlesini kendisi yapsın.
Bu mümkünmüdür?

Mucit23

Aslında Elimde bir iş ten kalma Encoderler var.Modeli HEDS-5645-A12 .3 Çıkışlı A ve B ucları arasında 90 Derece faz farkı var. Tam bir turda 500 Pals veriyor. Birde index çıkışı var. Her bir turda bir pals veriyor. Şimdi acaba bunu motor miline akuple şekilde bağlarsam rotor konumunu nasıl belirlerim

camby

Örnek Modül Ayarları :
;===============Quadrature Encoder Interface Ayarları=====================
;{
QEI_AYAR
		movlw		b'00011000'		; VELM(7):0 - Velocity mode enabled , PDEC<1:0>:00 = 1:1 Velocity Pulse Reduction 
		movwf		QEICON			; QEIM<2:0>: QEI Mode - 110 = QEI 4x,reset on (POSCNT = MAXCNT)
	
		movlw		b'00011111'		; Maksimum konum 8191
		movwf		MAXCNTH
		movlw		b'11111111'
		movwf		MAXCNTL
	
		clrf		POSCNTL
		clrf		POSCNTH

		RETURN
;}


Konum Okuma :

;===============Konum Okuma Bölümü========================================
;{
KONUM_AL
		movf		POSCNTL,w
		movwf		konuml
		movf		POSCNTH,w
		movwf		konumh

		RETURN
;}



Her konum al dediğinizde , rotorun açısını okudunuz demektir.