Ir ao conteúdo
  • Cadastre-se

Sistema de baterias baseado em programação de Arduino


Posts recomendados

É viável programar um SPWM bipolar no Arduino.

Não se deve programar o PWM unipolar, pois isso acarretaria em problemas na etapa de potência Push-pull. No PWM unipolar, inicialmente ocorre a chaveamento do PWM de meio ciclo, seguido pelo chaveamento do PWM do outro meio ciclo.

 Selective-Harmonic-Elimination-Pulses-wi 

 

Neste tipo de modulação PWM, após o pulso inicial, o Arduino fará o MOSFET desligar para proporcionar o tempo morto e gerar outro pulso com um ciclo de trabalho maior.

 

O problema surge na ponte Push-pull, que é mais simples e preferida em projetos econômicos, sendo uma configuração de ponte aberta. Nesse caso, não há uma configuração completa de diodos em antiparalelo com os MOSFETs para retificar a corrente de contra-eletromotriz produzida pelo transformador.

 

Na ponte H full-bridge, essa corrente de contra-eletromotriz é retificada de volta para a bateria.

Já na ponte Push-pull, a contra-eletromotriz faz a tensão aumentar o máximo possível para encontrar uma barreira que a mantenha estável e a corrente circule. Essa barreira é um efeito zener intrínseco dos MOSFETs, que em um MOSFET de 55V, estará presente em torno de 70V.

 

Todo o sistema funciona de maneira semelhante a um conversor boost, empurrando corrente em direção a um diodo zener de 70V. Isso gera bastante calor, especialmente porque se o inversor estiver operando com uma potência considerável, como por exemplo, cerca de 50W, essa corrente será carregada na indutância parasita em série do transformador, elevando a tensão com essa potência de 50W em direção ao zener intrínseco dos MOSFETs, gerando muito calor.  .

 

 

 

 

A solução simples é mudar o tipo de SPWM para bipolar. 

class_d-fig-07.jpg?rev=7f852d1524724a7d8

 

Nesse tipo de PWM, quando o Arduino desliga o MOSFET do braço A, imediatamente ele liga o outro MOSFET do braço B. Esse MOSFET recém-ligado proporciona um caminho para a corrente da força contra-eletromotriz, permitindo que essa corrente circule em série com a bateria de alimentação. E tudo funciona perfeitamente.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

França eu (eu) só consigo ver a imagem se clicar com a direita e abrir em uma nova aba. Pra quem tem preguiça de clicar, cá está 1

428597842_7186604458134132_7331401957287005968_n.thumb.jpg.b4c130ae4f72ae053858d57a7b5a8415.jpg

 

E tem +... Aquela onda tá bem não muito senoidal e feia. Até parece que o cara não usou tabela pra criar... ou será que distorceu mesmo??  não vi o fonte mas se der vontade, a qualquer momento dou uma olhadela. Também seria interessante converter pra 60Hz

Capturadetelade2024-02-1719-41-52.png.f0a8b4b86e15dda6e32479b2a6060f75.png

 

 

Aproveitei e capturei o esquema dele no ytb...

Capturadetelade2024-02-1719-47-43.png.2e09ddf4b910688640504b7719c4270d.png

pra comparar com seu melhorado 🙂... puts .. vi agora que você já tinha feito isso... mas vou deixar assim mesmo pra não perder o trabalho que me deu também, ok?

 

Também estou sentindo muita vontade fazer um... sério... 😁

Agora sim baixei o fonte pra ver... De fato ele usa a matemática pra criar a tabela de seno em tempo real. Este mc faz de boa então sem crise... nem vou ativar meu tradicional modo minimalista e sugerir pra colocar a tabela pré calculada a parte

 // MakeIdea [Hemant]
#include <avr/io.h>
#include <avr/interrupt.h>
#include <math.h>

#define SinDivisions (200)

static int microMHz = 16;
static int freq = 50;   
static long int period;  
static unsigned int lookUp[SinDivisions];
static char theTCCR1A = 0b10000010;

void setup()
{
  double temp;
 
  period = microMHz*1e6/freq/SinDivisions;
 
  for(int i = 0; i < SinDivisions/2; i++)
  {
    temp = sin(i*2*M_PI/SinDivisions)*period;
    lookUp[i] = (int)(temp+0.5);           
  }
 
  TCCR1A = theTCCR1A;
       
  TCCR1B = 0b00011001;
       
  TIMSK1 = 0b00000001;
          
  ICR1   = period;   
  sei();             
 
  DDRB = 0b00000110;
  pinMode(13, OUTPUT);
}

