inverter 12/115v 400hz

ciao ragazzi
forse qualcuno si ricorderà di me, qualche mese fa frequentavo assiduamente il forum, mi sono poi trasferito per lavoro e sono rimasto tagliato fuori dai giochi per un po'... ora finalmente ho di nuovo l'adsl e torno a rompervi le balle :grin:

sono alle prese con un nuovo progettino per un amico
lui ha un ultraleggero su cui vorrebbe montare un orizzonte artificiale proveniente da non mi ricordo quale aereo militare americano di qualche anno fa, un bello strumento che però necessita di un'alimentazione 115vac 400hz monofase come da standard aeronautico per la vac di bordo
purtroppo lo standard prevede anche 28v per la continua, lui ha a bordo 12v di una normale batteria invece, quindi quelli che si trovano da comprare non vanno bene

mi sono quindi messo a pensare a come risolvere questo problema con le mie scarse capacità...

vorrei però realizzare un hardware un po' sofisticato controllato dal 328 in modo da poter ottenere una scheda che con modifiche software possa generare altre tensioni e altre frequenze se necessario, solo per sfizio, non per necessità e che possa pure essere alimentato a tensioni diverse da 12vdc

per ora l'approccio che più mi convince di quelli pensati è questo (probabilmente è contro il principio di ogni normale inverter ma pazienza :roll_eyes:)

tramite pwm e filtro passa basso regolo la tensione di alimentazione dell'inverter

genero onda quadra a 50hz e alzo la tensione

raddrizzo l'alta tensione ottenuta e la stabilizzo e tramite partitore di tensione la leggo col micro

ovviamente in relazione alla lettura dell'alta tensione piloto di conseguenza il pwm che regola la tensione di alimentazione dell'inverter arrivando al valore voluto

genero dalla 115vdc la 115vac 400hz di cui ho tanto bisogno, ho letto che con pwm e filtri è possibile anche creare una sinusoide decente invece dell'onda quadra e questo intendo fare

che ve ne pare delle linee guida? assurde? irrealizzabili?

come sempre arricchirò il pst con gli sviluppi hardware e software per chi potesse averne bisogno :wink:

ciao a tutti
luca

EDIT

altra strada possibile è fare il pwm dell'alta tensione per regolarla senza toccare l'alimentazione

Ma lo strumento ha bisogno di 115V AC e 28VDC. Non bastano i 28V? Sicuramente funziona anche a 24V.
Ciao Uwe

no lo strumento va a 115vac e basta
su gli aerei l'alternata è 115v mentre la continua 28
quindi gli inverter che si trovano sono 28vdc / 115vac 400hz
quello essendo un ultraleggero ha un motore rotax e una batteria a 12v e non rispetta nessuno standard aeronautico

28V sono 2 accumulatori al piombo da 12 V messi in serie.
Se trovi un inverter 28V a 115VAC non é un problema trovare un convertitore DC/DC da 12V a 24V eventualmente regolabile a 28V.
Ciao Uwe

ma non si fa' prima a trovare un inverter da auto 12-110Vac.... visto che negli USA questa e' la normale tensione di lavoro

Brunello la frequenza deve essere 400 hz non 50
Cmq lo voglio costruire :slight_smile:

Ciao Luca, bentornato.

Brunello la frequenza deve essere 400 hz non 50

mi merito una bacchettata, non sono stato attento

Ciao luca, bentornato.

PS: guarda non è facile scordarsi di te, ho fatto vedere molte volte il video con il motore in vasca.

Motore Rotax? da ragazzino guardando l'esploso del motore con ammissione a disco rotante mi ecci.. :smiley:

Vabò, torniamo seri.

Su nuova elettronica n ?? c'è un inverter interessante, l'alimentazione 300VDC viene ricavata da uno switching simil car amplifier SG35xx (24, 25, 26 ecc), con feedback (quindi stabilizzata) che alimenta il ponte intero modulato da un controller ?? (forse ST7) che fornisce segnali PWM con andamento pseudo sinusoidale.

In effetti modificando la tensione VDC di 300V a 115 * 1.41 si risolve il problema della tensione.

