Bir büyük mikrodenetleyici veya çok sayıda küçük mikrodenetleyici?


24

Mikrodenetleyicilerle basit ve anlaşılır şeyler yapmaya alışkınım. Sürüş LED'leri, çalışan motorlar, temel rutinler, karakter LCD'lerinde GUI'ler, vb. Gibi şeyler, ancak her zaman yalnızca birkaç küçük yan görevle yalnızca bir önemli görevdir. Bu beni düşük kaliteli ürünlere düşürdü çünkü bu durumlarda gerçekten gerekli olan tek şey bu.

Daha karmaşık şeyler tasarlamaya başlamak isterim, ancak mikrodenetleyicinin sürekliliğinin üst kısmı iyi maruz kaldığım bir şey değil. Bu yüzden, aynı anda birçok işi yapacağım bir mikrodenetleyici seçmeye çalışırken çok zor bir zaman geçirdim - sadece MIPS numarasıyla ve istediğimi yapacak kadar beygir gücüne sahipse tatmin edici bir görüş açısıyla söyleyemem yapmak.

Örneğin, 2 adet BLDC motorunu PI rutinleriyle, bazı seri ve USB haberleşmelerin, bir GUI'nin ve bir dizi başka işin yanında kontrol etmek istiyorum. Her motor için bir mikrodenetleyici ve daha sonra çeşitli işler için bir tane olmak üzere cazip olduğum için, çeşitli malzemelerden gelen ek yükün kritik motor işlevlerini engellemeyeceğini garanti edebilirim. Ama bunun gerçekten iyi bir fikir mi, yoksa bir şeyleri halletmenin saf bir yolu mu olduğunu bilmiyorum.

Sanırım sorum gerçekten iki katı:

  1. Hepsi bir arada yaklaşım, çok sayıda çoklu görev yapmak zorunda kaldığında iyi bir fikir midir, yoksa ayırmak ve izole etmek daha mı iyidir?

  2. Baktığım mikrodenetleyicinin görevler listeme göre ihtiyacım olan şeyi yapmak için yeterli hesaplama gücüne sahip olup olmadığını nasıl sezgisel olarak öğrenebilirim?

RTOS çalıştıran ARM SoC'lara kadar ılımlı dsPIC33'lere bakıyorum. İhtiyacım olan şeyi bilemek için sistematik bir yol bana çok yardımcı olacak.




4
Halihazırda çok fazla cevap var, ancak bazen aynı panoda programlanabilir mikroskoba sahip olmak, hepsi aynı dili konuşuyor, belki de bazı akıllı çevre birimleriyle, tek bir mikro kullanmaktan çok daha fazla iş.
Erik Friesen

Yanıtlar:


10

Sorularınızın cevapları, nihai hedefinizin ne olduğuna bağlı olarak farklılık gösterir. Bu cihazlardan birkaçı veya daha azına ihtiyacınız varsa, geliştirme işlemini kolaylaştırmalı ve parçaların maliyeti konusunda endişelenmemelisiniz. Bunlardan bin veya daha fazlasını yapacaksanız, gereksinimlerinizi analiz etmeye ve cihaz donanımının maliyetini düşürmeye değer.

Küçük miktarlar

Bu cihazların bir kerelik veya küçük bir bölümünü yapıyorsanız, geliştirme çabalarınız öğe başına maliyetlerinizi düşürecektir ve geliştirmeniz için maliyet / maliyetten ziyade en kolay / en hızlı olan şeye odaklanmalısınız. mikroelektronik boyutu.

Genel olarak kapsülleme karmaşıklığı azaltabilir ve verimliliğinizi artırabilir. BLDC kontrolünüz, PID döngüleriniz, vb. Gibi bazı gerçek zamanlı gereksinimleriniz varsa, özellikle kullanıcı arayüzünü tuttuğunuz ve gerçek olmayan diğer kontrol cihazlarıyla iletişim kuran görevler için ayrı denetleyicileri kullanmayı daha hızlı bulabilirsiniz. zaman görevleri.

Yani bu durumda, sorularınızın cevabı:

Hepsi bir arada yaklaşım, çok sayıda çoklu görev yapmak zorunda kaldığında iyi bir fikir midir, yoksa ayırmak ve izole etmek daha mı iyidir?

