Sari la conținut
ELFORUM - Forumul electronistilor

Inca un amplificator...


Akos

Postări Recomandate

:rade:

 

Eu am facut placi la fabrica si pentru un singur exemplar, vedeti cazul amplificatorului meu multimedia unde am comandat numarul minim de 5 buc pentru sursa dar am folosit una singura.

Aia e, vad eu ce-oi face cu celelalte 4 bucati.

Nu ma apucam eu nici batut de pus la punc procedura de fabricare placi pentru un singur exemplar. 

Link spre comentariu

 

Am avut in seara asta o conversatie interesanta cu "cineva"  de care sigur ati auzit. Se numeste chatgpt. Printre mai multe intrebari l-am intrebat si :

 

ce intelegi prin cerinta specifica pentru ca tu sa poti scrie un program pentru arduino ? da doua exemple de programe scise de tine.
 
 

Prin "cerință specifică" mă refer la o descriere detaliată a proiectului sau a aplicației pe care doriți să o realizați cu ajutorul placii Arduino. Aceasta ar trebui să include informații precum:

  1. Scopul proiectului: ce doriți să realizați cu ajutorul placii Arduino și ce rezultate doriți să obțineți.

  2. Componente hardware necesare: ce senzori, actuatoare sau alte componente hardware sunt necesare pentru proiect și cum trebuie conectate la placa Arduino.

  3. Funcționalități software: ce acțiuni sau funcții trebuie să fie implementate în codul scris pentru Arduino.

  4. Cerințe specifice de performanță: dacă există limitări sau cerințe specifice de performanță (cum ar fi timpul de răspuns sau precizia), acestea ar trebui incluse.

Cu cât descrierea cerinței specifice este mai detaliată, cu atât mai ușor va fi pentru mine să scriu un program care să îndeplinească necesitățile proiectului dvs.

Ca exemplu, am scris următoarele programe pentru Arduino:

  1. Programul de control al luminii: Acest program utilizează un senzor de lumină pentru a controla intensitatea luminii emise de o sursă LED. Când nivelul luminii în jurul senzorului scade sub o anumită valoare, LED-ul se aprinde și, când nivelul luminii crește peste această valoare, LED-ul se stinge.

  2. Programul de control al temperaturii: Acest program utilizează un senzor de temperatură pentru a monitoriza temperatura din jur și afișează valoarea temperaturii pe serial monitor. Dacă temperatura depășește o anumită valoare, un LED roșu se aprinde, indicând că temperatura este prea ridicată.

Link spre comentariu

L-am rugat sa-mi detalieze codul:

 

const int temperatureSensor = A0;   // Pinul la care este conectat senzorul de temperatură
const int ledPin = 13;              // Pinul la care este conectat LED-ul
const int thresholdTemperature = 30; // Valoarea de temperatură la care LED-ul se aprinde

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int temperature = analogRead(temperatureSensor);
  temperature = map(temperature, 0, 1023, 0, 100);

  Serial.println(temperature);
  
  if (temperature > thresholdTemperature) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }

  delay(1000);
}
 

 

 

 

a facut-o si pe urma, sa nu mor prost, mi-a si explicat ce si cum !

 

 

Explicarea codului:

  1. Constante: prima secțiune definește constantele utilizate în program, cum ar fi pinul la care este conectat senzorul de temperatură, pinul la care este conectat LED-ul și valoarea de temperatură la care LED-ul se aprinde.

  2. setup(): această funcție se execută o singură dată la pornirea placii Arduino și configurează pinul pentru LED ca fiind un pin de ieșire și începe comunicarea serială.

  3. loop(): această funcție se execută în mod repetat și conține logica principală a programului. Se citește valoarea de la senzorul de temperatură, se afișează valoarea temperaturii pe serial monitor și, dacă temperatura depășește valoarea de prag, se aprinde LED-ul. În final, se introduce o întârziere de 1 secundă pentru a permite programului să se execute în mod repetat.

 

 

 

No, ce ziceti ? Mai sunt probleme cu programarea pic-urilor sau cu programarea placilor de arduino ?

Editat de Akos
Link spre comentariu

Asa ca idee, in cod nu se baga comentarii fara rost gen alea cu pinii.

 

Mai bine redenumesti variabila in ledPinNumber. In felul acesta comentariul devine de prisos.

Iar in general constantele se scriu cu majuscule despartite prin _ .

 

Doi la mana, n ai nici un histerezis acolo. Uite ca experiment implementează asta.

 

