Sursa de tensiune liniară (bazat pe LM317) – cu transformator TS 70/16 (16.6 V / 2 A) si afisor de tensiune (10) – Finalizat

Ca urmare a unui incident, sursa mea de tensiune liniara a avut nevoie de o reparație, astfel am decis să-i montez senzorul de tensiune și curent INA219 pe care l-am testat într-un mini proiect din octombrie. Tensiunea afișată este pentru al doilea rând de conectori (-/+) de la stânga la dreapta(vezi în imaginea de mai jos). Primi doi conectori (-/+) (tot de la stânga la dreapta) îmi dau 9 V, următorii doi 0 – 12 V, apoi iar 9 V și ultimii 0 – 18 V.

Codul sursă adaptat pentru un afișor 16×2:


#include "Wire.h"
// include the library code:
#include "LiquidCrystal.h"
#include "Adafruit_INA219.h"

Adafruit_INA219 ina219;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#if defined(ARDUINO_ARCH_SAMD)
// for Zero, output on USB Serial console, remove line below if using programming port to program the Zero!
#define Serial SerialUSB
#endif

void setup(void)
{
#ifndef ESP8266
while (!Serial); // will pause Zero, Leonardo, etc until serial console opens
#endif
uint32_t currentFrequency;

Serial.begin(9600);
Serial.println("Hello!");
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("Voltmetru");

// Initialize the INA219.
// By default the initialization will use the largest range (32V, 2A). However
// you can call a setCalibration function to change this range (see comments).
ina219.begin();
// To use a slightly lower 32V, 1A range (higher precision on amps):
ina219.setCalibration_32V_1A();
// Or to use a lower 16V, 400mA range (higher precision on volts and amps):
//ina219.setCalibration_16V_400mA();

lcd.print("Measuring voltage and current with INA219 ...");
}

void loop(void)
{
String lcd_buffer;
float shuntvoltage = 0.0f;
float busvoltage = 0.0f;
float current_mA = 0.0f;
float current_A = 0.0f;
float power = 0.0f;

shuntvoltage = ina219.getShuntVoltage_mV();
busvoltage = ina219.getBusVoltage_V();
current_mA = ina219.getCurrent_mA();
current_A = ina219.getCurrent_mA()/1000.0;
power = busvoltage * (current_mA/1000.0); // Calculate the Power

lcd.setCursor(0, 0);
lcd.print("Volts:");
lcd.print(busvoltage,1);
lcd.print("V ");

lcd.setCursor(0, 1);
lcd.print("C:");
lcd.print(current_A,1);
lcd.print("A");
lcd.print(" P:");
lcd.print(power,1);
lcd.print("W ");

delay(1000);
}

Merge brici ! Weekend plăcut și Sărbători fericite !

Sursa de tensiune liniară (bazat pe LM317) – cu transformator TS 70/16 (16.6 V / 2 A) – (9)

In sfârșit am reușit sa termin sursa de tensiune folosind transformatorul TS 70/16 (16.6 V / 2 A). PCB-ul sursei arata ca in imaginea de mai jos:

Am folosit pentru redresare o piesa integrata, nu mai folosesc diode separate pentru ca mi se pare mai simplu sa realizez PCB-ul folosind un integrat. În rest toate celelalte piese sunt la fel cu o mica deosebire sunt alese sa reziste la un curent de pana la 2 A. Folosesc ambele ieșiri ale transformatorului, una scoate 8 V ca in imaginea de mai jos.

În imaginea de mai jos se poate vedea poziționare surselor în cutie. Cea din dreapta este cu transformator TEZ10/D230/12-12V iar cea din dreapta este cea noua.

A doua ieșire, care este și reglabila, poate scoate maxim 20.9 V și minim 1.1 V, asa cum se vede în imaginea de mai jos. As fi tare curios să verific tensiunea de ieșire cu un osciloscop dar din păcate nu se poate în momentul acesta. Sper ca în curând sa fac rost și de un osciloscop. Tensiunea pare foarte stabilă și cred că se poate folosi fără probleme la orice ECU cu consum de pana în 2 A.

Schema electronică de bază pentru ieșirea a doua este reprezentată în imaginea de mai jos:

În următoare fază a proiectului o să conectez afișorul de tensiune, dar la acesta mai am de calibrat software-ul. Apoi o să montez toate plăcile în cutie și aș fi pregătit să trec la următorul proiect.
Seria de articole pe aceasta tema o puteți găsi aici : Sursa de tensiune liniară (bazat pe LM317) .
Sper ca articolele acestea sunt de folos cuiva …
O seara plăcută tuturor!