Ölçek, segmentasyon ve izolasyona doğru hafifçe eğiliyor. Bunun ana nedeni, gerçek zamanlı bir sistemin hata ayıklamasının çok zaman alabilmesi olabilir ve bu tür görevleri kendi işlemcilerinde tutmak, bir şeyin neden doğru çalışmadığını bulmaya çalışırken ölçmeniz veya kontrol etmeniz gereken değişkenleri sınırlar.

Baktığım mikrodenetleyicinin görevler listeme göre ihtiyacım olan şeyi yapmak için yeterli hesaplama gücüne sahip olup olmadığını nasıl sezgisel olarak öğrenebilirim?

Bu durumda, çok sayıda kaynağı olan bir 32 bit işlemci ile sınırlı kaynakları olan bir 8 bit işlemci arasındaki maliyet farkı, geliştirme için harcayacağınız zaman miktarına göre azdır. Ne kadar güce ihtiyaç duyduğunuzu anlamaya çalışmak için çok az neden var - bunun için geliştirebileceğiniz ve kullanabileceğinizi düşündüğünüz en büyük işlemciyi edinin. Daha sonraki bir noktada, tasarımın maliyetini düşürmek zorunda kalırsanız, gerçek işlemci kaynak kullanımını ölçmek nispeten kolaydır, o zaman gerçek yükü kaldırabilecek bir kiraya veren işlemci seçin. O zamana kadar en büyüğünü kullanın ve “en uygun” u bulmak için endişelenmeyin.

Seri üretim

Bu cihazların çoğunu yapmayı planlıyorsanız, dikkatli bir analiz önemli maliyet tasarrufu sağlayacaktır. Genel olarak, daha büyük bir mikrodenetleyici, tek bir mikrodenetleyicinin yerini alabilen iki mikrodenetleyiciden daha ucuza mal olur, ancak istenen özel görevlere bağlı olarak kesinlikle istisnalar vardır. Bu miktarlarda, donanımın maliyeti büyük olasılıkla geliştirme maliyetinden çok daha büyük olacaktır, bu nedenle gereksinimlerinizi analiz etmek ve geliştirme yapmak için yalnızca birkaçını yapıyor olmanıza göre daha fazla zaman harcamayı beklemelisiniz.

Hepsi bir arada yaklaşım, çok sayıda çoklu görev yapmak zorunda kaldığında iyi bir fikir midir, yoksa ayırmak ve izole etmek daha mı iyidir?

Hepsi bir arada yaklaşım, tüm projenin ömrü boyunca genellikle birden fazla işlemciden daha ucuz olacaktır. Çeşitli görevlerin çakışmadığından emin olmak için daha fazla geliştirme ve hata ayıklama süresi gerekecektir, ancak titiz yazılım tasarımı, ayrı bir donanıma sahip olacağı kadar sınırlı olacaktır.

Baktığım mikrodenetleyicinin görevler listeme göre ihtiyacım olan şeyi yapmak için yeterli hesaplama gücüne sahip olup olmadığını nasıl sezgisel olarak öğrenebilirim?

Yapmak istediğiniz görevleri ve ne kadar kaynak aldıklarını anlamanız gerekecektir. Aşağıdakilerin doğru olduğunu varsayalım:

BLDC PI rutinleriniz, saniyede 100 kez X işlemci zamanını tüketir ve her biri işlem için yaklaşık 50 bayt RAM, ayar için 16 bayt EEPROM ve kod için 1k flaş gerekir. Her birinin mikrodenetleyicide 3 on altı bit PWM çevre birimine ihtiyacı olacak. Belirli kesinti gecikme gereksinimlerine sahip olacak jitter belirtmeniz gerekebilir.

USB ve seri rutinleriniz gerektiğinde Yk işlemci zamanı, 2k RAM, 64 bayt EEPROM ve 8k flaş tüketir. USB ve seri çevre birimleri gerektirir.

GUI'niz, saniyede 30 kez Z işlemcili güç tüketir ve 2k RAM, 128 bayt EEPROM ve 10k flaş gerekir. LCD, düğmeler, topuzlar vb. İle iletişim kurmak için 19 G / Ç kullanacaktır.

