Arduino Mega: Utilizando um Microcontrolador Para Controlar um Conversor DC-DC Boost

Caros leitores, nesse artigo quero mostrar a vocês o poder de usar software para construção de dispositivos que são tipicamente construídos utilizando circuitos discretos. Em questão vamos literalmente construir um conversor DC-DC com controle digital. Vamos projetar uma fonte chaveada simples porém com tensão de saída ajustável. Uma das coisas que mais atrai este que vos escreve é desenvolver projetos que possam ser reproduzidos, usando componentes fáceis de achar e de montar. Partindo dessa premissa a minha primeira busca foi pensar em qual microcontrolador seria interessante para demonstrar sua capacidade controlando e atuando sobre um conversor DC-DC. Uma placa que todo mundo use? Sim, Arduino. Então, vamos projetar uma simples fonte chaveada controlada digitalmente (sim, tem um PID digital, mas já falaremos mais sobre ele) por um Arduino Mega, utilizando o ecossistema nativo de desenvolvimento dele e em C++ para provar que é possível, mas antes, um pouco de teoria.

 

Conversores Boost: Uma Introdução

Você leitor deve estar se perguntando: “Mas Felipe, as fontes com o conversores buck são muito mais comuns, então porque abordar um boost?”. Concordo com você, mas convenhamos um step-down provê uma tensão de saída igual ou menor que a entrada, logo temos uma centena de circuitos que faz o mesmo, o conversor boost pelo contrário é bem mais interessante de se demonstrar, pois realiza o contrário, ou seja, eleva a tensão de saída a partir da entrada. Além disso um step-up é um circuito que costuma ser uma necessidade, uma vez que elevadores baseados em capacitores e diodos fornecem pouca potência ainda mais comparado com um boost. Logo, se você precisa daquela alta tensão para usar de alimentação de um circuito de gate-driver, mas só tem uma simples fonte de 5V disponível, esse circuito é pra você. Como já citado, um circuito conversor boost fornece uma tensão de saída igual ou maior que a tensão de entrada, seu circuito pode ser demonstrado na figura abaixo.

 

Circuito básico step-up

Figura 1 : Circuito básico step-up

 

Descrever a operação detalhada de um conversor DC-DC boost, está fora do escopo desse artigo, porém vamos revisar seu princípio básico de operação em modo contínuo de condução. Para isso, vamos admitir que o circuito esteja em uma condição inicial em que C1 possua uma tensão inicial VCi, por L1 passe uma corrente inicial ILi, e que o transistor Q1 (comutado por um sinal quadrado, simétrico, e com período ts) esteja em condução no início do período ts. Nesse momento, D1 encontra-se em corte logo podemos considerar que a malha formada por: Vg (bateria), L1, Q1, está isolada do restante do circuito, a corrente em L1 aumenta quase-linearmente carregando, ao passo em que temos idealmente (desconsiderando as perdas no MOSFET Q1)  Vg//L1, logo a tensão em Vg e a tensão VL1 são iguais. Analisemos agora a malha formada por C1 e R1 (que equivale à carga), nesse momento a tensão VCi presente no capacitor é a mesma que aparece na saída do conversor, ou seja, em R1. O capacitor então fica responsável por suprir energia ao conversor enquanto L1 é carregado via Q1. Ao chegar na metade do período ts, a situação muda e com isso Q1 é cortado, assim D1 conduz e conecta L1 e Vg ao restante do circuito. No momento em que Q1 comuta, o indutor L1 transfere a energia acumulada ao capacitor C1 carregando-o,  com a parcela da tensão VL gerada, porém nesse mesmo momento além da tensão VL, temos no mesmo sentido, a tensão do gerador Vg. Para quem gosta de circuitos elétricos, ao observar essa condição, fica fácil perceber que a tensão com a qual se carrega C1 é maior que a tensão da bateria Vg, e assim encerra – se o ciclo e um novo começa.

 

Para o leitor mais atento, é fácil perceber que a tensão VL do indutor L1 que se somará a Vg quando Q1 estiver em corte será maior (até o nível de saturação do núcleo) à medida que mais energia seja armazenada no estado de condução de Q1 para um mesmo período ts, estamos então falando de um trivial gerador de PWM que qualquer microcontrolador de baixo custo hoje possui, incluindo a maioria das placas Arduino. Para finalizar nossa breve explicação, e dispensando a modelagem matemática, o formulário relevante para o projeto de um conversor DC-DC boost em modo contínuo de condução pode ser aproximado por:

 

BoostBaseEq1

Um belo formulário, sem dúvida, mas vale lembrar que esses modelos são muito bons como ponto de partida para projetar um conversor Boost, uma abordagem mais completa pode ser encontrado em [1].

 