Eu nu le as numi probleme de programare pt ca nu sunt probleme. Nimeni nu se naște invatat, programarea e o meserie, ca sa prinzi bazele si algoritmii de bază dureaza cateva luni.

In rest ca în electronică, codul tot timpul il poti scrie mai bine... Tot timpul e ceva de facut asa ca nu te descuraja...

Link spre comentariu

D-le @Sharkynu eu am bagat comentariul ci chatgpt-ul. Eu am facut copy-paste la ce mi-a raspuns. Intrebarea pe care i-am pus-o era "Ce intelegi prin cerinta specifica pentru ca tu sa poti scrie un program pentru arduino ? da-mi doua exemple de programe scise de tine." Intelegeti, d-le @Sharky ? Eu am fost curios daca se poate folosi acest chatgpt pentru aceasta sarcina sau pentru pic-uri. Nici macar nu m-am obosit sa verific ce a scris. Ideea este ca a scris. 

Link spre comentariu
  • 1 an mai târziu...

 

Revin cu o a saptea varianta de autobias. Fac asta nu pentru ca n-ar functiona varianta a sasea ci pentru ca nu-mi dadea pace complexitatea ei. Pentru a face o comparatie ea se afla aici:

 

 

Principiul de functionare este acelasi. Pe scurt: pentru a determina curentul de repaus se folosesc tensiunile de pe emioarele (sursele) tranzistoarelor (mosurilor) de putere. Aceste tensiuni sunt de +-35mV (in cazul meu) pentru o valoare a curentului de repaus de cca 160mA (0,035V / 0,22 ohmi=,16A unde 0,22 ohmi este valoarea rezistentei din emitoarele (sursele) finalilor). In cazul in care se doreste valoare mai mica al curentului de mers in gol se alege o rezistenta mai mare, astfel incit sa avem cateva zeci de milivolti. Valoarile mici ale acestor tensiuni reprezinta de fapt provocarea in realizarea unui autobias stabil. La primele variante am incercat sa folosesc comparatoare integrate. Nu a fost ok din cauza faptului ca nu aveau viteza de raspuns suficient de mare. A urmat o varianta unde am trecut pe comparator cu tranzistoare dar in prealabil am amplificat semnalul ca sa am niste praguri rezonabile. Aceasta varianta (in postarea de mai sus) functioneaza ok dar este nitel cam comlex... Asa ca am reluat proiectarea bazindu-ma pe o schema de comparator cu tranzistoare pentru a prelucra semnalul brut de +-35mV. Acest comparator are o viteza foarte mare de raspuns din cauza topologiei alese si pentru ca (foarte important !) nu am permis ca nici unul din tranzistoare sa  intre in saturatie. Totodata am folosit tranzistoare perechi (doua intr-o capsula) pentru o imperechere cat mai buna. Deci, avem doua comparatoare cu cate doua intrari. Unul compara tensiunea pozitiva de pe rezistenta din emitorul (sursa) de sus cu o referinta pozitiva (in cazul meu +35mV) iar cealalta tensiunea negativa de pe cealalta rezistenta din emitor (sursa) cu -35mV.  Rezulta patru situatii. 1. Tensiunile de pe rezistente sunt amindoua mai mici in modul decit referinta. 2. Sunt ambele mai mari in modul ca referinta. 3 si 4. Una e mai mare si cealalta e mai mica. Pe noi ne intereseaza numai cazul 1 si 2. In primul caz curentul de repaus este mai mare decit cea dorita si in cazul 2 este mai mica. In primul caz trebuie sa scadem curentul de repaus si in celalat sa-l crestem. La iesirea comparatoarelor avem deja semnale logice. Pentru a determina sensul in care trebuie modificat curentul de repaus trebuie sa folosim o functie logica sau-exclusiv. Aici am adus o contributie proprie realizind aceasta functie cu doar doua mos-uri, unul p si celalalt n. Astfel, ca in functie de starea de iesire a comparatoarelor se va incarca sau se va descarca un condensator de 10u. Tensiunea de pe acest condensator comanda (prin intermediul unui comparator) un optocuplor care va realiza reglajul propriu-zis al curentului de repaus.

 

 

autobias-7.png

Link spre comentariu

