FPGA veya CPLD basit proje yardım.

Başlatan hyperalika, 08 Ocak 2012, 14:58:08

hyperalika

 FPGA ları yeni duydum benim projem basit ama paralel çalıştığı için projem için bulunmaz nimet. FPGA veya CPLD kullanarak sumo robotu yapmak istiyorum. Ama fpga mı kullanmalıyım yoksa cpld mi  bilmiyorum daha önce pic kullanıyordum , pic içindeki programı tek tek okuduğundan sensörü geç algılıyor çünkü o sırada başka bir işlem yapıyor. 15 digital giriş ve 3 çıkış (Led yakmak için) + 4 çıkış (2 DC motor sürmek için ) + 2 (DC motor hız kontrolu için pwm ) = 9 Toplam çıkış . Toplam 24 I/O kullanacağım . Sensörlerden gelen sinyale göre motorların hızını pwm ile artırıp azaltıp veya ileri ve geri yönde sürmek içim kullanacağım. Sensörleri pic teki gibi sıra ile kontrol etmemek için fpga veya cpld kullanmak istiyorum. Paralel olarak hepsini birden kontrol edip aynı anda motoru kontrol etmek istiyorum . Bunun için Fpga mı kullanmalıyım CPLD mi hangi seri hangi model kullanmamı tavsiye edersiniz. Bu projem için elinizde fpga veya cpld için gerekli yazılım veya döküman varsa paylaşırsanız sevinirim. Örneğin pwm ile hız kontrol gibi. Şimdiden herkeze teşekkür ederim.

SERRO EFE

Bence sen sumo robotun için pic kullanmaya devam et. Düşündüğünden çok saha hızlı çalışıyo emin ol hatta senin 1 değil 2 sumonu birden idare edebilir.

teknikelektronikci

soruna cevap
cpld fpga icin birde ayrica seri veya paralel flash a ihtiyac duyacaksin ayrica projen icin fpga fazla olmakla birlikte cpld bile fazla ama olsun ögrenmek icin ideal bence ögrenmek istiyorsan durma cpld ile projeni gerceklestir ama o kadar basit degil benden söylemesi ;)
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

hyperalika

Elimde xilinx XC2C64A CPLD si var bu iş için uygunmudur. PIC in sumo robotu için yeterli olduğunu biliyorum zaten derecelerim var ama  "SERDO EFE" CPLD  PIC' e göre daha performanslı çalışacaktır. Fazla bilgi göz çıkarmaz ilerde belki FPGA ile belki daha değişik projelere el atarım. Ayrıca flashı ne için kullanıcam

yamak

FPGA larda flash bulunmuyo yani yani her açılışta flashtan boot ediyo yazdığın programı. Ama yeni çıkan bazı fpgalarda flash mevcut.

Ersin

PWM demişin ,sensörlerden gelen bilgi demişsin,  ama bu sensorler analog bilgi  mi yoksa dijital mı  çok fark eder.PWM de kullanacagına göre xc2c64 yetmez , en az xc2c128 belki de 256 gerekir.Sensörlerin analog ise pic le yap , projende performans pic ten değil daha çok motor ve mekanik yapıdan dolayıdır.

hyperalika

#6
Alıntı yapılan: Ersin - 08 Ocak 2012, 16:08:15
PWM demişin ,sensörlerden gelen bilgi demişsin,  ama bu sensorler analog bilgi  mi yoksa dijital mı  çok fark eder.PWM de kullanacagına göre xc2c64 yetmez , en az xc2c128 belki de 256 gerekir.Sensörlerin analog ise pic le yap , projende performans pic ten değil daha çok motor ve mekanik yapıdan dolayıdır.
Motor ve dişli sistemimin performansından memnunum zaten işte dediğim gibi paralel işlem yapabilirsem biraz daha stabil çalışıcak robot. Sensörlerin hepsi digital çıkış 1(5V) ve 0 .

Ersin

Sensorler dijital olmaları adc kullanımını kaldırır , cpld li bir devre için avantaj olur.Paralel işlem demişsin, picle yaptığın zaman 1-2us gecikme ile komutlar çalışsa çok mu sorun olacak.Bu senin pic kullanamadığından kaynaklanır,ne bir adc değer okuyosun ne bir pid algoritması sağlamaya çalışıyosun alt tarafı aç kapa işlemlerin var.Devren pic ile rahat yapılacak şekilde , pic ile yaparsan tiimer ları kulanmaya çalış , pwm için hpwm pinlerini kullan.Yok illa cpld ile yapacam öğrenecem diyosan 128 lik cpld yeter buyuk ihtimal, yalnız level translator  ( Sensörlerin hepsi digital çıkış 1(5V) ve 0 ) kullanmaya unutma.

yamak

Bence de bu is icin cpld biraz gereksiz olur. Ama ogrenmek icin ideal bi uygulama olabilir. Ama sirf robot daha iyi  performans gostersin istiyosaniz arm cekirdekli bir mcu da kullanabilirsiniz. Tabi cpld ya da arm kullanmani soyle bi sikintisi olacak devreyi basma derdi cikiyo ortaya.Ama cortex mo cekirdekli  dip kilifli nxp nin mculari cikmis. Az once oyle okumustum bi baslikta

