Le moyen le plus simple et le moins cher d'obtenir des sorties numériques d'un ordinateur vers le monde réel

8

J'ai besoin d'un certain nombre de sorties numériques pour connecter mon ordinateur au monde réel, mais il semble que ce travail ne soit pas aussi facile que je l'espérais.

J'ai examiné un certain nombre de méthodes différentes, allant des cartes d'E / S numériques dédiées, des microcontrôleurs avec interfaces USB, des ports série, des ports parallèles, etc. Cependant, toutes les solutions semblent être trop coûteuses, trop de travail ou la technologie est trop datée.

J'espère avoir plus de 64 sorties numériques fonctionnant à environ 1 kHz chacune, contrôlables individuellement. Jusqu'à présent, la meilleure idée que je puisse trouver est de coller les sorties d'un port série sur un registre à décalage série vers parallèle 8 bits et d'envoyer des caractères vers le bas de la connexion série chaque fois que je souhaite modifier et sortir (exécuter à partir d'un port USB vers un port série adaptateur). Je n'ai pas encore testé cela, donc je ne sais pas si cela fonctionnera.

Existe-t-il une autre méthode rapide et sale pour obtenir un assez grand nombre de sorties numériques peu coûteuses de l'ordinateur que je peux contrôler facilement avec des commandes C ++ très basiques?

Faken
la source
Avez-vous fait quelques calculs? Le RS232 simple non usb a généralement une vitesse maximale de 115200 bps, soit environ 10 Ko. Disons que chaque canal n'a besoin que d'un octet (ce dont je doute). Vous souhaitez envoyer 64 x 1000 octets par seconde, soit environ 64 Ko. Bien plus que votre débit série. Il existe des câbles série USB à haute vitesse avec 921600bps, et bien que théoriquement possible, je doute que cela soit utile car il est à la limite et comme je l'ai dit, 1 octet sera assez robuste, et le microcontrôleur n'aura guère de temps pour autre chose. Vous devrez soit réduire vos demandes, soit préparer votre portefeuille.
avra
3
Peut-être que vous devriez relire vos commentaires pour des erreurs évidentes avant de frapper quelqu'un ... Les bits de sortie des broches GPOI ne sont pas des octets. Cela signifie 64 kiloBITS / s, bien en deçà du maximum 115.2kbs
Faken

Réponses:

7

On dirait que vous avez l'intention de faire clignoter des lumières de Noël. :-)

Quelque chose ne va pas avec l'utilisation d'un arduino ou similaire? Il serait assez facile d'augmenter le nombre de ports d'E / S si le nombre de ports dit sur le méga 1280/2560 n'est pas suffisant. Vous pouvez le piloter via une borne série / USB. Vous pouvez utiliser des registres à décalage sur les broches de sortie de l'arduino ou vous pouvez utiliser l'expanseur de port i2c et passer par là.

L'utilisation de composants standard comme celui-ci vous donnera le temps de prototypage le plus court.

Remarque, mon chemin n'est peut-être pas le moins cher. Mais il est efficace et vous permettra de rouler rapidement.

Rob
la source
1
Pas tout à fait avec les feux clignotants, j'essaie de contrôler 32 moteurs pas à pas sur un prototype de dispositif universel de fixation automatisé, sauf que je n'ai aucun financement ... ou aucune connaissance en électronique. Peut-être que j'ai rejeté le microcontrôleur trop rapidement, que j'ai obtenu de bonnes ressources étape par étape sur la façon de se mettre à jour à partir de zéro avec des exemples pratiques? (et je veux dire à partir de la base, j'ai une base de connaissances assez étrange qui est beaucoup trop théorique et pas assez pratique, vous pouvez supposer que je ne sais absolument rien ... ça me semble le plus souvent la plupart du temps, heh)
Faken
1
Le contrôle des moteurs pas à pas va nécessiter un peu de débit supplémentaire. Vous ne pourrez pas les piloter directement à partir des broches de sortie du microcontrôleur. Vous devrez utiliser de la «colle» électronique entre la broche et le moteur afin de ne pas faire frire le micro. Comme tout, il est préférable de commencer petit et de progresser vers des exemples plus avancés. Un des passionnés les plus passionnés que j'ai vus est tronixstuff.wordpress.com a de bonnes choses pour les débutants. Je sais que le gars qui l'exécute fréquente également cet échange de pile.
Rob
1
Oui, j'ai trouvé un très bon pilote de moteur pas à pas à utiliser entre les signaux de commande et le moteur (utilise seulement 2 entrées, pas et direction). Je vais parcourir ce tutoriel que vous avez lié, merci. Btw, juste pour être sûr, je veux que ce soit mon ordinateur qui envoie les commandes en temps réel via un programme c ++ au micro contrôleur pour déplacer les moteurs. Est-ce possible ou très simple à faire avec ce micro contrôleur?
Faken
1
Bien sûr. Le microcontrôleur sert de tampon entre l'ordinateur et la carte de commande du moteur pas à pas. Il peut interpréter les commandes que vous envoyez et agir en conséquence, ainsi que fournir des commentaires au PC si nécessaire. L'autre avantage d'utiliser quelque chose d'un peu conventionnel est que vous pouvez obtenir beaucoup de soutien / conseil de la communauté, les chances sont toujours bonnes que quelqu'un ait fait quelque chose de similaire. C'est donc assez pratique en soi. Le micro fournit juste une interface à faible coût vraiment sympa entre le PC et vos cartes de pilotes.
Rob
Adafruit fait une belle carte qui peut être utilisée pour piloter 16 servos, et ils peuvent être enchaînés ensemble. Il serait assez facile d'écrire du code Arduino qui lit les données d'un PC et les envoie ensuite à la carte du pilote d'asservissement. adafruit.com/products/815
Eric Gunnerson
3

Le registre à décalage série à parallèle fonctionnera. En utilisant le port SPI, vous n'aurez aucun problème avec le taux de mise à jour 1KHz. IIRC sur un ATmega328 avec un cristal 8MHz (ou supérieur), vous devriez pouvoir obtenir 1Mbits par seconde. De nombreux autres microcontrôleurs fonctionneront également.

Une autre option consiste à utiliser plusieurs microcontrôleurs. Par exemple - l'utilisation d'un ATmega328 (qui coûte environ 5 $ avec les passifs) vous donnerait 18 lignes tout en gardant les lignes TXD et RXD libres. Montez en parallèle les lignes RXD, puis tous les uC recevront les mêmes chaînes de commande. Vous devez analyser les chaînes de commande sur l'UC. Utilisez un câble FTDI pour accéder à l'USB. Ajoutez un chargeur de démarrage Arduino à l'UC et vous pourriez utiliser les outils Arduino.

La conversion série en parallèle est plus simple. Si votre application peut utiliser des sorties à drain ouvert, vous pouvez utiliser un pilote LED 16 canaux. Cela signifierait ajouter quatre puces.

jluciani
la source
1

L'option la plus simple que j'ai rencontrée semble être l' IOIO-OTG . Il s'agit d'un périphérique USB OTG externe basé sur un contrôleur PIC, conçu pour Android, mais utilisable avec un PC, via Eclipse et la boîte à outils de développement Android. Il dispose de 46 broches GPIO 3,3 V , ainsi que de nombreux autres trucs utiles. Il n'a pas les 64 broches nécessaires à votre projet, mais vous pouvez simplement utiliser quelques registres à décalage série à parallèle, comme mentionné par jluciani (ou utiliser à la place des contrôleurs de moteur pas à pas et utiliser moins de broches).

Il y a aussi cette carte d'E / S USB basée sur PIC , qui fait des choses similaires, mais qui a moins de broches.

rien101
la source