Estou acostumado a fazer coisas básicas e diretas com microcontroladores, relativamente falando. Coisas como acionar LEDs, motores em funcionamento, rotinas básicas, GUIs em LCDs de caracteres e assim por diante, mas sempre apenas uma tarefa-chave com, no máximo, algumas tarefas secundárias. Isso me relegou a produtos de baixo custo, já que é realmente tudo o que é necessário nesses casos.
Gostaria de começar a projetar coisas mais complexas, mas a parte superior do continuum do microcontrolador não é algo a que eu tenha sido bem exposto. Portanto, estou tendo um tempo muito desafiador tentando escolher um microcontrolador, onde realizarei muitas tarefas simultaneamente - não posso dizer apenas por um número MIPS e uma pinagem satisfatória se ele tem potência suficiente para fazer o que eu quero. façam.
Por exemplo, eu gostaria de controlar 2 motores BLDC com rotinas PI, além de algumas comunicações seriais e USB, uma GUI e várias outras tarefas. Fico tentado a ter apenas um microcontrolador para cada motor e, em seguida, um para as tarefas diversas, para garantir que a sobrecarga proveniente de outras coisas não comprometa o funcionamento crítico do motor. Mas não sei se isso é realmente uma boa ideia ou uma maneira ingênua de fazer as coisas.
Acho que minha pergunta é realmente dupla:
A abordagem da multifuncional é uma boa idéia quando é necessário realizar várias tarefas multitarefas ou é melhor segmentar e isolar, e
Como posso descobrir intuitivamente se o microcontrolador que estou vendo possui energia computacional suficiente para fazer o que preciso com base na minha lista de tarefas?
Estou analisando dsPIC33s moderados até os SoCs ARM que executam RTOS. Uma maneira sistemática de aprimorar o que eu preciso me ajudaria muito.
Respostas:
As respostas para suas perguntas são diferentes, dependendo do seu objetivo final. Se você precisar de um punhado ou menos desses dispositivos, facilite o desenvolvimento e não se preocupe com o custo das peças. Se você vai fazer mil ou mais deles, vale a pena analisar seus requisitos e reduzir o custo do hardware do dispositivo.
Pequenas quantidades
Se você estiver executando uma execução única ou pequena desses dispositivos, seus esforços de desenvolvimento reduzirão os custos por item e deverá se concentrar no que será mais fácil / rápido para o seu desenvolvimento, em vez do custo / tamanho do microeletrônico.
Em geral, o encapsulamento pode diminuir a complexidade, aumentando sua produtividade. Se você tiver alguns requisitos em tempo real, como controle BLDC, loops PID, etc., poderá achar mais rápido o uso de controladores separados especificamente para as tarefas que se comunicam com os controladores em que você mantém a interface do usuário e outras informações não reais. tarefas de tempo.
Portanto, neste caso, a resposta para suas perguntas são:
A balança se inclina levemente em direção à segmentação e isolamento. O principal motivo é que a depuração de um sistema em tempo real pode consumir muito tempo, e manter essas tarefas em seu próprio processador limita as variáveis que você deve medir ou controlar ao tentar descobrir por que algo não está funcionando corretamente.
Nesse caso, a diferença de custo entre um processador de 32 bits com muitos recursos e um processador de 8 bits com recursos limitados é pequena em relação à quantidade de tempo que você gastará trabalhando no desenvolvimento. Há poucas razões para tentar descobrir quanta energia você precisa - basta obter o maior processador que você acha que pode desenvolver e usar. Se, em algum momento posterior, você precisar otimizar o design com custos, é relativamente fácil medir o uso real dos recursos do processador e escolha um processador menor que possa lidar com a carga real. Até lá, use o maior e não se preocupe em encontrar o "melhor ajuste".
Produção em massa
Se você planeja fabricar muitos desses dispositivos, uma análise cuidadosa trará uma economia significativa de custos. De um modo geral, um microcontrolador maior custará menos de dois microcontroladores capazes de substituir o único microcontrolador, embora certamente haja exceções, dependendo das tarefas específicas necessárias. Nessas quantidades, o custo do hardware provavelmente será muito maior que o custo do desenvolvimento, portanto, você deve esperar mais tempo analisando seus requisitos e executando o desenvolvimento do que faria se estivesse fazendo apenas alguns.
A abordagem da multifuncional geralmente será menos dispendiosa durante toda a vida útil do projeto do que vários processadores. Isso exigirá mais tempo de desenvolvimento e depuração para garantir que as várias tarefas não entrem em conflito, mas o design rigoroso do software limitará tanto quanto o hardware separado.
Você precisará entender as tarefas que deseja executar e quantos recursos eles precisam. Suponha que o seguinte seja verdadeiro:
Suas rotinas PI do BLDC consumirão X ciclos de tempo do processador 100 vezes por segundo e cada um precisa de cerca de 50 bytes de RAM para operação, 16 bytes de EEPROM para ajuste e 1k de flash para o código. Cada um deles precisará de 3 periféricos PWM de dezesseis bits no microcontrolador. Pode ser necessário especificar jitter, que terá requisitos específicos de latência de interrupção.
Suas rotinas USB e serial consumirão ciclos Y de tempo do processador conforme a necessidade, 2k RAM, 64 bytes EEPROM e 8k flash. Exigirá periféricos USB e seriais.
Sua GUI consumirá ciclos Z de energia do processador 30 vezes por segundo e precisará de 2k de RAM, 128 bytes de EEPROM e 10k de flash. Utilizará 19 E / S para comunicações com o LCD, botões, botões, etc.
Quando você inicia pela primeira vez, pode ser difícil entender o que realmente são X, Y, Z e isso muda um pouco, dependendo da arquitetura do processador. No entanto, você deve ser capaz de entender, dentro de uma estimativa aproximada, quanto de ram, eeprom e flash seu projeto precisará e quais periféricos você precisa. Você pode escolher uma família de processadores que atenda aos seus requisitos de memória e periféricos e possua uma ampla variedade de opções de desempenho nessa família. Nesse ponto, para o desenvolvimento, você pode simplesmente usar o processador mais poderoso da família. Depois de implementar seu design, você pode facilmente mudar a família em termos de energia para uma opção de custo mais baixo sem alterar seu ambiente de design ou desenvolvimento.
Depois de fazer o suficiente desses designs, você poderá estimar melhor X, Y e Z. Você saberá que as rotinas PI do BLDC, embora sejam executadas com frequência, são muito pequenas e requerem muito poucos ciclos. As rotinas USB e serial requerem muito ciclo, mas ocorrem com pouca frequência. A interface do usuário requer alguns ciclos frequentemente para encontrar alterações, mas exigirá muitos ciclos com pouca frequência para atualizar uma exibição, por exemplo.
fonte
Eu separaria o controle do motor e teria um microcontrolador separado que inclui PWM (talvez um PIC18) para cada um dos dois motores BLDC, já que o controle PI é uma tarefa isolada quando é iniciado e depois de escrever o código que você pode usá-lo em ambos os micros. Você pode conectá-los de volta ao microcontrolador principal via interface como I²C e fazer o download dos parâmetros para o controle PI a partir daí, se desejar. Isso permitiria modificá-los em sua GUI.
Eu executaria tudo o mais no microcontrolador principal, como um PIC24 (um PIC32 provavelmente é um exagero, com base nas tarefas que você listou). Além disso, os PIC24E mais rápidos podem rodar quase tão rápido quanto um PIC32.
Ao escolher um microcontrolador, primeiro estimo a quantidade de flash e RAM que preciso e, em seguida, analiso o tamanho da palavra e a velocidade do processador. Para os últimos, geralmente o requisito mais difícil de atender é a interrupção mais rápida que você espera lidar. Se você estiver emitindo som de 16 KHz, por exemplo, e tiver uma interrupção a cada 62,5 µs, é melhor ter um microcontrolador com um tempo de instrução abaixo das dezenas de nanossegundos, ou você não poderá consertá-lo e obter nenhum outro Trabalho feito.
fonte
Existe uma abordagem semi-formal que você pode usar para ajudar a gerar sua resposta. Eu recomendo a leitura do capítulo 2 dos "Designing Embedded Systems" de White, a maioria dos quais está disponível no Google Livros .
Este capítulo fala sobre o design de arquiteturas de sistema e oferece uma abordagem semi-formal de como você pode encapsular melhor as tarefas. Embora o capítulo seja basicamente sobre um sistema de controlador, ele se estende facilmente a vários controladores. Isso ajudará você a visualizar quais recursos precisam ser compartilhados e a escolher seu nível de encapsulamento para cada tarefa.
Ela oferece uma variedade de pontos de vista a considerar, um dos quais mostro abaixo, mas há muitas manipulações úteis. Isso, é claro, não faz muito sentido por si só, mas espero que o incentive a verificar o capítulo.
Quanto a "como sei se tenho controlador suficiente", minha própria preferência é colocar o máximo de poder possível na minha caixa de proteção de projeto e depois descobrir quantos recursos posso reduzir quando o design estiver bom. maneira. A diferença de preço entre um microcontrolador de US $ 10 e um microcontrolador de US $ 3 para fins de prototipagem pode ser apenas semanas de refazer e girar os polegares à espera de novas peças, enquanto o design sempre pode se mover se você tiver energia suficiente.
fonte
Eu trabalho em um sistema que é amplamente o que você está descrevendo - motores, E / S, display, 3x UARTs + SPI + I2C rodando em um Coldfire 52259 (micro de 32 bits ~ 80MHz de médio alcance) e não é muito difícil, embora seja difícil a arquitetura do software é importante - temos muitas coisas sendo executadas em hardware e interrupções (qualquer coisa que o hardware possa manipular por si só, executamos em hardware e serviço com interrupções), deixando o loop main () para fazer todas as tarefas domésticas.
Pessoalmente, eu não gosto da maioria dos RTOS que já vi, na parte baixa eles incham um projeto, acrescentam outra coisa a aprender, e você obterá melhor desempenho do hardware fazendo as coisas diretamente (usando as funções de hardware disponíveis + interrupções) ao invés de fingir com software.
Atualmente, nos dias de hoje, parece haver tão pouca margem entre um MCU que é complexo e poderoso o suficiente para realmente se beneficiar de um RTOS e algo (SoC) que apenas roda o Linux incorporado.
No entanto, nesse caso, eu diria que há algum valor em usar pequenos micros baratos para lidar com funções críticas (controle do motor do EG, onde o tempo ou a parada em um limite é crítico) sob o comando da CPU principal do "cérebro", para que você não confie em um sistema operacional "não em tempo real" para fazer algo em tempo hábil.
fonte
A resposta de todos os outros é melhor, mas tenho um pouco a acrescentar que pode ser útil. Isso pode estar um pouco errado e eu gostaria de adicioná-lo como um comentário, mas há uma regra de 50 representantes :(
Resposta curta: depende, veja acima, mas por que não pensar nos benefícios do processador também?
Obviamente, custo, facilidade de implementação; etc. são importantes e ainda mais importantes a considerar.
fonte
A resposta pode depender dos detalhes da implementação. Algumas tarefas são mais fáceis de implementar de maneira limpa e robusta em microcontroladores separados. O consumo de energia também pode ser uma consideração - em geral, um único micro-tratamento de várias tarefas exigirá menos energia do que vários micros que lidam com tarefas únicas.
fonte
"Cavalos-força" é secundário para saber se você pode cumprir suas restrições em tempo real.
Se você tiver duas saídas PWM e ambas precisarem alternar exatamente ao mesmo tempo, precisará do paralelismo necessário para poder fazer isso. Se você tiver um controlador PWM dedicado que cuida do tempo exato, isso funcionará, mesmo com um microcontrolador bastante pequeno, enquanto uma solução baseada em GPIO será extremamente complexa, mesmo se houver muita capacidade de computação disponível.
Para a maioria dos protocolos, os MCUs modernos implementaram implementações daquelas partes do protocolo que têm restrições em tempo real; portanto, se você puder encontrar um MCU com os periféricos necessários e a velocidade da CPU necessária para lidar com os fluxos de dados (por exemplo, o requisito em tempo real rígido degenera em um requisito flexível em tempo real do formulário "será capaz de ler o FIFO antes que esteja cheio e mais rápido do que o necessário"), essa seria a melhor opção.
Se essa solução não existir, suas opções serão mover funções para controladores separados, usando uma solução CPU + FPGA (por exemplo, FPGA com núcleo rígido ARM) ou uma solução FPGA pura (opcionalmente com uma CPU flexível, dependendo dos requisitos de complexidade).
fonte