Go Down

Topic: Boost Dc-Dc con Arduino Uno (Read 1 time) previous topic - next topic

000k

Apr 21, 2016, 03:13 pm Last Edit: Apr 21, 2016, 10:48 pm by 000k
Un saluto a tutti,

Nel tempo libero a scopo puramente didattico sto cercando di realizzare un convertitore Dc-Dc di tipo Boost per portare una tensione di circa 12v su fino ai 150/200v da usare poi per alimentare una valvola Nixie.
Ho già a avuto a che fare con elevatori di tensione basati a quel tempo sull'IC UC3843 senza paricolari problemi, ora però volevo cercare di realizzarne uno basato su Arduino, a scopo didattico.

Lo schema ed i componenti utilizzati sono Questi.

Ricavati il seguente tool online

Il codice caricato su Arduino invece è:



Code: [Select]
#define FinalVoltage  0.36
#define Pin           3

int pwm = 0;

void setup() {
  setPwmFrequency(Pin,1); //@62500Hz
  analogWrite(Pin,pwm);
  pinMode(A0, INPUT);
}

void loop() {
  int adc = analogRead(A0);
  float voltage = adc * (5.0 / 1023.0);

  if(voltage < FinalVoltage)
    pwm++;
  else
    pwm--;

  if(pwm > 254) pwm = 254;
  if(pwm < 0) pwm = 0;

  analogWrite(Pin, 10);

  
}

void setPwmFrequency(int pin, int divisor) {
  byte mode;
  if(pin == 5 || pin == 6 || pin == 9 || pin == 10) {
    switch(divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
      case 64: mode = 0x03; break;
      case 256: mode = 0x04; break;
      case 1024: mode = 0x05; break;
      default: return;
    }
    if(pin == 5 || pin == 6) {
      TCCR0B = TCCR0B & 0b11111000 | mode;
    } else {
      TCCR1B = TCCR1B & 0b11111000 | mode;
    }
  } else if(pin == 3 || pin == 11) {
    switch(divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
      case 32: mode = 0x03; break;
      case 64: mode = 0x04; break;
      case 128: mode = 0x05; break;
      case 256: mode = 0x06; break;
      case 1024: mode = 0x7; break;
      default: return;
    }
    TCCR2B = TCCR2B & 0b11111000 | mode;
  }
}




Arriviamo al problema:
Nonostante i vari tentativi, la tensione in uscita non supera i 60V.
Ho provato a cambiare induttanza, a cambiare tipo di diodi usando quattro SB150 in serie per avere una tensione di 200v, ho provato a variare la tensione finale ed a farlo andare manualmente senza leggere la tensione in uscita, ma non c'è verso, non supera i 60v senza carico.
Inoltre, raggiunto e superato un DC del 50% l'alimentatore va in blocco per l'elevato assorbimento ed il mosfet seppur raffreddato tende a diventare troppo caldo.

Qualche consiglio?
Quando tempo fa utilizzai un UC3843 non ebbi di questi problemi, ma capisco che in quel caso usavo un IC fatto appositamente...

Ps. sullo schema mancano R1:100k ed R2:1K


Grazie anticipatamente.

gpb01

#1
Apr 21, 2016, 03:30 pm Last Edit: Apr 21, 2016, 03:31 pm by gpb01
Prima di tutto, essendo il tuo primo post, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il REGOLAMENTO ...

... poi, in conformità al suddetto regolamento, punto 7, edita (in basso a destra del post, bottone More -> Modify) il tuo post e racchiudi il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie.

Guglielmo
Search is Your friend ... or I am Your enemy !

000k

Grazie per le info sul tag Code, non ricordavo quale fosse infatti ho usato il tipo "testo"
Sono un vecchio utente di 3/4 anni fa, ma non avendo più la mail di quel tempo ne ho perso anche il nick qua sul forum dato che non lo ricordo più...
Magari se ritrovo qualche mio vecchio post aggiorno la sezione presentazioni :)

cyberhs

Non hai indicato la tensione Vcc, ma penso sia i 5V di Arduino.

Perché non prelevi la tensione direttamente dall'alimentatore, che come minimo è 9V?

Inoltre, ti conviene usare per il condensatore uno a bassa resistenza parassita (ESR) oppure mettere in parallelo condensatori più piccoli di capacità equivalente.

Comunque, ho provato il calcolatore con dati plausibili, ma i valori calcolati sono diversi dai tuoi:

F = 31250Hz
Vin = 12V
Vout = 200V
Iout = 10mA
Ripple = 100mV

L = 1mH
C = 3.2μF

000k

Giusto scusa, ho dimenticato qualcosa :)

La tensione di alimentazione è di 12V fornita da un alimentatore da banco, ho già provato con più condensatori in parallelo la il risultato è sempre lo stesso...anche utilizzando condensatori ceramici/poliestere...

Per i dati, effettivamente sketch e schema non sono consistenti, nel senso che nello sketch il pin in uso è il 3 mentre effettivamente ho usato il 5 per avere una frequenza di 62500 Hz, ho poi fatto delle prove a freq. più bassa cambiando anche l'induttanza, ma niente...

I dati utilizzati per ricavare il valore d'induttanza dell'induttore ed il valore del condensatore in uscita sono:

Freq. 62500
Vin.Min: 9v
Vin.Max: 12v
Vout.Min: 150v
Vout.Max: 200v
Iout: 0.07A
Vripple: 1v

cyberhs

Va bene, ma tu usi

analogWrite(Pin, 10);

mentre dovresti inserire

analogWrite(Pin, pwm);

Go Up