Comment puis-je établir une liste d'exigences pour un microcontrôleur pour mon projet? Comment puis-je trouver des microcontrôleurs adaptés?


20

Je travaille sur un projet de contrôle eBike sur l'Arduino MEGA2560. Le programme exécute 3 boucles de contrôle PID, une boucle de contrôle de la capacité de la batterie (interpolation basée sur des tables de recherche), un compteur de vitesse (échantillons basés sur un commutateur à lames) ainsi qu'un écran LCD pour afficher les informations. Ses entrées sont 3 signaux analogiques: tension de batterie, courant et entrée d'accélérateur utilisateur ainsi qu'une entrée numérique: signal marche / arrêt du compteur de vitesse (interrupteur à lames souples). Actuellement, avec tout cela fonctionnant sur une arithmétique "longue", l'Arduino parvient à effectuer 10 boucles par seconde. Comme l'écran LCD TFT consomme énormément de puissance de calcul, je pense à le remplacer par un écran alphanumérique.

Les sorties se composent d'un signal d'accélérateur analogique allant vers un contrôleur de moteur, l'écran LCD et potentiellement quelques autres appareils nécessitant des signaux analogiques. Ainsi, les convertisseurs ADC sont essentiels et le DAC serait très utile bien que j'utilise actuellement la sortie Arduino PWM avec un filtre passe-bas RC. De même, la capacité de lire des signaux numériques et analogiques sans interrompre le processeur serait grande.

Je voudrais potentiellement créer un produit de consommation à partir de cela, donc je veux construire ma propre plate-forme à partir de zéro avec un microcontrôleur différent qui pourrait me donner au moins 100 échantillons par seconde (10 fois ce que l'Arduino réalise). De plus, pour éviter les virgules flottantes, mes calculs utilisent des variables longues et par conséquent des nombres supérieurs à 16 bits, donc je suppose qu'un MCU 32 bits serait une bonne idée. De plus, un MCU capable de faire des calculs en virgule flottante pourrait être intéressant pour simplifier les calculs dans le code.

En fin de compte, je ne sais pas comment commencer à chercher des microcontrôleurs qui satisferaient à ces exigences et permettraient une transition rapide à partir de l'environnement Arduino. Tout conseil sur la façon de trouver de tels microcontrôleurs serait grandement apprécié!


1
Je ne veux pas nécessairement être des pièces recommandées, mais juste une méthode ou une plate-forme ou des conseils sur la façon de trouver la plate-forme dont j'ai besoin.
Eliott W

5
C'est beaucoup mieux que votre question précédente, mais elle reste très large et certains points de vos exigences ne sont pas clairs. Par exemple, que voulez-vous dire, "sans interrompre le processeur"? Je suppose que vous ne voulez pas non plus vraiment faire d'E / S interrogées. Vous devez également avoir une meilleure idée de la quantité exacte de calcul à effectuer sur chaque ensemble d'échantillons.
Dave Tweed

1
Vous devriez envisager d'utiliser des mathématiques entières. C'est ce qu'il faut faire.
Scott Seidman


4
Les mathématiques entières, longues ou courtes, sont beaucoup plus rapides que les virgules flottantes; et les mathématiques entières plus longues que la profondeur de bits "native" du processeur seront également lentes. Donc, le 32 bits semble être une très bonne idée, peut-être l'un des périphériques de type "DSP".
pjc50

Réponses:


18

(Il s'agit d'un guide générique. Je suppose que vous pourriez également bénéficier de l'optimisation du code, mais cela n'entre pas dans le cadre de ce site Web.)

Étape 1: Dimensionnement approximatif, budget, fournisseur

Choisissez parmi:

  • Ordinateur (Raspberry Pi, Beagleboard, carte PC104, Intel Edison, etc.). Démarre un système d'exploitation à usage général et dispose d'une grande puissance de traitement. Plus cher et gourmand en énergie. 10 $ - 100 $.

  • Grand MCU. ARM Cortex-A / PIC32 / dsPIC / AVR32 / TI C DSP etc. Puissance de calcul décente, OS en option. ~ 5 $.

  • Petit MCU. Cortex-M / PIC16. Pas vraiment assez d'espace pour un vrai système d'exploitation, peut-être juste un planificateur de tâches léger. ~ 2 $.

  • Tiny MCU. Ce n'est vraiment que pour les applications où vous vous souciez de chaque dernier microampère de consommation d'énergie. ~ 1 $ ou moins.

Vous devez également considérer à ce stade les fournisseurs et les chaînes d'outils que vous aimez et n'aimez pas. Jetez un œil au coût de choses comme les dispositifs de débogage en circuit et les IDE.

Étape 2: Périphériques minimum

Avez-vous besoin de choses comme USB? PCI? HDMI? SATA? ADC ou DAC inhabituellement rapides? Presque toutes les catégories «petites» ou «minuscules» n'en ont pas, bien que l'USB soit assez largement disponible.

Étape 3: Prototype

Choisissez quelque chose qui répond aux critères ci-dessus, au hasard si nécessaire, commencez, découvrez comment cela est possible et combien d'espace / puissance de traitement dont vous avez besoin. Vous en avez déjà fait une partie. L'écriture en C devrait rendre une grande partie de la logique portable.

Une fois que vous avez le prototype, vous pouvez vous dire: "J'en ai besoin comme ça, mais avec plus de X" et laissez cela guider vos décisions.

Étape 4: rétrécir

Il est généralement plus facile de commencer avec le plus grand membre (le plus de Flash et de RAM) d'une famille de CPU, d'écrire la version 1 de votre application, puis de choisir une plus petite et moins chère à adapter. Vous pouvez également consacrer du temps à l'art d'intégrer des logiciels dans moins de ressources. Ce qui en vaut la peine dépend du nombre d'unités que vous allez faire.


14
Étape 0: Chaîne d'outils (environnement de développement de firmware). Trouvez un ou des environnements de développement que vous pouvez faire fonctionner pour vous. C'est là que c'est gagné ou perdu. Même si vous disposez d'un silicium parfaitement adapté, mais que vous ne pouvez pas faire fonctionner l'environnement de développement de micrologiciel (pour une raison quelconque), votre projet ne démarrera pas. (Exemple: l'Arduino IDE a lancé votre prototype basé sur Arduino.)
Nick Alexeev

