Qual microcontrolador devo usar?

10

Estou tentando encontrar o melhor pacote de microcontrolador para meus programas de computador se comunicarem com o mundo real. Espero um grande número de pinos de E / S (até agora 64 digitais são tudo o que preciso, nada extravagante como analógico e PWM) que eu possa ler e escrever diretamente chamando funções do meu programa em execução na minha CPU.

Eu não quero baixar programas no micro controlador para rodar, mas gostaria de algo que simplesmente se conecte ao meu USB e me dê um monte de pinos de E / S controlados por CPU que eu possa controlar nos meus programas em C ++.

Qual seria o melhor pacote de microcontrolador para mim? Espero por algo que seja razoavelmente barato, mas à prova do futuro, pois ele roda USB e possui drivers de 64 bits para sistemas operacionais modernos como o Windows 7. Ser capaz de fazer interface com mais de um desses microcontroladores com o mesmo programa de computador seria um grande bônus também (expansão futura).

Edit: Não preciso de altas taxas de amostragem (talvez 10 Hz para leitura de entradas, 1 kHz para sinais de saída) e a maioria dos pinos é usada apenas para saída. Estou trabalhando com computadores novos (core i7 860), mesmo que a amostragem seja um pouco ineficiente ou lenta, ela ainda deve estar correta (basta ter um thread dedicado à E / S e o programa principal se comunicar com ele).

Também não preciso de todos os 64 pinos de E / S em um único pacote de microcontrolador. Se eu puder interagir com muitos pacotes de microcontroladores ao mesmo tempo, isso também funcionaria (na verdade, seria ideal poder interagir com muitos pacotes menores de microcontroladores, o que significa que é fácil de expandir).

Eu olhei para isso: http://www.schmalzhaus.com/UBW32/index.html

Alguém já teve alguma experiência com algo assim? Alguma idéia se vai funcionar ou não? A principal preocupação é que é o micro controlador que está executando o programa, não a minha CPU.

Faken
fonte
11
Qual taxa de dados você precisa?
21710 Kevin Vermeer
@reemrevnivek: Estimo que precisaria de uma taxa de amostragem de 10 Hz para entradas e 1 kHz para saídas, E / S muito lenta.
Faken
No seu caso, o projeto que você encontrou provavelmente funcionará muito bem. É um sistema já montado (sem necessidade de solda é sempre bom) e parece ter um firmware muito básico para fornecer acesso a todas as portas necessárias. Baixas taxas de amostragem significam que a conexão serial funcionará suficientemente bem. 40 $ não vai à falência, certo? Nesse caso, tente apenas antes de procurar uma solução mais cara.
Wouter Simons

Respostas:

4

Faken,

