Bana DMA lazım mı?

Başlatan Cemre., 11 Şubat 2016, 17:54:17

Cemre.

Herkese iyi akşamlar,

Bu yıl 8'inci dönemini okuyacağım Elektrik Mühendisliği eğitimimin bitirme çalışması için bir projem var. Projenin temeli IMU sensörden I2C ile alınacak veriyi açı cinsinden ifade etmek ve buna göre iki eksenli step motor düzeneğini hareket ettirmek olacak. STM32F4-Discovery kiti ile bu işlemleri yapmayı planlıyorum. Aslında PIC kullanmam gerekirdi çünkü STM konusunda daha çok yeniyim ancak hocamın isteği doğrultusunda böyle bir seçim yaptım. Diğer yandan bana bu seçim DMA gibi, DSP fonksiyonları gibi çok güçlü özellikler ve yüksek Clock hızları sunacağından aslında mantıklı da bir seçim.

Peki benim DMA'ya ihtiyacım var mı?
Bu soruya cevap arıyorum.

Sensörden sürekli 3 Eksen Gyro, 3 Eksen Acc., 3 Eksen Magnetometer verisi alınacak.
Dijital Low-Pass Filter aktif olmadı durumda en iyi ihtimalle 260Hz örnekleme yapabiliyor modül. Hadi diyelim 4ms'de bir veri alacağız. Ben LPF'yi 2 ya da 3 üncü seviyede kullanmayı düşünüyorum. 100Hz'in altına düşüyor örnekleme. Bana iki veri arası 10ms süre kazandırır aşağı yukarı.

Her eksen 2 Byte veri ile geliyor, 18 Byte, 400Kbps hızında veriyi almam Start Stop sinyalleri hariç 3.6ms sürecek.
4ms sürdüğünü varsayarsak veriyi almak dışında işleyip (matematik fonksiyonları içeriyor) step motorlara hükmetmek (sürücü kullanacağım, geribesleme yok (encoder vs.)) için 6ms zamanım var. 168MHz'de matematik işleri çok uzun sürmez diye umuyorum.

Bu koşullar altında sorduğum soruya artıları ve eksileri ile cevap verebilir misiniz?

Yoksa, zaten bu her halükarda elimi rahatlatır kullanayım gitsin mi demeliyim?

Bu arada ortalama alma vs gibi bir durum yok, zaten LPF ile 100Hz veri gelecek, gelen veriye göre hemen o anki açı hesaplanacak ve istenen değerden sapma varsa stepmotorlara komut gidecek.

Teşekkürler, iyi akşamlar.

ArifAhmet

Madem STM32 kullanmaya karar vermissin. Kullan DMA'yi. Sonucta sistem kaynagi projen icin bayagi bol. Biryerlere birseyler bolusturmen gerekmiyor. Daha hizli daha iyi. Ama en bastan dersenki STM32 alip DMA ile mi yapayim yoksa PIC, AVR vs alip mi yapayim, o zaman ne gerek var DMA'ya :)
Yaşasın Open Source!

kimlenbu

sistem yükünü azaltmış olursun. Ayrıca stm32f4 için DSP kütüphanesi var, ona da göz atmayı unutma.

Cemre.

@ArifAhmet @kimlenbu hocam söylediklerinizi dikkate alacağım. Dün akşam CubeMX ile I2C DMA'lı proje oluşturdum. Başlangıç için DMA'sız fonksiyonları kullanarak mpu6050 ile iletişime geçtim. Bugün onu bitirip ne kadar hızlı veri alıp alamadığıma bakmaya çalışacağım.
Bu şekilde DMA'ya geçişim zor olmaz sanıyorum?

Bir de mpu6050'de şöyle bir özellik var. Veri hazır olduğunda INT pini HIGH konuma geçiyor. Dış Kesme Kaynağı olarak kullanıp bu şekilde veriyi sürekli DMA'ya yazdırabiliyorum sanırım. Ama benim zaten o an hazır gelen veriye ihtiyacım var.
Bu durumda DMA'nın bana katkısı ne olur?
Kesme ile DMA aktarımını aktif edip tekrar işime dönüp veri hazır olunca veriyi almam, kesme rutinimde vakit kaybetmemem mi?

z

DMA'ya büyük verilerin aktarılmasında ihtiyaç duyulur.

Senin örnekleme hızın düşük aktaracağın veri de çok az.

DMA sırıtacak. Kullanırsan da kimse kızmaz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Cemre.

@z
Teşekkürler hocam.

Tübitak sağolsun projeyi destekleyip desteklemeyeceğini açıklamakta 2 hafta gecikti ve yine iş hafta başına kaldı. Durum buyken ben de projeden gittikçe uzaklaşıyorum. Bakalım sonumuz ne olacak.

Hocam bir de, STMStudio uygulaması değişkenlerdeki değişimi grafik halinde çizdirebiliyor. Yenileme sıklığı vs konusunda bilgim yok.
Siz bu aracı kullanıyor musunuz?

z

Hiç ilgilnmedim fakat özellikle sinyal işleme tipi kodlar yazarken bu özelliğe ihtiyaç duyuyorum.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Cemre.

Debugging konusunda çok yetersiz bilgim var. Genelde debug'ı kendi yöntemlerimle yapıyorum. Misal hata oluştuğunda led yakacak, ya da programın her adımında bir değişkenin değerini artıracak şekilde kodlama yapıp bunları takip etmek üzerine yöntemler oluşturuyorum. Keil'ın debug yeteneklerini nasıl kullanabilirim, bu konuda bilgi içeren bir kaynak gösterebilir misiniz? @z

z

Programda yanlış giden bir şeyler varsa şüpheli değişkeni izlemeye alabilirsin.
İzlemek istediğin değişkeni watch window'a atıp daha sonra bu değişkenin değer aldığı  satırın bir alt alt satırına
breakpoint koyup programı bu satırda durdurabilir değişken aldığı yeni değeri öğrenebilirsin.
Bu değerin doğru olup olmadığını kağıt kalemle test edebilirsin.

Debug işlemi senin hayal gücünle alakalı. Kaynak bilmiyorum.

Programı sen yazdıysan hatasını da bulabilirsin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com