Ir ao conteúdo

Posts recomendados

  • Membro VIP
Postado

...e nesta outra simulação fiz a recomposição da senoide usando 2 trafos e um filtro chutado com 1H e 10uF

2.png.56510884251f11dd4946fb689118d6d1.png

https://i.imgur.com/2yeYSud.mp4

Algo me diz que é quase isso que vai rolar na real quando colocar drivers, ponte (?) de mosfet e etc, certo?

A senoide -  agora em 60Hz - continua imperfeita.. Suponho ser pelos valores do L & C 'amatemáticos' 😜

 

Edit...

 

Indiretamente descobri que minha teoria da falta de teoria matemática estava certa 😜... coloquei um voltímetro ac, fui ajustando o valor do capacitor na simulação até dar o maior valor vac. 2.52 e 3.52 de pico que foram os máximos3.thumb.png.13c99111271b9f04fc3332a02480637d.png

O valor de C 14.5uF ficou totalmente coerente com a teoria da ressonância LC

image-66.png

bem como a de L em paralelo

Tipo assim 1H//1H=0.5H .. coloque na fórmula acima com C=14.5 e vai achar ... ~60Hz 😁. Capacitor menor ou maior que isso cai a tensão e/ou distorce a onda. Perceba que a onda ficou mais surfável  🤪

Postado
4 horas atrás, .if disse:

@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? 😁

 

 

 

arduino.avr.nano.zip 15.57 kB · 2 downloads

 

Ficou top demais. 

É justamente isso que precisava. 

 

Agora a próxima etapa do projeto é gravar no arduino, e testar lá naquele circuito que fiz.

 

Poderia enviar o código em arquivo de texto, para eu ver o que mudou?

Embora eu não entenda muito. Mas fiquei curioso.  

3 horas atrás, .if disse:

...e nesta outra simulação fiz a recomposição da senoide usando 2 trafos e um filtro chutado com 1H e 10uF

2.png.56510884251f11dd4946fb689118d6d1.png

https://i.imgur.com/2yeYSud.mp4

Algo me diz que é quase isso que vai rolar na real quando colocar drivers, ponte (?) de mosfet e etc, certo?

A senoide -  agora em 60Hz - continua imperfeita.. Suponho ser pelos valores do L & C 'amatemáticos' 😜

 

Edit...

 

Indiretamente descobri que minha teoria da falta de teoria matemática estava certa 😜... coloquei um voltímetro ac, fui ajustando o valor do capacitor na simulação até dar o maior valor vac. 2.52 e 3.52 de pico que foram os máximos3.thumb.png.13c99111271b9f04fc3332a02480637d.png

O valor de C 14.5uF ficou totalmente coerente com a teoria da ressonância LC

image-66.png

bem como a de L em paralelo

Tipo assim 1H//1H=0.5H .. coloque na fórmula acima com C=14.5 e vai achar ... ~60Hz 😁. Capacitor menor ou maior que isso cai a tensão e/ou distorce a onda. Perceba que a onda ficou mais surfável  🤪

 

 

A ideia é trabalhar no inversor com center tap:

430063757_7222646424529935_1355838674890

 

 

  • Membro VIP
Postado

Estava editando quando você apareceu...

Esta brincadeira com este tipo de inversor me leva a crer que:

-Não posso ligar carga indutiva ou capacitiva com segurança na saída. L e C da carga vão interferir na ressonância

-L do motor ac tende a ser elevado. Pra eu ligar ele na saída o L secundário deve ser bem baixo pra que o paralelo L alto não derrube a ressonância...

2 horas atrás, albert_emule disse:

Poderia enviar o código em arquivo de texto, para eu ver o que mudou?

Claro amigo... Está minimalista ao extremo, como sempre. Como sempre + é - ...🙃

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

#define SinDivisions 200
#define microMHz 16
#define freq 240   
#define period microMHz*1e6/freq/SinDivisions;
static unsigned int lookUp[SinDivisions];

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

void loop()
{

}

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

 

Acredite se quiser mas é só isto que está rodando:

OCR1A = OCR1B = lookUp[num]; 

O led é só frescura pra dizer que não tá travado.

