Sari la conținut
ELFORUM - Forumul electronistilor

Sursa digitala cu atmega8 (programabila/bluetooth/0..35V 10A max)


radhoo

Postări Recomandate

Salut,

 

Spre deosebire de alte posturi in aceasta sectiune, care prezinta proiecte finalizate, eu m-am gandit sa incep unul care sa trateze constructia unei surse digitale de la 0, pentru a putea beneficia de sugestiile colegilor pe parcurs. Ma astept sa finalizez proiectul pana la finalul saptamanii, deci cei care vor sa contribuie cu sugestii sunt bine veniti.

 

Ca punct de plecare se dau urmatoarele:

- o carcasa de tabla de sursa ATX, care fixeaza limitele de dimensionare a produsului finit (incepem invers)

- un microcontroller atmega8, sau pentru functii auxiliare (control Bluetooth de pe telefon?) un atmega168

- un ecran de afisare: fie un 2x16 HD44780  , fie un ecran grafic Nokia 5110

- un transformator de aprox. 250W, toroidal, 24V iesire, un curent de maxim 10A, priza mediana (12+12)

- cel putin 4 butoane, pentru U+/- si I+/- (setarile raman salvate in EEPROM)

- un buzzer, de tipul auto-oscilant (conectat la 3/5V produce un sunet ascutit fara alte piese, ideal pentru semnalizare)

 

Obiective fixate:

- microcontrollerul va simplifica design-ul hardware, lasand complexitatea in sarcina software-ului. Aici intra: driver afisaj, citire stare butoane, masurarea voltaj iesire printr-un divizor rezistiv conectat la un port ADC. 24V x 1.414 ~= 34V, hai sa zicem 35V rotund max.  Folosim citirea tensiunii pentru regularizarea tensunii dar si afisare pe ecran.

- Iesirea prin rezistente de putere si valoare mica (4x 2Ohm 5W in paralel, pentru un total de 0.5Ohm). Caderea de tensiune pe rezistente ne permite masurarea intensitatii. Folosim citirea intensitatii pentru regularizare, protectie scurtcircuit si afisare pe ecran. Scurtcircuit sau stari critice semnalate si prin sunete pe buzzer

- La selectarea tensiunii in jurul valorii de 11V, se foloseste un releu care care conecteaza priza mediana sau priza finala pentru a scadea disiparea pe tranzistorii de putere 

- Folosirea a 4x TIP3055 conectati in paralel cu rezistente de 0.1 - 0.56Ohm / 5W pe emitor, montati pe un radiator

- Folosirea unui senzor de temperatura DS18B20 conectat pe radiator pentru a monitoriza temperatura pentru protectia tranzistorilor. O supraincalzirea va fi semnalizata pe buzzer/ ecran plus limitarea automata a curentului pentru protectia sursei.

- Transistorii de putere pentru iesire, sunt comandati de un convertor DAC, realizat fie cu o retea R/2R fie cu semnal PWM si un filtru trece jos.

 

Poze initiale:

Posted Image Posted Image Posted Image

 

Cum ziceam voi folosi 4 tranzistori TIP3055 montati in paralel. In pozele de mai jos se vede si senzorul de temperatura (DS18B20) . Am folosit o clema metalica cu surub pentru a-l presa efectiv de radiator (nu apare in poza):

Posted Image Posted Image

 

Atasez la mesaj si schema pana in acest punct.

 

Probleme de rezolvat - va rog sa contribuiti cu sugestii:

1- sa ma decid ce folosesc PWM cu filtru sau retea R/2R pentru convertorul DAC . Am pus la punct un DAC pe 8 biti cu 74HC164, si in felul asta am nevoie doar de 2 pini pe microcontroller. Am prezentat detalii si schema aici:

Posted Image

2- sa aleg intre Nokia 5110 si afisajul 2x16

3- sa aleg amplificatorul de voltaj , folosit intre DAC si tranzistorii de putere (amplificator liniar care sa scaleze liniar intervalul 0..5V produs de DAC in intervalul 0..35V necesar sa atac baza tranzistorilor de putere). O varianta ar fi un amplificator cu tranzistori, alta cu un amplificator operational

4- pot folosi un LM358, jumatate ca si filtru trece jos pentru PWM, si jumatate ca si amplificator liniar de voltaj pentru iesirea DAC-ului? Rog pe cei cu experienta sa comenteze.

 

Cam atat pana in acest punct. Restul maine. Astept sugestiile voastre vis-a-vis de cele intrebate. 

 

 