Per la fo di 400HZ il micro deve pilotare il ponte intero di uscita, se lo fai ad onda quadra è semplice, mentre se vuoi pilotare il ponte con segnali PWM pseudo sinusoidali devi collezionare in un array tutti i valori del PWM che eseguiti con tempistiche critiche approssimano un onda sinusoidale. p = 1/400 = 0.0025, p = 1/50 = 0.02, c'è una bella differenza tra 50HZ e 400.

Ciao.

Ciao Luca

per l'inverter ricordo che nel ns. laboratorio avevano costruito un alimentatore con un amplificatore audio a mosfet attaccando all'ingresso un oscillatore a 400 htz sinus poi con il volume dell'ampli regolavano la tensione .

  • Naturalmente hai bisogno di una tensione per l'ampli di min + e - 75v 85v

Ciao Francesco

ciao a tutti ragazzi
grazie delle risposte e del davvero gradito bentornato :smiley:

vi aggiorno un po' sulla situazione
ora vivo a roma e lavoro in un'azienda che si occupa di elettronica

quindi vuoi per interesse che per necessità in questi mesi ho imparato moltissime cose riguardanti questo mondo e ho colleghi davvero in gamba, oltre che una sfilza pressochè infinita di strumentazione

mi hanno anche regalato un oscilloscopio da tenere a casa, un vecchio kenwood cs-1025 analogico 20mhz che però per me è motivo di orgoglio :grin:
finalmente non devo più usare i led per cercare di capire che diavolo sto facendo ahaha

questa divagazione è per spiegare che io sostanzialmente non ho necessità di costruire questo inverter, lo voglio fare perchè mi va di farlo, e vi dirò di più, adesso adoro ancora di più complicarmi la vita :smiley:

quindi l'altra sera con l'aiuto di un collega abbiamo compilato su una macchina virtuale linux centOS 64bit il compilatore gcc ottimizzato per i micro avr e sarà con quello che scriverò il software di questa benedetta schedina, mi sto studiando gia da un bel po' il datasheet del micro e intendo andare a programmare un po' sopra al bare metal per fare quello che voglio, sarà un parto lungo e doloroso visto che ovviamente non sono capace :cold_sweat:

questo mi servirà però anche per capire per davvero che succede dentro a un microcontrollore, cosa che ora mi serve spesso e volentieri anche sul lavoro :slight_smile:

vi terrò aggiornati

ciao ragazzi
dopo un po' di lavoro sono riuscito a mandare il pin 13 a 400hz tramite timer1

vi sarei grato se deste un'occhiata soprattutto ai commenti visto che ho avuto difficoltà a scrivere anche quelli visto che il funzionamento mi è ancora un po' poco chiaro...

    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    
    void _exit(int status) {
    
    }
    
    
    int main(void)
    {
    
      DDRB = 0b00100000;                                // imposta pb5 pin 13 arduino come output
    
      OCR1A = 624;                                     // 2500micros @ 16mhz prescaler 64, 400hz
    
      TCCR1B |= (1 << WGM12);                           // comparazione con OCR1A
    
      TIMSK1 |= (1 << OCIE1A);                          //interrupt quando raggiunto OCR1A
    
      TCCR1B |= (1 << CS11) | (1 << CS10);              //prescaler 64
    
      sei();                                            //abilita interrupt
    
      while (1);
      {
    
        
      }
    
    }
    
    ISR (TIMER1_COMPA_vect)                            //interrupt su comparazione OCR1A
    {
    
    
      PORTB = PORTB ^ 0b00100000;                      //inverte stato pb5 pin 13 arduino
    
      
    }

altra cosa che non capisco è perchè senza il void_exit su gcc non compila mentre da ide arduino si...

rieccomi dopo qualche giorno :grin:
credo proprio di essere riuscito a generare un bella sinusoide a 400hz ]:smiley:

tramite il timer2 ho generato un fast pwm a 25khz
tramite la funzione sin() genero i punti per la sinusoide con una risoluzione di 0.1rad
dato che 0.1rad equivale a dare 62.8 punti ogni punto sono 39.81us arrotondato per comodità a 40us
quindi 40us a punto generano 400 cambi di stato a 25khz (1000000us/40)

