Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Fonte de alimentação de bolso programável com display OLED

Componentes e suprimentos

Arduino UNO
× 1
Arduino Nano R3
× 1
XL 6009 DC DC Boost
× 1
SparkFun Botão de pressão 12 mm
× 1
Cristal 16 MHz
× 1
Conector do bloco de terminais
× 1
Regulador linear com saída ajustável
× 1
Regulador linear (7805)
× 1
1N4007 - Alta tensão, diodo nominal de alta corrente
× 1
Cabo USB-A para B
× 1
Potenciômetro de precisão multivoltas - 10k ohms (25 voltas)
× 1
OP07 Instrumentation OpAmp
× 1
Caixa de soquete genérica
× 1
FR4 Proto Board
× 1
Fios de jumpers (genérico)
× 1
Cabeçalho masculino 40 posição 1 linha (0,1 ")
× 1
Resistor 10k ohm
× 1
Resistor 22,1 k ohm
× 1
Resistor 1k ohm
× 1
Arduino Latching Relay 5v 2A
× 1
SparkFun MCP 4131 Potenciômetro digital de 10k
× 1
Fita de cobre Arduino
× 1
Arduino LM358 Opamp
× 1
Arduino 1306 OLED
× 1

Ferramentas e máquinas necessárias

Ferro de soldar (genérico)
Pistola de cola quente (genérica)
Mini motor de perfuração

Aplicativos e serviços online

Arduino IDE

Sobre este projeto





A ideia


Como pessoas amadoras, frequentemente precisamos alimentar nossos protótipos, verificar a tensão, a corrente, os limites de energia de nossos projetos, testar um componente recém-comprado. A necessidade de uma fonte de alimentação variável está sempre presente nesta linha de trabalho. Mas, infelizmente, nem todos nós temos fontes de alimentação de bancada / laboratório. Também é caro se comprado e volumoso se necessário para carregar. Buscava uma fonte de alimentação programável de menor custo, com portabilidade e produtividade para alimentar meus protótipos e testar componentes. Então, decidi fazer um.

Possui os seguintes recursos:
  • programável
  • Recarregável
  • portátil
  • Variável de etapa
  • Medidor de tensão / corrente / potência
  • Relé protegido
  • Personalizável, compacto e bonito
  • Interface de usuário OLED legal
  • Botão de controle do usuário e navegação baseada em menus
  • Firmware atualizável para mais recursos!

E a fonte de alimentação mais versátil para projetos eletrônicos de baixa potência.





Ação ao vivo!


Confira este vídeo que demonstra a operação do dispositivo:





Especificações do dispositivo


O dispositivo possui as seguintes especificações:
  • Corrente de carga CC de saída máxima:400 mA
  • Faixa de tensão:2,0 Volts - 12,0 Volts
  • Etapa de tensão:0,1 Volts aprox.
  • Melhor eficiência:75%
  • Precisão da medição atual:+/- 1 mA
  • Precisão de medição de tensão:+/- 0,02 Volts

Observe que este dispositivo é um protótipo rápido. É possível fazer 0-30, até mesmo alimentação negativa e mais corrente de saída usando baterias de alta capacidade, eletrônicos adicionais e design atualizado.





Princípio de funcionamento


O design em si exige muito do hardware. Muitas coisas acontecendo aqui. Um diagrama de blocos bruto do sistema é mais ou menos assim:

A fonte de alimentação é a bateria Li-Po de 3,7 V, recarregável por USB. Usando um módulo boost DC-DC XL6009 primeiro, fazemos 15,6 volts com o Li-Po. Para executar o MCU, também fazemos um 5 Volt usando o regulador 7805.

O clone Atmega328P do Arduino UNO é conectado com 2 Interruptores de entrada do usuário baseados em uma tela de saída OLED elegante. Porta de upload de firmware Rx / Tx / DTR (esboço) através de USB / Serial do PC. (Módulo 1)

O coração do projeto é o Potenciômetro Digital MCP4131 (Digipot) + LM 358 OpAmp Gerador de Tensão de Etapa baseado em degraus. Esta tensão é a tensão de controle do regulador ajustável LM317. (módulo 2)

O Digipot é controlado a partir do Arduino por meio de um comando semelhante ao Pseudo-SPI. LM317 é projetado de forma que a Tensão do pino de saída é sempre 1,25 Volts mais alto do que Ajustar a tensão do pino desde que a tensão do pino INPUT seja alta o suficiente (aqui 15,6 volts). (módulo 3)

A tensão do degrau é fornecida ao pino de ajuste para criar uma saída variável do Arduino conforme a necessidade do usuário.

O ADC mede todas as tensões associadas à supervisão e proteção; a voltagem da bateria, a voltagem aumentada, a voltagem do sensor de carga e a voltagem de saída são condicionadas através da rede divisora ​​de voltagem para alimentar a faixa ADC, que é de 0-1,1 volts aqui. Usei a REFERÊNCIA INTERNA do Arduino, que cria uma voltagem de referência de 1,1 volts.

Para a detecção de corrente, o retorno (Load Gnd) da Output Load é conectado em série com 1 Ohms Current Sense Resistor para o System Gnd. Quando a corrente flui pelas cargas externas, também há uma queda de tensão neste resistor de detecção. Esta tensão é amplificada através do Amplificador de Operação de Precisão OP07 e alimentada para um dos pinos ADC.

Por último, para o carregamento da bateria, 5 volts do USB são conectados em série com um diodo 4007 e um resistor limitador de corrente de 5 ohms à bateria Li-Po. Este é um método de carregamento rudimentar, não o melhor para carregamento Li-Po.

Operação Summery: O Potenciômetro Digital MCP4131 cria tensões de passo com uma faixa de 0-5 Volts em passo de cerca de 40mV (7 bits 10K Digipot tem 129 passos 5V / 128 =0,40 mV), que é então 2,5 vezes amplificado pelo LM358 que dá 0-12,5 volts controlam a faixa de tensão com etapas de 0,1 volts. Este sinal de tensão amplificado é alimentado ao pino de ajuste do LM317. O LM317 gera uma tensão de saída de V_Step + 1,25 Volts que é fornecida às cargas externas. O retorno / aterramento da carga externa é conectado ao aterramento interno por meio do resistor de detecção de corrente de 1 ohms. Suponha: x A corrente mA está fluindo para a carga externa, criará x queda de mV (Ohms Law V =I * R) no resistor de detecção de corrente de 1 Ohms. Este pequeno sinal de tensão é alimentado para Low Offset (10uV) OpAmp OP07 configurado com 2,5X de ganho, que irá gerar 2,5 x Saída mV. O Arduino ADC é configurado com referência interna de 1,1 Volts para que as tensões de 0 a 1100 mV possam ser detectadas em etapas de cerca de 1 mV (1100/1023). A saída do OP07 é conectada ao Arduino ADC para detecção de corrente. É por isso que o limite de corrente é 400mA. Pode ser aumentado / reduzido alterando o ganho de OP07. Da mesma forma, a faixa de tensão de saída pode ser alterada alterando a tensão de reforço e o ganho do LM358. Outras tensões são medidas com tensões de atenuação de rede divisora ​​de tensão resistiva para se adequar à faixa do ADC. O relé de trava possui 2 bobinas. Aplicando energia momentânea a qualquer bobina, os contatos do relé podem ser comutados. Uma vez ligado, ele permanece lá, então a bobina é desligada imediatamente.





Construindo o Projeto


Primeiro, começamos com uma única caixa de soquete de interruptor e fazemos os cortes e alinhamentos necessários para colocar a bateria, porta de carregamento USB, interruptor de alimentação, etc.

Em seguida, o dissipador de calor é feito com fita de cobre e moeda para o módulo de reforço DC-DC.

O módulo de reforço é colocado dentro da caixa de encaixe:

Usando as partes acima, os seguintes 3 módulos são feitos:
  • Arduino + I / O + Módulo de controle
  • Módulo regulador ajustável e de tensão de etapa
  • Módulo de detecção de corrente

Finalmente, as conexões da teia de aranha entre todas as placas são conectadas e soldadas.

Depois de usar a cola quente como preenchimento, finalmente temos:





Desenvolvimento do firmware e procedimento operacional


O firmware (Arduino Sketch) agora é 1.0.2 Beta. Nem todos os recursos estão disponíveis no momento. Porém, os recursos mais importantes, como controle de tensão, relé de conexão / desconexão e visualização de informações, estão ativados. Na configuração void () existem poucas funções de inicialização para aquecer os pinos do Arduino associados a diferentes hardwares externos.

ENTRADA :Existem 2 botões de entrada baseados em interrupção para aumentar / diminuir a tensão de saída, menu de acesso (não disponível nesta versão). INT0 e INT1 no Arduino Pin 2 e 3 são codificados para FALLING EDGE INTERRUPT. Você verá 2 capacitores em paralelo com interruptores mecânicos para de-bouncing. O código é escrito para disparar interrupções quando o usuário pressiona essas chaves para ligar / desligar a saída por meio do relé ou aumentar / diminuir a tensão (Beta).

SAÍDA :O 1306 OLED mostra informações de saída adquirindo dados do ADC, temporizador interno (para tempo de atividade do dispositivo) e variáveis ​​de sinalização para informar ao usuário sobre o status de habilitação / desabilitação de saída. Com base na biblioteca U8G, o OLED imprime informações como texto e numéricas. Tenho planos para usar representação gráfica (tipo analógico).

5 pinos digitais do SSD1306 (OLED do Waveshare) clk, din, cs, d / c, res são conectados ao Arduino 10, 9, 11, 13, 12 pinos e programados de acordo. No loop principal update_display () A função é sempre chamada para atualizar as informações no OLED.

O temporizador interno 1 do Atmega328P está configurado para acionar periodicamente a cada 1 segundo para controlar o tempo.

CONTROLE: O Potenciômetro Digital MCP 4131 é controlador com increment_digipot () & decrement_digipot () funções em que os dados são deslocados com clock e retardo adequados usando os pinos 6, 7, 8 como CS, Clk, pinos de dados. É como um SPI lento e suave. Como já usei os pinos SPI de hardware em outro lugar, essa era a única solução.

Dois pinos digitais 4 e 5 são usados ​​para controlar o relé de travamento. Um pulso curto e alto é alimentado para os transistores de acionamento do relé para energizar as 2 bobinas para inverter o relé. Acontece automaticamente (durante sobrecarga / curto-circuito) ou manualmente pelo usuário.

ADC: O calc_VI () função no loop principal executa analogRead para obter informações de tensão e corrente com média de 20 vezes e atualizar a variável para novas informações que são então impressas no display

O esboço é escrito em várias guias para organizar o código para diferentes funções associadas a diferentes operações. Existem ADC, Digipot, Display_Fn , Guias Interrupt, Relay e Timer organizando todas as funções definidas pelo usuário. Vou tentar adicionar mais comentários explicando todas as funções, mas você não deve achar difícil de entender porque essas funções são baseadas em várias funções do Arduino realizando certas tarefas.





Limitação


Existem algumas limitações sérias deste dispositivo:
  • A tensão não pode ser inferior a 2,0 V
  • A saída de tensão é escalonada não contínua
  • A medição de corrente cria deslocamento de solo para alta corrente
  • A medição ADC tem baixas resoluções
  • A eficiência é a pior da classe em carregamento de baixa tensão e alta corrente
  • Carregamento Li-Po não padrão e ligeiramente inseguro






Referências


Você pode aprender mais sobre cada componente nestes tutoriais:
  • Potenciômetro rotativo
  • Tutorial do botão





Conclusão e


Esta fonte de alimentação programável me ajudará a fazer projetos / protótipos com mais eficiência. Medição da potência da corrente de tensão sem o uso de multímetro.



Código

  • Fonte de alimentação portátil programável Arduino
  • Code Ver 1.0.1 Beta
  • Code Ver 1.0.2 Beta
  • Code versão 1.0.3
Fonte de alimentação portátil programável Arduino Arduino
Ver 1.0.1 com informações de pin out nos comentários
 // Pin Reset, D0 e D1 para fazer upload do Sketch // Pin D9, D10, D11, D12, D13 para controlar o display OLED // ADC A0 Pin for Sensing V_boost // Pino ADC A2 para detecção V_batt (LiPo) // Pino ADC A3 para detecção I_Output (carga) // Pino ADC A4 para detecção V_USB (carregamento) // Pino ADC A5 para detecção V_Output (carga) // Latch Relay's 2 Coils Driving Pin D4 e D5 # define RC1 4 # define RC2 5 // Chaves de entrada do usuário conectadas ao pino D2 e ​​D3 # define SW1 2 # define SW2 3 // Pino D6, D7, D8 para pinos de controle digital do potenciômetro # define CS_PIN 6 # define CLK_PIN 7 #define DATA_PIN 8volatile uint8_t Switch1 =1; volátil uint8_t Switch2 =1; float V_Out =0.0; float I_Out =0.0; float V_Bat =0.0; float V_Bst =0.0; float V_Chg =0.0; uint32_t time =0; #include "U8glib. h "// Pinos de controle de exibição OLED // SSD1306 wavehare oled (clk, din, cs, d / c, res); // ISTO PARA WAVESHAREU8GLIB_SSD1306_128X64 u8g (10, 9,11, 13,12); void setup (void) {// virar a tela, se necessário analogReference (INTERNAL); u8g.setRot180 (); button_init (); relay_init (); init_timer1 (); digipot_init (); } loop void (void) {update_display (); calc_VI (); if (Switch1 ==0) {rc1_latch (); Switch1 =1; increment_digipot (); } if (Switch2 ==0) {rc2_latch (); Switch2 =1; decrement_digipot (); } atraso (100); } 
Código Ver 1.0.1 Beta C / C ++
 Sem visualização (somente download). 
Código Ver 1.0.2 Beta C / C ++
Correção de bug para alinhamento de texto / caixa
Correção de bug para viagem de sobrecarga

Poucos bugs serão corrigidos na próxima versão
 Sem visualização (somente download). 
Código versão 1.0.3 C / C ++
Desativar relé de saída de correção de bug durante a inicialização
Correção de bug ajuste automático da tensão de saída de 5,00 v após ligar
 Sem visualização (somente download). 

Esquemas

Desenhado no quadro branco! https://circuits.io/circuits/4762970-arduino-based-programmable-power-supply

Processo de manufatura

  1. Jogo Arduino Pong - Tela OLED
  2. Aceitar moeda de controle com Arduino
  3. Arduino Control Center
  4. Arduino Temp. Monitor e relógio em tempo real com tela 3.2
  5. Arduino com Bluetooth para controlar um LED!
  6. Arduino Power
  7. Brincando com Nextion Display
  8. Voltímetro DIY com Arduino e um visor Nokia 5110
  9. Plataforma de treinamento Arduino
  10. Crie o aplicativo Fridgeye com uma tela Nextion