Um projeto aberto de um módulo de controle de motor elétrico. Tecnologia de desenvolvimento de software


Escrever firmware para o interior da moderna eletrônica embarcada é praticamente impossível de escrever do zero. Eles simplesmente não dão tempo para isso. Portanto, o software para sistemas embarcados é baseado em
plataformas de software prontas - estruturas. Quanto mais desenvolvida a estrutura, mais rápido o desenvolvimento. Aqui, falaremos sobre a estrutura que criei especificamente para os módulos de controle do motor e que já foi usada com sucesso há algum tempo.

A arquitetura da estrutura.


A estrutura foi projetada para funcionar na plataforma aberta do módulo de controle universal do motor DMC v2.0 .

A arquitetura lógica da estrutura pode ser representada como um diagrama de blocos, mostrado abaixo. No fluxograma, uma lista completa de todos os componentes da estrutura é omitida, pois isso prejudicaria a clareza, mas para uma ideia geral, penso, granularidade é suficiente.


(Clique para ampliar)

O framework não possui versões, está em constante desenvolvimento, e aqui apenas tentei corrigir seu estado atual, publicado no GitHub.

Do ponto de vista dos módulos de software, a estrutura contém as seguintes partes principais:

- Um conjunto de módulos de suporte no nível do aplicativo
- Sistema operacional MQX em tempo real.
- Middleware: sistema de arquivos, shell de comando, pilhas de protocolos de comunicação , etc.
- Um pacote de suporte de placa de baixo nível (BSP), que inclui acesso aos periféricos das placas de módulo BLEZ66V1 e do módulo de energia.
- Pacote de software para monitoramento, depuração e diagnóstico - FreeMaster .
- Ferramentas de depuração, incluindo RTT , rastreamento de ferramentas ITM , registradores, terminal VT100 .
- Módulo para gerar arquivos de parâmetros.
- Módulos de códigos-fonte gerados com base em algoritmos no Matlab .

Por que o MQX está selecionado?


O sistema operacional em tempo real (RTOS) MQX é conhecido há muito tempo, mas
apareceu em domínio público há alguns anos. Este sistema operacional foi carregado pela Freescal antes da NXP comprá-los. O RTOS tinha inicialmente uma licença apenas para uso em microcontroladores Freescale, agora a licença também se estende aos produtos NXP. O RTOS sobreviveu à popularidade explosiva, passou por várias atualizações para a versão 4.2, após as quais a Freescale decidiu tornar suas versões subseqüentes comercializadas novamente. Portanto, foram lançadas duas versões, uma aberta e congelada em desenvolvimento chamada MQX Classic (também conhecida como MQX v4.2) e uma comercial fechada MQX 5.0.

Na estrutura descrita, a ramificação do MQX Classic v4.2 é usada. Esta é uma versão estável e bem testada. A licença permite que o desenvolvedor modifique o código-fonte do MQX Classic e use-o em produtos comerciais, no entanto, não permite a publicação do MQX Classic na forma de origem. Mas isso não deve ser um problema, pois o MQX Classic está disponível para download gratuito.

A estrutura do RTOS em termos gerais é assim:



Por que preciso do RTOS?


Uma aplicação complexa onde, em particular, o controle motor é necessário, é bastante complexa e consiste em muitas tarefas assíncronas, cada uma com seu próprio ciclo de repetição e seus eventos de ativação e parada. Se executarmos todas essas tarefas em uma super ciclo, inevitavelmente encontraremos o problema de atrasar a execução de algumas tarefas por outras tarefas.
Usando o RTOS, como o MQX, é possível livrar-se da interdependência de tarefas individuais no eixo do tempo sem reescrevê-las ou mesmo olhar para seus códigos-fonte.

Por exemplo, nossa tarefa de logger pode tentar escrever uma mensagem pelo tempo que desejar em um cartão SD aguardando sua resposta, a tarefa USB pode ser transferida para uma grande quantidade de dados para um computador, mas ao mesmo tempo a tarefa PID do algoritmo do motor será executada estritamente em um intervalo especificado e a tarefa de medição de velocidade a rotação não perderá um único evento de alteração do sinal do codificador.

Embora eu deva admitir, existe outra maneira cada vez mais popular de se livrar da complexidade em um único chip - alternando para o multiprocessamento, mas, neste caso, o RTOS fornecerá um bom serviço.

As principais vantagens do RTOS MQX.

- O kernel do sistema vem com uma ampla gama de middlewares, incluindo um sistema de arquivos, pilha TCP / IP, pilha USB, shell de comando, etc. Tudo no código fonte.

- Conjuntos de BSP prontos para placas diferentes, eliminando a necessidade de escrever suas próprias bibliotecas de trabalho periféricas.
- Documentação detalhada em arquivos pdf com fácil navegação.
- A presença de um plug-in para o ambiente de trabalho incorporado IDE IAR, com informações muito detalhadas sobre as estruturas internas do RTOS, é muito mais detalhada do que para outros conhecidos RTOS - uCOS e FreeRTOS.
- Muitos exemplos de aplicativos RTOS e casos de teste.