İlk başladığınızda, X, Y, Z'nin gerçekte ne olduğunu anlamak zor olabilir ve işlemcinin mimarisine bağlı olarak bu biraz değişecektir. Ancak, bir basketbol sahası tahmininde, tasarımınızın ne kadar koç, eeprom ve flaş kullanacağını ve hangi çevre birimlerine ihtiyacınız olduğunu anlayabilmelisiniz. Hafızanızı ve çevre gereksinimlerinizi karşılayan ve bu aile içinde çok çeşitli performans seçeneklerine sahip bir işlemci ailesi seçebilirsiniz. Bu noktada, geliştirme için, ailedeki en güçlü işlemciyi kullanabilirsiniz. Tasarımınızı uyguladıktan sonra, tasarım veya geliştirme ortamınızı değiştirmeden aileyi güç açısından daha düşük bir maliyet seçeneğine kolayca taşıyabilirsiniz.

Bu tasarımları yeterince yaptıktan sonra, X, Y ve Z'yi daha iyi tahmin edebileceksiniz. BLDC PI rutinlerinin sık sık çalıştırılmasına rağmen oldukça küçük olduğunu ve çok az döngü gerektirdiğini bileceksiniz. USB ve seri rutinler çok fazla döngü gerektirir, ancak nadiren ortaya çıkar. Kullanıcı arayüzü, değişiklikleri bulmak için sık sık birkaç döngü gerektirir, ancak örneğin bir ekranı güncellemek için nadiren çok sayıda döngü gerekir.


11

Motor kontrolünü ayırırım ve her iki BLDC motorunun her biri için PWM (belki bir PIC18) içeren ayrı bir mikrodenetleyiciye sahip olurdum, çünkü PI kontrolü bir kez çalıştırıldığında izole bir görevdir ve bir kez kod yazdığınızda her iki mikroda da kullanabilir. Bunları I²C gibi bir arayüz üzerinden ana mikrodenetleyiciye bağlayabilir ve isterseniz PI kontrol parametrelerini buradan indirebilirsiniz. Bu, GUI'nizde onları değiştirmenize izin verir.

Daha sonra PIC24 gibi ana mikrodenetleyicideki her şeyi çalıştıracağım (bir PIC32 listelenen görevlere dayanarak muhtemelen üstesinden gelebilir). Ayrıca en hızlı PIC24E'ler neredeyse bir PIC32 kadar hızlı çalışabilir.

Bir mikrodenetleyici seçerken, önce ihtiyacım olan flaş ve RAM miktarını tahmin ediyorum, sonra kelime uzunluğuna ve işlemci hızına bakıyorum. Daha sonraları, çoğu zaman karşılanması en zor gereksinim, ele almayı umduğunuz en hızlı kesintidir. Örneğin, 16 KHz ses çıkarıyorsanız ve her 62,5 µs'de bir kesintiye uğrarsanız, onlarca nanosaniyede bir zaman aşımına uğrayan bir mikroişlemciye sahip olsanız iyi edersiniz, ya da servis veremez ve başka bir şey alamazsınız. iş bitti.


7

Cevabınızı oluşturmanıza yardımcı olmak için kullanabileceğiniz yarı resmi bir yaklaşım vardır. Birçoğu Google Kitaplar’da bulunan White’ın “Embedded Systems Designing” in 2. bölümünü okumayı şiddetle tavsiye ediyorum .

Bu bölüm, sistem mimarileri tasarlamaktan bahseder ve görevleri en iyi şekilde nasıl kapatabileceğinize dair yarı resmi bir yaklaşım sunar. Bölüm büyük ölçüde bir denetleyici sistemiyle ilgili olmakla birlikte, kolayca birden çok denetleyiciye uzanır. Hangi kaynakların paylaşılması gerektiğini düşünmenize ve her görev için enkapsülasyon seviyenizi belirlemenize yardımcı olacaktır.

Biri aşağıda göstereceğim, dikkate alınması gereken çeşitli görüşler sunuyor, ancak birçok yararlı manipülasyon var. Bu, elbette, tek başına pek bir şey ifade etmiyor, ancak umarım bu bölümü kontrol etmenizi teşvik eder.

Beyazdan, Gömülü Sistemler Yapma, Bölüm 2

"Yeterli denetleyicime sahip olup olmadığımı nasıl bilebilirim" konusuna gelince, kendi tercihim, tasarım sanal alanıma elimden geldiğince güç koymak ve sonra tasarımın iyi olduğu bir zamanda ne kadar kaynak kesebileceğimi bulmak yol. Prototip oluşturma amacıyla 10 dolarlık bir mikrodenetleyici ve 3 dolarlık bir mikrodenetleyici arasındaki fiyat farkı, yeterli miktarda gücünüz varsa tasarım her zaman hareket etmeye devam ederken, başparmağınızı yeni parçalar için bekletmek ve düzeltmek için haftalar olabilir.