hyperalika

Devre basmak problem değil . Kartı zaten smd tasarlıyorum genelde küçük olması için. Şimdi karar veremedim neden cpld gereksiz olur anlayamadım. Zaten aklımda ya STM32 ya da CPLD kullanmayı düşünüyordum . Anladığım kadarıyla sizde CPLD yerine PIC veya arm diyorsunuz. Ayrıca söylememişim ama PID de kullanıyorum.

berat23

fpga ya da cpld ile böyle bir işe kalkışmak,deneyimsizken çok mantıklı bir iş değil.çok iyi bir kod yazamazsanız ki muhtemeldir,cpld size yetmeyebilir.fpga ise her yönden ekstra maliyet demek ki fpganın kapasitesinin çok ufak bir kısmı kullanılacak.o yüzden baştan elendi fpga.aslında 4 pwm ve geri kalan kontrol kısmı için 128 macrocell yeter belki ama adını ilk defa duyduğun bir elemanla böyle bir iş geliştirmek zor.ayrıca algoritmada yaptığın ufak değişiklikler fpga için tamamen değişim anlamına da gelebilir ama c gibi yüksek seviyeli bir dille çok basittir.bu gibi birçok sebep var.mesela arka arkaya koyduğun if ifadelerini fpga ile yapman için fsm yapman lazım.

aslında pic gibi mcular böyle basit kontrol devreleri için yeterince hızlı.zaten sensörün gecikmesi her türlü mcudan fazla olacaktır.us mertebesinde gecikmeler çok sıkıntı oluşturmaz.bilmiyorum ama mesela c gibi yüksek seviyeli diller yerine asm ile yazarsanız yazılımı,daha fazla müdahale imkanınız olur hıza.veya başka bir mcu kullanıp,ciddi hız farkları yaratabilirsiniz.pid değilde daha görüntü falan işleseniz ancak fpga mantıklı olurdu.

yamak

Ben CPLD kullanmadım hiç ama FPGA kullanıyorum.Şöyle bi örnek vereyim mesela FPGA lar ile bölme işlemi yapmak bile sıkıntı.Sadece 2 ye bölme işlemi yapılabiliyo. Bunun için daha önceden tasarlanmış IP (logic core) lar var onları kullanmanız gerekiyo. Floating point işlem de yapılmıyo.Bunun için de ayrı logic core lar var. Bunlar sadece örnekti bunun gibi bir çok muhabbet giriyo işin içine. FPGA lar genellikle sinyal işleme gibi konularda kendini gösteriyo.Ama illa öyle olsun diyosanız. Tabi paralel işlem nimetini kullanıp her sensorden gelen veriyi paralel olarak işleyebilirsiniz.Ama mesele arm çekirdekli bi mcu ile yapsanız böyle bi uygulama işlemciyi hiç kasmaz. Gecikmeler farkedilemez bile. Mesele forum sayesinde aldığımız stm32f407 ler 168mhz de çalışabiliyo. Bu da sizin işinizi hayli hayli görür. Fakat görüntü işleme,ses işleme yapabilen bi robot yapmak isteseniz bu iş için FPGA biçilmiş kaftan olur.

fatihinanc

Alıntı yapılan: gerbay - 08 Ocak 2012, 23:45:03
Sinyal => [hızlı bir ADC] => [FPGA] <=> [Cortex=M4] <====> diger peripheral lar..

şeklinde bir olay kurun, istediğiniz gibi oynayın..

Yeni dijital skoplar :)
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

berat23

Alıntı yapılan: gerbay - 08 Ocak 2012, 23:45:03
Sinyal => [hızlı bir ADC] => [FPGA] <=> [Cortex=M4] <====> diger peripheral lar..

şeklinde bir olay kurun, istediğiniz gibi oynayın..

şöyle yapsak;
Sinyal => [hızlı bir ADC] => [FPGA=>soft cpu, diger peripheral lar]..

genel olarak sistemi ufaltmak için?

berat23

nios çarpıp,bölebiliyor.zaten fpga içinde dahili dsp blokları bu işler için kullanılabiliyor,işlemciyi gömerken hangi elemanları(logic elementler veya dsp ) seçilebiliyor.biraz uğraşılırsa kaynak en verimli şekilde kullanılabilir.yüksek kapasiteli bir fpga ile hepsi halledilebilir.zaten bu kadar çok işlem gücüne ihtiyacımız varsa muhtemelen elimizde yeterli bir fpga vardır.

ben aslında bu yazdığımla işlemcilerin sequential kod yazmadaki kolaylıklarını kullanmak istedim.yoğun işlem gerektiren işler için fpga üzerinde bir dsp bloğu oluşturulup,geri kalan haberleşme,kontrol gibi işler için nios gibi bir işlemci kullanılabilir.fsm kurmak yerine c ile sequential kod yazmak bence çok daha basit.