Avantaje fata de varianta precedenta: dimensiune mai mica (36mmx56mm), se necesita un singur trimpot pentru reglarea curentului de mers in gol, complexitate mult redusa, piese nepretentioase si ieftine, performante excelente. La intrare am pus cate un condensator de 1u pe ramura care formeaza un filtru trece jos cu rezistentele de 27 ohmi care leaga emitoarele (sursele) finalilor de autobias pentru a nu permite ca eventuale reziduuri de inalta frecventa datorate eengine-ului sa perturbe autobiasul. In afara de zennerul de 5v1 toate piesele sunt smd-uri, si trebuie sa marturisesc ca a fost cam dificil realizarea cablajului si montarea acestor smd-uri. Trebuie subliniat ca inima acestui autobias il constituie cele doua comparatoare. Datorita castigului mare ofsetul este relativ mic, de pana la +-1mV si stabil pentru ca sunt tranzistoare in aceiasi capsula, astfel ca tensiunile BE se modifica la fel (cel putin teoretic !). Dar mai important decit ofsetul este viteza de raspuns. Momentele cand tensiunile de pe emitoare (surse) sunt in modul simultan mai mari sau mai mici decit referinta sunt de ordinul microsecundelor si in aceste rastimpuri extrem de  scurte se realizeaza reglajul propriu-zis.

autobias-fata.jpg

autobias-spate.jpg

Pe cablajul din poza se vad doua bobinute de 100u cu care am realizat filtrul trece jos. Ulterior am renuntat la bobine si a ramas doar un filtru rc care s-a dovedit suficient.

Link spre comentariu

Oscilograma verde este iesirea amplifului (out). Galben si albastru sunt iesirile comparatoarelor iar mov este tensiunea de pe condensatorul C4 de 10u pe care se memoreaza tensiunea de corectie. Frecventa semnalului este de cca 1,35 Khz. In oscilograma 2 se vede defazajul dintre iesirile comparatoarelor, defazaj ce este de cca 12 uS, timp in se face incarcarea sau descarcarea lui C4 in functie de valoarea curentului de repaus. Asta este motivul pentru care comparatoarele trebuie sa fie foarte rapide. Acest timp de 12 uS scade cu cresterea frecventei de lucru al amplificatorului.

 

 

Autobias-osc 1.jpg

Autobias osc 2.jpg

Link spre comentariu

Diodele D9 si D10 nu sunt necesare din punct de vedere al functionarii. Este nevoie de ele pentru ca mos-urile u$1 respectiv u@2 au prin constructie diode de protectie  intre DS.

Incarcarea sau descarcarea lui C4 este blocat in timpul in care iesirile comparatoarelor sunt simultan sus sau simultan jos.

Link spre comentariu
  • 1 lună mai târziu...

In finalul incursiunii mele printre posibilitatile de realizare al unui autobias relativ ieftin (si performant !) am ajuns la varianta cu numarul 8. Aici ma voi opri. Voi prezenta un ultim circuit care se pare ca este cel mai stabil dintre toate cele experimentate de pana acum. Principiul de functionare este identic cu cel precedent dar modul de implementare este diferit. Comparatoarele, circuitul de sau exclusiv si comutatorul sunt realizate cu circuite logice. Pana acum m-am tot ferit de ele pentru ca necesita alimentare de 5V dar punind in balanta avantajele am decis sa experimentez una. Avantajul major incontestabil este viteza de lucru de ordinul zecilor de nanosecunde. Cum am mai subliniat, fereastra de timp in care se face masurarea curentului de repaus este de ordinul microsecundelor sau zecilor de microsecunde. Deci este nevoie de timpi de raspuns al comparatoarelor cat mai mic pentru a minimiza erorile. Dintre toate circuitele de comparare disponibile la mouser am optat pentru max9012 cu timp de raspuns sub 10 nS si cel mai important, fara histerezis. Sa nu uitam ca se compara tensiuni de ordinul zecilor de mV. Impreuna cu circuitul de sau exclusiv (cu triger Schmitt) si comutatorul analogic se ajunge la o intirziere de cateva zeci de nanosecunde. Acest lucru totusi nu permite determinarea curentului de repaus la frecvente de zeci de khz sau semnale de amplitudine foarte mare asa ca se impune o limitare in achizitionarea semnalului de curent de repaus. Acest lucru l-am realizat cu un simplu filtru rc intercalat la iesirea circuitului xor (4) si intrarea de comanda al comutatorului analogic (6). Acest filtru nu permite activarea comutatorului la frecventa prea mare sau la tensiuni de intrare prea abrupte. Astfel ca achizitionarea semnalului de curent de repaus se face in repaus sau doar pina cativa khz. In rest datorita constantelor de timp foarte mari ale integratorului ce urmeaza dupa comutatorul analogic curentul de repaus este mentinut constant.

 

 

 

autobias-var-8.png

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