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é!
la source
Réponses:
(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.
la source
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.
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).
la source
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.
la source
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.
la source
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.
la source
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é.
la source