Ajustar o registro TCCR1A = 0b10110010 e alimentar o registro OCR1B com a tabela foram os pulos de gato

 

Anexo também o .hex já em 60Hz pra você gravar se quiser...arduino.avr.nano.zip

 

Queria fazer um pra um mini inversor de frequência pra controlar meu ventilador - atualmente uso um dimmer e fica um pôômmm irritante além do que ele esquenta. A ideia é reduzir tanto a V como a F pra reduzir a velocidade. Ainda não vi como fazer... Este controle deve ser feito dentro do loop() que neste momento está vazio.

Em caso de seu sucesso inicial, autorizo a você publicar nos seus grupos. O preço: alguém fazer o controle acima pro meu ventilador 😁

2 horas atrás, albert_emule disse:

A ideia é trabalhar no inversor com center tap:

Ah tá... O trafo é comum ou especial de ferrite, gap, alta freq e tal?

Para a realimentação pode-se bolar um sistema com acoplador ótico.. se bem que do jeito que você fez também vale...

edit...

França Veja esta simulação "com center tape". Os diodos - configurados como digital - simulam o mosfet com a corrente de lado só se alternado entre um tap e outro. De fato deu um resultado quase esperado..só por uma questão que quando tem carga a onda vai caindo por isso tirei o 10K de carga. Mas ele ndv com a coisa. A ideia foi remontar a senoide gerada por sw com sua ...

2 horas atrás, albert_emule disse:

ideia é trabalhar no inversor com center tap:

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

Resta agora a questão de saber se trafo comum dá um resultado prático bom. Tenho trafinho 6+6... cogito ligar direto no pino arduino com os diodos igual à simulação só pra zoar... Será que se ligar a saída num chuveiro 220 a potência vai ser tão alta que vai queimar ele ...? o chuveiro? 😁

 

 edit II. pra não alimentar viradas de página

1 hora atrás, Sérgio Lembo disse:

ressonância para alisar a onda, creio que este tipo de topologia só funcione com frequência fixa, ótimo para nobreak

Tens razão caro amigo. De fato prum inversor de freq nem está na pauta a bateria.. me confundi.  Sorry.. Há alguns anos fiz um com pic16fxxx e de fato usara Vdc da rede retificada. Como o motor num tá nem aí pra tensão senoidal, o inversor aplica-lhe direto o pwm e sua indutância se vira pra filtrar e senoidizar a corrente que lhe circula - que é a que ele considera. Assim sendo não é necessário o capacitor. Desconsideremos portanto o controle que mencionei lá atrás, ok?

 

1 hora atrás, Sérgio Lembo disse:

Para 220Vrms, se a fonte for de 400V, duty = seno x 0,78 (311Vp / 400Vp), nosso fator de correção. Para um inversor de frequência variável, se a máquina for de 60Hz e o input for de 40Hz passamos a ter o segundo fator de correção.

duty = seno x 0,78 (311Vp / 400Vp) x 0,67 (40Hz / 60Hz).

Vou estudar isso sim.. agradeço.

 

1 hora atrás, Sérgio Lembo disse:

#define SinDivisions 200 #define microMHz 16 #define freq 240  sei()

1 hora atrás, Sérgio Lembo disse:

funções cuja resposta desconheço.

O carinha do projeto original usou desnecessariamente variáveis - que ficam na ram - pra 'representar' valores fixos, ou constantes. Isso é algo como "coisa de criança" e não é totalmente bom pois além de ocupar memória, pode criar vida própria em ambientes muito agressivos. .. mas isso chega às raias da paranóia, ok?

 

#define é inato do C. e não é função. Literalmente ele define (no caso) valores numéricos. Quando o compilador acha a palavra SinDivisions ele considera - e troca por - simplesmente como 200. Lembrando que é usado mais no tempo da compilação. Já o sei() é inato do compilador ou até mesmo do arduino movido a atmega328. Praticamente é um assembly que seta um registro que libera as interrupções...

Bem... nem sei se é isso que te inquietou mas...

 

 

1 hora atrás, Sérgio Lembo disse:

No projeto que descreveste foi usada ressonância para alisar a onda, creio que este tipo de topologia só funcione com frequência fixa