O UBW32 é um ótimo caminho a percorrer, pelo que posso dizer sobre seus requisitos. Ele suporta exatamente o que você precisa, desde que você esteja bem com 3.3VI / O (alguns são tolerantes a 5V, mas não todos). É barato (US $ 40) e é muito fácil conversar com qualquer idioma que possa suportar portas seriais (que são praticamente todas elas - Básica, C, C #, Processamento etc.)

Você pode usar qualquer um dos 76 pinos de E / S como entradas ou saídas. O firmware padrão fornecido, permitirá que você faça o que deseja, sem necessidade de programação no lado incorporado. Obter esses dados no PC via USB (a apenas 10Hz) não será um problema. Obter saídas para 1KHz provavelmente funcionará bem também.

Se você tiver alguma dúvida, entre em contato. Fico feliz em ajudá-lo.

* Brian Schmalz criador de UBW32

EmbeddedMan
fonte
Bom conselho, sr. Schmalz
Wouter Simons
Bem, isso é desafiadoramente reconfortante. Sendo um engenheiro mecânico e conhecendo pouco sobre programação e muito menos sobre eletrônica; uma plataforma pré-construída que faz interface com C / C ++ é exatamente o que eu precisava para alterar o aspecto de programação eletrônica e de microcontroladores. Obrigado pela ajuda!
Faken 15/07/10
9

Eu recomendo um Teensy ++ 2.0 (ou qualquer outra placa de desenvolvimento AT90USB1286)

Flash de 128KB, RAM de 8KB, 46 pinos de E / S, 8 entradas analógicas

$ 24

As placas Teensy são alimentadas por USB e podem fornecer uma porta COM virtual (USB Communications Device Class). Você pode usar esse link serial para o seu protocolo de controle de pinos. Isso funciona sem nenhum driver personalizado no Windows, OSX e Linux.

Para criar o firmware de controle de pinos, existe o TeensyDuino ou o simples C.

Quando o bit bate, o gargalo será a interface USB do microcontrolador. Portanto, convém mudar protocolos como I2C e SPI para o microcontrolador. Para isso, você pode usar o meu Bus Ninja .

Adicionar Teensies adicionais à sua configuração é simples, você só precisa de uma porta USB por dispositivo, apresentando uma porta COM virtual por dispositivo.

(Nota. Essa abordagem funcionará igualmente bem com toda uma gama de processadores ARM e outros, apenas não conheço nenhuma placa de desenvolvimento barata com o software disponível).

Outra maneira poderia ser usar um Arduino e um Caterpillar Shield para expandir a E / S. Em uma placa personalizada criada com o mesmo expansor de E / S, consegui atualizar 256 saídas a mais de 1KHz.

Toby Jaffey
fonte
4

Acho que o que você deseja não é um microcontrolador, mas algo como uma placa de E / S PCI-6509 da National Instruments . Você também pode obter versões USB, mas elas têm muito menos E / S do que o PCI-6509. A National Instruments também venderá drivers C ++.

Se isso parecer muito caro, você pode tentar algo como o Labjack U3 .

pingswept
fonte
Eu usei o labjack, ele realmente torna o computador mais lento se você fizer algo mais sério (taxa de amostragem mais alta), mas é ótimo para lógica simples de taxa de amostragem lenta. Os sistemas da NI são maravilhosos, mas o pacote de software é muito caro para uso doméstico. (Pelo menos para o meu uso doméstico.)
Wouter Simons
4

A solução que você descreve não existe para preços mais baixos. O problema é que você deseja executar o software de controle em um sistema não projetado para isso. A serialização de 64 portas e o envio através de USB a altas taxas de amostragem diminuem imensamente o computador host.

Existem soluções que funcionam para aplicativos de baixo desempenho, como o labjack mencionado. Mas a solução real de que você precisa para lidar com altas taxas de E / S envolve um sistema programado. A questão é qual a programação que você precisa usar para implementar o sistema.

O LabView é um software altamente caro (que funciona muito bem, não me entenda mal). Ele usa uma linguagem gráfica para projetar software e compila para código em execução em um sistema FPGA ou ARM. Todos os componentes são muito caros para um aplicativo incorporado de alto volume, mas absolutamente maravilhosos em um ambiente de teste por causa do rápido desenvolvimento e alto desempenho oferecidos.

Uma solução mais barata é encontrar um sistema que execute o Linux com muitas E / S. EmbeddedARM.com é um site que oferece muitos tipos de produtos para isso. O código que você pode escrever pode estar em shell scripts, java, C, etc.

Os sistemas Arduino fornecem microcontroladores que podem ser desenvolvidos com um ambiente de desenvolvimento mais simples. Sua natureza de código aberto significa que já existem muitos projetos para aprender.

Wouter Simons
fonte
3

eu não conheço nenhum com 64 pinos GPIO, isso é muito, talvez você precise criar isso sozinho.

Eu uso isso para testar interfaces seriais de bancada, mas também possui 23 pinos GPIO.

Se você pesquisar no Google por 'USB to GPIO', existem vários projetos por aí que fizeram isso, eu não vi nenhum nas primeiras páginas com 64 GPIOs, este é o mais próximo que encontrei, com 32 pinos.

Construir um não seria muito difícil, eu provavelmente usaria uma pic18 de 100 pinos com USB PHY embutido (dependendo dos requisitos de velocidade, um processador mais poderoso pode estar em ordem)

você não precisará codificar demais para fazê-lo funcionar, desde que o fornecedor do uC ofereça um esqueleto de driver USB.

Você teria que construir uma placa de circuito impresso para ela, provavelmente porque os chips grandes o suficiente para ter 64 pinos GPIO geralmente não são fornecidos em pacotes de furos passantes. Você também pode usar um microcontrolador menor e usar CIs expansores de porta externos para seus GPIOs, mas isso seria um projeto mais complexo e mais complexo para programar.

Você também pode olhar para as placas de desenvolvimento que direcionam todos os pinos de E / S para os cabeçalhos e têm USB. Isso provavelmente será muito mais caro, pois provavelmente terá um monte de coisas que você não precisa.

Uma dica final, se você encontrar uma placa com RS232, mas com 64 pinos GPIO disponíveis, você pode usar um adaptador RS232 para USB, tenho algumas delas que funcionaram bem para mim. No entanto, isso limita a velocidade da interface RS232.

Mark
fonte
3

O ambiente do NI Labview é caro, mas fará o que você precisa (por USB, Ethernet ou PCI, dependendo do que você obtém).

O Arduino Mega possui 54 pinos, o que o deixa próximo, por US $ 60. No entanto, não é um analisador lógico pronto para uso; você teria que escrever ou encontrar um esboço para fazer isso. Pode haver um disponível, eu não sei. Isso deve ser bastante simples a preços baixos de ônibus. Cada instrução no Mega acontece em 16MHz, então você terá uma taxa de transmissão bastante lenta, terá sorte ou será muito inteligente se conseguir um sinal de 115200.

No final, este é um projeto muito diferente se você estiver amostrando a 9600 baud ou a 50MHz. Lembre-se, o USB é executado a 480 MHz (em teoria; sua taxa de dados real será mais baixa devido a latências e sobrecarga); portanto, você não pode fazer nada melhor do que 480/64 = 7,5 MHz sem buffer. Com buffer e quantias obscenas de dinheiro (Mais do que o seu carro), os analisadores lógicos podem obter 68, 102 ou 136 canais a taxas de dados de gigahertz.

Eu sugiro que você tente seriamente descobrir se pode usar uma ferramenta que ofereça 8 canais ou mais e tente analisá-los separadamente.

EDIT: Aargh, o que eu estava pensando? Se você está indo a taxas lentas como essa, trabalhar em um link serial é definitivamente o caminho a percorrer. Eu uso o sistema de módulos ADAM 4000 da Advantech o tempo todo no trabalho; eles são robustos, fáceis de usar (com interface fácil com um protocolo ASCII através de uma porta COM ou usam o software GUI incluído), expansíveis e bem suportados. Adquira um controlador 4500 (RS-232, use um conversor USB ou porta COM no seu computador (se ainda houver um)) ou 4501 (Ethernet com servidor da Web incorporado), vincule vários módulos 4053, 4055 e 4056, e você está pronto para ir.

Kevin Vermeer
fonte
Oh. mas são muito caros ... como US $ 100 a US $ 150 para 16 canais.
21710 Kevin Vermeer
Eu tenho um analisador lógico de 34 portas intronix para testar meu software (por exemplo, conectar as entradas às saídas dos pinos controlados pelo microcontrolador). Acho que é cerca de 500 $, mas também não é realmente E / S digital, é? Não se destina a programar lógica personalizada com, apenas para analisar canais. O meu pode funcionar a uma taxa de amostragem de 500 MHz, mas geralmente não preciso dessa velocidade, a menos que os periféricos que eu quero que o microcontrolador controle, suportem velocidades de até 200 MHz ou mais (o que geralmente não é necessário). - Enfim, longa história curta. Acredito que um analisador lógico não é o que a pessoa que faz a pergunta precisa.
Wouter Simons
Definitivamente, sou eu, mas não O. Não, eu concordaria que o analisador lógico não é o que a pessoa precisa, dadas as novas informações.
91110 Kevin Vermeer
2

Essa coisa tem 70 GPIOs e uma interface USB por US $ 50.

endólito
fonte
Você pode usar funções de chamada para ler e gravar dados de pinos diretamente de programas C ++ em execução na sua CPU?
Faken 15/07/10
Eu sugeriria que o NXP teria algo baseado em ARM com algumas E / S, e se você não conseguisse o suficiente delas para usar apenas os expansores I2C IO. Você não pode bater o preço dessa coisa, e é plug'n play. Excelente trabalho.
akohlsmith
Eu não faço ideia. Acabei de vê-lo no post de novos produtos da Sparkfun.
endolith 16/07/10
2

Sim, parece que o UBW32 funcionaria bem para você, e o firmware padrão permite controlar os pinos de E / S do seu software no seu PC.

De acordo com "como bit bang SPI e interfaces paralelas em um FT232R" , você pode aparentemente conectar 8 pinos digitais (possivelmente mais?) No FT232R controlado por software no seu PC.

$ 15 Breakout Board para FT232RL

Parece que o que você realmente deseja é uma interface de E / S digital; você não precisa nem deseja um microcontrolador programável. Se você quisesse apenas 16 bits, eu usaria duas placas FT232RL. No entanto, parece que um único UBW32 de US $ 40 fornece as 64 E / S desejadas por um custo menor do que 8 das placas FT232RL necessárias para obter 64 E / S.

Estou descobrindo que isso está se tornando cada vez mais comum - às vezes custa menos jogar um microcontrolador inteiro em um problema, mesmo que tenha um milhão de transistores "extras" que nunca vou usar nele, do que usar uma solução com fio.

davidcary
fonte