informer Postat Septembrie 18, 2019 Partajează Postat Septembrie 18, 2019 Obtinerea unei tensiuni variabile folosind PWM este intr-adevar simpla. Parerea mea insa este ca daca tot ai un uC in sursa iar un DAC pe 12biti costa 7RON, e "pacat" sa nu alegi solutia mai eleganta si precisa... io cel putin asa am facut... https://www.tme.eu/ro/details/mcp4726a2t-e_ch/convertor-d-a-circuite-integrate/microchip-technology/ Link spre comentariu
aetius Postat Septembrie 18, 2019 Autor Partajează Postat Septembrie 18, 2019 Buton 1 si 2 va fi pentru curent Buton 3 si 4 pentru tensiune Buton 5 si 6 pentru 2 tensiuni presetate sa zicem 12V si 24V... @informer nu sunt asa de specialist in programare...electronica este la nivel de hobby. Refac schema si o postez si vedem ce mai trebuie modificat. Multumesc de ajutor. Link spre comentariu
Mircea Postat Septembrie 18, 2019 Partajează Postat Septembrie 18, 2019 Ai grija cum faci trecerea de la o presetare la alta. Sa nu o faci direct de la 5V la 12V. O sa ia numai suturi condensatorul de la iesire si posibil sa arzi mosfet-ul. Fa-o gradual crescand factorul de umplere. Link spre comentariu
gsabac Postat Septembrie 19, 2019 Partajează Postat Septembrie 19, 2019 (editat) Asa arata schema originala a lui @aetius. Click pentru marire. Functioneaza exact cum ne-a descris in topic, cateva apasari rapide si citeva secunde la un pas. Aveti idei de modificare pentru un reglaj mai rapid? @gsabac Editat Septembrie 19, 2019 de gsabac Link spre comentariu
aetius Postat Septembrie 19, 2019 Autor Partajează Postat Septembrie 19, 2019 (editat) am modificat citirea adc de la 10 citiri la 3, si parca se misca mai bine... Intrebare : Cum pot face cand ajung la 255 cu pwm-ul s-a nu o ia de la 0 din nou ,s-a ramina blocat acolo la 255, si invers cand ajung la 0 s-a ramina acolo ? Multumesc. Editat Septembrie 19, 2019 de aetius Link spre comentariu
Mircea Postat Septembrie 19, 2019 Partajează Postat Septembrie 19, 2019 Pai ai citit ce am postat pe pagina precedenta? Solutia e acolo. Link spre comentariu
gsabac Postat Septembrie 19, 2019 Partajează Postat Septembrie 19, 2019 (editat) Programarea este un mare hazard si de fapt programatorul trebuie sa determine ce vrea sistemul ca sa functioneze corect. Din pacate, uneori, aceasta se face prin multe teste, tinand seama de anumite indicii, bazate pe o experienta dobandita personal sau de alti programatori. La proiectele cu MikroC si Proteus este mai simplu si mai rapid, deoarece rezultatul se vede imediat si astfel productivitatea creste. Bazat pe munca si priceperea lui @aetius, am modificat codul din MikroC si schema din Proteus astfel incat sa functioneze destul de bine. Seteaza 12V si 50V si face pasi de tensiune de 0,2V in sus si in jos si ambele proiecte MikroC si Proteus sunt fisierul RAR numit test1. Schema este simplificata, deoarece filtrajul era prea mare si astfel intarzia modificarea tensiunii continue de iesire, am luat valorile de la proiectul descris si realizat de @radhoo Click pentru marire. Daca credeti ca este bine, puteti trece mai departe la completarea etajelor de iesire, la bucla de stabilizare, la setarea curentului, si la memorarea tensiunii in EPROM, astfel incat ultimul reglaj al sursei sa poata fi pastrat la o noua pornire, v-am schitat cateva randuri in program. Succes! PS. Daca am redus numarul de citiri la 3 asa cum ati descoperit, functioneaza perfect, chiar si la apasare continua. @gsabac Sursa cu PIC16F877A test 1.rar Editat Septembrie 19, 2019 de gsabac Link spre comentariu
aetius Postat Septembrie 19, 2019 Autor Partajează Postat Septembrie 19, 2019 am facut pentru in singur buton si pare ok ... in limita timpului o sa incerc s-a modific programul si s-a vedem ce iese... bit oldstate; if (Button(&PORTD, 3, 1, 1)) { oldstate = 1; } if (oldstate && Button(&PORTD, 3, 1, 0)) { oldstate = 0; current_duty_2++; PWM2_Set_Duty(current_duty_2); astept pareri daca este ok liniile scrise ... multumesc. Link spre comentariu
Mircea Postat Septembrie 19, 2019 Partajează Postat Septembrie 19, 2019 (editat) Pai si unde tratezi overflow-ul? Asta ai vazut-o (avea o greseala pe pagina precedenta)? Este in Basic, dar o transformi tu in C: in caz de overflow, nu vrei sa se reseteze la 0, ci sa stea la 255 if steps > 254 then steps = 255 end if in caz de overflow, nu vrei sa se reseteze la 255, ci sa stea la 0 if steps < 0 then steps = 0 end if Editat Septembrie 19, 2019 de Thunderer Link spre comentariu
gsabac Postat Septembrie 20, 2019 Partajează Postat Septembrie 20, 2019 (editat) @Thunderer este profesorul meu la sectiunea microcontrolere, el m-a incurajat si mi-a dat sfaturi ca sa pricep ce si cum, acum vreo 2 ani si cu timpul am devenit independent si cu ajutorul altor useri pasionati si amabili, la multe tipuri de aplicatii care m-au pasionat. Eu va propun urmatorul cod: Adaugati variabila TensiuneMax ca "int" in linia de cod: unsigned int Tensiune, TensiuneMax; si modificati codul ca mai jos; if (!RD2_bit) // if button on RD2 pressed { //Delay_ms(10); if (Tensiune < TensiuneMax) current_duty_2++; // increment current_duty_2 PWM2_Set_Duty(current_duty_2); Delay_ms(30); } if (!RD3_bit) //if button on RD3 pressed { //Delay_ms(10); if (Tensiune > 0.1) current_duty_2--; // decrement current_duty_2 PWM2_Set_Duty(current_duty_2); Delay_ms(30); } De fapt proiectul este al dvs. si poate reusiti sa il finalizati cu succes fie la nivel de simulare fie chiar ca aparat, depinde ce v-ati propus. @gsabac Editat Septembrie 20, 2019 de gsabac Link spre comentariu
aetius Postat Septembrie 20, 2019 Autor Partajează Postat Septembrie 20, 2019 (editat) Proiectul nu este al meu, este in proiect comun, nu se vrea a fi unul comercial....produsul final , va fi construit si lasat aici pe forum vazut si poate construit de alti useri. Sunt idei bune si o s-a le aplic si in functie de simulare raman sau nu si trec mai departe, oricine poate aduce o inbunatatire. Multumesc. P.S. cu schema am ajuns aici...fisier .rar hexul e facut "varza" momentan tre sa-l curat...si il atasez daca se doreste. 0.2.rar Editat Septembrie 20, 2019 de aetius Link spre comentariu
gsabac Postat Septembrie 20, 2019 Partajează Postat Septembrie 20, 2019 OK. Revin cu definirea tensiunii maxime, setata dupa linia Tensiune=0; TensiuneMax =26; //tensiunea maxima 26V sau atat cat o doriti Este o variabila deoarece poate se doresc diverse setari. 0-12V sau 0-50V, etc. @gsabac Link spre comentariu
informer Postat Septembrie 20, 2019 Partajează Postat Septembrie 20, 2019 Acum 17 minute, gsabac a spus: TensiuneMax =26; //tensiunea maxima 26V sau atat cat o doriti Este o variabila deoarece poate se doresc diverse setari. 0-12V sau 0-50V, etc. O observatie: in masura posibilului incercati sa nu definiti variabile pt. valori care nu se modifica in timpul rularii programului... ca nu-s propriu zis variabile si-i ineficient. STIU ca asta nu-i un cod complex dar e bine sa facem lucrurile bine, pt. obisnuinta. Definiti-le ca si constante sau folositi directive de compilare. De ex.: #define TENS_MAX 26 ... if(i >= TENS_MAX) { ... } Link spre comentariu
gsabac Postat Septembrie 20, 2019 Partajează Postat Septembrie 20, 2019 (editat) @aetius, schema functioneaza perfect si trebuie doar setata tensiunea presetata de 12V si tensiunea maxima. Am rearanjat putin schema si am marit formatul la A3, am pus condensator pe iesire si rezistenta de sarcina. Click pentru marire. Computerul meu este cam slabut si este cam la 60% @gsabac Sursa cu PIC16F877A @aetius ver2.pdsprj Editat Septembrie 20, 2019 de gsabac Link spre comentariu
aetius Postat Septembrie 20, 2019 Autor Partajează Postat Septembrie 20, 2019 (editat) Acum studiez owerflow-ul. ajunge la 255 si acol ramine blocat... cand ajung la 0 nu se opreste , si trece mai departe la 255 si scade... (imi cer scuze daca nu ma explic cum trebuie) //in caz de overflow, nu vrei sa se reseteze la 0, ci sa stea la 255 if ((current_duty_2) > 254 ) { current_duty_2 = 255 ; PWM2_Set_Duty(current_duty_2); break; } //in caz de overflow, nu vrei sa se reseteze la 255, ci sa stea la 0 if ((current_duty_2) < 0 ) { current_duty_2 = 0 ; PWM2_Set_Duty(current_duty_2); break; } Dupa revin si trec la ideeile lui @gsabac si @informer Editat Septembrie 20, 2019 de aetius Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum