STM32. Prática de perda de peso ou dieta para o controlador



Que tipo de bobagem, alguns leitores provavelmente pensam quando virem o título da publicação. O autor cometeu um erro no recurso? Ou foi planejado colocá-lo no hub "Geek Health"? E eles estarão parcialmente certos, mas apenas parcialmente ... Sob o corte, falaremos sobre um método para reduzir e otimizar o consumo de energia de dispositivos eletrônicos.


Há algum tempo, a placa X-NUCLEO-LPM01A caiu em minhas mãos, que por enquanto estavam ociosas até que eu decidisse estudar o consumo de energia de um dispositivo projetado com energia autônoma.



Esta placa foi desenvolvida pela STMicroelectronics e está posicionada como "Blindagem de potência, placa de expansão Nucleo para medição de consumo de energia". Não encontrei na rede uma descrição explicativa em russo para trabalhar com este devkit e decidi descobrir por mim mesma e, ao mesmo tempo, compartilhar informações com a respeitada comunidade habro.


Se destacarmos a principal, a placa de expansão é uma fonte de energia programável de 1,8 a 3,3 volts, com a capacidade de medir a corrente de carga em tempo real (no modo dinâmico até
50 mA) com uma frequência de amostragem de até 100 kHz. O dispositivo pode operar de forma independente e como parte de um complexo de hardware e software. Para exibir graficamente os valores medidos, o utilitário STM32Cube MonitorPower é usado . Este software também permite definir todos os parâmetros necessários e executar o processamento após a ocorrência de um evento (ativação do acionador). O X-NUCLEO-LPM01A é afiado para trabalhar com placas Nucleo-32 (64, 144), Arduino Nano (Uno); para esse fim, as blindagens correspondentes são colocadas sobre ela, mas é possível trabalhar com placas arbitrárias. A foto abaixo mostra a conexão do dispositivo em estudo com um dos conectores na placa.




Além do software aplicativo, o X-NUCLEO-LPM01A suporta o modo de comando, para o qual qualquer programa de terminal deve funcionar. (Aqui eu pareço ficar um pouco empolgado, o HTerm acabou com um meio chute, mas tive que jogar um pouco com o meu ZOC favorito). Além disso, a julgar pela descrição, através do uso do driver VCP, o dispositivo pode derramar dados na porta COM com uma velocidade de até 3686400 baud. Uma velocidade tão alta é garantida, em particular, pela transmissão de um fluxo de dados binários (para frequências de amostragem acima de 50 KHz); para caracteres ASCII, a velocidade é um pouco menor.


Mais especificamente, a tarefa que tentarei resolver usando o X-NUCLEO-LPM01A é:

  1. Para obter informações sobre o consumo dinâmico de energia dos nós de interesse no produto projetado usando o gatilho de gatilho X-NUCLEO-LPM01A nos locais estudados do código do programa.

  2. No processo de operação contínua do dispositivo para organizar o acúmulo dos fragmentos necessários para posterior análise generalizada.


A captura de tela abaixo mostra o registro atual do cartão SD durante a gravação de dados.




O STM32Cube MonitorPower permite não apenas qualitativamente, mas também avaliar quantitativamente o consumo de energia do dispositivo em estudo. Os valores mínimo, máximo e médio do consumo atual e o valor integrado de energia são mostrados na parte inferior da imagem. Esses dados estão disponíveis para toda a medição e para o fragmento selecionado.


No manual do usuário, observe que o disparo da medição é realizado por um pulso na perna da blindagem do arduino D7. Como se viu, apenas um único início do processo com a gravação contínua subsequente funciona. Uma tentativa de organizar um modo de início / parada para registrar a corrente (nas duas frentes do pulso) não teve êxito. Ou seja, depois de iniciar a gravação no lugar certo na frente ascendente, não é possível desacelerar o processo com uma frente decrescente do pulso. E isso não é exatamente o que eu esperava obter deste dispositivo.


Um modo start-stop totalmente controlado pode ser definido usando a sequência de comandos do programa do terminal

a equipe

a descrição

htc

captura de controle de host

volt 3300-03

tensão de alimentação no canal medido 3300 mV

acqtime 0

medição contínua sem limite de tempo

freq 10000

frequência de amostragem 10 kHz

iniciar

início da medição

...

medição (dados são derramados no terminal)

parar

fim de medição