8
Catégoriser Cortex-M en tant que "Small MCU" et PIC32 / AVR32 en tant que "Large MCU" semble un peu malheureux. Je n'ai pas utilisé PIC32 / AVR32, personnellement, mais sur la base d'un bref aperçu de la gamme de spécifications, je dirais qu'elles devraient toutes être dans le même support. (Il existe des microcontrôleurs Cortex-M qui fonctionnent à> 200 MHz, ont plusieurs mégaoctets de flash et plus d'un demi-mégaoctet de RAM)
Aleksi Torhamo

13

Beau projet. Voici quelques conseils, mais il serait difficile de généraliser cela pour chaque projet.

Commencez avec les exigences de calcul

C'est ce qui vous indiquera le type de noyau dont vous avez besoin et les performances générales du MCU. Je vous suggère de commencer par cela, car il ne peut évidemment pas être étendu à l'aide de composants externes, contrairement aux périphériques.

Tout d'abord, il semble que vous utilisiez des opérations mathématiques lourdes avec de grands nombres entiers dans la boucle. Donc, comme vous l'avez suggéré, 32 bits serait utile ici, donc ARM est donc un candidat idéal. Quant à la fréquence de fonctionnement: actuellement, vous utilisez un Arduino MEGA2560 (fonctionnant à 16 MHz, je suppose) et vous pouvez faire 10 boucles / s. Si vous voulez atteindre 100 boucles / s, vous devriez être bien avec un Cortex-M3 / M4 dans la gamme de 100 MHz ou plus (estimation approximative). Notez que le Cortex-M4F possède une unité à virgule flottante.

Nous avons déjà réduit la sélection.

Besoins en mémoire

Celui-ci est simple: choisissez le MCU qui a le plus de RAM / Flash de sa gamme pour le prototype. Une fois que vous avez validé le prototype, passez au MCU de la même gamme qui a juste assez de RAM / Flash, maintenant que vous connaissez vos besoins exacts.

Notez que je ne pense pas que votre application ait besoin de quantités de mémoire incroyables.

Maintenant, les périphériques

Vous avez absolument besoin d'un ADC. Tous les MCU de la gamme que nous examinons en ont, donc ce n'est pas un critère utile. Les entrées / sorties numériques ne le sont pas non plus, sauf si vous en avez besoin d'un très grand nombre (ce qui ne semble pas être le cas).

Vous semblez avoir besoin d'un DAC. Cependant, c'est quelque chose que vous ne trouverez pas facilement et qui restreindra trop les candidats. Donc, nous ne respectons pas cette exigence et nous resterons avec un PWM et un passe-bas (ce qui est certainement acceptable, en fait).