Controle Digital: A Peça Faltante Para Reproduzir Sistemas Tipicamente Analógicos

Sabemos o que é um conversor boost , porém a teoria acima explicada é perfeita para operação em malha aberta, agora imagine que um valor de D foi escolhido para determinar a tensão de saída dado um valor de R1, agora vamos pensar que num dado momento R1 seja substituído por outro resistor com valor R2. Oras, se esse novo valor for menor e temos D fixo, o capacitor C1 vai transferir menos energia do que L1 transfere a ele o que na prática implica num aumento de tensão até que uma nova condição de equilíbrio ocorra (ou o circuito pare de funcionar). De forma análoga, se R2 for menor que R1, C1 terá que transferir mais energia do que L1 consegue transferir a ele, o que geraria um decaimento da tensão de saída. O mesmo problema ocorre para variações na tensão de entrada, logo a operação em malha aberta é perfeita para condições invariáveis, mas sabemos que por se tratar de uma fonte a mesma precisa operar com tensão constante a diferentes níveis de carga e tensão de entrada, e no nosso caso a situação é ainda pior pois queremos que a tensão de saída seja ajustável, é quando entra o papel de uma parte importante de toda fonte chaveada, o circuito de controle.

 

 

Para uma fonte com controle analógico, a topologia de um circuito dedicado de controle é a mesma usada em outros circuitos: um elemento sensor, um amplificador de erro com um compensador e um sistema de atuação, nesse caso um gerador de PWM. O popular circuito integrado MC34063 [3] é uma solução de baixo custo para projetar uma fonte boost, seu diagrama pode ser apreciado na figura abaixo:

 

Diagrama

 

Esse controlador é um dos mais simples disponível no mercado e conta com os já citados blocos. O comparador na verdade contém o amplificador de erro em conjunto com o compensador, veja que o set-point é fixo através de uma tensão de referência interna de 1.25V, logo ajustar a tensão de saída de uma fonte com esse integrado envolve recalcular o divisor resistivo denotado por R1 e R2. O atuador, gerador de PWM, é composto de dois blocos, um oscilador e um latch, e seu ciclo-ativo é ajustado de acordo com o sinal resultante da malha de compensação, para mais informações sobre esse integrado o leitor pode consultar seu datasheet. A figura 3 exibe uma aplicação de uma fonte boost usando esse integrado:

 

conversor-DC-DC-BOOST

Figura 2 – Conversor-DC-DC-BOOST

 

Utilizar um circuito integrado dedicado é uma solução para a construção de uma fonte dessas. Porém substituir o controle analógico por um processador digital nos permite sofisticar na construção da fonte, podemos selecionar a frequência de chaveamento, utilizar algoritmos de controle otimizados e mais, tudo isso apenas reprogramando o processador.

 

Como já citado anteriormente, vamos utilizar uma das queridas pela comunidade maker, as placas Arduino, no caso a variante Arduino Mega (que pode ser encontrada na loja online basta dar um clique no link). O interessante é que o pequeno processador AVR de 8 bits se mostrou mais que suficiente para realizar essa tarefa, assim vejamos quais recursos vamos precisar para nosso controlador digital, a figura 4 exibe o diagrama de blocos do controlador digital.

 

Diagrama do controlador digital

Figura 3 – Diagrama do controlador digital

 

O diagrama está bem simplificado (o esquema elétrico também é, não se preocupem) com os blocos mais importantes. Para observar o que ocorre no circuito boost, o Arduino Mega precisa digitalizar o sinal presente no elo de realimentação, para essa tarefa seu conversor A/D é utilizado. O valor desejado (set-point) pode ser ajustado manualmente no código, ou utilizar o mesmo conversor A/D em amostragens intercaladas. Em seguida a CPU AVR será responsável pelo processo, calculando a diferença entre o valor desejado e o corrente, e aplicará digitalmente um compensador tipo-II, basicamente um PI (foi adicionado uma ligeira ação derivativa para melhoria no tratamento de overshoots), ainda o processador de posse do resultado realizará dois processos: o de saturação e o de escala. O atuador para um conversor boost será um gerador de PWM, facilmente configurado no Arduino Mega. Implicitamente, existe um segundo temporizador (atrelado à taxa de amostragem do sistema) que é responsável por aplicar a ação de controle de forma periódica sendo útil caso algum método analítico de ajuste do compensador seja utilizado.

 

Especificando Nosso Conversor DC-DC

 

