Ich habe an einem eBike-Steuerungsprojekt für den Arduino MEGA2560 gearbeitet. Das Programm führt 3x PID-Regelkreise, einen Batteriekapazitätsregelkreis (Interpolation basierend auf Nachschlagetabellen), einen Tachometer (Abtastwerte basierend auf einem Reedschalter) sowie einen LCD-Bildschirm zur Anzeige von Informationen aus. Die Eingänge bestehen aus 3 analogen Signalen: Batteriespannung, Strom und Benutzer-Gaspedal sowie einem digitalen Eingang: Tachometer (Reed-Schalter) Ein / Aus-Signal. Derzeit schafft es das Arduino, 10 Schleifen pro Sekunde zu absolvieren, wenn all dies mit "langer" Arithmetik ausgeführt wird. Da der TFT-LCD-Bildschirm eine enorme Rechenleistung benötigt, denke ich darüber nach, ihn durch einen alphanumerischen Bildschirm zu ersetzen.
Die Ausgänge bestehen aus einem analogen Drosselsignal, das zu einer Motorsteuerung, dem LCD-Bildschirm und möglicherweise einigen anderen Geräten geleitet wird, die analoge Signale benötigen. Daher sind ADC-Wandler unerlässlich und DAC wäre sehr nützlich, obwohl ich derzeit den Arduino PWM-Ausgang mit einem RC-Tiefpassfilter verwende. Ebenso wäre die Fähigkeit, digitale und analoge Signale zu lesen, ohne den Prozessor zu unterbrechen, groß.
Ich möchte möglicherweise ein Verbraucherprodukt daraus machen, daher möchte ich meine eigene Plattform von Grund auf mit einem anderen Mikrocontroller aufbauen, der mir mindestens 100 Samples pro Sekunde liefern kann (das 10-fache dessen, was der Arduino erreicht). Um Gleitkommazahlen zu vermeiden, werden in meinen Berechnungen lange Variablen und folglich Zahlen verwendet, die größer als 16 Bit sind. Daher gehe ich davon aus, dass eine 32-Bit-MCU eine gute Idee wäre. Eine MCU, die Gleitkommaberechnungen durchführen kann, kann auch interessant sein, um die Mathematik im Code zu vereinfachen.
Letztendlich bin ich mir nicht sicher, wie ich anfangen soll, nach MCUs zu suchen, die diese Anforderungen erfüllen und einen schnellen Übergang von der Arduino-Umgebung ermöglichen. Jede Anleitung, wie man solche MCUs findet, wäre sehr dankbar!
quelle
Antworten:
(Dies ist ein allgemeiner Leitfaden. Ich vermute, Sie könnten auch von der Codeoptimierung profitieren, aber das liegt außerhalb des Bereichs dieser Website.)
Schritt 1: Grobe Größe, Budget, Anbieter
Wähle eines von:
Computer (Raspberry Pi, Beagleboard, PC104-Platine, Intel Edison usw.). Startet ein Allzweck-Betriebssystem und hat viel Rechenleistung. Teurer und macht hungrig. $ 10- $ 100.
Große MCU. ARM Cortex-A- / PIC32- / dsPIC- / AVR32- / TI C-Serie DSP usw. Anständige Rechenleistung, Betriebssystem optional. ~ 5 $.
Kleine MCU. Cortex-M / PIC16. Nicht wirklich genug Platz für ein echtes Betriebssystem, vielleicht nur ein leichter Taskplaner. ~ 2 $.
Kleine MCU. Nur wirklich für Anwendungen, bei denen Sie sich um die letzten Mikroampere des Stromverbrauchs kümmern. ~ 1 $ oder weniger.
Zu diesem Zeitpunkt sollten Sie auch überlegen, welche Anbieter und Toolchains Sie mögen und welche nicht. Schauen Sie sich die Kosten von Dingen wie In-Circuit-Debugging-Geräten und IDEs an.
Schritt 2: Minimale Peripheriegeräte
Benötigen Sie Dinge wie USB? PCI? HDMI? SATA? Ungewöhnlich schnelle ADCs oder DACs? Fast alle der "kleinen" oder "winzigen" Kategorien haben diese nicht, obwohl USB ziemlich weit verbreitet ist.
Schritt 3: Prototyp
Suchen Sie sich etwas aus, das die oben genannten Kriterien erfüllt, und starten Sie es gegebenenfalls nach dem Zufallsprinzip. Finden Sie heraus, wie realisierbar es ist und wie viel Speicherplatz / Rechenleistung Sie benötigen. Du hast schon einiges davon gemacht. Das Schreiben in C sollte einen Großteil der Logik portabel machen.
Sobald Sie den Prototypen haben, können Sie sich sagen: "Ich brauche einen solchen, aber mit mehr X" und lassen Sie sich von diesen Entscheidungen leiten.
Schritt 4: Schrumpfen
Im Allgemeinen ist es einfacher, mit dem größten Mitglied (mit den meisten Flash- und RAM-Speicher) einer CPU-Familie zu beginnen, Version 1 Ihrer Anwendung zu schreiben und dann eine kleinere, günstigere Version auszuwählen. Sie können auch Zeit damit verbringen, Software in weniger Ressourcen einzubauen. Was sich lohnt, hängt davon ab, wie viele Einheiten Sie herstellen werden.
quelle
Schönes Projekt. Hier sind ein paar Hinweise, aber es wäre schwierig, dies für jedes Projekt zu verallgemeinern.
Beginnen Sie mit den Rechenanforderungen
Hier erfahren Sie, welche Art von Kern Sie benötigen und welche allgemeinen Leistungen die MCU erbringt. Ich schlage vor, Sie beginnen damit, da es im Gegensatz zu Peripheriegeräten offensichtlich nicht mit externen Komponenten erweitert werden kann.
Erstens scheinen Sie schwere mathematische Operationen mit großen ganzen Zahlen innerhalb der Schleife zu verwenden. Wie Sie bereits angedeutet haben, wären 32-Bit-Dateien hier nützlich. Daher ist ARM ein idealer Kandidat. Was die Betriebsfrequenz betrifft: Derzeit verwenden Sie einen Arduino MEGA2560 (der mit 16 MHz läuft, nehme ich an) und können 10 Schleifen / s ausführen. Wenn Sie 100 Schleifen / s erreichen möchten, sollten Sie mit einem Cortex-M3 / M4 im Bereich von 100 MHz oder mehr zufrieden sein (grobe Schätzung). Beachten Sie, dass der Cortex-M4F eine Gleitkommaeinheit hat.
Wir haben die Auswahl bereits eingegrenzt.
Speicherbedarf
Dies ist ganz einfach: Wählen Sie die MCU, die für den Prototypen den meisten RAM / Flash-Speicher in ihrem Sortiment hat. Sobald Sie den Prototyp validiert haben, wechseln Sie zu der MCU aus demselben Bereich, der gerade über genügend RAM / Flash verfügt, und kennen Ihre genauen Anforderungen.
Beachten Sie, dass Ihre Anwendung meiner Meinung nach nicht viel Arbeitsspeicher benötigt.
Nun zu den Peripheriegeräten
Sie brauchen unbedingt einen ADC. Alle MCUs der Reihe, die wir betrachten, haben einige, also ist es kein nützliches Kriterium. Es gibt auch keine digitalen Ein- / Ausgänge, es sei denn, Sie benötigen eine sehr große Anzahl davon (was anscheinend nicht Ihr Fall ist).
Sie scheinen einen DAC zu brauchen. Dies ist jedoch etwas, das Sie nicht so einfach finden und das die Kandidaten zu sehr einschränken wird. Daher halten wir diese Anforderung nicht ein und bleiben bei PWM und Tiefpass (was tatsächlich durchaus akzeptabel ist).
Sie erwähnen keine Kommunikationsschnittstelle außer dem LCD (später). Auf jeden Fall haben alle MCUs I2C / SPI / UART / ..., wenn Sie welche brauchen.
Das LCD
Dieser ist kniffliger, weil es viele verschiedene Lösungen gibt, die ganz unterschiedliche Anforderungen an die MCU stellen. Wählen Sie das LCD jedoch nicht abhängig von der MCU. Wählen Sie die für Ihr Produkt gewünschte LCD-Anzeige und anschließend die MCU, die diese effizient steuert.
Jetzt wählst du
Gehen Sie zur ST Micro / NXP / Atmel-Website und verwenden Sie deren MCU-Auswahlwerkzeuge. Sie werden auch viel Zeit damit verbringen, Datenblätter zu lesen. Nimm dir diese Zeit. Es ist nicht verschwendet. Alles, was Sie hier lernen, auch wenn Sie es nicht speziell für dieses Projekt verwenden, kann nützlich sein.
Zu diesem Zeitpunkt müssen Sie auch die Anzahl der tatsächlich benötigten PINs überprüfen und das Multiplexing-Schema der ausgewählten MCU-Kandidaten überprüfen, um sicherzustellen, dass Sie alle benötigten PINs-Funktionen verwenden können. Da Sie natürlich die MCUs mit der niedrigsten Anzahl von Pins verwenden möchten, die Ihre Anforderungen erfüllen (aus Kosten- / PCB-Immobiliengründen).
Überprüfen Sie die Preise / Verfügbarkeit auf Mouser / Digikey. Hier sollte man aber nichts besonders Teueres brauchen. Vielleicht 5 € oder so.
Letzte Sache in Bezug auf die LCD-Steuerung
Es scheint, dass das Update des LCD Teil Ihrer Hauptschleife ist. Das sollte es nicht. Vor allem, wenn Sie 100-mal pro Sekunde eine Schleife spielen, ist dies nutzlos. Lassen Sie den Regelkreis alles berechnen und den Motorbefehl bei jeder Iteration anpassen, aktualisieren Sie jedoch nur die Werte, um sie irgendwo im Speicher anzuzeigen. Lassen Sie dann eine andere Schleife mit niedrigerer Priorität diese Informationen dem Benutzer anzeigen, wenn nichts Wichtigeres zu tun ist.
Ja, im Idealfall sind einige Aufgabenwechsel und andere Dinge erforderlich. Eigentlich ein echtes Betriebssystem (siehe FreeRTOS, Coocox OS, Nuttx, ... diese sind sehr klein, werden hauptsächlich in Cortex-M verwendet und bieten die erforderlichen Multitasking-Mechanismen).
quelle
Beachten Sie, dass dies ein umfassendes Thema ist, das mit mehreren (subjektiven) Ansätzen richtig beantwortet werden kann.
Das Stapelaustauschformat eignet sich auch nicht zum Entwerfen von Problemlösungen. Zum Beispiel lassen Sie selten Leute Hardware für Sie entwerfen. Sie schlagen vielmehr ein Hardware-Design vor und stellen Fragen dazu.
Das gesagt...
Beginnen Sie mit Funktionen des Prozessors, die Sie nicht ändern können. Wie Geschwindigkeit und Speichergröße (falls zutreffend). Untersuchen Sie, ob Sie Interrupts benötigen und wie komplex die Interrupt-Behandlung sein muss.
Wenn Sie periphere Unterstützung wie ADCs oder DACs benötigen, ist die Situation komplexer. Sollten diese Funktionen in den Prozessor integriert sein oder sich außerhalb des Prozessors befinden? Preis, Genauigkeit und sogar Lärm sind Faktoren bei dieser Entscheidung.
Wenn externe Peripheriegeräte unterstützt werden sollen, berücksichtigen Sie die Art der erforderlichen seriellen Kommunikation. Externe Hardware benötigt möglicherweise SPI, I2C oder einen anderen UART-Typ. Wenn die Datenrate hoch ist, ist es möglicherweise am besten, einen Prozessor mit DMA-Funktionen zu finden, die mit seinen seriellen Kommunikationsports verknüpft sind.
Wenn es sich um eine eingebettete Prozessoranwendung handelt (was normalerweise einen für eine Aufgabe bestimmten Prozessor bedeutet), sollten Sie die Anforderungen in mehrere Gruppen aufteilen und jedem einen Prozessor zuweisen. Beispielsweise benötigt ein GUI-Anzeigeprozessor wahrscheinlich keine ADC-Funktion. Dieser objektive Lösungsansatz hat sich in der Software bewährt und kann mit sinkenden Prozessorpreisen auch auf die Hardware übertragen werden.
In der realen Welt ist dieser Ansatz iterativ. Das heißt, viele Projekte beginnen mit einem Prozessor und tauschen verschiedene Prozessoren aus, wenn Hardware- und / oder Softwareprobleme auftreten oder sich der Umfang des Projekts ändert.
quelle
Ich habe niemanden gesehen, der die Kosten für Werkzeuge erwähnte. Meine Firma entschied sich für einen TI CC2541 und fand heraus, dass dieser nur mit einem 4.000-Dollar-IAR-Compiler kompiliert wurde, definitiv ein Show-Stopper für einen Bastler. Auch der Programmierer. Es kann ein $ 20 oder viel mehr sein. Billigeres Werkzeug scheint heute eher die Norm zu sein. Vielleicht gehört dies bald der Vergangenheit an.
Wenn Sie es selbst reflowen, sind Pakete wie TQFP auch einfacher als beispielsweise BGA. Eine große BGA ist aufgrund persönlicher Erfahrungen schwer zu finden.
quelle
Wenn das Produkt relativ preissensitiv ist und Sie über eine angemessene Entwicklungsfinanzierung verfügen, können Sie eine Reihe von Evaluierungsplatinen beschaffen und den Code auf jedem Board profilieren, um eine Vorstellung davon zu bekommen. Das sollte ziemlich einfach sein, wenn Ihr Code in portablem C geschrieben ist. Abgesehen von dem Mikro werden Sie die Toolchains mit Demo-Versionen evaluieren, bevor Sie die Kosten einer vollständigen IDE wie IAR oder Keil herausfinden. In einigen Fällen können Sie den Engpasscode direkt in der IDE ohne Hardware profilieren.
Wenn Sie die Entwicklungskosten stark einschränken, müssen Sie möglicherweise Kompromisse eingehen, um etwas zu finden, das für das Entwicklungssetup nicht zu viel kostet.
Zum Beispiel hat ST ein ARM Cortex M7-Evaluierungsboard mit einem schönen Farbdisplay für <100 US-Dollar. Es verfügt über eine FPU mit DSP-Funktionen, sodass Sie alles, worüber Sie gesprochen haben, problemlos ausführen können. Führen Sie wahrscheinlich eine PID-Schleife mit 100 kHz und nicht nur mit 100 Hz aus. Es ist wahrscheinlich übertrieben, es sei denn, diese Anzeige hat Priorität.
Wenn Sie einen günstigeren Prozessor ohne FPU anstreben, möchten Sie wahrscheinlich den PID-Code in seiner fertigen Form profilieren. Stellen Sie sicher, dass alle Skalierungs-, Linearisierungs- und Kalibrierungsfaktoren enthalten sind, da sie sich in Bezug auf die Verarbeitungszeit summieren können.
Oft haben die Peripheriegeräte und die damit verbundene Middleware-Qualität und -Verfügbarkeit (sowie die Lizenzbedingungen) starken Einfluss auf Ihre Wahl. Wenn Sie BT- oder WLAN- oder USB-Host-Modus und FAT-Dateien zum Speichern auf einem USB-Stick oder einer schnellen SD-Schnittstelle benötigen, sind diese Faktoren von Bedeutung. Einige Chips verfügen über einen integrierten LCD-Controller und einen Digitizer-Controller, die die Verwendung eines relativ kostengünstigen TFT-Panels ermöglichen. Übersehen Sie nicht die manchmal hohen Lizenzgebühren.
Wenn Sie eine Vorstellung vom benötigten Programmspeicher, der Verarbeitungsgeschwindigkeit und den Peripheriegeräten (einschließlich FPU) haben, können Sie beim Distributor eine parametrische Suche durchführen, bevor Sie die Datenblätter durchforsten. Einige Dinge, die zu einschränkend sind, können sein: Durchgangspaket, interner DAC, interner Ethernet-PHY, FPU. Keines davon ist wahrscheinlich notwendig und kann Ihre Auswahl vorzeitig übermäßig einschränken.
Viel Glück damit, es ist eine Menge Arbeit, dies richtig zu machen. Nach meiner Erfahrung ist es eine falsche Wirtschaftlichkeit, bei einem neuen Produkt zu kurz zu kommen, da die Kunden unweigerlich nach Dingen fragen, mit denen Sie nicht gerechnet haben, und Sie möchten über Kapazitätsreserven verfügen, um diese zu liefern, ohne von vorne anzufangen. Wenn das Produkt andererseits zu teuer ist, können Sie nicht genug mit ausreichenden Margen verkaufen, um das Geschäft aufrechtzuerhalten.
quelle
Es gibt verschiedene Plattformen wie Arduinos, PIC-Mikrocontroller, FPGAs und vieles mehr. Ich habe in der Vergangenheit mit Arduinos gearbeitet und es hat einen ADC-Port, der 74kS / s erreichen kann. 100 Samples pro Sekunde sind extrem langsam und ich frage mich, wie Sie das herausgefunden haben? Andererseits möchten Sie sich fragen, ob Sie Schnittstellen wie SPI, CAN, I2C oder UARTs benötigen. Sie alle können ihre eigenen Vorteile haben und es liegt an Ihnen, zu überlegen, ob Sie mit einem oder mehreren Sklaven sprechen. Der letzte, aber wahrscheinlich wichtigste Schritt wäre, zu erraten, wie viele Pins auf dem Mikrocontroller Sie verwenden müssen.
"Die Fähigkeit, analoge und digitale Signale zu lesen, ohne den Prozessor zu unterbrechen, wäre großartig." Ich kann nur vermuten, dass Sie sich nicht mit externen oder internen Puffern befassen möchten, die Ihre Daten verbreiten und möglicherweise Ihre Datenverarbeitung verlangsamen. Ist das richtig? Wenn ja, ist das mehr Programmieraufwand für Sie, aber Prozessoren sind normalerweise in der Lage, die Geschwindigkeit von 100 Samples pro Sekunde zu bewältigen. Es liegt an Ihnen, die Uhr, die Abtastrate und den Rest zu programmieren.
Berücksichtigen Sie auch Unterbrechungen in Ihrem Programm, wenn Sie die Daten kontinuierlich abfragen und andere Aufgaben ausführen möchten, wenn ein Flag gesetzt ist.
quelle