ho messo un condensatorino da 1uf al pin 3 (per mostrare la sinusoide) e collegato l'oscilloscopio sembra che sia proprio così!!
sono ancora un po' incerto però, a voi torna questo ragionamento??

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


float i;
float o;

int main(void)
{

  DDRD  =  0b00001000;              //pin 3 output

  TCCR2A = 0b10100011;              // timer2 fast pwm

  TCCR2B = 0b00001010;              //prescaler 8


  while(1)
  {
    i += 0.1f;                                     //risoluzione 0.1rad
    o = sin(i);                                    //seno di i, punti per duty cycle sinusoide

    OCR2A =79;                                     // 25khz

    OCR2B = (unsigned char)(abs(o *79.0f));        //duty cycle
  }


}

nella foto un quadratino verticale corrisponde a 1v e uno orizzontale a 2ms, quindi come dico mi sembra che torni, però l'oscilloscopio mi lascia ancora un po' perplesso :blush:

OCR2B = (unsigned char)(abs(o *79.0f)); //duty cycle

modificando 79.0f e abbassandolo posso evitare che il duty cycle arrivi al 100% e quindi anche retroazionare la tensione in ingresso al trasformatore in base alla lettura dell'alta tensione raddrizzata e con partitore di tensione

edit:grazie anche a arducompanion che aiuta un sacco a fare i calcoletti per i valori!!

ciao a tutti
luca

ciao ragazzi
partendo dal fatto che i miei conti sopra sulle frequenze sono sbagliati :sweat_smile: avrei bisogno di un po' di aiuto da qualche esperto di timer

nel codice sopra facendo abs() di sin() praticamente creavo una "sinusoide ripetuta" cioè sia la parte positiva che quella negativa venivano affiancate e rese entrambe positive

ora, ovviamente non posso creare una semionda negativa, ma facendo un push pull delle due semionde positive fuori dal trasformatore avrei l'onda completa

quindi ho discriminato la prima semionda di ogni ciclo (primi 180° su 360°) attivando il pin 3 solo durante quel periodo
per il resto del giro pin3 rimane spento

come si vede dalla foto che allego il risultato c'è, si vede che viene disegnata solo una semionda su 2 con un periodo di vuoto pari al resto del giro

tuttavia il mio problema è che avrei bisogno di tirare fuori la seconda semionda da un'altro pin ma non so come fare, prima pensavo che su timer 2 pin 3 e pin 11 fossero gemelli e che quindi fosse semplice accendere il 3 per mezzo giro e 11 per il resto, ma ho guardato e non è così, ogni pin dovrebbe comandare un mosfet che di fatto crea l'inversione di tensione sul trasformatore a doppio avvolgimento con centrali in comune

avete idee su come agganciare un altro pin al mio timer e fargli fare quello di cui ho bisdogno??

spero di essere stato chiaro anche se ne dubito e me ne scuso, se avete domande fatemele pure!!!

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


float i;
float o;

int main(void)
{


  DDRD  =  0b00001000;              //pin 3 output

  TCCR2A = 0b10100011;              // timer2 fast pwm

  TCCR2B = 0b00001010;              //prescaler 8


  while(1)
  {
    i += 0.1f;                                     //risoluzione 0.1rad
    o = sin(i);                                    //seno di i, punti per duty cycle sinusoide

    OCR2A =79;                                     // 25khz

    OCR2B = (unsigned char)(abs(o *79.0f));        //duty cycle


    if(i<=3.14f){                            //prima metà della funzione seno (semionda)

      DDRD  =  0b00001000;                      //abilita pin3
    }

    if(i>=3.14f){                              //seconda metà della funzione seno

      DDRD  =  0b00000000;                      //disabilita pin3
    }

    if(i>=6.28f){                            //360°

      i=0;                                         //azzera i
    }

  }


}

Ciao, posso darti una mano dato che i timer un pò li conosco.
Dimmi intanto che necessità hai.

ciao leo
praticamente (come spero si veda nello schemino che io allego) devo accendere per una semionda un pin (per ora il pin3) e per il resto un altro pin, in modo da poter comandare due mosfet e dare corrente al trasformatore
purtroppo ho scoperto che il pin11 non e gemello del 3 e quindi non so come fare