De fato fiz por minha conta e risco ... nem sei se é usual. Se sim, comente sobre indutâncias e capacitâncias na carga, se de fato altera a boa relação L&C da saída...

 

edit III

 Dei mais uma microanalisada no fonte e fiz uma microotimização com #define com base no que expliquei pra Serjão

@Sérgio Lembo

#define SinDivisions 200
#define microMHz 16
#define freq 240   
#define period microMHz*1e6/freq/SinDivisions;

🙃

 

Postado

@.if

#define SinDivisions 200 #define microMHz 16 #define freq 240  sei()

Cara Isadora. No seu código usaste funções cuja resposta desconheço. Se bem entendi seu código retorna 60Hz e pelas imagens com uma serrilha de tensão bem reduzida, parabéns. Na definição de tensão a ser aplicada esta é a tensão de pico vezes o seno do ângulo. Supondo que a fonte tenha a tensão de pico, duty = fonte x seno. Para 220Vrms, se a fonte for de 400V, duty = seno x 0,78 (311Vp / 400Vp), nosso fator de correção. Para um inversor de frequência variável, se a máquina for de 60Hz e o input for de 40Hz passamos a ter o segundo fator de correção.

duty = seno x 0,78 (311Vp / 400Vp) x 0,67 (40Hz / 60Hz).

No projeto que descreveste foi usada ressonância para alisar a onda, creio que este tipo de topologia só funcione com frequência fixa, ótimo para nobreak. As minhas considerações focam a saída PWM sem alisamento usada em motores, não sei se dá para usar em topologias onde foram usadas capacitores fixos visando ressonância ou se é possível compensar de alguma forma isso no duty, vai um bom conhecimento de matemática nisso.

 

Todas as considerações acima são para o motor comum de indução, não sei se aplicáveis à variante utilizada nos ventiladores.

 

 

 

  • Haha 1
Postado
5 horas atrás, .if disse:

Estava editando quando você apareceu...

Esta brincadeira com este tipo de inversor me leva a crer que:

-Não posso ligar carga indutiva ou capacitiva com segurança na saída. L e C da carga vão interferir na ressonância

-L do motor ac tende a ser elevado. Pra eu ligar ele na saída o L secundário deve ser bem baixo pra que o paralelo L alto não derrube a ressonância...

Claro amigo... Está minimalista ao extremo, como sempre. Como sempre + é - ...🙃

 

 

Estou com um nobreak de 2000Va que funciona com esse PWM. 

Vou ligar um motor de 70W nele, para ver como se comporta. 

5 horas atrás, .if disse:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <math.h>

#define SinDivisions 200
#define microMHz 16
#define freq 240   
#define period microMHz*1e6/freq/SinDivisions;
static unsigned int lookUp[SinDivisions];

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

void loop()
{

}

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

 

Acredite se quiser mas é só isto que está rodando:

OCR1A = OCR1B = lookUp[num]; 

O led é só frescura pra dizer que não tá travado.

Ajustar o registro TCCR1A = 0b10110010 e alimentar o registro OCR1B com a tabela foram os pulos de gato

 

Anexo também o .hex já em 60Hz pra você gravar se quiser...arduino.avr.nano.zip

 

Queria fazer um pra um mini inversor de frequência pra controlar meu ventilador - atualmente uso um dimmer e fica um pôômmm irritante além do que ele esquenta. A ideia é reduzir tanto a V como a F pra reduzir a velocidade. Ainda não vi como fazer... Este controle deve ser feito dentro do loop() que neste momento está vazio.

Em caso de seu sucesso inicial, autorizo a você publicar nos seus grupos. O preço: alguém fazer o controle acima pro meu ventilador 😁

Ah tá... O trafo é comum ou especial de ferrite, gap, alta freq e tal?

Para a realimentação pode-se bolar um sistema com acoplador ótico.. se bem que do jeito que você fez também vale...

edit...

França Veja esta simulação "com center tape". Os diodos - configurados como digital - simulam o mosfet com a corrente de lado só se alternado entre um tap e outro. De fato deu um resultado quase esperado..só por uma questão que quando tem carga a onda vai caindo por isso tirei o 10K de carga. Mas ele ndv com a coisa. A ideia foi remontar a senoide gerada por sw com sua ...

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

