Quel microcontrôleur dois-je utiliser?

10

J'essaie de trouver le meilleur package de microcontrôleur pour que mes programmes informatiques communiquent avec le monde réel. J'espère un grand nombre de broches d'E / S (jusqu'à présent, 64 numériques sont tout ce dont j'ai besoin, rien de spécial comme analogique et PWM) que je peux lire et écrire directement en appelant des fonctions de mon programme exécuté sur mon CPU.

Je ne veux pas télécharger de programmes sur le micro contrôleur lui-même pour l'exécuter, je voudrais plutôt quelque chose qui se branche simplement sur mon USB et me donne un tas de broches d'E / S contrôlées par le processeur que je peux contrôler à partir de mes programmes C ++.

Quel serait le meilleur package de micro-contrôleur pour moi? J'espère quelque chose qui est assez peu coûteux mais à l'épreuve du temps, car il fonctionne via USB et possède des pilotes 64 bits pour un système d'exploitation moderne comme Windows 7. Pouvoir interfacer plus d'un de ces micro-contrôleurs avec le même programme informatique serait un bon bonus aussi (extension future).

Edit: je n'ai pas besoin de taux d'échantillonnage élevés (peut-être 10 Hz pour la lecture des entrées, 1 kHz pour les signaux de sortie) et la plupart des broches sont utilisées pour la sortie uniquement. Je travaille avec de nouveaux ordinateurs (core i7 860) donc même si l'échantillonnage est un peu inefficace ou lent, ça devrait quand même être correct (juste un thread dédié aux E / S et le programme principal communique avec lui).

Je n'ai pas non plus besoin des 64 broches d'E / S sur un seul boîtier de micro contrôleur. Si je peux interfacer plusieurs packages de microcontrôleurs en même temps, cela fonctionnerait aussi (en fait, il serait idéal de pouvoir interfacer de nombreux packages de microcontrôleurs plus petits, ce qui signifie qu'il est facile à étendre).

J'ai regardé ceci: http://www.schmalzhaus.com/UBW32/index.html

Quelqu'un at-il eu une expérience avec quelque chose comme ça? Une idée si cela fonctionnera ou non? La principale préoccupation est que c'est le micro contrôleur qui exécute le programme, pas mon CPU.

Faken
la source
1
De quel débit de données avez-vous besoin?
Kevin Vermeer
@reemrevnivek: j'estime qu'il me faudrait environ 10 Hz d'échantillonnage pour les entrées et 1 kHz pour les sorties, des E / S très lentes.
Faken
Dans votre cas, le projet que vous avez trouvé fonctionnera probablement très bien. C'est un système déjà mis en place (aucune soudure nécessaire n'est toujours agréable) et semble avoir un firmware très basique pour vous donner accès à tous les ports dont vous avez besoin. De faibles taux d'échantillonnage signifient que la connexion série fonctionnera suffisamment bien. 40 $ ne vous mettra pas en faillite, non? Si c'est le cas, essayez-le avant d'envisager une solution plus coûteuse.
Wouter Simons

Réponses:

4

Faken,

