Ich bin es gewohnt, relativ einfach und unkompliziert mit Mikrocontrollern umzugehen. Dinge wie das Ansteuern von LEDs, das Laufenlassen von Motoren, grundlegende Routinen, GUIs auf Zeichen-LCDs usw., aber immer nur eine Schlüsselaufgabe mit höchstens ein paar kleinen Nebenaufgaben. Dies hat mich zu Low-End-Produkten verwiesen, da dies wirklich alles ist, was in diesen Fällen benötigt wird.
Ich würde gerne anfangen, komplexere Dinge zu entwerfen, aber die Oberseite des Mikrocontroller-Kontinuums ist etwas, dem ich nicht gut ausgesetzt war. Daher hatte ich eine große Herausforderung bei der Auswahl eines Mikrocontrollers, auf dem ich viele Aufgaben gleichzeitig ausführen kann. Ich kann nicht einfach anhand einer MIPS-Nummer und einer zufriedenstellenden Pinbelegung feststellen, ob er über genügend Leistung verfügt, um das zu tun, was ich will machen.
Zum Beispiel möchte ich 2 BLDC-Motoren mit PI-Routinen steuern, neben einigen seriellen und USB-Kommunikationen, einer GUI und einer Reihe anderer Aufgaben. Ich bin versucht, nur einen Mikrocontroller für jeden Motor und dann einen für die verschiedenen Aufgaben zu haben, damit ich garantieren kann, dass der Overhead durch die verschiedenen Dinge die kritische Motorfunktion nicht beeinträchtigt. Aber ich weiß nicht, ob das eine gute Idee oder eine naive Herangehensweise ist.
Ich denke, meine Frage ist wirklich zweifach:
Ist der All-in-One-Ansatz eine gute Idee, wenn viel Multitasking durchgeführt werden muss, oder ist es besser, zu segmentieren und zu isolieren und
Wie kann ich intuitiv herausfinden, ob der von mir betrachtete Mikrocontroller über genügend Rechenleistung verfügt, um anhand meiner Aufgabenliste das zu tun, was ich brauche?
Ich betrachte moderate dsPIC33s bis hin zu ARM-SoCs, auf denen RTOS ausgeführt wird. Ein systematischer Weg, das, was ich brauche, zu verfeinern, würde mir sehr helfen.
Antworten:
Die Antworten auf Ihre Fragen unterscheiden sich je nach Ihrem Endziel. Wenn Sie eine Handvoll oder weniger dieser Geräte benötigen, sollten Sie die Entwicklung vereinfachen und sich nicht um die Teilekosten kümmern. Wenn Sie tausend oder mehr davon herstellen, lohnt es sich, Ihre Anforderungen zu analysieren und die Kosten für die Gerätehardware zu senken.
Kleinmengen
Wenn Sie eine einmalige oder kleine Anzahl dieser Geräte verwenden, werden Ihre Entwicklungsanstrengungen Ihre Einzelkosten übersteigen. Sie sollten sich auf das konzentrieren, was für Sie am einfachsten / schnellsten zu entwickeln ist, und nicht auf die Kosten. Größe der Mikroelektronik.
Im Allgemeinen kann die Verkapselung die Komplexität verringern und Ihre Produktivität steigern. Wenn Sie harte Echtzeitanforderungen haben, wie z. B. Ihre BLDC-Steuerung, PID-Schleifen usw., ist es möglicherweise schneller, separate Steuerungen zu verwenden, die speziell für die Aufgaben geeignet sind, die mit Steuerungen kommunizieren, bei denen Sie die Benutzeroberfläche und andere nicht realistische Steuerungen verwenden. Zeitaufgaben.
In diesem Fall lautet die Antwort auf Ihre Fragen:
Die Skala neigt sich leicht zur Segmentierung und Isolierung. Der Hauptgrund dafür ist, dass das Debuggen eines Echtzeitsystems sehr zeitaufwändig sein kann. Wenn Sie solche Aufgaben auf einem eigenen Prozessor ausführen, werden die Variablen eingeschränkt, die Sie messen oder steuern müssen, um herauszufinden, warum etwas nicht richtig funktioniert.
In diesem Fall ist der Kostenunterschied zwischen einem 32-Bit-Prozessor mit vielen Ressourcen und einem 8-Bit-Prozessor mit begrenzten Ressourcen im Verhältnis zu der Zeit, die Sie für die Entwicklung aufwenden werden, gering. Es gibt keinen Grund, herauszufinden, wie viel Leistung Sie benötigen - holen Sie sich einfach den größten Prozessor, für den Sie das Gefühl haben, dass Sie ihn entwickeln und verwenden können. Wenn Sie zu einem späteren Zeitpunkt das Design kostenoptimieren müssen, ist es relativ einfach, den tatsächlichen Ressourcenverbrauch des Prozessors zu messen. Wählen Sie dann einen Leasing-Prozessor, der die tatsächliche Last bewältigen kann. Verwenden Sie bis dahin die größte und sorgen Sie sich nicht darum, die "beste Passform" zu finden.
Massenproduktion
Wenn Sie vorhaben, viele dieser Geräte herzustellen, führt eine sorgfältige Analyse zu erheblichen Kosteneinsparungen. Im Allgemeinen kostet ein größerer Mikrocontroller weniger als zwei Mikrocontroller, die den einzelnen Mikrocontroller ersetzen können, obwohl es in Abhängigkeit von den spezifischen erforderlichen Aufgaben sicherlich Ausnahmen gibt. Bei diesen Stückzahlen sind die Kosten für die Hardware wahrscheinlich viel höher als die Kosten für die Entwicklung. Daher sollten Sie mehr Zeit für die Analyse Ihrer Anforderungen und die Durchführung der Entwicklung aufwenden, als wenn Sie nur einige wenige erstellen würden.
Der All-in-One-Ansatz ist im Allgemeinen über die gesamte Projektlaufzeit kostengünstiger als mehrere Prozessoren. Es wird mehr Entwicklungs- und Fehlerbehebungszeit erfordern, um sicherzustellen, dass die verschiedenen Aufgaben nicht in Konflikt geraten. Durch strenges Softwaredesign wird dies jedoch fast so stark eingeschränkt wie bei Verwendung separater Hardware.
Sie müssen wissen, welche Aufgaben Sie ausführen möchten und wie viele Ressourcen sie benötigen. Angenommen, Folgendes wäre wahr:
Ihre BLDC-PI-Routinen belegen 100-mal pro Sekunde X-Zyklen Prozessorzeit und benötigen jeweils etwa 50 Byte RAM für den Betrieb, 16 Byte EEPROM für die Optimierung und 1 KB Flash für den Code. Sie benötigen jeweils 3 16-Bit-PWM-Peripheriegeräte im Mikrocontroller. Möglicherweise müssen Sie Jitter angeben, für das bestimmte Anforderungen an die Interrupt-Latenz gelten.
Ihre USB- und seriellen Routinen belegen nach Bedarf Y-Zyklen an Prozessorzeit, 2 KB RAM, 64-Byte-EEPROM und 8 KB Flash. Es werden USB- und serielle Peripheriegeräte benötigt.
Ihre GUI verbraucht 30-mal pro Sekunde Z-Zyklen an Prozessorleistung und benötigt 2 KB RAM, 128 Byte EEPROM und 10 KB Flash. Es werden 19 E / A für die Kommunikation mit dem LCD, den Tasten, Knöpfen usw. verwendet.
Wenn Sie zum ersten Mal anfangen, ist es möglicherweise schwierig zu verstehen, was X, Y, Z tatsächlich sind, und dies wird sich je nach Architektur des Prozessors ein wenig ändern. Sie sollten jedoch in der Lage sein zu verstehen, wie viel RAM, EEPROM und Flash Ihr Design benötigt und welche Peripheriegeräte Sie benötigen. Sie können eine Prozessorfamilie auswählen, die Ihren Speicher- und Peripherieanforderungen entspricht und über eine Vielzahl von Leistungsoptionen in dieser Familie verfügt. Zu diesem Zeitpunkt können Sie für die Entwicklung einfach den leistungsstärksten Prozessor der Familie verwenden. Sobald Sie Ihr Design implementiert haben, können Sie die Familie in Bezug auf Leistung auf eine kostengünstigere Option umstellen, ohne das Design oder die Entwicklungsumgebung zu ändern.
Wenn Sie genug von diesen Entwürfen gemacht haben, können Sie X, Y und Z besser einschätzen. Sie werden wissen, dass die BLDC-PI-Routinen, obwohl sie häufig ausgeführt werden, recht klein sind und nur sehr wenige Zyklen erfordern. Die USB- und seriellen Routinen erfordern viel Zeit, treten jedoch nur selten auf. Die Benutzeroberfläche benötigt einige Zyklen häufig, um Änderungen zu finden, es sind jedoch viele Zyklen erforderlich, um beispielsweise eine Anzeige zu aktualisieren.
quelle
Ich würde die Motorsteuerung trennen und einen separaten Mikrocontroller haben, der PWM (möglicherweise ein PIC18) für jeden der beiden BLDC-Motoren enthält, da die PI-Steuerung eine isolierte Aufgabe ist, sobald sie gestartet ist und Sie den Code schreiben kann es auf beiden micros benutzen. Sie können sie über eine Schnittstelle wie I²C wieder an den Haupt-Mikrocontroller anschließen und von dort aus die Parameter für die PI-Regelung herunterladen. Auf diese Weise können Sie sie in Ihrer GUI ändern.
Ich würde dann alles andere im Hauptmikrocontroller ausführen, wie zum Beispiel einen PIC24 (ein PIC32 ist wahrscheinlich übertrieben, basierend auf den von Ihnen aufgelisteten Aufgaben). Außerdem können die schnellsten PIC24E fast so schnell laufen wie ein PIC32.
Bei der Auswahl eines Mikrocontrollers schätze ich zuerst die benötigte Flash- und RAM-Größe und schaue dann auf die Wortlänge und die Prozessorgeschwindigkeit. Für die spätere Zeit ist es häufig am schwierigsten, die schnellste Unterbrechung zu erfüllen, mit der Sie rechnen. Wenn Sie beispielsweise einen 16-KHz-Sound ausgeben und alle 62,5 µs einen Interrupt haben, ist es besser, wenn Sie einen Mikrocontroller mit einer Befehlszeit von zehn Nanosekunden verwenden, oder Sie können ihn nicht warten und andere erhalten Arbeit erledigt.
quelle
Es gibt einen semi-formalen Ansatz, mit dem Sie Ihre Antwort erstellen können. Ich empfehle dringend, Kapitel 2 von White's "Designing Embedded Systems" zu lesen, das größtenteils bei Google Books erhältlich ist .
Dieses Kapitel befasst sich mit dem Entwurf von Systemarchitekturen und bietet einen halbformalen Ansatz, wie Sie Aufgaben am besten zusammenfassen können. Während es sich in diesem Kapitel hauptsächlich um Systeme mit einem Controller handelt, können problemlos mehrere Controller behandelt werden. Auf diese Weise können Sie sich vorstellen, welche Ressourcen gemeinsam genutzt werden müssen, und für jede Aufgabe den Grad der Kapselung festlegen.
Sie bietet eine Vielzahl von Ansichten, von denen ich eine unten zeige, aber es gibt viele nützliche Manipulationen. Das allein macht natürlich nicht viel Sinn, aber ich hoffe, es ermutigt Sie, das Kapitel zu lesen.
Was "wie kann ich wissen, ob ich genug Controller habe" betrifft, ist es meine eigene Vorliebe, so viel Energie wie möglich in meine Design-Sandbox zu stecken und dann herauszufinden, wie viele Ressourcen ich einsparen kann, wenn das Design gut ausgelastet ist Weg. Der Preisunterschied zwischen einem Mikrocontroller im Wert von 10 USD und einem Mikrocontroller im Wert von 3 USD für Prototyping-Zwecke liegt möglicherweise nur in wochenlangen Umrüstungen und dem Warten auf neue Teile, während das Design bei ausreichender Leistung immer in Bewegung bleiben kann.
quelle
Ich arbeite an einem System, das im Großen und Ganzen dem entspricht, was Sie beschreiben - Motoren, E / A, Anzeige, 3 UARTs + SPI + I2C, die auf einem Coldfire 52259 (32-Bit-Mikro mit mittlerer Reichweite ~ 80 MHz) ausgeführt werden Die richtige Software-Architektur ist wichtig - wir haben eine Menge Dinge, die auf Hardware und Interrupts laufen (alles, was die Hardware alleine kann, wir laufen in Hardware und Service mit Interrupts), und verlassen die main () -Schleife, um den gesamten Haushalt zu erledigen.
Persönlich mag ich die meisten RTOS nicht, die ich gesehen habe, am unteren Ende blähen sie ein Projekt auf, fügen eine weitere zu lernende Sache hinzu und Sie werden eine bessere Leistung von der Hardware erhalten, indem Sie Dinge direkt ausführen (unter Verwendung der verfügbaren Hardwarefunktionen + Interrupts). anstatt es mit Software zu fälschen.
Am oberen Ende, scheint in diesen Tagen gibt es so wenig Spielraum zwischen einer MCU zu sein , die zu komplex und leistungsstark genug ist , wirklich von einem RTOS und etwas (SoC) Vorteil , dass nur Linux Embedded läuft.
In diesem Fall würde ich jedoch sagen, dass es sinnvoll ist, kleine billige Mikros zu verwenden, um kritische Funktionen (z. B. Motorsteuerung, bei der das Timing oder das Anhalten an einem Grenzwert entscheidend ist) unter dem Befehl der Haupt- "Gehirn" -CPU auszuführen, sodass Sie sich nicht darauf verlassen können auf einem "Nicht-Echtzeit" -Betriebssystem, um zeitnah etwas zu tun.
quelle
Alle anderen Antworten sind besser, aber ich muss noch etwas hinzufügen, das vielleicht nützlich ist. Dies mag ein bisschen falsch sein und ich würde es gerne als Kommentar hinzufügen, aber es gibt eine Regel für 50 Wiederholungen :(
Kurze Antwort ist es hängt davon ab, siehe oben, aber warum nicht auch über die Vorteile des Prozessors nachdenken.
Warum nicht über die Vorteile kleinerer Prozessoren nachdenken? Dies ist immerhin eine Frage zu Prozessoren. Für mathematische und bestimmte nicht iterative Aufgaben können mehrere Prozessoren einen logarithmischen Boost erzeugen. Amdahls Regel besagt, dass ein Schub von erreicht werden kann1( ( 1 - p ) + ps) aber das kommt. P ist der Prozentsatz der Berechnung, der aufgeteilt werden kann, und s ist die Beschleunigung (abhängig von der Anzahl der Operationen, der Hardware usw.).
Natürlich Kosten, einfache Implementierung; usw. sind wichtig und noch wichtiger zu berücksichtigen.
quelle
Die Antwort kann von den Implementierungsdetails abhängen. Einige Aufgaben sind auf separaten Mikrocontrollern übersichtlicher und robuster zu implementieren. Der Stromverbrauch kann ebenfalls eine Überlegung sein - im Allgemeinen benötigt ein einzelnes Mikro für mehrere Aufgaben weniger Strom als mehrere Mikros für einzelne Aufgaben.
quelle
"Pferdestärke" ist zweitrangig, wenn Sie Ihre Echtzeitbeschränkungen erfüllen können.
Wenn Sie zwei PWM-Ausgänge haben und beide genau zur gleichen Zeit schalten müssen, müssen Sie über die erforderliche Parallelität verfügen, um dies zu tun. Wenn Sie einen dedizierten PWM-Controller haben, der sich um das exakte Timing kümmert, funktioniert dies auch mit einem eher kleinen Mikrocontroller, während eine GPIO-basierte Lösung selbst dann sehr komplex ist, wenn viel Rechenleistung zur Verfügung steht.
Bei den meisten Protokollen haben moderne MCUs eingebettete Implementierungen derjenigen Teile des Protokolls, für die Echtzeiteinschränkungen gelten. Wenn Sie also eine MCU finden, die die erforderlichen Peripheriegeräte und die erforderliche CPU-Geschwindigkeit für die Verarbeitung der Datenströme aufweist (dh, die harten Echtzeitanforderungen degenerieren in eine weiche Echtzeitanforderung des Formulars "wird in der Lage sein, aus dem FIFO zu lesen, bevor es voll ist, und schneller als es sich füllt"), wäre dies die optimale Wahl.
Wenn es keine solche Lösung gibt, können Sie entweder Funktionen mithilfe einer CPU + FPGA-Lösung (z. B. FPGA mit hartem ARM-Kern) oder einer reinen FPGA-Lösung (optional mit einer weichen CPU, abhängig von den Komplexitätsanforderungen) auf separate Controller übertragen.
quelle