post-177864-0-93602800-1428447914_thumb.pngpost-177864-0-35993400-1428447924_thumb.png

Editat de radhoo
Link spre comentariu

Viteza mică de reacție a buclei astfel implementate ( să zicem 100µs) poate (și va) conduce la un răspuns tranzitoriu prost - mult mai prost oricum față de soluția analogică.  Cât de prost cantitativ , depinde de compromisul care se face la alegerea valorii condensatorului de la ieșire . Din acest punct de vedere este clar că orice element care micșorează viteza de răspuns (cum ar fi un DAC tip PWM) va înrăutăți lucrurile.

Mai mult , în raportul cu algoritmul concret implemetat de reglaj , ( P , PI , PD sau PID ) și desigur , dependent de alte detalii ale implementării concrete , există chiar riscul instabilității la anumite sarcini. 

De asemenea , nu-mi sunt clare la acest moment performanțele de stabilizare realizabile . Pentru asta ar trebui modelată ( chiar și simplist ) bucla și determinată amplificarea echivalentă de curent continuu , care determină până la urmă aceste performanțe. La un ADC de 10 biți și o tensiune de ieșire de 35V este evident că stabilizarea  nu poate fi mai bună de 35mV  chiar la variații relativ modeste ale tensiunii de intrare și/sau sarcinii. Rezoluția DAC-ului ar putea ( sau nu ) să strice și mai mult această performanță.

Editat de UDAR
Link spre comentariu

Salut Radu,

 

Ma tem si eu de cele amintite de tine. Urmeaza sa fac cateva teste sa vad cum se comporta si DAC-ul pe baza de PWM, desi calculele nu promit prea multe.

 

Ce inseamna P, PI, PD , PID?

 

Ai punctat corect si limitele stabilizarii. Un DAC de 10biti, va permite reglajul in trepte de amplitudine minima Vo0 = 35x1/2^10 ~= 35mV , o situatie identica ADC-ului. DAC-ul si ADC-ul pentru referinta nu se vor potrivi exact, si eroarea de stabilizare va fi chiar mai mare de 35mV.

Pentru 8biti, stabilizarea e limitata si mai mult, la 35/2^8~=136mV.

Desigur DAC-ul are o iesire intre 0 si 5V, dar prin amplificare in voltaj la 35V, se scaleaza si treptele ( 5x1/2^10 ~= 4.88mV x 7 (scalare pt 35V) ~= 35mV, etc).

 

Pentru performante mai bune, o solutie ar fi sa folosesc un dac dedicat, sa zicem de 12 sau chiar 16 biti si un adc pe masura. Dar in practica, avem nevoie de trepte mai fine de 150mV?

 

Ma ingrijoreaza asa cum ai subliniat si tu, raspunsul (poate prea) lent la scurtcircuit. Solutia la care ma gandesc e sa nu fac conversia ADC in bucla principala, ci ca si intrerupere, avand astfel prioritate peste restul codului, si sansa de a raspunde cu intaietate la un eventual scurtcircuit.

Link spre comentariu

P, PI , PD respectiv PID sunt metode ( algoritmi ) de reglaj ai unor sisteme cu reacție . Prescurtările vin de la Proporțional, Integrativ respectiv Derivativ. Nu sunt specialist în sisteme automate , în principiu este vorba de a face anumite analize respectiv predicții ale evoluției ieșirii pentru a putea corecta comanda. În cazul nostru unele efecte nedorite ale vitezei scăzute a buclei ar putea fi corectate - de exemplu constatăm o anumită abatere a tensiunii de ieșire ( să spunem în minus) . Un sistem simplu ( proporțional ) ar face doar o corecție în sensul creșterii . Un sistem I ar integra erorile dintr-un interval precedent (evidențiind eventuale erori necorectate de la anterioara intervenție ) în schimb un sistem D ar evalua panta schimbării . Combinația lor permite o corecție mai abruptă când eroarea e mare ( și am acumulat eventual restanțe ) și pare să crească și respectiv mai lentă când e mai mică și pare că ne apropiem de țintă. Scuze pentru explicațiile neștiințifice și poate nu tocmai riguroase. Un automatist ar putea ajuta aici.

 

Eu am în analiză - și ca proiect mai de perspectivă - o sursă liniară dar cu referința generată digital , de un sistem µC + DAC de 12 biți. Cu alte cuvinte , înlocuiesc doar potențiometrul de programare a tensiunii. Un pas înainte , adăugarea unui ADC ( de minim 14-15 biți ) dar care să facă doar corecția imperfecțiunilor DAC-ului . ( E mult mai scump , aproape inaccesibil , un DAC de 16b decât un ADC de 16b ) . În ambele cazuri bucla este închisă analogic. 