L'UBB32 est un très bon chemin à parcourir, d'après ce que je peux dire de vos besoins. Il prendra en charge exactement ce dont vous avez besoin, tant que vous êtes d'accord avec 3,3 VI / O (certains sont tolérants à 5 V, mais pas tous.) Il est peu coûteux (40 $) et il est très facile de parler en utilisant n'importe quelle langue qui peut prendre en charge ports série (qui sont à peu près tous - de base, C, C #, traitement, etc.)

Vous pouvez utiliser n'importe laquelle des 76 broches d'E / S comme entrées ou sorties. Le micrologiciel d'origine tel qu'il est expédié vous permettra de faire ce que vous voulez faire, aucune programmation requise du côté intégré. Obtenir ces données sur le PC via USB (à seulement 10 Hz) ne posera aucun problème. Obtenir des sorties à 1 kHz fonctionnera probablement très bien également.

Si vous avez des questions, faites-le moi savoir. Je suis heureux de vous aider.

* Brian Schmalz créateur UBW32

EmbeddedMan
la source
Belle planche, mr. Schmalz
Wouter Simons
Eh bien, c'est réconfortant de défi. Être ingénieur en mécanique pour commencer et en savoir peu sur la programmation et encore moins sur l'électronique; une plate-forme préconfigurée qui s'interface avec C / C ++ est exactement ce dont j'avais besoin pour gérer l'aspect de la programmation électronique et microcontrôleur. Merci de votre aide!
Faken
9

Je recommande un Teensy ++ 2.0 (ou toute autre carte de développement AT90USB1286)

128 Ko de mémoire Flash, 8 Ko de RAM, 46 broches d'E / S, 8 entrées analogiques

24 $

Les cartes Teensy sont alimentées par USB et peuvent fournir un port COM virtuel (USB Communications Device Class). Vous pouvez utiliser cette liaison série pour votre protocole de contrôle des broches. Cela fonctionne sans pilote personnalisé sous Windows, OSX et Linux.

Pour créer le firmware de contrôle des broches, il y a TeensyDuino ou un simple vieux C.

Lorsque vous frappez des bits, le goulot d'étranglement sera l'interface USB du microcontrôleur. Donc, vous voudrez peut-être déplacer les protocoles tels que I2C et SPI vers le microcontrôleur. Pour cela, vous pouvez utiliser mon Bus Ninja .

L'ajout de Teensies supplémentaires à votre configuration est simple, il vous suffit d'un port USB par appareil, présentant un port COM virtuel par appareil.

(Remarque. Cette approche fonctionnera aussi bien avec toute une gamme de processeurs ARM et d'autres, je ne connais tout simplement pas de cartes de développement bon marché avec les logiciels disponibles).

Une autre façon pourrait être d'utiliser un Arduino et un bouclier Caterpillar pour étendre les E / S. Sur une carte personnalisée, j'ai construit autour du même extenseur d'E / S que j'ai pu mettre à jour 256 sorties à plus de 1 kHz.

Toby Jaffey
la source
4

Je pense que ce que vous voulez n'est pas un microcontrôleur, mais quelque chose comme une carte d'E / S PCI-6509 de National Instruments . Vous pouvez également obtenir des versions USB, mais elles ont beaucoup moins d'E / S que le PCI-6509. National Instruments vous vendra également des pilotes C ++.

Si cela vous semble trop cher, vous pouvez essayer quelque chose comme le Labjack U3 .

pingswept
la source
J'ai utilisé le labjack, il ralentit vraiment votre ordinateur si vous faites quelque chose de plus sérieux (taux d'échantillonnage plus élevé), mais il est idéal pour une logique simple à taux d'échantillonnage lent. Les systèmes NI sont merveilleux, mais le progiciel est trop cher pour un usage domestique. (Au moins pour mon usage domestique.)
Wouter Simons
4

La solution que vous décrivez n'existe pas pour des prix inférieurs. Le problème est que vous souhaitez exécuter le logiciel de contrôle sur un système qui n'est pas conçu pour cela. La sérialisation de 64 ports et la transmission via USB à des taux d'échantillonnage élevés ralentit énormément l'ordinateur hôte.

Il existe des solutions qui fonctionnent pour les applications à faible performance comme le labjack mentionné. Mais la vraie solution dont vous avez besoin pour gérer des taux d'E / S élevés impliquera un système programmé. La question est de savoir quelle programmation vous devez utiliser pour implémenter le système.

LabView est un logiciel très cher (qui fonctionne très bien, ne vous méprenez pas). Il utilise un langage graphique pour concevoir des logiciels et se compile pour coder en cours d'exécution sur un système FPGA ou ARM. Tous les composants sont trop chers pour une application intégrée à volume élevé, mais absolument merveilleux dans un environnement de test en raison du développement rapide et des hautes performances offertes.

Une solution moins coûteuse consiste à trouver un système qui exécute Linux avec de nombreuses E / S. EmbeddedARM.com est un site qui propose de nombreux types de produits pour cela. Le code que vous pouvez écrire peut être dans des scripts shell, java, C, etc.

Les systèmes Arduino fournissent des microcontrôleurs qui peuvent être développés avec un environnement de développement plus simple. Leur nature open source signifie qu'il y a déjà de nombreux projets à apprendre.

Wouter Simons
la source
3

Je n'en connais pas avec 64 broches GPIO, c'est beaucoup, vous devrez peut-être le construire vous-même.

Je l'utilise pour tester les interfaces série au banc, mais il possède également 23 broches GPIO.

Si vous recherchez simplement `` USB to GPIO '' sur Google, il y a un tas de projets qui ont fait cela, je n'en ai pas vu dans les deux premières pages avec 64 GPIO, c'est le plus proche que j'ai trouvé, avec 32 broches.

En construire un ne serait pas très difficile, j'utiliserais probablement un pic18 100 broches avec USB PHY intégré (en fonction de vos exigences de vitesse, un processeur plus puissant peut être nécessaire)

vous n'auriez pas à faire trop de codage pour le faire fonctionner tant que votre fournisseur uC propose un squelette de pilote USB.

Vous devrez probablement construire un PCB pour cela, car les puces suffisamment grandes pour avoir 64 broches GPIO ne sont généralement pas fournies dans des boîtiers traversants. Vous pouvez également utiliser un microcontrôleur plus petit et utiliser des circuits intégrés d'extension de port externe pour vos GPIO, mais ce serait une conception plus complexe et plus complexe à programmer.

Vous pouvez également consulter les cartes de développement qui acheminent toutes les broches d'E / S vers les en-têtes et ont un port USB. Ceux-ci seront probablement beaucoup plus chers car ils auront probablement un tas de choses dont vous n'avez pas besoin.

Un dernier conseil, si vous trouvez une carte avec RS232 mais avec 64 broches GPIO disponibles, vous pouvez utiliser un adaptateur RS232 vers USB, j'en ai quelques-unes qui ont bien fonctionné pour moi. Cela vous limite cependant à la vitesse de l'interface RS232.

Mark
la source
3

L'environnement NI Labview est cher, mais il fera ce dont vous avez besoin (via USB, Ethernet ou PCI selon ce que vous obtenez.)

L'Arduino Mega a 54 broches, ce qui vous rapproche, pour 60 $. Cependant, ce n'est pas un analyseur logique prêt à l'emploi; il faudrait écrire ou trouver un croquis pour ce faire. Il y en a peut-être un, je ne sais pas. Cela devrait être assez simple à des tarifs de bus bas. Chaque instruction sur le Mega se produit à 16 MHz, vous aurez donc un débit en bauds assez lent, vous serez chanceux ou très intelligent si vous pouvez obtenir un signal de 115200 bauds.

Au final, c'est un projet très différent si vous échantillonnez à 9600 bauds ou à 50 MHz. N'oubliez pas que l'USB fonctionne à 480 MHz (en théorie, votre débit de données réel sera inférieur en raison des latences et des frais généraux), vous ne pouvez donc pas faire mieux que 480/64 = 7,5 MHz sans mise en mémoire tampon. Avec une mise en mémoire tampon et des sommes d'argent obscènes (plus que votre voiture), les analyseurs logiques peuvent vous procurer 68, 102 ou 136 canaux à des débits de données en gigahertz.

Je vous suggère d'essayer très sérieusement de savoir si vous pouvez utiliser un outil qui vous donne environ 8 canaux, et d'essayer de les analyser séparément.

EDIT: Aargh, à quoi je pensais? Si vous allez à des taux lents comme ça, alors travailler sur une liaison série est certainement la voie à suivre. J'utilise le système de modules ADAM 4000 d'Advantech tout le temps au travail; ils sont robustes, faciles à utiliser (facilement interfacés avec un protocole ASCII sur un port COM, ou utilisent le logiciel GUI inclus), extensibles et bien pris en charge. Procurez-vous un contrôleur 4500 (RS-232, utilisez un convertisseur USB ou un port COM sur votre ordinateur (s'il en a encore un)) ou un contrôleur 4501 (Ethernet avec serveur Web intégré), reliez-en un ensemble de modules 4053, 4055 et 4056, et vous êtes prêt à partir.

Kevin Vermeer
la source
Oh. mais ils sont assez chers ... comme 100 $ à 150 $ pour 16 canaux.
Kevin Vermeer
J'ai un analyseur logique intronix 34 ports pour tester mon logiciel (c'est-à-dire connecter les entrées aux sorties des broches contrôlées par le microcontrôleur). C'est environ 500 $ je pense, mais ce n'est pas vraiment des E / S numériques non plus? Il n'est pas destiné à programmer une logique personnalisée avec, juste pour analyser les canaux. Le mien peut fonctionner à un taux d'échantillonnage de 500 MHz, mais je n'ai généralement pas besoin de cette vitesse, sauf si les périphériques que je souhaite que le microcontrôleur contrôle prennent en charge des vitesses allant jusqu'à 200 MHz ou plus (ce qu'ils n'ont généralement pas). - Bref, histoire courte. Je pense qu'un analyseur logique n'est pas ce dont la personne qui pose la question a besoin.
Wouter Simons
C'est certainement moi, mais pas O. Non, je conviens que l'analyseur logique n'est pas ce dont la personne a besoin, compte tenu des nouvelles informations.
Kevin Vermeer
2

Cette chose a 70 GPIO et une interface USB pour 50 $.

endolith
la source
Pouvez-vous utiliser des fonctions d'appel pour lire et écrire des données de broche directement à partir de programmes C ++ exécutés sur votre CPU?
Faken
J'allais suggérer que NXP aurait quelque chose d'ARM basé sur certaines E / S, et si vous ne pouviez pas en avoir assez pour simplement gifler sur les extenseurs I2C IO. Vous ne pouvez pas battre le prix de cette chose, et c'est plug and play. Excellent travail.
akohlsmith
Je n'ai aucune idée. Je viens de le voir sur le post des nouveaux produits de Sparkfun.
endolith
2

Oui, il semble que l'UBW32 fonctionnerait bien pour vous, et le firmware par défaut vous permet de contrôler les broches d'E / S depuis votre logiciel sur votre PC.

Selon "comment bit bang SPI et interfaces parallèles sur un FT232R" , vous pouvez apparemment bit-bang 8 broches numériques (éventuellement plus?) Sur le FT232R contrôlé par un logiciel sur votre PC.

Carte de dérivation de 15 $ pour FT232RL

Cela ressemble à ce que vous voulez vraiment, c'est une interface d'E / S numérique; vous n'avez ni besoin ni envie d'un microcontrôleur programmable. Si vous ne vouliez que 16 bits, j'irais avec quelques cartes FT232RL. Cependant, il semble qu'un UBW32 unique de 40 $ semble vous donner les 64 E / S que vous voulez à moindre coût que 8 des cartes FT232RL dont il aurait besoin pour obtenir 64 E / S.

Je trouve que cela devient de plus en plus courant - il coûte parfois moins cher de jeter un microcontrôleur entier à un problème, même s'il a un million de transistors "supplémentaires" que je n'utiliserai jamais dessus, que d'utiliser une solution câblée.

davidcary
la source