Agora que já falamos sobre o conversor, e sobre nosso controle, vamos às especificações da fonte desejada:

  • Tensão de entrada : 5 [V] com tolerância de +/-20%;
  • Tensao de saída: Ajustável de 5 a 24 [V];
  • Potência de saída: 15 [W];
  • Frequência de chaveamento: 50 [KHz];
  • Ajuste da tensão de saída: por trimpot ou potenciômetro.

 

As especificações foram escolhidas para que seja uma fonte de uso geral, mas que atenda às necessidades de gerar tensões mais altas através de uma simples fonte de 5V (como essas de protoboard). Pode gerar localmente a alimentação de pequenos motores, ou sinais de comunicação no padrão 0 – 10 [V]. A frequência de chaveamento foi escolhida de forma a minimizar o valor do indutor, e ao mesmo tempo prover uma razoável resolução do gerador de PWM do Arduino. Com esse valor, a uma frequência de clock de 16MHz, consegue – se uma resolução de 8 bits. A seguir formulário para cálculo de resolução:

 

ResoluçãoPWM

 

Utilizando as equações básicas do conversor boost ajustei um pouco o modelo, afim de minimizar o valor de indutância. O chaveador escolhido foi um MOSFET variante IRLZ44N. Esse transistor possui uma capacidade de corrente de mais de 40A e baixo RDSon. Sua principal vantagem é que pode ser levado à saturação com baixo valor de tensão de gate, sendo então diretamente acionado pelo Arduino Mega, dispensando um caro e chato gate-driver. Ufront-end minimo foi colocado entre o Arduino e o MOSFET para limitação de corrente. O Ajuste da fonte pode ser efetuado diretamente na entrada analógica do Arduino Mega, para exemplificar optei por um trimpot multivoltas. O Esquema elétrico completo da fonte pode ser observado abaixo:

 

Esquema elétrico da fonte boost

Figura 4: Esquema elétrico da fonte boost

 

Realmente, completo e simples. Veja que o circuito além do conversor, possui apenas a rede de feedback, responsável por realimentar o Arduino Mega com o estado corrente, e o sinal de controle com uma rede de resistores para limitar a corrente RMS que aparece no sinal PWM, e um resistor (R3) para forçar o MOSFET em corte no caso de desconexão do Arduino Mega.

 

Falando de Firmware: Implementando a Malha de Controle Digital

 

Além do projeto do conversor, desenvolver o firmware de aplicação foi desafiador, pois estou desde 2011 sem fazer uma única linha de código em C++, foi bom para desenferrujar e aproveitar as capacidades da linguagem, a mais usada para desenvolvimento no Arduino. Para realizar a abstração de hardware e ainda obter uma agradável surpresa, criar classes de compensadores é muito mais simples e funcional do que descrever um conjunto de structs. Porém nem tudo foi fácil, o acesso abstraído ao hardware do AVR fornecido pela IDE do Arduino não atendia aos requerimentos de tempo e desempenho que necessitava, algo esperado por ainda que simples, se tratar de um sistema de controle de tempo real.

 

Assim a primeira tarefa é prover um arquivo de abstração de hardware, mas que o opere com o desempenho necessário para atuar no conversor, assim o leitor que abrir os arquivos hal.cpp/.h irá encontrar classes de objetos para instanciar o conversor A/D em modo de alta velocidade garantindo 50000 amostras por segundo. O gerador de PWM configurado na sua forma mais poderosa, sem prescaler e com resolução máxima de 16 bits, além de uma classe para instanciar os timers 0 e 2 como geradores de tick. A interrupção é abstraída do usuário não sendo necessário mexer com os vetores do processador, assim temos um gerador periódico do eventos para executar a malha de controle com precisão, além da leitura do setpoint a uma taxa fixa de 200Hz.

 

Configurado o hardware Arduino, os blocos elementares de um conversor boost estão prontos para operar, ficando o maior esforço de firmware em implementar o compensador. Como já citado trata-se de um tipo-II que nada mais é do que um proporcional-integral. Dada a simplicidade do circuito e a CPU do Arduino, foi usada a conhecida aproximação retangular de primeira ordem, e os cálculos utilizam o formato numérico fracionário afim de evitar overflow das sucessivas multiplicações realizadas. Um esqueleto de um objeto completo do conversor esta feito bastando ser implementado. Todas essas definições podem ser encontradas em digitalboost.cpp/.h.

 

Com esses dois arquivos basicamente qualquer tipo de conversor pode ser criado, assim a aplicação principal simplesmente instancia os objetos de hardware, inicializa um compensador e lê o valor de tensão desejado pelo usuário. A cada 5Hz imprime os valores da tensão setada e da tensão lida pelo conversor. A aplicação de firmware  pode ser vista abaixo:

 

 

Arduino Mega – Resultados

 