Resta agora a questão de saber se trafo comum dá um resultado prático bom. Tenho trafinho 6+6... cogito ligar direto no pino arduino com os diodos igual à simulação só pra zoar... Será que se ligar a saída num chuveiro 220 a potência vai ser tão alta que vai queimar ele ...? o chuveiro? 😁

 

 edit II. pra não alimentar viradas de página

Tens razão caro amigo. De fato prum inversor de freq nem está na pauta a bateria.. me confundi.  Sorry.. Há alguns anos fiz um com pic16fxxx e de fato usara Vdc da rede retificada. Como o motor num tá nem aí pra tensão senoidal, o inversor aplica-lhe direto o pwm e sua indutância se vira pra filtrar e senoidizar a corrente que lhe circula - que é a que ele considera. Assim sendo não é necessário o capacitor. Desconsideremos portanto o controle que mencionei lá atrás, ok?

 

Vou estudar isso sim.. agradeço.

 

O carinha do projeto original usou desnecessariamente variáveis - que ficam na ram - pra 'representar' valores fixos, ou constantes. Isso é algo como "coisa de criança" e não é totalmente bom pois além de ocupar memória, pode criar vida própria em ambientes muito agressivos. .. mas isso chega às raias da paranóia, ok?

 

#define é inato do C. e não é função. Literalmente ele define (no caso) valores numéricos. Quando o compilador acha a palavra SinDivisions ele considera - e troca por - simplesmente como 200. Lembrando que é usado mais no tempo da compilação. Já o sei() é inato do compilador ou até mesmo do arduino movido a atmega328. Praticamente é um assembly que seta um registro que libera as interrupções...

Bem... nem sei se é isso que te inquietou mas...

 

 

De fato fiz por minha conta e risco ... nem sei se é usual. Se sim, comente sobre indutâncias e capacitâncias na carga, se de fato altera a boa relação L&C da saída...

 

edit III

 Dei mais uma microanalisada no fonte e fiz uma microotimização com #define com base no que expliquei pra Serjão

@Sérgio Lembo

#define SinDivisions 200
#define microMHz 16
#define freq 240   
#define period microMHz*1e6/freq/SinDivisions;

🙃

 

 

  • Membro VIP
Postado

Boa França... Tentei fazer na simulação mas o simulador dá uma travada legal.. acho que é muito processamento pro meu cp500. Perceba em baixo o 8uF e 1H com chaves. A ideia em cima da ideia era testar com carga indutiva, capacitiva e ambas formando um corretor de f.p. meia boca. Perceba também os mosfets e 12v e os pretendidos 220Vac... Portanto deu quase muito totalmente 100% certo. .. na teoria3.thumb.png.30d8ae822c27f839f01bec7a3672c3a2.png

 

Apesar de semi coerente com o título do tópico, parece que o autor já se decidiu e estamos avançando páginas o que pode incomodar pessoas (tipo esta que vos escreve). Vi um tópico seu acho de 2017 totalmente coerente com a discussão atual mas está fechado.. algo como "inversor senoidal com arduino". Sugiro criar outro atualizado (eu não crio) ... Nele atualizo os fontes e esquema...

 

4 horas atrás, albert_emule disse:

Fui testar agora. A senoide desse está esquisita.

na real ou simulado? Mostre...

Algo me diz que você sabe que quem mantém a harmonia da senoide é um bom casamento L & C, né? NÉH?

 

De novo... pra melhor 'casamento' de ideias e ideais e harmonia do forum, peça pra equipe do forum reabrir:

ou preferencialmente crie outro

 

Postado
Em 29/02/2024 às 14:19, .if disse:

Estava editando quando você apareceu...

Esta brincadeira com este tipo de inversor me leva a crer que:

-Não posso ligar carga indutiva ou capacitiva com segurança na saída. L e C da carga vão interferir na ressonância

-L do motor ac tende a ser elevado. Pra eu ligar ele na saída o L secundário deve ser bem baixo pra que o paralelo L alto não derrube a ressonância...

Claro amigo... Está minimalista ao extremo, como sempre. Como sempre + é - ...🙃

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

#define SinDivisions 200
#define microMHz 16
#define freq 240   
#define period microMHz*1e6/freq/SinDivisions;
static unsigned int lookUp[SinDivisions];

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

void loop()
{

}

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

 

 

 

Fui testar agora. A senoide desse está esquisita.

Parece que é mais fácil fazer isso em analógico 😁

Em 01/03/2024 às 09:28, .if disse:

Boa França... Tentei fazer na simulação mas o simulador dá uma travada legal.. acho que é muito processamento pro meu cp500. Perceba em baixo o 8uF e 1H com chaves. A ideia em cima da ideia era testar com carga indutiva, capacitiva e ambas formando um corretor de f.p. meia boca. Perceba também os mosfets e 12v e os pretendidos 220Vac... Portanto deu quase muito totalmente 100% certo. .. na teoria3.thumb.png.30d8ae822c27f839f01bec7a3672c3a2.png

 

Apesar de semi coerente com o título do tópico, parece que o autor já se decidiu e estamos avançando páginas o que pode incomodar pessoas (tipo esta que vos escreve). Vi um tópico seu acho de 2017 totalmente coerente com a discussão atual mas está fechado.. algo como "inversor senoidal com arduino". Sugiro criar outro atualizado (eu não crio) ... Nele atualizo os fontes e esquema

 

Esse parece estar bom. Qual é esse código? 

 

  • Membro VIP
Postado

Moris ...

coloquei um R de 1mR. Perceba o pico de 2.7mV=2.7A.. Ok não deve dar pra diagnosticar nada mas um detalhe: a corrente está 1/2 senoidal ou seja linear. Achei que ia aparecer o pulso pwm. Suponho ser devido ao ter ligado o gate direto no mc sem driver ou a indutância está filtrando ou algo do gênero... Ou era pra ser assim mesmo? O sinal amarelo é a V em 1mR

 

1.thumb.png.85066175b4533084aa78a6f35345580e.png

 

A simulação fica muuuiiitooo lenta quando com este esquema. Estou fazendo teste com esta

2.thumb.png.a14c2e6f87412b3244b90b3e76a51fed.png

sem mosfet que fica menos lenta. Com alguns saltos felinos pessoais - sem google, IA e afins, já tive sucesso em ler a vac com este esquema minimalista com 2 resistores acima e mostrar no terminal. O foco agora é...

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

uma realimentação para correção da tensão de saída.

A qualquer momento vos mostro minha saga até este ponto... Alerta de spoiler - o compilador arduino parece ter bugs. Tive que fazer uma verdadeira ginástica pra operar a contento. Penso em migrar pro Keil C ou IAR ou o XC8 da microchip mesmo...

 

Postado
1 hora atrás, MOR_AL disse:

Eu esperava ver a forma de onda da corrente SPWM.

MOR_AL

 

O mais normal é ver uma senoide com ondulação em dente de serra.

 

PWM não vai ver, pois a indutância do trafo filtra o PWM.

 

Postado
11 horas atrás, albert_emule disse:

O mais normal é ver uma senoide com ondulação em dente de serra.

PWM não vai ver, pois a indutância do trafo filtra o PWM.

Pois é isso mesmo que eu esperava ver. Com o monitoramento da corrente (diferencial) no positivo da fonte.

 

Outro detalhe é que o trafo usado na simulação parece ser ideal, não possuindo indutância parasita. Isso deve acarretar um pico de corrente alto nas comutações, devido a presença do capacitor no secundário.

MOR_AL

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

PWM não vai ver, pois a indutância do trafo filtra o PWM.

18 horas atrás, .if disse:

ou a indutância está filtrando

 

47 minutos atrás, MOR_AL disse:

é isso mesmo que eu esperava ver.

18 horas atrás, .if disse:

Achei que ia aparecer o pulso pwm.

tmj...🙃

 

Também tenho outra teoria sobre a ausência visual do pulso ou dente de serra.. tanto faz: a granulação senoidal é de 100 unidades além do que a portadora ou freq do pwm é relativamente grande para o tipo de trafo e sua indutância. Indutância grande suaviza demais a coisa - não vos esqueceis que vejo fluxo de eletrons e não necessariamente a matemática da coisa ok?.

Numa próxima revisão do sw vou reduzir o número de amostras de seno bem como a freq pwm pra ver. A ideia é colocar uns 8 ou 16 senos apenas - já que o hw se encarrega de 'senoidizar' a coisa. E também devo controlar apenas 1 quadrante da senoide - já que os outros 3 são 'espelhos' deste.

 

Voltando a:

18 horas atrás, .if disse:

 

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

uma realimentação para correção da tensão de saída.

 

Uma ideia inicial que tive foi fazer com opto pra efeito de isolação. Isso aqui deu quase muito certo:

Capturadetelade2024-03-0907-31-46.thumb.png.012b5b8ce30cdc0bfd754ecb5966dcda.png

O vac do terminal não tem a ver com a 'realidade' da simulação. Já o Ad é o valor que efetivamente vou usar pra fazer a correção da tensão - largura do pwm. O salto felino que disse foi a captura naquele único ponto de pico da onda bem como a não necessidade de retificação e filtragem pra ler dc que em tese tornará o sistema mais rápido. A ideia é deixar o sistema bem parecido com que um hw dedicado faria mas com 'anabolizantes' 🤪

 

O fonte abaixo é o que usei. Mas é só pra curiosidade mesmo pois devo evoluir a versão. Basicamente é só pra você - caro leitor experiente em c - perceber as bizarrices necessárias pra que funcionasse... e nem me pergunte de onde veio a inspiração para tal...

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

#define SinDivisions 200
#define microMHz 16
#define freq 240   
#define period microMHz*1e6/freq/SinDivisions
//static unsigned int lookUp[SinDivisions/2];

//não quis usar a matemática mas sim dados pre computados
//Era pra ser "const" - na flash - mas não funciona.. suposto bug do compilador
unsigned int lookUp[101]= { //tabela na ram
                                0,10,21,31,42,52,62,73,83,93,103,
                                113,123,132,142,151,161,170,179,
                                187,196,204,212,220,228,236,243,
                                250,257,263,270,276,281,287,292,
                                297,302,306,310,314,317,320,323,
                                325,327,329,331,332,333,333,333,
                                333,333,332,331,329,327,325,323,
                                320,317,314,310,306,302,297,292,
                                287,281,276,270,263,257,250,243,
                                236,228,220,212,204,196,187,179,
                                170,161,151,142,132,123,113,103,
                                93,83,73,62,52,42,31,21,10,0
                                };

unsigned int num;
unsigned char trig;
bool led;
unsigned int a0,a1;
bool dtrig;
float Vac;

void setup()
{
//  double temp;
  for(int i = 0; i < SinDivisions/2; i++)
  {
//  lookUp[i] = (sin(i*2*M_PI/SinDivisions)*period);
//    temp = (sin(i*2*M_PI/SinDivisions)*period);
//    lookUp[i] = (int)(temp+0.5);           
  lookUp[i]=lookUp[i+1];//insanidade pra funcionar: +1 suposto bug no compilador
  }
  TCCR1A = 0b10110010;
  TCCR1B = 0b00011001;
  TIMSK1 = 0b00000001;
  ICR1   = period;   
  DDRB = 0b00110110;
  DDRD |= 0b10000000;
//  DDRC = 0b00001000;
//  pinMode(13, OUTPUT);
  Serial.begin(9600); 
  Serial.println("teste");
  sei();             
}


ISR(TIMER1_OVF_vect)
{
OCR1A = OCR1B = lookUp[num]; 
if (num==50) //sincronia com o loop
  {
  dtrig=1; //meio da tabela => vpico
  if (trig++>59) {trig=0;PORTB^=0b00100000;}//digitalWrite(13,led);led^=1;}  //led tô vivo
  }
if(num++ >= (SinDivisions/2)) num=0;
} 