O problema é que este é um controle manual que não está sincronizado com os eventos no controlador de destino. Obviamente, você pode tentar formar a sequência de comandos indicada no lado do dispositivo em estudo, não no host, mas o fluxo de saída de dados do X-NUCLEO-LPM01A também será espalhado no controlador e não está claro o que fazer com eles, e o redirecionamento da saída para "algum lugar para outro lugar" também não está disponível ( embora haja pinos UART Tx, Rx na placa, eles aparecem como "reservados" no manual e provavelmente não estão envolvidos na versão atual do firmware). Saí dessa situação da seguinte maneira:


A seguinte sequência de comandos é formada no lado do host (computador)

a equipe

a descrição

htc

captura de controle de host

volt 3300-03

tensão de alimentação no canal medido 3300 mV

acqtime 1

duração da medição
(pode ser usado um intervalo de 10 μs a 10 segundos)

trigsrc d7

sincronização do início da medição com uma borda ascendente
pulso no pino D7

freq 10000

frequência de amostragem 10 kHz

iniciar

início da medição

...

medição (os dados começam na extremidade do pulso e param
depois do tempo especificado em acqtime)


Agora, os dados serão capturados em lotes, e não em um fluxo contínuo. Essa abordagem permite explorar o consumo do circuito em diferentes locais do programa e em diferentes intervalos de tempo, bem distantes um do outro. Ou seja, se houver a necessidade de coletar informações sobre o consumo de energia de um dispositivo que funciona por uma hora (dia, semana), você não precisará gravar um fluxo contínuo, e mesmo com uma taxa de amostragem máxima, e então entender essa bagunça, mas apenas fornecer o algoritmo de operação acima. E se o programa do terminal gravar marcadores de tempo em seu log, conforme mostrado na figura abaixo, será bastante simples analisar o histórico de eventos desse arquivo.




É como um gravador de vídeo com detecção de movimento e registro de data e hora.


Deixe-me dar algumas capturas de tela obtidas usando o X-NUCLEO-LPM01A . O primeiro é o consumo de energia do controlador durante a leitura de dados do ADC embutido. 32 valores são lidos por interrupção do timer com uma frequência de 4 KHz e são armazenados na memória.




No segundo - leitura e economia de dados semelhantes, mas apenas o controlador "se permite dormir" após cada medição, até que a próxima interrupção do temporizador ocorra, usando um dos modos de economia de energia disponíveis.




Um delta significativo no consumo de corrente durante a medição, ~ 6 mA, é imediatamente perceptível. Esses dois exemplos não pretendem otimizar o consumo de energia de dispositivos de baixa potência, mas apenas demonstram os recursos do X-NUCLEO-LPM01A , que é capaz de medir correntes de 1 nA.


Concluindo, direi que, na minha humilde opinião, este devkit parece ser uma ferramenta perfeitamente adequada que pode ocupar seu devido lugar ao lado do osciloscópio e do analisador de sinais lógicos na mesa de gravação. E o uso da abordagem descrita permitirá não apenas "moderar o apetite do controlador" no desenvolvimento de dispositivos críticos de energia, mas também entender melhor a dinâmica dos processos nos diversos modos de economia de energia usados ​​ativamente pelos desenvolvedores de dispositivos eletrônicos modernos.


O custo do conselho - mais de 7.000 rublos, obscurece o arco-íris da imagem, mas pode uma quantidade tão insignificante nos tempos modernos impedir um verdadeiro nerd da possibilidade de possuir este maravilhoso kit de desenvolvimento?


PS Apesar da indicação na UM de que o UART está reservado para aplicativos futuros, eu ainda o mantive e descobri que ele vive como uma segunda interface (a E / S é duplicada do VCP) a uma velocidade de 921600 8N1 e pode ser usada como um comando, formando comece e pare para o começo - o fim da medição. A desvantagem dessa abordagem será a disponibilidade obrigatória de UART gratuito no lado do controlador em estudo, sem mencionar o fato de que 921600 bauds geralmente são impossíveis em baixas frequências de clock.


PPS Já depois de escrever o artigo, notei uma diferença nas últimas fotos de ~ 2 mA na entrada e no final da medição. Provavelmente não desliguei o relógio da ADC ou deixei o cronômetro para trabalhar, mas é como Leonid Kanevsky gosta de dizer: "uma história completamente diferente" ...


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


All Articles