Essa é a parte que me surpreendeu, pois resumindo as minhas análises o Arduino Mega deu conta do recado ele corrige o valor da tensão de saída com maestria, seja variando o setpoint ou sofrendo uma perturbação do sistema (variação da tensão de entrada). A seguir vamos ver algumas imagens. A Figura abaixo exibe a “aranha” que montei em bancada.

 

 

Arduino Mega

Figura 5 – Arduino Mega

 

 

Não ficou lá dos mais bonitos, mas acho que a intenção era exatamente essa, montar um conversor DC-DC digital, com o que se encontra em casa. Apenas o powertrain do conversor não teve outra solução senão montar uma placa, dada o valor de corrente que percorre nesses componentes. Vejamos agora nosso boost “Arduinado” em ação. As figuras 7, 8 e 9 exibem a tensão de entrada de 5 Volts para uma tensão de saída solicitada de 12V, 15V e 24V.

 

 

IMG_20150309_235858036

 

Nas duas figuras (acima e abaixo) estou realizando a medida da tensão de saída, setando o valor desejado para 5V, reparem nas duas imagens que a tensão varia em torno de +/- 70 mV ou seja em torno de 1.5% de oscilação, atestando uma regulação razoável.

 

IMG_20150309_235957582

 

 

Figuras 7,8,9: Conversor em equilíbrio.

 

Ao leitor atento, peço que dê uma olhada no valor da componente AC presente no sinal, que é mínimo, além do valor de ripple terceira linha de medidas, lembrando que o teste da fonte em equilíbrio foi feita com ela a plena carga. Agora vamos mostrar algumas formas de onda do nosso conversor a 10V. A figura  10 exibe a saída para 10V.

 

Waveform da tensão de saída em equilíbrio

Figura 10: Waveform da tensão de saída em equilíbrio

 

Vejamos agora uma resposta em degrau dessa fonte na figura 11, o traço azul corresponde ao sinal de saída da fonte enquanto que o laranja é o valor de degrau gerado pelo usuário.

 

Resposta em degrau da fonte

Figura 10: Resposta em degrau da fonte

 

Percebam, que a fonte corrige rapidamente a variação e o tempo de zona morta é mínimo. Além disso a porcentagem de sobressinal é inferior a 10% do valor desejado. Uma das coisas mais interessantes nesse tipo de teste é a possibilidade de ver com detalhes a malha de controle buscando o valor desejado pelo usuário, bem como suas etapas. Dica: esse teste pode ser utilizado para melhorias no ajuste do compensador, eu realizei um ajuste baseado no conhecido método Ziegler-Nichols.

 

Além dos gráficos, o que me surpreendeu foi a “elasticidade” dessa fonte. Em média a fonte pode sofrer uma variação de 2,50V para mais ou para menos em relação aos 5V centrais que a tensão de saída se mantém constantes, isso é equivalente a uma faixa de variação de 50% do nominal. Além disso a fonte mostrou uma boa regulação de linha (deixo o teste da regulação de carga para o leitor), cerca de 40mV para cada 1V variado na entrada um excelente resultado para uma fonte controlada por um microcontrolador que muita gente fala que é de “brinquedo”.

 

Conclusão: Utilizemos Mais Microcontroladores Para Substituir CI Discreto

Nessa pequena série, queríamos mostrar que microcontroladores podem ser utilizados até em campos poucos discutidos por quem desenvolve firmware, como por exemplo, o projeto de fontes que sempre foi algo que ficava a cargo de um integrado dedicado, com pouco ou nenhum acesso para personalização por parte do desenvolvedor. Porém também demonstramos o quanto eletrônica e software podem andar de mãos dadas a ponto de simplificar solução para um problema, no caso utilizar um microcontrolador (e diga – se de passagem, qualquer um) para atuar e configurar um conversor de energia estático, e que essa tarefa não se restringe apenas a topologias complexas munidas de DSP, mas também pode ser realizado na forma mais simples e por pessoas comuns como nós, que enfrentamos desafios diários de como aproximar engenharia e programação. Além disso é gratificante transformar uma plataforma de desenvolvimento tão utilizada pela comunidade em uma resposta para um desafio tido como complexo ou que necessite de mais poder de processamento. Os arquivos aqui desenvolvidos podem ser acessados aqui. O projeto foi desenvolvido utilizando o Atmel Studio com o plugin do Arduino IDE, mas pode ser facilmente portado para a IDE específica do Arduino sem menores problemas. Espero que tenham gostado da série e vamos discutir sobre outras topologias e até onde o Arduino poderia aguentar com controle digital de tempo real. É isso caros leitores, até a próxima.

 

Referências

 

DEIXE UM COMENTÁRIO