void loop()
{
dtrig=0; //aguardar momento Vp
// sinc. com interrupt   //outro suposto bug do compilador:
while(!dtrig) asm("NOP");//Não era pra precisar do NOP
a0=analogRead(A0); //captura logo após atingir Vp
PORTD=0b10000000; //apenas para mostrar o momento da captura do sinal
PORTD=0b00000000; //no osciloscópio
//a1=analogRead(A0);
//PORTD=0b10000000;
//PORTD=0b00000000;
Serial.print("Ad=");
Serial.print(a0);
Vac=((float)a0*0.03447);
Serial.print(" Vac=");
Serial.println(Vac);
//Serial.write(10);
//Serial.print(" a1=");
//Serial.println(a1);

}

 

Postado

@.if

Agora que eu vi, que o trafo possui indutância primária e secundária. Lp = Ls = 0,5H.

Tente colocar Np = Ns = 60,66mH = 0,06066H. e observar a defasagem entre a tensão e a corrente.

MOR_AL

  • Membro VIP
Postado
11 horas atrás, MOR_AL disse:

Np = Ns = 60,66mH = 0,06066H.

Moris deu isso...

https://i.imgur.com/4eva8LB.mp4

A I é o amarelo. Dá uns 20A de pico. Pena que a senoide desmontou (azul). Não sei qual capacitor usar. O da ressonância 116nF não deu certo.  Acho que depende mais da freq do pwm. Qual a indutância de um trafo 12+12 uns 30A 60Hz.. Acho que tenho algo do tipo. Ainda não aprofundei na evolução deste treco. De novo, este não é meu ramo. Só estou xeretando por estas bandas...

 

@albert_emule não vejo sua imagem meu rei.

 

 

Postado

@.if

Confesso que eu não entendi quase nada, hehehe.

Sempre tive dificuldade em relacionar (no Proteus) o nível cc da chave com o da onda na tela.

Não sei porque a corrente aparece antes da tensão na saída.

Não vi mais os valores de Lp e de Ls. A ressonância seria em 50Hz. 

A corrente teria a forma da senóide, porém com os "dentes" do PWM.

Deixa pra lá!!! ☹️☹️☹️☹️

MOR_AL

  • Membro VIP
Postado

@MOR_AL  e eu ainda menos .. 😜

Refiz a conta da ressonância mas deixei em 60Hz mesmo. C=116uF com seus mH. Agora até que quase deu igual ao do real do França...Tive que aumentar o R shunt pra 10mR pro osc captar. E pra aparecer as ondas abaixo tive que intuir um fator de acoplamento 0.5 (o tal M). Apesar do nome sugestivo, como não sou do ramo não sei exatamente o que significa. RP e RS são a R em mR.

2.thumb.png.e19859634b126e72ae6c764865d388e2.png

com zoom...

1.thumb.png.7584e7f0b55007a03022a4cccafeb5df.png

1 hora atrás, MOR_AL disse:

A corrente teria a forma da senóide, porém com os "dentes" do PWM.

Meio que tentou aparecer a senoide mas pelo menos mostrou os dentes ... amarelos.

 

Na IDE arduina o código ocupou + de 3K - sem o tal bootloader - além de não funcionar a contento alimentando os dados de seno direto da flash e etc. Já num compilador de verdade ocupou 600B e, claro, lê da flash de boa. Mas pra tornar o projeto open source acho que vou ter que retornar ao arduino mesmo... pensando... em fazer em ambos só pra efeito de benchmarking

França.. agora sim vi a figura.

Postado
2 horas atrás, .if disse:

E pra aparecer as ondas abaixo tive que intuir um fator de acoplamento 0.5 (o tal M). Apesar do nome sugestivo, como não sou do ramo não sei exatamente o que significa.

Coloque o M = 0,99.

2 horas atrás, .if disse:

RP e RS são a R em mR

Se estes Rp e Rs pertencerem às especificações do trafo, então Rp seria a resistência (de fuga equivalente), que deveria ser muito alta, algo como 1M Ohms.

Rs seria a resistência dos fios da bobina, algo como 1 Ohm.

A forma de onda da corrente começa a parecer como eu (eu) acho que deveria ser.

Só que a corrente ainda está defasada da tensão, o que mostra uma carga reativa.

Quando mencionei Lp = Ls = 60,66mH, era quando o eletrolítico valia 14,5uF e era a ressonância para 50Hz, que constava em seu programa.

