Parece que o Arduino Due (SAM3X8E baseado em ARM-Cortex-M3 de 32 bits, 84 Mhz) foi lançado hoje.
Além disso, claramente há uma infinidade de processadores nessa categoria (32 bits / 48-96 Mhz / ARM), bem como placas de prototipagem correspondentes:
- NXP LPC1768 / mBed
- STM32 / Discovery
- PIC32 / ChipKit
- Hélice PIC32 / Parallax
- Barra de ativação LM4F120 / TI
- etc.
Estou tentando entender o apelo desses microprocessadores "intermediários", que para mim parecem estar entre o AVR / MSP430 / etc de baixo custo. (profissionais: barato, de baixo consumo de energia, tamanho reduzido) e o ARM7 / etc de alta qualidade (profissional: capaz de obter instruções muito maiores por segundo).
Em que situações ou maneiras os microprocessadores baseados em 32 bits / 48-96 Mhz / ARM são uma escolha adequada? Mais especificamente, pergunto-me em quais aplicativos ou em quais parâmetros eles seriam uma escolha superior durante o projeto, tanto nos microcontroladores de 8 bits de ponta quanto nos processadores ARM7 de ponta alta.
Respostas:
Este é um daqueles assuntos que podem se tornar altamente debatidos. Existem muitos pontos de vista diferentes, e coisas diferentes são importantes para pessoas diferentes. Vou tentar dar uma resposta abrangente, mas entendo que sempre haverá alguém que discorda. Apenas entenda que aqueles que discordam de mim estão errados. (Só brincando.)
Resumo rápido:
Essa resposta será longa, então deixe-me resumir isso com antecedência. Para a grande maioria das pessoas, a última safra de chips ARM Cortex-M0 / M3 / M4 oferece a melhor solução, os melhores recursos pelo custo. Isso é verdade mesmo ao comparar esses MCUs de 32 bits com seus ancestrais de 8 e 16 bits, como o PIC e o MSP430s. Os M0 podem ser comprados por menos de US $ 1 / cada e os M4 por menos de US $ 2 / cada, portanto, exceto pelas aplicações muito sensíveis ao preço, as soluções ARM são muito agradáveis. Os M0 são de potência muito baixa e devem ser bons o suficiente para a maioria das pessoas. Para aqueles que são muito sensíveis à energia, o MSP430s ainda pode ser uma escolha melhor, mas vale a pena considerar os M0s mesmo para essas aplicações.
Se você estiver interessado em uma análise mais aprofundada, continue lendo, caso contrário, poderá parar de ler agora.
Agora, examinarei cada área e compararei os diferentes MCUs:
Velocidade de Execução
É claro que os MCUs de 32 bits serão mais rápidos. Eles tendem a ter uma velocidade de clock mais rápida, mas também trabalham mais para cada um desses relógios. MCUs como o ARM Cortex-M4 incluem instruções de processamento DSP e podem até ter suporte a ponto flutuante no hardware. As CPUs de 8 e 16 bits podem operar em números de 32 bits, mas não são eficientes. Fazer isso consumirá rapidamente registros da CPU, ciclos de clock da CPU e memória flash para armazenamento do programa.
Facilidade de Desenvolvimento
Na minha opinião, esse é o motivo mais valioso para o uso de MCUs modernos de 32 bits - mas também o mais subestimado. Deixe-me primeiro comparar isso com os PICs de 8 bits. Esta é a pior comparação de casos, mas também a melhor para ilustrar meus pontos.
Os PICs menores exigem basicamente que a programação seja feita em linguagem assembly. É verdade que existem compiladores C disponíveis até para as PICs de 8 bits, mas esses compiladores são gratuitos ou bons. Você não pode obter um compilador que seja bom e gratuito. A versão gratuita do compilador é prejudicada, pois sua otimização não é tão boa quanto a versão "Pro". A versão Pro custa aproximadamente US $ 1.000 e suporta apenas uma família de chips PIC (chips de 8, 16 ou 32 bits). Se você quiser usar mais de uma família, precisará comprar outra cópia por outros US $ 1.000. A versão "Padrão" do compilador faz um nível médio de otimização e custa cerca de US $ 500 para cada família de chips. Os PICs de 8 bits são lentos para os padrões modernos e exigem boa otimização.
Por comparação, existem muitos bons compiladores C para MCMs ARM gratuitos. Quando existem limitações, esses limites geralmente estão no tamanho máximo da memória Flash suportada. Nas ferramentas Freewale Codewarrior, esse limite é de 128 KB. Isso é suficiente para a maioria das pessoas neste fórum.
A vantagem de usar um compilador C é que você não precisa se preocupar (tanto) com os detalhes de baixo nível do mapa de memória da CPU. A paginação no PIC é particularmente dolorosa e é melhor evitar, se possível. Outra vantagem é que você não precisa se preocupar em entregar números de 16 e 32 bits em um MCU de 8 bits (ou números de 32 bits em um MCU de 16 bits). Embora não seja muito difícil fazer isso na linguagem assembly, é uma dor na parte traseira e é propenso a erros.
Existem outros compiladores não-ARM C que funcionam bem. O compilador MSP430 parece fazer um trabalho razoável. As ferramentas Cypress PSoC (especialmente PSoC1) são de buggy.
Modelo de memória plana
Um MCU que paginou RAM / registradores / Flash é simplesmente estúpido. Sim, estou falando dos PICs de 8 bits. Burro, burro, burro. Isso me afastou tanto dos PICs que eu nem me preocupei em olhar para as novidades deles. (Isenção de responsabilidade: isso significa que os novos PICs podem ser aprimorados e eu simplesmente não o conheço.)
Com um MCU de 8 bits, é difícil (mas não impossível) acessar estruturas de dados maiores que 256 bytes. Com um MCU de 16 bits, aumenta para 64 kbytes ou kwords. Com MCUs de 32 bits que vão até 4 gigabytes.
Um bom compilador C pode esconder muito disso do programador (você também conhecido como You), mas mesmo assim afeta o tamanho do programa e a velocidade de execução.
Existem muitos aplicativos MCU para os quais isso não será um problema, mas é claro que existem muitos outros que terão problemas com isso. É principalmente uma questão de quantos dados você precisa (matrizes e estruturas) na RAM ou no Flash. Obviamente, à medida que a velocidade da CPU aumenta, aumentam as chances de usar estruturas de dados maiores!
tamanho do pacote
Alguns dos PICs pequenos e outros MCUs de 8 bits estão disponíveis em pacotes realmente pequenos. 6 e 8 pinos! Atualmente, o menor ARM Cortex-M0 que eu conheço está em um QFN-28. Enquanto um QFN-28 é pequeno o suficiente para a maioria, não é pequeno o suficiente para todos.
Custo
O PIC mais barato custa cerca de um terço do preço do ARM Cortex-M0 mais barato. Mas isso é realmente US $ 0,32 vs. US $ 0,85. Sim, essa diferença de preço é importante para alguns. Mas eu afirmo que a maioria das pessoas neste site não se importa com essa pequena diferença de custo.
Da mesma forma, ao comparar MCUs mais capazes com o ARM Cortex-M0 / M3 / M4, geralmente o ARM Cortex sai "aproximadamente uniforme" ou no topo. Ao considerar as outras coisas (facilidade de desenvolvimento, custos do compilador, etc.), os ARMs são muito atraentes.
Segundo Resumo
Eu acho que a verdadeira questão é: Por que você NÃO usaria um ARM Cortex-M0 / M3 / M4? Quando o custo absoluto é super importante. Quando o consumo de energia super baixo é crítico. Quando é necessário o menor tamanho de embalagem. Quando a velocidade não é importante. Mas para a grande maioria dos aplicativos, nada disso se aplica e o ARM é atualmente a melhor solução.
Dado o baixo custo, a menos que haja um bom motivo para não usar um ARM Cortex, faz sentido usá-lo. Isso permitirá um tempo de desenvolvimento mais rápido e fácil, com menos dores de cabeça e margens de projeto maiores do que a maioria dos outros MCUs.
Existem outros MCUs não ARM Cortex de 32 bits disponíveis, mas também não vejo nenhuma vantagem neles. Há muitas vantagens em usar uma arquitetura de CPU padrão, incluindo melhores ferramentas de desenvolvimento e inovação mais rápida da tecnologia.
Obviamente, as coisas podem e mudam. O que eu digo é válido hoje, mas pode não ser válido daqui a um ano ou até um mês. Faça sua própria lição de casa.
fonte
David Kessner está correto. Eu gostaria de adicionar o seguinte.
Concordo que hoje em dia há poucas razões para não usar MCUs de 32 bits. Eu os usaria apenas [MCUs de 8 bits] por 2 razões: eu gosto da facilidade do pacote PDIP (não é necessária solda); Geralmente, não preciso de mais poder / complexidade do que o que um MCU de 8 bits pode oferecer.
O disjuntor é realmente as ferramentas disponíveis.
fonte
Utilizamos um Freescale MCF52259 relativamente fora de moda, um MCU de 32 bits ~ 80Mhz.
As razões / processo de pensamento para a escolha foram:
Atualmente, é mais econômico (e conveniente) sobredeclarar / expandir os recursos do hardware (armazenamento, velocidade, E / S, etc.) do que gastar um tempo valioso de desenvolvimento otimizando o código para se transformar em um MCU marginalmente mais barato / menor, a menos que haja espaço ou poder são grandes questões.
No nosso caso, o dispositivo tinha o dobro da especificação do M.Core pela metade do preço, ir para um MCU mais barato economizaria alguns centavos por placa, mas custaria muito tempo de desenvolvimento e limitaria o potencial de desenvolvimento futuro sem alterar os MCUs novamente.
Se estivéssemos construindo um milhão de placas, valeria a pena fazer o exercício de engenharia de custos para reduzir as coisas, mas, como está, não vale o tempo de desenvolvimento.
fonte