5

Genel olarak tanımladığınız bir sistem üzerinde çalışıyorum - bir Coldfire 52259 (orta aralık 32-bit ~ 80 MHz mikro) üzerinde çalışan motorlar, IO, ekran, 3x UART + SPI + I2C ve çok zor olmasa da Yazılım mimarisi hakkı önemlidir - donanım ve kesintilerde (donanımın tek başına yapabileceği herhangi bir şey varsa, donanım ve hizmette kesintilerle çalışıyoruz) tüm temizlik işlemlerini yapmak için ana () döngüyü bırakarak çok fazla işimiz var.

Şahsen gördüğüm çoğu RTOS'u sevmiyorum, en sonunda bir projeyi şişiriyorlar, öğrenecekleri bir şey daha ekliyorlar ve doğrudan işleri yaparak (mevcut donanım fonksiyonlarını + kesintileri kullanarak) donanımdan daha iyi performans elde edeceksiniz. yazılımla taklit etmek yerine.

Sonunda, bugünlerde bir RTOS ve gerçekten sadece gömülü Linux çalıştıran bir şeyden (SoC) yararlanabilecek kadar karmaşık ve güçlü bir MCU arasında çok az bir marj var gibi görünüyor .

Bununla birlikte, bu örnekte, ana "beyin" işlemcisinin emri altında, kritik fonksiyonları (sınırlı zamanlama veya durmanın kritik olduğu EG motor kontrolü) ele almak için küçük ucuz mikroskobu kullanmanın bir değeri olduğunu söyleyebilirim. zamanında "gerçek zamanlı olmayan" bir işletim sistemi üzerinde.


3

Herkes başka cevaplar cevaplamak daha iyidir, ancak işe yarayabilecek bir şeyler de ekleyebilirim. Bu işaretin biraz üzerinde olabilir ve yorum olarak eklemeyi çok isterim ama 50 tekrarlama kuralı var :(

Kısa cevap bağlıdır, yukarıya bakın ama neden işlemci yararları hakkında da düşünmeyin.

1((1-p)+ps)ama bu geliyor. P, bölünebilecek hesaplamanın yüzdesidir ve s, hızlanmadır (işlemlerin sayısına, donanıma vb. Bağlıdır).

Tabii ki, maliyet, uygulama kolaylığı; vb. önemlidir ve dikkate alınması gereken daha da önemlidir.


1

Cevap uygulama detaylarına bağlı olabilir. Bazı görevler ayrı mikrodenetleyicilerde temiz ve sağlam bir şekilde uygulanması daha kolaydır. Güç tüketimi de dikkate alınabilir - genellikle tek bir mikro elleçleme işlemi, birkaç görevin, tekli görevleri tek başına ele alan mikrodan daha az güç gerektirecektir.


1

“Beygir gücü”, gerçek zamanlı kısıtlamalarınızı yerine getirip getiremediğinize ikincildir.

İki PWM çıkışınız varsa ve her ikisinin de aynı anda geçiş yapması gerekiyorsa, bunu yapabilmek için gerekli paralelliğe sahip olmanız gerekir. Kesin zamanlamaya özen gösteren özel bir PWM kontrol cihazına sahipseniz, oldukça küçük bir mikroişlemciyle bile işe yarar, GPIO tabanlı bir çözüm çok fazla bilgi işlem gücü olsa bile çok karmaşık olacaktır.

Çoğu protokol için, modern MCU'lar, protokolün gerçek zamanlı kısıtlamaları olan kısımlarının gömülü uygulamalarına sahiptir; bu nedenle, gerekli çevre birimlerine sahip olan ve veri akışlarını işlemek için gereken CPU hızına sahip bir MCU bulabilirseniz (yani, gerçek zamanlı gereksinim bozulur) "FIFO'yu dolmadan önce ve dolduğundan daha hızlı okuyabilir" şeklindeki yumuşak gerçek zamanlı bir gereksinime göre, bu en uygun seçenek olacaktır.

Eğer böyle bir çözüm yoksa, seçenekleriniz ya bir CPU + FPGA çözümü (örn. Sert ARM çekirdekli FPGA) ya da saf bir FPGA çözümü (isteğe bağlı olarak, karmaşıklık gerekliliklerine bağlı olarak yumuşak bir CPU ile) kullanarak işlevleri ayrı kontrol cihazlarına taşıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.