Ao falar sobre o RTOS, eles sempre enfatizam sua capacidade de concluir tarefas no prazo, mas as estimativas quantitativas geralmente não são fornecidas ou fornecidas para algumas plataformas de terceiros selecionadas separadamente. Claramente, isso não é suficiente para implementar um controle rígido em tempo real usando o RTOS. E para controlar os motores, você precisa de tempo real exatamente difícil.

O MQX possui um maravilhoso caso de teste nesse sentido, que permite obter uma tabela detalhada do tempo de execução de todos os serviços na plataforma em que você iniciou o teste.

Abaixo está uma tabela do tempo de execução dos serviços no microcontrolador do nosso módulo de controle de motor, com a otimização máxima para a velocidade de execução de código incluída no compilador.

Tempo de execução do serviço clássico RTOS MQX




A tabela também fornece uma idéia de quais serviços são suportados pelo RTOS e quais opções de kernel estão disponíveis. O projeto de teste no IDE IAR está incluído na estrutura publicada.

Composição do Diretório do Projeto


O diretório raiz da estrutura fica assim:


APP_SRC - um diretório que contém todas as origens, exceto aquelas que pertencem à distribuição MQX.
FreeMaster_apps - arquivos de projeto para execução no ambiente FreeMaster .
IAR_proj - espaço de trabalho e arquivos de projeto para o ambiente de trabalho incorporado IAR para o ambiente ARM v7.70.2. Nesse ambiente, o aplicativo final é compilado e depurado.
MQX_SRC é um diretório que contém todas as fontes de MQX e middleware fornecidas com o MQX. Como a licença não permite a publicação de código-fonte aberto da distribuição MQX, não há arquivos ' .s' e ' .s' nesse diretório. Mas aqueles que concordam com os termos da licença NXP podem receber os arquivos ausentes.
ParametersManager - diretório do programa gerenciador de parâmetros. Usando este programa, são criadas listas de parâmetros do aplicativo e os arquivos ' .s' e ' .h' são gerados com declarações de parâmetros para incorporação no aplicativo.
TESTES - um diretório com projetos de teste de estrutura. Aqui está o projeto MQX_benchmark para gerar um relatório com horários do MQX.

Os arquivos MQX_LIBRARY_O0.a e MQX_LIBRARY_O3.a são o conteúdo do diretório MQX_SRC compilado em bibliotecas com otimização mínima e otimização máxima, respectivamente.

O conteúdo do diretório IAR_proj



Os arquivos U3HB_full.eww e U3HB_MQXLib.eww são os arquivos da área de trabalho IAR .
Desde que não haja fontes no diretório MQX, apenas o arquivo U3HB_MQXLib.eww funcionará . Este espaço de trabalho usa bibliotecas MQX compiladas. No espaço de trabalho U3HB_full.eww, as fontes completas do MQX são compiladas. O diretório OUT serve como o local em que o IAR coloca seus produtos de trabalho, em particular arquivos de mapa e hexadecimais.

O diretório de configurações é criado automaticamente pelo IAR. Ele armazena especificamente as configurações do depurador. Se algo não puder ser configurado durante a depuração no IAR, às vezes vale a pena apagar este diretório.

O arquivo INT_FLASH_MK66FX1M0LVQ18.icf é um arquivo de configuração do vinculador IAR. Ele determina os endereços das regiões de memória em que o vinculador coloca código, dados, vetores de interrupção, pilhas, etc.

O conteúdo do diretório MQX_SRC



Os arquivos da área de trabalho MQX_LIBRARY.eww são usados ​​para criar bibliotecas do MQX. Até que os arquivos ' .s ' e ' .s' sejam colocados nos diretórios, esse projeto não será compilado.
config - o diretório com os arquivos de configuração do MQX. A composição dos serviços e drivers do MQX é especificada no arquivo de configuração user_config.h .
mfs - sistema de arquivos MQX, inclui FAT32 e RAM FS
mqx - o núcleo do MQX inclui os seguintes subdiretórios:


rtcs - pilha TCP / IP. Inclui os seguintes subdiretórios:


shell - um diretório com arquivos shell.
usb - diretório com arquivos de pilha USB

A funcionalidade de cada módulo de software MQX está bem documentada pelo fabricante. Como exemplo, fornecerei links para dois documentos:

Instruções para usar o MQX .
Guia de Referência do MQX.
O restante deve ser procurado na distribuição, disponível no site da NXP .

A estrutura em si está no repositório aqui .

Uma descrição mais detalhada do trabalho com exemplos de software e aplicativo pode ser encontrada nos seguintes artigos.

Source: https://habr.com/ru/post/pt403525/


All Articles