Vous ne mentionnez aucune interface de communication, sauf l'écran LCD (plus loin). Quoi qu'il en soit, tous les MCU ont I2C / SPI / UART / ... si vous en avez besoin.

L'écran LCD

Celui-ci est plus délicat, car il existe de nombreuses solutions différentes qui imposent des exigences complètement différentes au MCU. Mais ne choisissez pas l'écran LCD en fonction du MCU. Choisissez l'écran LCD que vous souhaitez pour votre produit, puis sélectionnez le MCU qui le pilotera efficacement.

  • Si vous voulez un écran LCD à caractères: alors le plus simple et le moins contraignant pour le MCU est de parler avec lui via une interface série (souvent SPI). De cette façon, il n'utilisera pas trop de PIN, vous pouvez utiliser des MCU plus petits / moins chers et la vitesse n'est pas un problème.
  • Si vous voulez un écran LCD TFT graphique: s'il est petit, la liaison série peut toujours être appropriée. Cependant, pour 320x200 ou plus et si vous voulez avoir une belle interface graphique, vous commencerez à vouloir communiquer avec une interface parallèle. Dans ce cas, soit vous utilisez un GPIO (mais cela mettra plus de charge sur le MCU car vous devrez mordre les lignes de contrôle) ou vous choisissez un MCU qui a une interface LCD dédiée (qui est souvent la même chose qu'un interface de mémoire externe). Ce dernier met une forte contrainte du choix MCU, mais vous n'avez pas d'autres contraintes fortes, alors ...

Maintenant, vous choisissez

Accédez au site Web de ST Micro / NXP / Atmel et utilisez leurs outils de sélection MCU. Vous passerez également beaucoup de temps à lire des fiches techniques. Prenez ce temps. Ce n'est pas perdu. Tout ce que vous apprendrez ici, même si vous ne l'utilisez pas spécifiquement pour ce projet, peut être utile.

À ce stade, vous devez également consulter le nombre de codes PIN dont vous aurez réellement besoin et vérifier le schéma de multiplexage des candidats MCU choisis pour vérifier que vous pouvez utiliser toutes les fonctions PIN dont vous avez besoin. Parce que, évidemment, vous voudrez prendre les MCU avec le plus petit nombre de broches qui répondent à vos exigences (pour des raisons de coût / immobilier PCB).

Vérifiez les prix / disponibilités sur Mouser / Digikey. Mais vous ne devriez pas avoir besoin de quelque chose de particulièrement cher ici. Peut-être 5 € environ.

Dernière chose concernant le contrôle LCD

Il semble que la mise à jour de l'écran LCD fasse partie de votre boucle principale. Ça ne devrait pas. Surtout si vous bouclez 100 fois par seconde, c'est inutile. Faire en sorte que la boucle de contrôle calcule tout et ajuste la commande du moteur à chaque itération, mais il suffit de mettre à jour les valeurs pour les afficher quelque part en mémoire. Ensuite, demandez à une autre boucle de priorité inférieure d'afficher ces informations à l'utilisateur lorsqu'il n'y a rien de plus important à faire.

Oui, idéalement, cela nécessite un changement de tâche et d'autres choses. Un vrai OS, en fait (recherche FreeRTOS, Coocox OS, Nuttx, ... ceux-ci sont très petits, sont largement utilisés sur Cortex-M, et fournissent les mécanismes multitâches requis).


Merci beaucoup pour votre réponse complète! Je remarque que les MCU ARM Cortex fonctionnent tous sur 3,3 V. Mon signal d'accélérateur doit être mis à l'échelle entre 1 et 5 V. Je suppose que si je veux utiliser un contrôleur ARM, je devrai trouver un moyen d'augmenter la tension car elle sera plafonnée à 3,3 V par le MCU?
Eliott W

Oui. Le signal d'accélérateur est la sortie analogique, non? Dans ce cas, vous pouvez utiliser un ampli-op pour l'amplifier.
dim

Je ne suis pas sûr d'être d'accord avec la dernière phrase sur l'exigence d'un "vrai OS". Je suppose que cela dépend de la quantité de solutions toutes faites que vous souhaitez. Si vous voulez quelque chose où vous pouvez simplement insérer votre logique métier et commencer à frapper des unités, oui, un système d'exploitation complet (notez que cela ne signifie pas nécessairement quelque chose comme Windows ou même Linux!) Est certainement utile.
un CVn du