void loop(){;}

ISR(TIMER1_OVF_vect)
{
    static int num;
    static int delay1;
    static char trig;
    
    if(delay1 == 1)
    {
      theTCCR1A ^= 0b10100000;
      TCCR1A = theTCCR1A;
      delay1 = 0;             
    }
    else if(num >= SinDivisions/2)
    {
      num = 0;                
      delay1++;
      trig ^=0b00000001;
      digitalWrite(13,trig);
    }
   
    OCR1A = OCR1B = lookUp[num];
    num++;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@.if

 

Cabeçalhos:

#include <avr/io.h>: Permite acesso às funções de entrada/saída do microcontrolador AVR.

#include <avr/interrupt.h>: Habilita o tratamento de interrupções.

#include <math.h>: Inclui funções matemáticas como sin().

Constantes e variáveis:

#define SinDivisions (200): Define o número de divisões para a aproximação da senoide.

static int microMHz = 16: Frequência do clock do microcontrolador em MHz.

static int freq = 50: Frequência de saída desejada em Hz.

static long int period: Período calculado para a senoide.

static unsigned int lookUp[SinDivisions]: Array para armazenar valores pré-calculados da senoide.

static char theTCCR1A = 0b10000010: Valor inicial para o registrador de controle do timer.

Função setup():

double temp: Variável temporária para cálculos.

period = microMHz*1e6/freq/SinDivisions: Calcula o período da senoide.

for(int i = 0; i < SinDivisions/2; i++): Loop para gerar a tabela de consulta da senoide.

temp = sin(i*2*M_PI/SinDivisions)*period: Calcula o valor da senoide para cada divisão.

lookUp[i] = (int)(temp+0.5): Armazena o valor arredondado na tabela de consulta.

TCCR1A = theTCCR1A: Define o registrador de controle do timer para geração da forma de onda.

TCCR1B = 0b00011001: Define o registrador de controle do timer para modo timer e prescaler.

TIMSK1 = 0b00000001: Habilita a interrupção por overflow do timer.

ICR1 = period: Define o valor máximo do timer para a frequência desejada.

sei(): Habilita interrupções globais.

DDRB = 0b00000110: Define os pinos 9 e 10 como saídas.

pinMode(13, OUTPUT): Define o pino 13 como saída (provavelmente para LED).

Função loop():

void loop(){;}: Loop vazio (sem ações) pois as interrupções controlam a geração da forma de onda.

Interrupção ISR(TIMER1_OVF_vect):

static int num: Contador para o índice da tabela de consulta.

static int delay1: Contador de atraso para ajustes da forma de onda.

static char trig: Variável de alternância para a saída do pino 13.

if(delay1 == 1): Bloco condicional para ajustes da forma de onda.

theTCCR1A ^= 0b10100000: Alterna bits do registrador de controle do timer para modificação da forma de onda.

delay1 = 0: Reinicia o contador de atraso.

else if(num >= SinDivisions/2): Bloco condicional para reiniciar o índice da tabela de consulta.

num = 0: Reinicia o índice da tabela de consulta.

delay1++: Incrementa o contador de atraso.

trig ^= 0b00000001: Alterna a saída do pino 13.

OCR1A = OCR1B = lookUp[num]: Define os registradores de comparação de saída para geração da forma de onda.

num++: Incrementa o índice da tabela de consulta para o próximo valor.

Observações:

Este código gera uma forma de onda senoidal usando o timer1 do microcontrolador AVR.

A frequência da forma de onda pode ser ajustada alterando o valor da variável freq.

A amplitude da forma de onda pode ser ajustada alterando os valores na tabela de consulta lookUp.

O pino 13 é usado para gerar a forma de onda, mas outros pinos podem ser usados alterando o código.

 

Gera o PWM num único terminal? 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
12 horas atrás, albert_emule disse:

Gera o PWM num único terminal? 

Gera em 2 amigo.

12 horas atrás, albert_emule disse:

if(delay1 == 1): Bloco condicional para ajustes da forma de onda.

theTCCR1A ^= 0b10100000: Alterna bits do registrador de controle do timer para modificação da forma de onda.

Perceba que ele inverte COM1A1 e COM1B1

TCCR1A-768x151.jpg

Aparentemente são defasados. Paulão é PHD neste mc e se achar que deve pode nos confirmar, ok?

De minha parte penso em simular a qualquer momento e vos conto, ok?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Compilei e simulei ...

https://i.imgur.com/UqtU57O.mp4

 

[img]https://i.imgur.com/UqtU57O.mp4[/img]

 

Pelo menos pra mim não apareceu incorporado direto na postagem como antigamente... Clique pra ver

 

21 horas atrás, albert_emule disse:

Gera o PWM num único terminal? 

Confirmando que gera em 2 amigo. Preguiça de desenhar tudo ,coloquei um filtro rc pra ter noção da onda. De fato ela é bem senoidal e simpática diferente da do Vídeo do cara que parece arredondada. Pode ser distorção ou limitação do instrumento dele...

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

1 minuto atrás, Mega Blaster disse:

@.if  e @albert_emule vocês viajam na maionese! Queria ter essa paciência e competência.

 

Esta seção do fórum é dedicada à eletrônica, meu amigo. Não é destinada especificamente a consultoria comercial.

No entanto, foram fornecidas a ele as opções comerciais disponíveis no mercado.

 

Dado o contexto de um fórum de eletrônica, gostaríamos de aprofundar um pouco mais na discussão sobre projetos eletrônicos de inversores.

21 minutos atrás, .if disse:

Confirmando que gera em 2 amigo. Preguiça de desenhar tudo ,coloquei um filtro rc pra ter noção da onda. De fato ela é bem senoidal e simpática diferente da do Vídeo do cara que parece arredondada. Pode ser distorção ou limitação do instrumento dele...

 

 

Só precisa converter para PWM bipolar. Ainda está como unipolar.

Esse PWM unipolar te dará problema em etapas Push-pull 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Em 16/02/2024 às 15:44, albert_emule disse:

Vou tentar fazer um. 

53 minutos atrás, albert_emule disse:

dará problema em etapas Push-pull 

Agora me confundiu amigo.

 

55 minutos atrás, albert_emule disse:

precisa converter para PWM bipolar. Ainda está como unipolar.

Me avisa então quando e se conseguir com arduino & cia ok?. Ache o fonte pra gente simular... de novo, tenho vontade te seguir e montar.

Pro amigo @Mega Blaster e sua observação com sentidos contraditórios, a qual prefiro considerar apenas a positiva, penso que tem a ver sim com o título do tópico, ok?

Link para o comentário
Compartilhar em outros sites

4 minutos atrás, .if disse:

Agora me confundiu amigo.

 

É que como esse SPWM aí desse código só pulsa pro lado positivo num semi-ciclo e só pulsa pro nado negativo no outro semi-ciclo, aparece uma corrente reversa da bobina do trafo e aquela onda feia, deve ser até devido ao trafo estar saturando devido as correntes reversa.

 

 

 

4 minutos atrás, .if disse:

 

Me avisa então quando e se conseguir com arduino & cia ok?. Ache o fonte pra gente simular... de novo, tenho vontade te seguir e montar.

 

Para resolver isso,, o PWM do lado A tem que sair no tempo morto do Lado B

O PWM do lado B tem que sair no tempo morto do lado A. 

Daí ao invés de pulsos assim: IIIIII......IIIIII......IIIIII

Teríamos pulsos assim dos dois lados: IIIIIIIIIIIIIIIIII 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Amigo... é que a gente pega carona quando é assunto interessante, entende? Abrangemos mais do que a simples resposta pro autor. Ele decide qual a melhor. E acho que nem se importa com a continuidade. A equipe da moderação decide se o assunto desvia (como agora kk) e fecha ou puxa orelha (a minha tá até vermelha kk) ou se mantém pois considera que agrega conhecimento à base de dados do forum.

 

França... acho que entendi amigo. Seria algo como ligar o trafo numa ponte? Então aquele trafo com center tape suponho não ser indicado, certo? E como a freq é alta e ele é laminado, serve ainda menos, certo? Teria que fazer outro com ferrite, gap e tal? Aí o bicho pega... vou ter que desistir ☹️

 

E pra não incomodar 'certas pessoas' 😁 crie ou reabra algum de seus tópicos pertinentes e responda por lá se achar que deve...

Link para o comentário
Compartilhar em outros sites

2 minutos atrás, .if disse:

E pra não incomodar 'certas pessoas' 

Não se incomode e nem me incomada. Fique tranquilo. Eu (eu) entendo.

 

4 minutos atrás, .if disse:

é que a gente pega carona quando é assunto interessante

E é ai que eu aprendo. Por vezes, eu penso que acaba não ajudando ao interessado, mas lucra quem pode e sabe executar as sugestões propostas.. Essa é a vantagem. De resto, peço desculpas. Sonho com autonomia bem extendida em um motorhome e projetos como o sugerido são interessantes. Tirando água e comida que são os maiores gargalos, elétrica, eletrônica, gás e diesel podem criar um país independente em 30 m².

Link para o comentário
Compartilhar em outros sites

18 minutos atrás, albert_emule disse:

 

 

Curiosamente, a maioria são inversores de onda modificada, inclusive os de marcas tradicionais e sérias.

 

Algumas pessoas na área de energia solar têm preconceito com a onda modificada, mas ela até que funciona bem.

Tenho um cliente que utiliza energia solar em toda a casa, em um sítio, alimentado por um inversor de onda modificada OTTO. Ele alimenta desde geladeiras, televisores, eletrodomésticos, bombas d'água até ferramentas elétricas de construção.

 

E funciona há mais de 3 anos.

 

No entanto, existem desvantagens: placas eletrônicas que usam fontes capacitivas geralmente acabam danificadas. Além disso, os motores produzem um barulho exagerado. O ventilador parece uma subestação, então o amigo @Felipe Lundgren precisa avaliar se o barulho não atrapalhará o seu sono.

 

Mas o que dizem sobre queimar motores e outros problemas é mais um mito.

Se isso realmente acontecesse, meu cliente na zona rural isolada já teria notado os eletrodomésticos queimando nesses 3 anos.

Detalhe: A água que ele utiliza, inclusive para irrigar plantações, é toda bombeada com alimentação em onda modificada.

 

 

 

 

No final das contas, é aquilo, usar para aquilo que seja adequado, as vezes nem tanto e custo x beneficio.

 

Aproveitando o gancho: meu sistema é praticamente todo 12v, porém o EAP225 e as câmeras funcionam via poe 48v, atualmente ligadas no inversor 127v. Já até procurei algum switch ou injetor poe que fizesse o step up de 12v/48v, mas somente nas gringas e muito caro, não compensa.

 

Para me livrar desse inversor, pois tem injetor/switch que entra 48v e fornece os 48v para os produtos, posso usar um step up de 12v/48v? Seria possível somente adicionar o step up e trocar os injetores ou teria que fazer mais modificações. Terei algum beneficio ou seria pior que o inversor? Melhor largar pra lá?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

A ideia do step up é boa, barata e pode lhe dar um pouco mais de eficiência. Obviamente hás de se debruçar sobre outros tipos de vantagens.. afinal provavelmente hás de ter que fazer adaptações...

1 hora atrás, ThiagoPeres disse:

Para me livrar desse inversor, pois tem injetor/switch que entra 48v e fornece os 48v para os produtos, posso usar um step up de 12v/48v? Seria possível somente adicionar o step up e trocar os injetores ou teria que fazer mais modificações. Terei algum beneficio ou seria pior que o inversor? Melhor largar pra lá?

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@.if

 

Consegui um código com pro inversor lá. 

Fiz o Microsoft copilot (Uma espécie de chat GPT) modificar um código de PWM unipolar para PWM bipolar. 

É um código para o arruíno nano. Porém está saindo apenas em um pino. Teria que sair em dois pinos, para acionar dois mosfets.

 

Preciso que o sinal PWM que sai no pino 9, também saia no pino 10 com lógica invertida: Quando o sinal no pino 9 for de nível alto, o sinal do pino 10 deve ser de nível baixo. Quando o sinal do pino 10 for de nível alto, o sinal no pino 9 de ser de nível baixo. dessa forma, teremos dois sinais PWM que irão acionar os mosfets do esquema do inversor que foi apresentado aí na foto. Não estou conseguindo fazer essa inversão de sinais.

 

#include <avr/io.h>
#include <avr/interrupt.h>
#include <math.h>

#define SinDivisions (200)

static int microMHz = 16;
static int freq = 60;   
static long int period;  
static unsigned int lookUp[SinDivisions];
static char theTCCR1A = 0b10000010;

void setup()
{
  double temp;
 
  period = microMHz*1e6/freq/SinDivisions;
 
  for(int i = 0; i < SinDivisions; i++)
  {
    temp = sin(i*2*M_PI/SinDivisions)*period/2 + period/2; // Adicionado metade do período
    lookUp[i] = (int)(temp+0.5);           
  }
 
  TCCR1A = theTCCR1A;
       
  TCCR1B = 0b00011001;
       
  TIMSK1 = 0b00000001;
          
  ICR1   = period;   
  sei();             
 
  DDRB = 0b00000110;
  pinMode(9, OUTPUT);
}

void loop(){;}

ISR(TIMER1_OVF_vect)
{
    static int num;
    
    if(num >= SinDivisions)
    {
      num = 0;                
    }
   
    OCR1A = OCR1B = lookUp[num];
    num++;
}

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Boa França

Acho que você esqueceu de inverter os bits de controle TCCR1A... Olha como o carinha fez:

...         
void loop(){;} 
ISR(TIMER1_OVF_vect) {     
static int num;     
static int delay1;     
static char trig;          
if(delay1 == 1)     
{
theTCCR1A ^= 0b10100000;  //<< tenta isso <<<
TCCR1A = theTCCR1A;       
delay1 = 0;
}
else if(num >= SinDivisions/2)
    {
      num = 0;                
      delay1++;
      trig ^=0b00000001;
      digitalWrite(13,trig);
    }
   
    OCR1A = OCR1B = lookUp[num];
    num++;

 

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, .if disse:

Boa França

Acho que você esqueceu de inverter os bits de controle TCCR1A... Olha como o carinha fez:

...         
void loop(){;} 
ISR(TIMER1_OVF_vect) {     
static int num;     
static int delay1;     
static char trig;          
if(delay1 == 1)     
{
theTCCR1A ^= 0b10100000;  //<< tenta isso <<<
TCCR1A = theTCCR1A;       
delay1 = 0;
}
else if(num >= SinDivisions/2)
    {
      num = 0;                
      delay1++;
      trig ^=0b00000001;
      digitalWrite(13,trig);
    }
   
    OCR1A = OCR1B = lookUp[num];
    num++;

 

 

Eu não entendo de programação. 

Se você puder já fazer a inversão e deixar o código disponível, eu já faço os estes no circuito 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Bem mas reinterpretando sua pergunta, você que saia simultaneamente?  Do jeito que o carinha fez ele monta um semiciclo e depois outro... Mais tarde dou + 1 analisada. Por enquanto coloca uma porta inversora pra ver se é isso mesmo que você quer

1 minuto atrás, albert_emule disse:

Eu não entendo de programação. 

Se você puder já fazer a inversão e deixar o código disponível, eu já faço os estes no circuito 

entendi amigo... Vou analisar com calma e a qualquer momento te falo, ok?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

2 horas atrás, .if disse:

Bem mas reinterpretando sua pergunta, você que saia simultaneamente?  Do jeito que o carinha fez ele monta um semiciclo e depois outro... Mais tarde dou + 1 analisada. Por enquanto coloca uma porta inversora pra ver se é isso mesmo que você quer

entendi amigo... Vou analisar com calma e a qualquer momento te falo, ok?

Lembrando que o PWM deve ficar como está. 

Só deve inverter a lógica, como quem coloca uma porta inversora. 

 

Eu poderia fazer isso no circuito externo. Mas já deixa o inversor que deveria ser simples, começar a complicar.  

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
13 horas atrás, albert_emule disse:

inverter a lógica, como quem coloca uma porta inversora. 

foi o que entendi amigo..

15 horas atrás, .if disse:

Por enquanto coloca uma porta inversora pra ver se é isso mesmo que você quer

...

Você vai simular ou montar? Seu simulador possui o mc em questão? Coloca o inversor pra me mostrar o resultado desejado.. É que gosto de ver mentalmente e entender o trajeto dos eletrons pelo indutor e tal. Não ligo muito pra matemática mas ao visualizar a física da coisa dá uma sensação melhor de domínio, entende? Sua saída vai ser uma ponte de mosfets? A princípio entendi que algo como num pulso pwm vai de um lado e no outro vai de outro... mas acho que não é nada disso. É que to sem oportunidade de pesquisar sobre seu pwm bipolar... Uma explicação personalizada a conta gotas seria bem produtiva pra nós e pro forum, claro

 

Ainda não vi se saem sinais pwm invertidos deste mc.

Link para o comentário
Compartilhar em outros sites

3 horas atrás, .if disse:

foi o que entendi amigo..

...

Você vai simular ou montar? Seu simulador possui o mc em questão? Coloca o inversor pra me mostrar o resultado desejado.. É que gosto de ver mentalmente e entender o trajeto dos eletrons pelo indutor e tal. Não ligo muito pra matemática mas ao visualizar a física da coisa dá uma sensação melhor de domínio, entende? Sua saída vai ser uma ponte de mosfets? A princípio entendi que algo como num pulso pwm vai de um lado e no outro vai de outro... mas acho que não é nada disso. É que to sem oportunidade de pesquisar sobre seu pwm bipolar... Uma explicação personalizada a conta gotas seria bem produtiva pra nós e pro forum, claro

 

Ainda não vi se saem sinais pwm invertidos deste mc.

 

O amarelo é o PWM do canal A.

Verde é o PWM do canal B.

429121056_1336947540285820_2844242525153

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

França olha isso

https://i.imgur.com/YSUrztn.mp4

Está em 3Hz pra ver direito o pwm na simulação mas o anexo está em 60... apesar que acho que está a metade ou dobro... Tem um pulsinho cocozinho que está pentelhando mas to com preguiça de avaliar pra tirar.. outra hora eu vejo

Se tiver o nano, grave e veja as saídas com osc 2 canais.. óbvio?

#include <avr/io.h>
#include <avr/interrupt.h>
#include <math.h>

#define SinDivisions (200)

static int microMHz = 16;
static int freq = 60;   
static long int period;  
static unsigned int lookUp[SinDivisions];
static char theTCCR1A = 0b10000010;

void setup()
{
  double temp;
  period = microMHz*1e6/freq/SinDivisions;
  for(int i = 0; i < SinDivisions/2; i++)
  {
    temp = sin(i*2*M_PI/SinDivisions)*period;
    lookUp[i] = (int)(temp+0.5);           
  }
  TCCR1A = theTCCR1A;
  TCCR1B = 0b00011001;
  TIMSK1 = 0b00000001;
  ICR1   = period;   
  sei();             
  DDRB = 0b00000110;
//  DDRC = 0b00001000;
  pinMode(13, OUTPUT);
}

void loop(){;}

ISR(TIMER1_OVF_vect)
{
    static int num;
    static int delay1;
    static char trig;
    static bool led;
    
    OCR1A = OCR1B = lookUp[num];
    if(++num >= SinDivisions/2) num=0;
    digitalWrite(13,led);
    led^=1;
   theTCCR1A ^= 0b10100000;
   TCCR1A = theTCCR1A;
    
    num++;
} 

 

arduino.avr.nano.zip

 

edit...Vi agora.. não está invertido .. só tá defasado em 180° .. nem baixe ... (mas vou deixar aí assim mesmo)... A dica rápida é mesmo colocar um inversor tipo 74hc14.... Também errei no fonte colocando duas vezes num++.

 

Posso montar em minutos o esquema do carinha, tenho mosfets de 100A, trafos e etc.. mas no momento minha motivação é pequena... aguardemos...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@albert_emule olha isso agora...

https://i.imgur.com/ThcvakD.mp4

 

fyZkXLT.png

Senoide sinistra - é soma dos sinais filtrados - mas perceba na simulação os canais que se invertem. Está mais lento algo como 3Hz mas é só pra gente ver mesmo.

Nos anexos é só uma prova de conceito mesmo pra você gravar e testar se quiser pois a freq ainda está baixa. Caso você ou alguém se interesse eu dou mais uma estudadela nos registros pra aumentar a freq pra 60 ou 50hz.

A referência que me ajudou indiretamente a inverter os sinais - não menciona explicitamente como inverter:

https://www.eprojectszone.com/how-to-modify-the-pwm-frequency-on-the-arduino-part2timer-1-and-phase-correct-pwm-mode/

Como dei uma raladinha básica, o fonte eu posto só se alguém me implorar de joelhos, ok? 😁

 

 

 

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!