În fine , o etapă următoare ( superioară probabil ) este de a controla digital bucla si a genera un PWM care să comande direct tranzistorul serie . Ăsta deja nu mai e liniar , e SMPS controlat digital. Evident , cu un µC tip DSP eventual cu unul specializat pentru SMPS . 

 

Acum mai la concret . Trepte de , să zicem 100mV , ca să dea bine la afișare,  sunt probabil suficiente . Dar dacă afișează 24,7V să varieze cu mV nu cu zeci sau sute în raport cu intrarea sau sarcina . În ce privește scurt circuitul cred că și timpul de conversie al ADC-ului dintr-un µC obișnuit ( zeci de µs) poate fi prea lung. 

Editat de UDAR
Link spre comentariu

De ce insiști pe un trafo toroidal + stabilizator liniar ? E absolut necesar ?Eu personal aș folosi o sursă în comutație, sunt scheme testate pe forum. O astfel de sursa are nenumarate avantaje fata de solutia cu trafo. Restul proiectului poate ramane la fel.

Link spre comentariu

Daca riplul pe iesire nu e o cerinta, incerca cu o sursa in comutie.

 

Pui schema sursei aici, si discutam cum se va varia tensiune de iesire.  Nu-ti trebuie D/A o comanzi ON/OFF.

Dezvantaje ca se strica mai repede.

 

Sau cum ai inceput tu cu sursa liniara. In acest caz trebuie sa gaseti un convertor D/A, sau daca controllerul are D/A intern, sa fac cumvasa 'scoti' valoarea tensiunii astia in "afara"

 

 

 

Display HD44780  e mult mai simplu de folost, Cauta daca ai MIkroC pentru Atmel. Ar trebui sa fie. Si acolo ai definite procedurie.

Nu trebuie sa crii pentru display decat;

Initializare ()