Sursa de tensiune liniară (bazat pe LM317) – cu transformator TS 70/16 (16.6 V / 2 A) – (8)

Am o nouă versiune de sursă de tensiune liniară, dar de data asta am schimbat transformatorul, puntea redresoare și implicit layout-ul PCB-ului. Transformatorul folosit se numește TS70/16 și are două ieșiri 16.6 V cu 2 Amperi. Am avut nevoie de un transformator mai mare pentru a putea utiliza echipamente care consuma mai mult curent. Transformatorul de la versiunea 1 se cam încălzea și probabil ar fi cedat dacă legam mai multe ECU-uri la sursă. Prima sursă o să o folosesc exclusiv pentru alimentarea afișorului de tensiune.
PCB-ul arata acum cam așa:

PCB-ul în format Express PCB
Piesele celelalte rămân la fel ca și la schema cu transformatorul mai mic. Puntea redresoare am înlocuit-o cu un integrat foarte modular și ușor de folosit denumit BR38. Acum schema e mai ușor de înțeles și de modificat. Sper că schema e și robustă.
Din păcate o să mai dureze până o să construiesc fizic noua sursă. Cred că spre sfârșitul lunii iulie..
O seară plăcută tuturor!

Sursa de tensiune liniară (bazat pe LM317) – Afisor de tensiune (7)

Afișorul de tensiune a început sa prindă contur dar cu foarte multe piedici, ba se strica una, ba se strica alta. În momentul acesta placa funcționează și controlerul dă toate semnalele către LCD, dar acesta refuza sa funcționeze. Cred că s-a paradit ceva în integratul de pe placa LCD-ului. O să mai dureze un pic până o să cumpăr altul. Până atunci o să pun la punct soft-ul. Afișorul arată cam așa în momentul acesta:


Iar software-ul de inițializare și control LCD bazat pe soft-ul arduino arată cam așa:


// include the library code:
#include "LiquidCrystal.h"

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Pin 7 has an LED connected on most Arduino boards.
// give it a name:
int ledLow = 7;
int ledTest = 8;
int voltajValue = 0; // variable to store the value coming from voltage
int voltajPin = A0; // select the input pin for the voltage

const int R1 = 3000; // value for a maximum voltage of 20 volts
const int R2 = 1000;
// determine by voltage divider resistors, see text
const int resistorFactor = 255 / (R2/(R1 + R2));
const int batteryPin = 0; // +V from battery is connected to analog pin 0

// the setup routine runs once when you press reset:
void setup() {
Serial.begin(9600);
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("Voltmetru v1.0");
// initialize voltage pin
pinMode(voltajPin, INPUT);
// initialize the digital pin as an output.
pinMode(ledLow, OUTPUT);
// initialize the digital pin as an output.
pinMode(ledTest, OUTPUT);
delay(500); // wait for a second
}

// the loop routine runs over and over again forever:
void loop() {
float volts;
lcd.setCursor(0, 0);
lcd.print("Voltaj masurat: ");
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);

voltajValue = analogRead(voltajPin);

Serial.println(voltajValue ); // print the raw value

lcd.print(voltajValue);
lcd.setCursor(0, 1);

SetToHigh(ledTest); // turn the LED on (HIGH is the voltage level)
SetToLow(ledTest); // turn the LED off by making the voltage LOW
}


void SetToHigh(int led)
{
digitalWrite(led, HIGH); // turn the LED off by making the voltage LOW
delay(500); // wait for a second
}
void SetToLow(int led)
{
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(500); // wait for a second
}

Circuitul LCD se leagă la placa bazată pe Arduino pe următorii pini:
– LCD RS pin to digital pin 12
– LCD Enable pin to digital pin 11
– LCD D4 pin to digital pin 5
– LCD D5 pin to digital pin 4
– LCD D6 pin to digital pin 3
– LCD D7 pin to digital pin 2
– LCD R/W pin to ground
– 10K resistor:
– ends to +5V and ground
– wiper to LCD VO pin (pin 3)

Sper sa nu fi greșit nimic. Deocamdată soft-ul ar trebui sa afișeze valoarea neprocesată a voltajului citit pe pinul analog A0. În postul următor o sa calculez rezistentele și o sa vedem ce iasă.
O seara faină tuturor.

Sursa de tensiune liniară (bazat pe LM317) – Afisor tensiune cu Arduino (6)

Din păcate am găsit alte greșeli în schema PCB-ului și a trebuit să corectez dinou. De data asta după corecțiile de rigoare placa funcționează perfect și o să pot să o folosesc în continuare pentru afișarea tensiunii de alimentare a sursei de tensiune liniare. Următorul pas este să atașez LCD-ul și să pun la punct divizorul de tensiune adaptat pentru măsurare unor tensiuni de 0-16 V.
 Divizor de tensiune

Vin = 0- 5 V iar Vout = 0-16V 
Vout = (R2/(R1+R2)) * Vin

Placa funcțională față verso arată cam așa:

Și PCB-ul arată cam așa:

 Fișierul pcb pentru ExpressPCB îl găsiți aici.
După ceva peripeții de proiectare am reușit în sfârșit să urnesc proiectul și să îl aduc mai aproape de finalizare. E foarte important la proiectare circuitelor electronice să se verifice de mai multe ori înainte să se imprime o placă adevărată. În cazul acesta review-ul este crucial și trebuie făcut în detaliu, să nu mai vorbesc că un circuit serios care urmează să se folosească pe scară largă se simulează înainte de a se dezvolta prototipul. În final acest prototip se testează și în condiții extreme de mediu cum ar fi temperaturi între -70 C + 70 C. Circuitul meu a avut o mulțime de probleme tocmai pentru că nu am avut prea mult timp să îl revizuiesc.

Sper că nu v-am plictisit. O seara plăcută tuturor.

Sursa de tensiune liniară (bazat pe LM317) – Afisor tensiune cu Arduino (5)

Am printat circuitul pentru afișor de tensiune și am o avut o surpriză neplăcută. Soclul controlerului nu prea se potrivește cu circuitul imprimat pe placă. A trebuit sa îl adaptez un pic și i-am îndoit pinii și cred că va trebui să fac o nouă placă. Oricum am ajustat PCB-ul și a rezultat versiunea 2 :

Aici gasiti PCB-ul în format ExpressPCB.

Schema electronică pe baza căreia am construit PCB-ul este aceasta:
Dar am simplificat-o la maxim pentru a avea cat mai puține piese. Lista cu piesele le găsiți mi jos:

Image
Name
Description More info
IC1
Microcontroller (preprogrammed with Arduino bootloader when purchased in a kit) ATmega328P-20PU (unprogrammed)
Adafruit (Programmed)
IC1′
28-pin socket
X1
16.00 MHz ceramic oscillator 16 mhz ceramic resonator
2.1mm Power Jack
D1
1N4001 diode Generic 1N4001
IC2 5V regulator
7805 TO-220 package
7805
104 .1uf cerm
C1 C2 C5 C6 (opt)
Bypass capacitor
0.1uF ceramic
Ceramic Capacitor
C3
Electrolytic capacitor
47uF / 25V
(or higher)
Electrolytic Capacitor
104 .1uf cerm
C4
100uF/6.3V capacitor
(or higher)
(the image shows a 10V but 6.3V is fine)
Electrolytic Capacitor
R1
10K ohm 1/4W 5% resistor (brown black orange gold) Generic Resistor
R2 R3
1.0K 1/4W 5% resistor (brown black red gold) Generic Resistor
D3
3mm red LED 3mm red diffused
D2
3mm green LED 3mm green diffused
SW1
6mm tact switch button
6mm tact switch
40 pin male header, 0.1″ spacing 0.1″ male header strip

Sursa de tensiune liniară (bazat pe LM317) – Afisor tensiune cu Arduino (4)

Am început lucrul la afișorul de tensiune pentru sursa de tensiune liniară. O să folosesc un controller ATMEGA168P, același controller folosit de Arduino. Deocamdată îmi strâng piesele și o să fabric plăcuța.
PCB-ul arată cam așa deocamdată:
Copie placa Arduino adaptata pentru un singur strat.
PCB ATMEGA168P
PCB-ul în format ExpressPCB îl găsiți aici.

Lista de piese este :
– 4 Condesatoare
– 11 rezistențe 
– controller ATMEGA168P
– regulator de tensiune 5 V
– o diodă de protecție
– oscilator 16 Mhz
– placă PCB
– LCD 16 caractere 2 linii

Specificațiile de bază pentru acest afișor sunt:
S1: Afișorul trebuie să citească în permanență tensiunea de la sursa de tensiune și să o afișeze în timp real
S2: Afișorul trebuie să fie alimentat separat
S3: Afișorul trebuie să afișeze tensiuni între 0 și 16 V
S4: Afișorul trebuie să fie protejat electric de sursa de teniune
S5: Afișorul trebuie să permită conectarea și altor senzori (ca de exemplu un senzor de temperatură care să măsoare temperatura internă a sursei)

O să mai detaliez totul în posturile viitoare pe măsură ce avansez cu proiectul acesta.

O săptămână frumoasă tuturor!

Sursa de tensiune liniară (bazat pe LM317) – Calcule si masuratori (3)

Am făcut câteva măsurători cu privire la sursa de tensiune construita.
Tensiune peak to peak reprezintă diferența dintre minim și maximul de tensiune a formei de unda

`U_(peak) =U_(max) – U_(min)`.

Calcularea voltajului peak to peak.

`U_(rms) = U_(p)/sqrt(2)`.
`U_(p) = U_(rms) * sqrt(2)`.
`U_(p) = U_(rms) * 1.42`.

Exemplu pentru o tensiune de 12 V la bornele transformatorului iar după redresare tensiunea ajunge la 10.6 V. Diferența se disipă prin căldură.
Voltajul peak to peak calculat va fi:

`U_(p) = 10.6 * 1.42 = 15,052 V`.

În imaginea de mai jos se vede redresarea tensiunii de rețea:

În imaginea de mai jos se poate vedea simularea completă a sursei liniare. Graficul de culoare albastru deschis este tensiunea de intrare. Graficul de culoare verde este tensiunea de iesire LM317 OUT, pentru cazul acesta aceasta tensiune este de 3.47 V.

Fisierul cu simularea îl găsiți aici (LTSpice IV).
Dimensionarea condensatorului C1 care se mai numește și condensator de liniarizare, se face în felul următor:

`C = (5 * I_(o))/(U_(p)*f)`.
f – este frecventa formei de unda
Vp – tensiunea peak to peak
Io – intensitate curentului de iesire din redresor

În schema simulată la ieșirea redresorului avem totuși o forma de unda care nu se poate folosi pentru nici un microcontroler. Acestă forma de unda se observa în imagine reprezentata de linia roșie și care are următoarea formulă:

`U_(r) = U_(p)/( R_(L)* C) *delta(t)`.

Tensiunea la ieșirea redresorului mai îndetaliu arată cam așa:

Microcontrolerele sunt foarte sensibile din acest punct de vedere și tensiunea necesita o regularizare, adică o tensiune stabilă de 5 V de exemplu.
Calculele și măsurătorile pentru partea a doua a simulării o să o prezint într-un post viitor.
Spor la treabă !

Sursa de tensiune liniară (bazat pe LM317) (2)

Proiectul acesta începe să prindă contur. Am asamblat totul într-o cutie încăpătoare :). Singurul lucru care a rămas neterminat este afișorul de tensiune. Acest afișor o să-l execut folosind arduino cu un LCD și un divizor de tensiune.

În partea dreapta din poză am loc pentru încă o sursă 😉
Conectorul de alimentare de la rețea este chiar profesional. În schimb radiatoarele sunt un pic cam subdimensionate .. o să vad cât rezistă.
Sunt un pic cam multe cabluri dar sincer nu am găsit altă soluție. Dacă aveți o soluție mai bună sunteți invitați să o scrieți. O să le mai aranjez când o să instalez și afișorul de tensiune.
Sursa scoate maxim 18 V și minim 1.2 V … Sincer nu știu exact de ce nu ajunge la zero. Dar o să aflu …
Gaura unde o să instalez afișorul de tensiune este încă nefinisată. O să arate mai bine la final, vă promit 🙂

Oricum ar arăta eu sunt bucuros că funcționează. Deocamdată am folosit sursa doar pentru o mini-mașină de găurit care se poate alimenta doar la DC.
Schema de bază a sursei arată cam așa:

Weekend plăcut tuturor !

Sursa de tensiune liniară (bazat pe LM317) (1)

Pentru proiectele mele am nevoie de o sursă de tensiune liniară reglabilă și am decis să construiesc una. Am căutat pe net alte proiecte de același gen și am găsit aici. Schema de principiu e cam aceeași doar că am rearanjat altfel totul pentru a folosit transformatorul pe care îl am.
Am creeat schema electronică și schema PCB cu Express PCB pe care le găsiți mai jos:
 – Schema  PCB
 – Schema electronică

În principiu am folosit un transformator TEZ10/D230/12-12V – Transformator: încapsulat; 10VA; 230VAC; 12V; 12V; Montare: PCB. Acest transformator are două ieșiri pe care urmează să le folosesc una pentru afișorul de tensiune și una pentru sursa în sine. Apoi am folosit o punte redresoare și un stabilizator de tensiune LM317.
 Placa arată cam așa:

Placa e gata în proporție de 50%. Mai am de lipit piesele pentru stabilizatorul de tensiune pentru afișorul de tensiune. Apoi trebuie să montez totul într-o cutie specială.
Am testat ce am lipit până acum și funcționează chiar bine, dar mai am încă mult de lucru. Sper să termin totul în luna viitoare.
Formulele si calculele le voi posta data viitoare :).

Până atunci vă urez:

 La mulți ani și An nou fericit !