1
@ MichaelKjörling bien sûr, je ne voulais pas dire quelque chose, même à distance comme Linux. Mais plutôt quelque chose comme FreeRTOS, Coocox OS ou Nuttx, par exemple. Ce sont ce que je considère comme de vrais OS, bien que très petits. Je l'ai écrit parce qu'en effet, faire cela sur du bare-metal prendra plus de temps, sera pénible à déboguer et moins flexible. Et l'environnement Arduino (bien que je sois loin d'être un expert en la matière) ne semble pas fournir de mécanismes de tâche (et, en tant que tel, je ne le considère pas comme un véritable système d'exploitation).
dim

1
Ah. Eh bien, j'ai mal lu la partie "réelle". Juste pour le bénéfice de nous autres étrangers qui finissons parfois ici, vous voudrez peut-être envisager de clarifier cette partie de votre réponse.
un CVn du

4

Notez qu'il s'agit d'un vaste sujet auquel il est possible de répondre correctement en utilisant plusieurs approches (subjectives).

En outre, le format stackexchange n'est pas bon pour concevoir des solutions aux problèmes. Par exemple, vous demandez rarement aux gens de concevoir du matériel pour vous. Vous proposez plutôt une conception matérielle et posez des questions à ce sujet.

Cela dit...

Commencez avec les fonctionnalités du processeur que vous ne pouvez pas modifier. Tels que la vitesse et la taille de la mémoire (le cas échéant). Vérifiez si vous avez besoin d'interruptions et à quel point la gestion des interruptions doit être complexe.

Si vous avez besoin d'un support périphérique tel que des ADC ou des DAC, la situation est plus complexe. Ces fonctionnalités doivent-elles être intégrées au processeur ou être externes au processeur? Le prix, la précision et même le bruit sont des facteurs dans cette décision.

Si des périphériques externes doivent être pris en charge, tenez compte du type de communications série nécessaires. Le matériel externe peut nécessiter SPI, I2C ou un autre type d'UART. Si le débit de données est élevé, il peut être préférable de trouver un processeur avec des fonctionnalités DMA associées à ses ports de communication série.

Enfin, s'il s'agit d'une application de processeur intégré (ce qui signifie normalement un processeur dédié à une tâche), envisagez de diviser les exigences en plusieurs groupes et d'affecter un processeur à chacun. Par exemple, un processeur d'affichage GUI n'a probablement pas besoin d'une fonction ADC. Cette approche objective de la résolution de problèmes s'est avérée un succès dans les logiciels et, avec la baisse des prix des processeurs, elle peut également être appliquée au matériel.

Dans le monde réel, cette approche est itérative. En d'autres termes, de nombreux projets démarrent avec un seul processeur et remplacent différents processeurs en cas de problèmes matériels et / ou logiciels ou de l'étendue du projet.


Vous êtes un meilleur juge du type de nombres à attendre que le compilateur. J'éviterais l'approche générique de l'utilisation de flotteurs. Par exemple, il se peut que les résultats flottants ne soient pas les mêmes sur différentes plateformes! J'utiliserais l'arithmétique entière et adapterais la solution à vos besoins.
st2000

3

Je n'ai vu personne mentionner le coût des outils. Mon entreprise a choisi une TI CC2541 et a découvert qu'elle n'était compilée qu'avec un compilateur IAR de 4 000 $, certainement un bouchon d'exposition pour un amateur. Aussi le programmeur. Cela peut être 20 $ ou plus. Les outils moins chers semblent plus la norme maintenant, alors ce sera peut-être bientôt chose du passé.

De plus, si vous le redistribuez vous-même, des packages comme TQFP sont plus faciles que, disons, BGA. Un grand BGA est difficile à obtenir correctement, sur la base de son expérience personnelle.


2

Si le produit est relativement sensible aux prix et que vous disposez d'un financement de développement décent, vous pouvez vous procurer un tas de tableaux d'évaluation et profiler le code sur chacun pour vous faire une idée. Cela devrait être assez simple si votre code est écrit en C. portable.En plus du micro, vous évaluerez les chaînes d'outils avec des versions de démonstration avant de crier le coût d'un IDE à part entière comme IAR ou Keil. Dans certains cas, vous pouvez profiler le code de goulot d'étranglement directement sur l'IDE sans matériel.

Si vous êtes fortement limité sur les coûts de développement, vous devrez peut-être faire des compromis pour trouver quelque chose qui ne coûte pas trop cher pour la configuration de développement.

Par exemple, ST a une carte d'évaluation ARM Cortex M7 avec un bel écran couleur pour <100 $. Il a un FPU avec des fonctionnalités DSP pour que vous puissiez faire tout ce dont vous avez parlé facilement - exécutez probablement une boucle PID à 100 kHz plutôt qu'à 100 Hz. C'est probablement exagéré à moins que cet affichage ne soit une priorité.

Si vous visez un processeur moins cher sans FPU, vous souhaiterez probablement profiler le code PID dans sa forme finale. Assurez-vous que tous les facteurs de mise à l'échelle et de linéarisation et d'étalonnage sont inclus, car ils peuvent s'additionner en termes de temps de traitement.

Souvent, les périphériques et la qualité et la disponibilité (et les conditions de licence) des middlewares associés influencent fortement votre choix. Si vous avez besoin du mode hôte BT ou Wifi ou USB et des fichiers FAT pour les stocker sur une clé USB, ou une interface SD rapide, tous ces facteurs seront importants. Certaines puces ont un contrôleur LCD intégré et un contrôleur de numériseur qui peuvent permettre l'utilisation d'un panneau TFT relativement peu coûteux. Ne négligez pas les frais de licence parfois élevés.

Si vous avez une idée de la mémoire du programme requise, de la vitesse de traitement et des périphériques (y compris FPU), vous pouvez effectuer une recherche paramétrique au niveau du distributeur avant de descendre dans les fiches techniques. Certaines choses qui sont trop contraignantes pourraient être - le paquet traversant, le DAC interne, l'Ethernet PHY interne, le FPU. Aucun de ces éléments n'est probablement nécessaire et ils peuvent indûment restreindre vos choix prématurément.

Bonne chance, c'est beaucoup de travail pour le faire correctement. D'après mon expérience, c'est une fausse économie de le couper trop près d'un nouveau produit parce que le (s) client (s) demandera inévitablement des choses que vous n'aviez pas prévues et vous voulez avoir une certaine capacité de réserve pour l'approvisionner sans recommencer. En revanche, si le produit est trop cher, vous ne pourrez pas vendre suffisamment à des marges adéquates pour soutenir l'entreprise.


1

Il existe plusieurs plates-formes différentes que vous pouvez commencer à regarder comme Arduinos, microcontrôleurs PIC, FPGA et bien plus encore. J'ai travaillé avec Arduinos dans le passé et il a un port ADC capable d'atteindre 74kS / s. 100 échantillons par seconde est extrêmement lent et je me demande comment vous avez découvert cela? D'autre part, vous voulez vous demander si vous aurez besoin de tout type d'interfaces telles que SPI, CAN, I2C ou UART. Ils peuvent tous avoir leurs propres avantages et c'est à vous de voir si vous allez parler à un ou plusieurs esclaves. La dernière étape, mais probablement la plus importante, serait de deviner le nombre de broches du microcontrôleur que vous devrez utiliser.

"La capacité de lire des signaux analogiques / numériques sans interrompre le processeur serait formidable." Je peux faire une supposition folle en disant que vous ne voulez pas traiter avec des tampons externes ou internes qui feront circuler vos données et potentiellement ralentir votre traitement de données. Est-ce correct? Si c'est le cas, c'est plus de programmation pour vous, mais les processeurs sont généralement capables de gérer la vitesse de 100 échantillons par seconde. Ce sera à vous de programmer l'horloge, la fréquence d'échantillonnage et le reste.

Envisagez également des interruptions dans votre programme si vous souhaitez conserver des données d'échantillonnage en continu et effectuer d'autres tâches lorsqu'un indicateur est levé.


2
Je pense que vous avez manqué le point. Il a un prototype construit sur un Arduino. L'échantillonnage n'est pas lent. Les boucles de contrôle SONT lentes. Il a trois contrôleurs PID calculés en virgule flottante sur l'Arduino, ils sont donc plus lents que la mélasse en hiver antarctique. L'échantillonnage n'est donc pas le problème. Le code inefficace est.
JRE

Vous avez raison à ce sujet.
12Lappie

Oui, le problème est que même si mes boucles sont en arithmétique longue et non en virgule flottante, il y a tellement de calculs à faire que comme l'Arduino prend un échantillon une fois par boucle, ma fréquence d'échantillonnage est très petite (actuellement 20 échantillons par seconde) .
Eliott W
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.