Coloque o valor do capacitor para ressonar na frequência da rede que você está usando, juntamente com os valores de Lp e Ls. Como suponho que a relação de espiras é de 1:1, já que os valores são iguais, considero que o valor de L da ressonância seja L = Lp/2 = Ls/2.

MOR_AL

  • Membro VIP
Postado

 

@MOR_AL  Num 1º momento usei calculadora mesmo mas esta calculadora

https://www.omnicalculator.com/pt/fisica/calculadora-frequência-de-ressonancia

dá resultados diferentes do seu mas bem semelhante ao meu lá de trás.

1 hora atrás, MOR_AL disse:

Quando mencionei Lp = Ls = 60,66mH, era quando o eletrolítico valia 14,5uF e era a ressonância para 50Hz, que constava em seu programa.

De fato estou usando 60Hz mesmo.

 

1 hora atrás, MOR_AL disse:

estes Rp e Rs pertencerem às especificações do trafo

..sim mas são resistências da bobina mesmo ok? No caso o default do simulador é 1mR mesmo.

 

1 hora atrás, MOR_AL disse:

M = 0,99.

.. distorce a onda. O que mais deixou senoide foi o 0.5 mesmo.

 

O simulador com mosfet fica muuuiito lento e as vezes instável.. dá algum tipo de erro e pára. Vou parar de usar ele com mosfet e fazer testes de realimentação com trafo direto no pino do mc cuja simulação é bem rápida. Em breve faço teste real pra saber - já que ninguém me iluminou - se trafo comum dá resultado com com este spwm doidão aí... Meu indutímetro sumiu. Vou ter que usar gerador de sinais + osc pra calcular o C ressonante

Postado
4 horas atrás, .if disse:

resultados diferentes do seu

Ops!!!

F = 50Hz

C = 14,5uF

L = 0,7H

Lp = Ls = 1,4H

 

F = 60Hz

C = 14,5uF

L = 0,485H

Lp = Ls = 0,97H

4 horas atrás, .if disse:

.. distorce a onda. O que mais deixou senoide foi o 0.5 mesmo

M = 0,5 acrescenta uma indutância em série com o trafo.

Acho que é isso que está faltando no seu circuito. Veja o vídeo do @albert_emule , na postagem #35 em t = 1,51min. O trafo "estranho" possui dois indutores acoplados.

O indutor também pode ser obtido via shunt magnético parcial, incluído no trajeto do percurso magnético. Mas esta solução costuma dar um pouco mais de trabalho e é usada quando se quer montar diversos trafos.

MOR_AL

 

Postado
Em 12/03/2024 às 16:02, MOR_AL disse:

Ops!!!

F = 50Hz

C = 14,5uF

L = 0,7H

Lp = Ls = 1,4H

 

F = 60Hz

C = 14,5uF

L = 0,485H

Lp = Ls = 0,97H

M = 0,5 acrescenta uma indutância em série com o trafo.

Acho que é isso que está faltando no seu circuito. Veja o vídeo do @albert_emule , na postagem #35 em t = 1,51min. O trafo "estranho" possui dois indutores acoplados.

O indutor também pode ser obtido via shunt magnético parcial, incluído no trajeto do percurso magnético. Mas esta solução costuma dar um pouco mais de trabalho e é usada quando se quer montar diversos trafos.

MOR_AL

 

 

 

Enquanto vocês desenvolvem o código, vou testar um módulo chinês chamado EGS002.

 

Esse módulo chinês possui uma opção no microcontrolador para alterar o PWM de unipolar para bipolar.

O que aconteceu é que os drivers IR2110 queimaram.

Portanto, eu vou remover esses drivers e coletar o sinal PWM diretamente do microcontrolador, o que fará com que funcione da mesma forma que este projeto do Arduino.

 

Assim, se estiver funcionando com o módulo EGS002 chinês, também funcionará com o Arduino.

 

Postado
3 horas atrás, albert_emule disse:

Enquanto vocês desenvolvem o código...

Justiça seja feita. O @.if é que desenvolve o código, pois eu não saberia programar em c com tanta desenvoltura como ele. 

Eu apenas fico dando "pitaco" teórico e você é quem monta e testa. O que tem mais trabalho, pois a prática é que manda.

MOR_AL

 

 

  • Curtir 2

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...