Slika prikazuje šemu kola podesivog regulatora napona kojim upravlja Arduino. Podesivi regulator se napaja iz neregulisanog izvora jednosmerne struje od 28-35 V. Izlazni napon regulatora je podesiv od 0 do 25 V, a izlazna struja je do 3 A. Regulator ima glatku regulaciju izlaznog napona, zaštitu od kratkog spoja na izlazu i stabilizaciju struje kada se prekorači podešena vrednost. Pored toga, poseduje termičku zaštitu od pregrevanja izlaznog tranzistora.
Kolo regulatora napona je podeljeno na dva dela: digitalni deo (Arduino, DAC, ADC, indikator i kontrolna dugmad) i deo za napajanje. Deo za napajanje koristi parametarski regulator od 27 V za napajanje operacionog pojačala LM358, koje ima maksimalni napon napajanja od 32 V, što omogućava napajanje kola regulatora naponima iznad 32 V. Kontrolni element je implementiran tranzistorima BC547B i BDX66C / MJ4032, kojima upravlja operaciono pojačalo. Na invertujući ulaz operacionog pojačala dovodi se napon proporcionalan izlaznom naponu, a na neinvertujući ulaz se dovodi referentni napon. Tranzistor BDX66C / MJ4032 mora biti montiran na hladnjak površine najmanje 400 cm².
Digitalni deo kola sastoji se od A/D pretvarača i CAP-a. Izlazni napon se podešava pomoću 12-bitnog CAP-a MCP4725, koji napaja neinvertujući ulaz operacionog pojačala LM358. Napon se može podesiti kroz 4096 koraka (12 bita). 16-bitni A/D pretvarač ADS1115 prati napon šanta, koji ne prelazi 300 mV pri struji od 3 A. A/D pretvarač i CAP su unapred ugrađeni moduli kontrolisani preko I2C magistrale. Da bi se eliminisao uticaj šanta na izlazni napon kada se struja opterećenja promeni, koristi se softverska korekcija izlaznog napona.
Zaštita od temperature je implementirana pomoću digitalnog senzora (modula) DS18B20, koji mora biti pričvršćen za tranzistor BDX66C / MJ4032. Ako temperatura kućišta tranzistora pređe 85°C, izlazni napon stabilizatora će biti onemogućen na 10 sekundi. Slično tome, ako dođe do kratkog spoja na izlazu stabilizatora, izlazni napon će takođe biti onemogućen na 10 sekundi. Kada se zaštita aktivira, na ekranu se prikazuje odgovarajuća poruka.
Čitav digitalni deo regulatora napona napaja integrisani regulator 7805. Pošto je ulazni napon 7805 iznad 30 V, napaja se preko otpornika za ograničavanje struje od 160 oma. Na regulator 7805 takođe mora biti instaliran mali hladnjak.
Stabilizator je prilično jednostavan za rukovanje: dugmad plus i minus podešavaju izlazni napon, a pritiskom i držanjem dugmeta za struju, dugmad plus i minus podešavaju izlaznu struju. Kada se prekorači podešena struja, izlazna struja će prestati da raste i ustaliti se na maksimalno podešenoj struji, dok će se napon smanjivati. Korak podešavanja napona je 0,1 V, korak podešavanja struje je 0,1 A, minimalna vrednost napona je 0 V, minimalna vrednost podešavanja struje je 0,1 A, a rezolucija merenja struje je 0,01 A.
Citat:
#include <Wire.h>
#include <Adafruit_MCP4725.h>
#include <DallasTemperature.h>
#include <EEPROMex.h>
#include <OneWire.h>
#include <Adafruit_ADS1015.h>
#include <LiquidCrystal.h>
Adafruit_ADS1115 oglasi;
Adafruit_MCP4725 MCP4725;// ulaz senzora 18b20
DalasTemperatura
t ( & jednaVira ) ;
LiquidCrystal lcd ( 7 , 6 , 2 , 3 , 4 , 5 ) ; // RS, E, D4, D5, D6, D7
int u_dig,i,u_reg,v,v1,I_r;
neoznačeni celokupni broj i_iz;
float u_max= 26.3 ,I,temp,i_reg,I_stari;
neoznačeno dugo vreme ,vreme1,vreme2;
const float kalib2= 1.000 ; // kalibracija ampermetra
void setup ( ) {
Serijski. begin ( 9600 ) ; Žična. begin ( ) ; lcd. begin ( 16 , 2 ) ;
pinMode ( 12 , INPUT ) ; // +
pinMode ( 11 , INPUT ) ; // -
pinMode ( 10 , INPUT ) ; // ok
MCP4725. begin ( 0x60 ) ;
t.begin ( ) ; t.setResolution ( 9 ) ; //9 - bitni
oglasi.begin ( ) ; ads.setGain ( GAIN_EIGHT ) ;
u_dig=EEPROM.read ( 0 ) * 256 + EEPROM.read
( 1 ) ; i_reg = ( float ) EEPROM.read ( 2 ) /10.0 ; }
void petlja ( ) {
ako ( digitalRead ( 12 ) ==VISOKO && digitalRead ( 10 ) ==NISKO ) { u_dig+= 2 ; w= 1 ; vreme1=milise ( ) ; kašnjenje ( 10 ) ; }
ako ( digitalRead ( 11 ) ==VISOKO && digitalRead ( 10 ) ==NISKO ) { u_dig-= 2 ; w= 1 ; vreme1=milise ( ) ; kašnjenje ( 10 ) ; }
ako ( u_dig > 4095 ) { u_dig= 4095 ; } ako ( u_dig < 0 ) { u_dig= 0 ; }
ako ( digitalRead ( 12 ) ==HIGH && digitalRead ( 10 ) ==HIGH ) { i_reg=i_reg+ 0.1 ; w= 1 ; time1=millis ( ) ; delay ( 300 ) ; }
ako ( digitalRead ( 11 ) ==HIGH && digitalRead ( 10 ) ==HIGH ) { i_reg=i_reg- 0.1 ; w= 1 ; time1=millis ( ) ; delay ( 300 ) ; }
ako ( i_reg > 3 ) { i_reg= 3 ; } ako ( i_reg < 0.1 ) { i_reg= 0.1 ; } I_r=i_reg * 10.0 ; }
MCP4725. setVoltage ( u_dig-u_reg+ 16 * I, false ) ;
//////////////////////////////// ampermetar ///////////////////////////////////////////
i_iz = ads. readADC_SingleEnded ( 0 ) ;
if ( i_iz > 65000 ) { i_iz= 0 ; } I = i_iz * 0,015625 * kalib2 / 100 ;
///////////////////////////////////////// zaštita od kratkog spoja /////////////////////////////////////// if ( I > 3 ) { MCP4725.setVoltage ( 0 , false ) ; lcd.setCursor ( 0 , 0 ) ; lcd.print ( " KRATKI SPOJ!" ) ;delay ( 10000 ) ; }
///////////////////////////////////// stabilizacija struje + TERMIČKI ŠTIT //////////////////////////////////////
if ( w1== 1 ) { if ( I > i_reg && u_dig > 0 ) { u_reg=u_reg+ 10 ; } if ( I==i_reg ) { }
if ( I < i_reg && u_reg > 0 && I > 0.1 ) { u_reg=u_reg- 10 ; } if ( I < 0.08 ) { w1= 0 ;u_reg= 0 ; } }
ako ( I > i_reg && u_dig > 0 && w1== 0 ) { u_reg=u_dig- ( u_dig * ( i_reg / I ) ) ; w1= 1 ; MCP4725.setVoltage ( u_dig -u_reg, false ) ; } ako ( temp > 85 ) { MCP4725.setVoltage ( 0 , false ) ; lcd.setCursor ( 0 , 0 ) ; lcd.print ( " VISOKA TEMPERATURA" ) ; delay ( 10000 ) ; }
//////////////////////////////////////////////// //////////////////////////////////////////////////
ako ( w== 1 && millis ( ) -vreme > 1000 ) { EEPROM. update ( 0 ,highByte ( u_dig ) ) ; EEPROM. update ( 1 ,lowByte ( u_dig ) ) ;Ažuriranje
EEPROM-a ( 2 , I_r ) ; vreme = milisekunde ( ) ; w= 0 ; }
ako ( milisi ( ) -vreme2 > 300) { lcd.setKursor ( 0 , 0
) ; lcd.print ( " U = " ) ; lcd.print ( ( u_dig - u_reg ) * u_maks / 4096 , 1 ) ; lcd.print ( " V" ) ;
lcd.setKursor ( 0 , 1 ) ; lcd.print ( " I = " ) ; lcd.print ( aps ( I ) , 2 ) ; lcd.print ( " A" ) ;
vreme2=milisica ( ) ; } lcd.setCursor ( 11 , 1 ) ; lcd.print ( i_reg , 1 ) ; lcd.print ( " A " ) ;
//////////////////////////// merenje temperature kućišta tranzistora /////// if ( millis ( ) -time1 > 1000 && I_old==I ) { t.requestTemperatures ( ) ;
temp=t.getTempCBiIndeks ( 0 ) ; lcd.setCursor ( 12 , 0 ) ; lcd.print ( temp , 0 ) ;
lcd.print ( char ( 223 ) ) ; lcd.print ( "C" ) ; time1 =millis ( ) ; } I_old=I;
}
Podešavanje stabilizatora napona:
Pritisnite dugme „plus“, sačekajte dok izlazni napon ne dostigne maksimalnu vrednost, izmerite izlazni napon i unesite ga u promenljivu: u_max = 26,3 (u citiranom slučaju, maksimalni napon je 26,3 V)
Pri korišćenju šanta nominalne vrednosti od 0,1 Oma, nije potrebna kalibracija struje, ali ako šant ima veliku grešku, onda je potrebno promeniti koeficijent: kalib2 = 1,000
Tokom testiranja stabilizatora, otkriveno je da kada je povezan sa opterećenjem niske impedanse sa primenjenim naponom, dolazi do varničenja u kontaktnom kolu, što ponekad dovodi do zamrzavanja Arduina ili grešaka na ekranu. Jasno je da rezultujuće smetnje utiču na digitalni deo stabilizatora. Da bi se eliminisao ovaj problem, na izlaz stabilizatora mora se instalirati induktivni filter.
Filter je napravljen na feritnom prstenu prečnika 3,4 cm sa magnetnom permeabilnošću od 2000 NN, dva namotaja su namotana zajedno, prečnik žice nije manji od 0,8 mm, broj namotaja je 10-15.
Original preuzet sa:
https://rcl-radio.ru/?p=57730