Printf('ceva")  // in doua linii ai rezolvat.

 

La fel de simplu este si inserare de cod  ASM in MicroC.

--------------------------------------------------------------------------------------

 

De ce am scris ?

Si eu sunt interesat de bluetooth.

Si eu vreau sa interfatez montajul electronic la telefonul mobil.

 

Ceva de genul a ce faci tu, dar pe telefon sa iti apara grafice.

Nu stiu de unde sa cumpar un modul bluetooth. Prefer magazin. Discutia e la PIC. Te invit acolo.

Link spre comentariu

Eu am facut acum cateva ani  o sursa digitala controlata   in pwm (DAC cu  RC) cu un pic16f876a. Am folosit o sursa   in comutatie realizata cu TL494  si controlam cu DAC-urile mele  tensiunea de referinta  ale comparatoarelor din TL494 si   astfel reactia  era  pe TL494 si nu a trebuit  sa ma complic cu PID si alti algoritmi.

 

Sursa o controlam prin  bluetooth   din LabVIEW unde monitorizam tot (curent, tensiune,temperatura, etc.) Controlul sursei il faceam in 2 moduri:

-cu  tensiuni prestabilite prin  butoane;

-sau cu pasi de  circa 50mV daca retin bine prin incrementarea/decrementarea pwm-ului.

Pana si protectia la scurt  am facut-o tot prin uC si era destul de rapida.

TL-ul doar  crestea  si scadea tensiunea in  functie de  tensiunea de referinta.

 

Metoda mea a fost testata si de  giongiu care poate cofirma ca este foarte  stabila metoda.

 

Din pacate nu pot pune nimic public pentru ca a fost lucrarea mea de licenta, dar imi aduc aminte ca parca postasem ceva pe la sectiunea alimentatoare dar nu mai retin  exact topicul,

Link spre comentariu

Modulul bluetooth e  HC-05, e unul din ala de pe bay la 10 dolari. 

Ideea era ca e mai usor sa modifici referinta la  un ci integrat si sa il lasi pe el sa faca  reactia si toate nebuniile alea de algoritmi, decat sa   o faci tu in soft. Am incercat eu ceva de genul, dar timpul de reactie al ADC nu ma multumea..

Link spre comentariu

salut UDAR, multumesc pentru clarificari. Am sa merg inainte si macar ca si experiment o sa vedem ce iese cu ce am la dispozitie (adc 10 bits, PWM cu factor de umplere reglabil 0..100% ). Reactia la scurtcircuit va fi si ea interesant de vazut, eu sper ca tratarea in intrerupere si controlul PWM-ului vor fi suficient de rapide.

 

@modoran : sunt de acord cu tine, e mult mai practic ce propui, dar pentru acest proiect asta vreau sa implementez.

 

@Mondan: modulele bluetooth cu care am mai lucrat sunt intr-adevar HC-05. Personal le iau de pe Ebay pentru cam $4 bucata. Le-am folosit cu succes in mai multe proiecte, la majoritatea am postat codul sursa, dar nu e mare lucru e doar o comunicatie seriala (UART prin TX/RX) intre HC-05 si uC. Iata cateva linkuri la cateva din proiectele in care l-am folosit, poti sa folosesti tot ce iti trebuie de acolo:

Building a robot – Make the robot follow you

DIY/Homemade Radiation Geiger Dosimeter

UT50 NaI Scintillation probe

Android Bluetooth controlled robot – Part 1

Atmega8 with Bluetooth radio module

Perseus 3 Advanced Robot (using Windows Mobile)

 

@Vlad Mihai si asa ar merge, chiar am vazut cateva scheme faine in acest sens aici pe elforum. Incerc mai intai asa cum mi-am propus si daca dau gres caut alternative, inclusiv ce ai propus tu. Timpul de reactie e cu semnul intrebarii, dar hai sa vedem ce iese . 

 

Am raspuns mai greu pentru ca de la ultimul meu post am devenit tatic  :rade:

Link spre comentariu

În primul rând felicitări ! Să fie sănătos ( sănătoasă ) și voi la fel să-l ( s-o ) creșteți frumos !

Ai luat o decizie , e foarte bine . Sunt gata să ajut cu ce pot pe partea de hardware - la µC  te descurci clar , mai bine decât mine .

Link spre comentariu

Va multumesc pentru gandurile bune! E o fetita si e tare cuminte . Cred ca vrea sa-mi lase putin timp si pentru preocuparile mele anterioare  :rade:

 

Vreau sa va arat ce am mai reusit sa fac. Am scris o parte din cod, afisajul e functional si pot sa trec la primele teste. Am ales sa merg pe varianta DAC cu PWM. Voltajul pe condensator e cules de prima jumatate a unui TL082 folosit ca si buffer. Mai departe a doua jumatate e folosita ca si amplificator fara invertare si comanda direct 4 tranzistori de putere legati in paralel cu rezistenta de egalizare de 0.1 pe fiecare emitor.  Am ales TL082 datorita voltajului la care poate sa lucreze. In loc de sursa bipolara planul e sa-l folosesc cu GND .. Vcc, din cate stiu va functiona foarte bine pentru iesire pozitiva si asta e tot ceea ce imi trebuie.

 

Deci asta va fi experimentul: merge sau nu merge. Inainte sa-mi stric cartusul de la imprimanta am reusit sa printez cateva imagini cu PCB-ul nu tocmai reusite dar utilizabile si cu una am realizat un PCB. Sper sa aiba raspunsul suficient de rapid altfel pacat de toata munca.  Cat despre cartusul de imprimanta ca si un sfat pentru altii care vor sa incerce: curatarea cilindrilor nu e o idee buna..

 

Am un releu comandat de uC pentru ca transformatorul meu are o priza mediana si vreau sa eficientizez disiparea pe tranzistorii de putere. Daca merge voi face 2 variante de scheme, una pentru un secundar simplu, alta pentru un secundar cu priza mediana ca si al meu.

 

Schema pana acum si cateva poze. Condensatorii de filtrare pusi pe placa sunt subvoltati, nu am avut valoarea buna la indemana, dar pe schema am indicat o valoare mai potrivita de 50V.

 

 

post-177864-0-28263400-1429208770_thumb.png

post-177864-0-57095000-1429208776_thumb.png

post-177864-0-64175400-1429208963_thumb.jpg

post-177864-0-00490200-1429208964_thumb.jpg

post-177864-0-39340500-1429208964_thumb.jpg

Editat de radhoo
Link spre comentariu

Vor fi probleme cu funcționarea lui TL072/082 la tensiuni mici ( apropiate de masă ) . Nu-i place chestia asta nici la intrare nici la ieșire . Are teoretic nevoie de minim 3V deasupra tensiunii negative ( pin 4 ) , practic acceptă și ceva mai puțin. De asemenea ieșirea nu poate să se apropie mai mult de 1,5V de alimentări - iarăși teoretic. 

Oricum , chiar și practic , va merge prost ( cred ) la tensiuni mici .

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări