Índice:

Arduino - Carregador solar PV MPPT: 6 etapas (com fotos)
Arduino - Carregador solar PV MPPT: 6 etapas (com fotos)

Vídeo: Arduino - Carregador solar PV MPPT: 6 etapas (com fotos)

Vídeo: Arduino - Carregador solar PV MPPT: 6 etapas (com fotos)
Vídeo: MPPT solar battery charger using a PIC Microcontroller 2024, Novembro
Anonim
Image
Image
Conversor Buck
Conversor Buck

Existem muitos controladores de carga disponíveis no mercado. controladores de carga baratos comuns não são eficientes para usar a potência máxima dos painéis solares. Os que são eficientes são muito caros.

Então, decidi fazer meu próprio controlador de carga, que é eficiente e inteligente o suficiente para entender as necessidades da bateria e as condições solares. ele toma as ações apropriadas para extrair o máximo de energia disponível da energia solar e colocá-la dentro da bateria de forma muito eficiente.

SE VOCÊ GOSTA DO MEU ESFORÇO, POR FAVOR, VOTE ESSES INSTRUÇÕES.

Etapa 1: O que é MPPT e por que precisamos dele?

Nossos painéis solares são burros e não são inteligentes para entender as condições da bateria. Suponha que temos um painel solar de 12v / 100 watts e ele fornecerá uma saída entre 18V-21V dependendo dos fabricantes, mas as baterias são classificadas para tensão nominal de 12v, em condições de carga total serão 13,6v e 11,0v no máximo descarga. agora vamos assumir que nossas baterias estão carregando 13 V, os painéis estão dando 18 V, 5,5 A com 100% de eficiência de trabalho (não é possível ter 100%, mas vamos supor). os controladores comuns têm um regulador de tensão PWM ckt que reduz a tensão para 13,6, mas não há ganho de corrente. ele apenas fornece proteção contra sobrecarga e fuga de corrente para os painéis durante a noite.

Portanto, estamos tendo 13,6 V * 5,5 A = 74,8 watts.

Perdemos aproximadamente 25 watts.

Para encontrar esse problema, usei o conversor smps buck. esse tipo de conversor tem eficiência acima de 90%.

O segundo problema que temos é a produção não linear de painéis solares. eles precisam ser operados em certa tensão para colher a potência máxima disponível. Sua produção varia ao longo do dia.

Para resolver este problema, algoritmos MPPT são usados. MPPT (Rastreamento de Ponto de Potência Máxima) como o nome sugere, esse algoritmo rastreia a potência máxima disponível dos painéis e varia os parâmetros de saída para sustentar a condição.

Portanto, ao usar o MPPT nossos painéis estarão gerando a potência máxima disponível e o conversor de buck estará colocando essa carga de forma eficiente nas baterias.

Etapa 2: COMO FUNCIONA O MPPT?

Não vou discutir isso em detalhes. então se você quiser entender dê uma olhada neste link -O que é MPPT?

Neste projeto eu rastreei as características de entrada V-I e saída V-I também. multiplicando a entrada V-I pela saída V-I, podemos obter a potência em watts.

digamos que estamos tendo 17 V, 5 A, ou seja, 17x5 = 85 watts a qualquer hora do dia. ao mesmo tempo, nossa saída é de 13 V, 6A, ou seja, 13x6 = 78 Watt.

Agora o MPPT aumentará ou diminuirá a tensão de saída comparando com a alimentação de entrada / saída anterior.

se a potência de entrada anterior era alta e a tensão de saída era menor do que a atual, então a tensão de saída será mais baixa novamente para voltar à potência alta e se a tensão de saída for alta, a tensão atual aumentará para o nível anterior. assim, ele continua oscilando em torno do ponto de potência máxima. essas oscilações são minimizadas por algoritmos MPPT eficientes.

Etapa 3: Implementando MPPT no Arduino

Este é o cérebro deste carregador. Abaixo está o código do Arduino para regular a saída e implementação do MPPT em um único bloco de código.

// Iout = corrente de saída

// Vout = tensão de saída

// Vin = tensão de entrada

// Pin = potência de entrada, Pin_previous = última potência de entrada

// Vout_last = última tensão de saída, Vout_sense = tensão de saída atual

void regular (flutuar Iout, flutuar Vin, flutuar Vout) {if ((Vout> Vout_max) || (Iout> Iout_max) || ((Pin> Pin_previous && Vout_sense <Vout_last) || (PinVout_last)))

{

if (duty_cycle> 0)

{

dever_ciclo - = 1;

}

analogWrite (buck_pin, duty_cycle);

}

else if ((VoutVout_last) || (Pi

{

if (duty_cycle <240)

{dever_ciclo + = 1;

}

analogWrite (buck_pin, duty_cycle);

}

Pin_previous = Pin;

Vin_last = Vin;

Vout_last = Vout;

}

Etapa 4: Conversor Buck

Usei o mosfet do canal N para fazer o conversor de buck. normalmente as pessoas escolhem o mosfet do canal P para a comutação do lado alto e se escolherem o mosfet do canal N para o mesmo propósito, será necessário um IC de driver ou ckt de inicialização.

mas eu modifiquei o conversor de buck ckt para ter uma comutação de lado baixo usando mosfet de canal N. i, m usando o canal N porque são de baixo custo, altas classificações de energia e menor dissipação de energia. este projeto usa mosfet de nível lógico IRFz44n, de modo que pode ser acionado diretamente por um pino PWM arduino.

para corrente de carga mais alta, deve-se usar um transistor para aplicar 10 V na porta para deixar o mosfet em saturação completamente e minimizar a dissipação de energia, eu também fiz o mesmo.

como você pode ver no ckt acima, coloquei o mosfet na tensão -ve, usando + 12v do painel como aterramento. esta configuração me permite usar um mosfet de canal N para conversor de buck com componentes mínimos.

mas também tem algumas desvantagens. como você tem tensão de ambos os lados separados, você não tem mais um aterramento de referência comum. portanto, medir tensões é muito complicado.

Eu conectei o Arduino aos terminais de entrada Solar e usando sua linha -ve como aterramento para o Arduino. podemos facilmente medir a volateg de entrada neste ponto usando um divisor de tensão ckt de acordo com nossa exigência. mas não podemos medir a tensão de saída tão facilmente, pois não temos um aterramento comum.

Agora, para fazer isso, existe um truque. em vez de medir a tensão acumulada no capacitor de saída, medi a tensão entre duas linhas -ve. usando solar -ve como aterramento para o Arduino e output -ve como o sinal / tensão a ser medido. valor que você obteve com esta medição deve ser subtraído da tensão de entrada medida e você obterá a tensão de saída real através do capacitor de saída.

Vout_sense_temp = Vout_sense_temp * 0,92 + float (raw_vout) * volt_factor * 0,08; // mede a volatilidade em input gnd e output gnd.

Vout_sense = Vin_sense-Vout_sense_temp-diode_volt; // altera a diferença de tensão entre dois aterramentos para a tensão de saída..

Para medições de corrente, usei os módulos de detecção de corrente ACS-712. Eles foram alimentados por arduino e conectados à entrada gnd.

os temporizadores internos são modificados para ganhar 62,5 Khz PWM no pino D6. que é usado para conduzir o mosfet. um diodo de bloqueio de saída será necessário para fornecer vazamento reverso e proteção de polaridade reversa, use um diodo Schottky da classificação de corrente desejada para este propósito. O valor do indutor depende dos requisitos de frequência e corrente de saída. você pode usar calculadoras conversoras de buck disponíveis on-line ou usar carga de 100uH 5A-10A. nunca exceda a corrente de saída máxima do indutor em 80% -90%.

Etapa 5: retoque final -

Image
Image

você também pode adicionar recursos adicionais ao seu carregador. como o meu, o LCD também exibe os parâmetros e 2 interruptores para receber a entrada do usuário.

Vou atualizar o código final e completar o diagrama ckt muito em breve.

Etapa 6: ATUALIZAÇÃO: - Diagrama de circuito real, BOM e código

Concurso de Luzes 2017
Concurso de Luzes 2017

ATUALIZAR:-

Eu carreguei o código, bom e circuito. é um pouco diferente do meu, porque é mais fácil fazer esse.

Recomendado: