Sari la conținut
ELFORUM - Forumul electronistilor

Multiplicator analog x digital in 4 cadrane (RoGeorge Cell)


Vizitator

Postări Recomandate

Inlocuiam azi niste link-uri catre fostul tinypic.com, si, in timp ce upload-am cu spor poze lipsa de la diferite proiecte mai vechi, am dat peste o idee mai veche de-a mea.

 

O botezasem "RoGeorge Cell", ca "Gilbert Cell", dar a mea :dsgfds.

https://hackaday.io/project/7542-rogeorge-cell/
 

Totusi, pana acum n-am mai intalnit arhitectura asta de multiplicator, asa ca m-am gandit sa o public si in Romana, si sa intreb si aici, pe ElForum:  A mai intalnit cineva felul asta de multiplicator, sau ceva asemanator?

Este vorba de un potentiometru controlat numeric, pus intre semnalul normal si semnalul inversat, ca in figura de mai jos.  Semnalul de intrare este analog, si traseul semnalului desi ramane analog (adica nu este convertit in digital) poate fi multiplicat cu un coeficient numeric.  Variind cursorul potentiometrului (care este controlat numeric), obtinem un multiplicator complet, in 4 cadrane, intre semnalul analog de la intrare si coeficientul numeric, coeficient controlat de un microcontroler. 

 

Aceeasi idee de multiplicator in 4 cadrane folosind:

  • - semnalul direct
  • - semnalul inversat
  • - insumarea celor doua semnale printr-un divizor controlat

poate fi existinsa si la altceva decat multiplicarea unei tensiuni.  De exemplu, la multiplicarea/modularea unui semnale optic, RF, microunde, sonor, etc.

 

1318702429_PICT1448a-BlockDiagram.thumb.JPG.7d71525e2b2487e7f1e703fc9159b80f.JPG

Diagrama bloc a multiplicatorului.  In exemplul de aici este aratat un multiplicator de tensiune compus dintr-un potentiometru controlat numeric, prin I2C, conectat intre semnalul direct si semnalul inversat.

 

 

 

255504059_PICT1453a-SchematicDiagram.thumb.JPG.37485a561b055fd04f077a63792476f5.JPG

Schema prototipului.

 

 

 

574005360_PICT1451a-Prototype.thumb.JPG.647ff6b705267652f18dea5b8210f03c.JPG

Cele 3 placute de la stanga la dreapta sunt:  un amplificator operational cuadruplu (OPA1654), un potentiometru linia 2 x 10k controlat numeric prin I2C (TLP0202) si un Arduino nano (ATmega323) pentru controlul potentiometrului prin I2C.

 

 

 

421614482_cellhighres3.thumb.gif.ff6888e9285a5479971aeae681084e52.gif

In animatia urmatoarem, semnalul albastru reprezinta semnalul analog pe care vrem sa il multiplicam, Vin, in cazul de fata un semnal sinusoidal de 440 Hz.  Semnalul mov, animat, este semnalul Vin dupa ce a fost trecut prin multiplicator, iar factorul de multiplicare este o variatie lenta (cam o data pe secunda) intre -1 si +1.  Variatia factorului de multiplicare intre -1 si +1 este generat de programul din ATmega323.  In mod normal, in loc de variatia monotona intre -1 si +1 folosita aici ca demonstratie, se poate folosi un semnal digital de o forma oarecare.

 

Am deschis subiectul aici pentru ca multiplicatoarele de semnal sunt des intalnite in breasla radiamatorilor, si probabil ca radioamatorii au vazut si au experimentat fel si fel de multiplicatoare, care de care mai ciudate.  Intrebarea mea este:

 

A mai intalnit cineva felul asta de multiplicator, sau ceva asemanator?

Link spre comentariu

Eu vad acolo doar un amplificator inversor (A=-1) si unul neinversor (A=1) cu iesirile legate la un potentiometru. Semnalul de la iesire (pe cursor) este suma ponderata a celor doua semnale de la iesirea AO. Cu amplificatoare operationale obisnuite nu ar merge in RF. Iar cele de banda larga au defajaz mare si le scade amplificarea la frecventa mare. Schema nu este completa.

Link spre comentariu

La ce foloseste mai exact acest amplificator, ca nu stiu de unde-i vine numele de multiplicator?

 

Nu vreau decat sa stiu utilitatea.

Link spre comentariu

Încă cineva care a descoperit Arduino. 

Nu-i nimic deosebit la el și oricum ii lipsește bufferul de după potențiometru. 

Dacă n-aș fi văzut plăcuta de Arduino și breadbordul (nu știu dacă as scris corect dar nu-mi pasa) as fi avut poate o alta părere dar m-am saturat de toată lumea care descoperă apa calda punind pe un Arduino ceva cod de pe net. 

Din punctul asta de vedere @RST este pe cel puțin un nivel mai sus. 

Editat de sesebe
Link spre comentariu

Nu înțeleg reacțiile colegilor de mai sus dar, în fine, fiecare cum crede.

Ideea este drăguță - nu știu dacă și originală. Eu personal am văzut potențiometrul digital utilizat ca multiplicator într-un cadran doar . 

Am însă o întrebare - de detaliu ce-i drept, nu de fundamente . Potențiometrul utilizat ( TLP0202 ) admite tensiuni bipolare pe intrări/ieșiri sau e vorba de o translatare față de o referință ?

N-am găsit data sheet-ul și din video nu-mi dau seama clar. 

EDIT Am găsit DS ...... e TPL nu TLP cum ai scris pe schemă ..... 

Și nu admite tensiuni bipolare ( respectiv negative ) pe terminale . Deci mi-am răspuns singur. 

Editat de UDAR
Completare
Link spre comentariu

VAX 

In afara de componentele desenate in a doua poza, mai sunt condensatoare de filtraj si un microcontroler care controleaza digital cursorul potentiometrului.  Microcontrollerul nu e detaliat in chema, pentru ca el doar trimite pozitia cusorului catre potentiometrul digital, iar pe mine ma interesa sa arat componentele specifice tipului asta de multiplicator.

 

In PoC-ul de fata (PoC = Proof of Concept, eu i-am zis prototip) am folosit ce aveam la indemana, adica operationale de frecventa relativ joasa, doar ca un demo.  Chiar si asa, multiplicatorul ar putea fi folosit fara nicio modificare, de exemplu, ca modulator intr-un echipament VLF.

Pentru frecvente mai mari, ar putea fi folosit un circuit integrat (amplificator RF) cu iesire diferentiala, in locul amplificatoarelor +A si -A.

 

Thunderer

Circuitul este un multiplicator, pentru ca multiplica doua semnale, unul in format analogic, Vin, si al doilea in format digital, trimis de catre microcontroller.

 

Ultima poza atasata, cea animata, este captura de pe ecranul osciloscopului, cu semnal real, circuitul chiar este un multiplicator, nu doar un amplificator, si functioneaza ca atare, realizat practic.  Semnalul de iesire, mov/magenta, poate fi facut sa apara cu orice amplitudine intre +1 si -1 (se vede ca Vout este cand in faza, cand in antifaza relativ la semnalul de intrare, Vin, albastru).

 

Multiplicatoarele au foarte multe aplicatii in radio.  Printre cele mai cunoscute sunt cele de modulare/demodulare sau de schimbare de frecventa in receptoarele cu frecventa intermediara.  Mai recent sunt folosite pentru prelucrarea semnalelor in quadratura in SDR (Software Defined Radio).  Aproape orice echipament radio actual contine multiplicatoare (mixere).

 

In afara de aplicatiile clasice, multiplicatoarele au fost folosite in cele mai neasteptate locuri.  De exemplu, systemul de ghidaj al rachetelor V2 din al doilea razboi mondial era facut cu multiplicatoare (diode ring mixers).  Erau folosite la calcularea traiectoriei in mod analogic, elementul de baza fiind multiplicatoarel, implementat sub forma de diode ring mixers.

 

grosu99

Intrebarea adresata radioamatorilor era daca a mai intalnit cineva felul asta de multiplicator, sau o topologie asemanatoare.  Deduc din raspunsul tau este ca pana acum nu ai mai intalnit tipul asta de multiplicator, dar de ce ceri sa fie mutat?

 

Link spre comentariu
2 hours ago, sesebe said:

Încă cineva care a descoperit Arduino. 

Nu-i nimic deosebit la el și oricum ii lipsește bufferul de după potențiometru. 

Dacă n-aș fi văzut plăcuta de Arduino și breadbordul (nu știu dacă as scris corect dar nu-mi pasa) as fi avut poate o alta părere dar m-am saturat de toată lumea care descoperă apa calda punind pe un Arduino ceva cod de pe net. 

Din punctul asta de vedere @RST este pe cel puțin un nivel mai sus. 

 

sesebe

Nu-ti inteleg dispretul in general, si dispretul fata de de mine, in special.  Si chiar daca ai avea motive sa ma urasti pe mine, personal, ce legatrura are RST cu toate astea, si de ce il folosesti ca etalon de prostie?  Oricum, pe viitor te rog ataca ideile, nu persoanele.

 

Arduino-ul ala a costat vreo 7-8 lei cu tot cu transport, il aveam deja pe masa cand m-am apucat sa incerc daca merge, si placuta aia are tot ce-i trebuie inclusiv conectori, si are un microcontroller suficient de bun pentru demo-ul pe care vroiam sa-l incerc.

 

Daca puneam in loc de Arduino un panou de imprimanta, crezi ca iesea alt multiplicator?

Vad acum ca si in topicul ala pozele erau tot pe tinypic, si s-au dus toate.  Nici nu stiu daca le mai am.  Nu era cine stie ce, dar in 2012 cred ca a fost primul tutorial de FPGA-uri in limba Romana.  Sau daca mai erau si altele, eu nu le-am gasit, asa ca am incercat sa fac eu unul.

https://www.elforum.info/topic/63774-placă-de-dezvoltare-fpga-dintr-un-panou-de-imprimantă/

 

Acum, ca imi aduc aminte, s-a scris si pe Hackaday.com de topicul nostru, desi era in Romana

https://hackaday.com/2017/02/27/printer-scrap-becomes-fpga-devboard/

 

Arduino l-am "descoperit" inainte sa existe, cand era doar microcontroller AVR.  Cred ca am ceva topicuri si despre AVR, aici, pe Elforum, nu mai pierd timpul sa le caut.  Crezi ce vrei, dar nu mai dispretui oamenii.

UDAR

Schema am desenat-o mai tarziu, si vad acum ca am scris din greseala TLP in loc de TPL, apoi textul l-am facut uitandu-ma la schema cu literele inversate.  Scuze.

 

Este vorba de TPL0202 si cred ca am scris I2C, asa cum ai gasit deja.  Despre tensiuni, cred ca potentiometrul este alimentat intre -2.5V si +2.5V (daca luam masa din schema ca fiind 0V).  Montajul l-am facut acum vreo 5 ani, dar cred ca mai am breadboard-ul pe undeva, pot sa ma uit exact cum era alimentarea.

 

djvas

1 hour ago, djvas said:

Poti detalia functionarea in cele 4 cadrane ?

Am pe undeva capturile cu ecranul de osciloscop, facute separat pentru fiecar cadran.  Se poate vedea si din poza animata, dar am impresia ca animatia mai tare incurca decat clarifica.

 

Pana gasesc capturile,

  1. - cadran 1:  cand semnalul de intrare Vin este, sa zicem +1V, si cursorul potentiometrului este la maxim sus, atunci la iesire avem +1V
  2. - cadran 2:  Vin = -1V si cursorul este sus, la iesire avem Vout = -1V
  3. - cadran 3:  Vin = -1V si cursorul jos, la iesire avem Vout = +1V
  4. - cadran 4:  Vin = +1V si cursorul jos, la iesire avem Vout = -1V

In cazul in care Vin are alte valori intermediare, Vout se schimba si el, dar polaritatile raman ca cele descrise in fiecare cadran.  La fel, cand cursorul este in pozitii intermediare, Vout se schimba, dar polaritatile se pastreaza conform fiecarui cadran.

 

Animatia arata Vin fix, in timp ce cursorul se plimba sus jos, vacand astfel ca Vout sa varieze intre +V si -V, oricare ar vi V la un moment oarecare.

 

Ar fi fost mai bine daca in loc de animatie puneam baza te timp mult mai mare, si faceam un print screen neanimat din care sa reiasa ca microcontrollerul moduleaza in amplitudine sinusoida de la Vin, la fel ca un diode ring modulator.

Editat de Vizitator
Link spre comentariu

Folosirea unui potentiometru numeric pe post de DAC este cunoscuta si descrisa în notele de aplicatie (de ex pag 17 de aici). De aici si pâna la folosirea unei referinte variabile nu a mai fost decât un pas. Înca un pas si rezulta un MDAC (daca si referinta se obtinea cu un DAC).

Link spre comentariu

Este onorabila solutia (veche) de a inlocui un potentiometru mecanic cu unul controlat digital.

Cred ca mai lipsesc niste cadrane. Cum are loc defazajul necesar de 90 de grade dintre doua cadrane succesive? Daca s-ar obtine atat de simplu I si Q, ar fi o lovitura in tehnica SSB. In prezent este foarte greu fara digitalizare, mai ales in banda AF.

Link spre comentariu

Nu citisem nimic despre acest tip de multiplicator, cu potentiometru digital. Cred ca se folosec in industrie, la frecventa scazuta.

 

In anii '80 am vazut la un coleg de liceu, care lucra la SPIACT (CFR) Craiova, o schema de multiplicator cu un generator de semnal sub forma de impulsuri cu factor de umplere si amplitudinea dependente de doua tensiuni de comanda. Tensiunea aplicata la intrarea X comanda amplitudinea impulsurilor, iar tensiunea de la Intrarea Y comanda factorul de umplere. Tensiunea medie de la iesirea circuitului era proportionala cu Ux si cu Uy, deci Uo=k UxUy. Circuitul respectiv era cu amplificatoare operationale si cu MMC-uri. Era destinat sa-l puna pe locomotive, sa masoare puterea instantanee si energia consumata. Proiectul era inceput de un cadru didactic de la Fac. de Electrotehnica, care fugise in strainatate. Cei de la SPIACT se fortau sa inteleaga cum mergea si sa-l puna in practica.

Editat de VAX
Link spre comentariu
On 7/24/2020 at 11:54 PM, RoGeorge said:

Mai recent sunt folosite pentru prelucrarea semnalelor in quadratura in SDR (Software Defined Radio).  Aproape orice echipament radio actual contine multiplicatoare (mixere).

@RoGeorge, cum se poate obtine IQ cu acest montaj?
A intrebat si user @puriu. Cum se obtine defazarea cu 90 de grade necesara.
 

Editat de RxTx
Link spre comentariu

@puriu, incercari de defazare 90 de grade analogic s-au facut.
Sigur stiti de aceasta incercare. Este mai greu de reglat, dar chiar merge.
Mai ales cu softurile mai noi SDR care corecteaza eroarea de faza  (eu nu prea a inteles cum fac asta).
TinySDR.thumb.png.ef927b0099de7cfc0edcd307c755e012.png
@RoGeorge

scuze de (putin) offtopic.

Editat de RxTx
Link spre comentariu

Montajul aratat la inceput nu face defazarea cu 90 grade pentru SDR.  El  doar inmulteste un semnal analogic (Vin) cu un semnal generat numeric (-1...+1).  Altcineva trebuie sa-i prepare semnalele in quadratura si sa i le dea la inmultit.

 

Cand ziceam de SDR ca aplicatie pentru multiplicatoare aveam in cap o schema bloc pe care am facut-o mai demult, in LabVIEW, cu indicatoare si butoane de care sa pot trage, ca sa vad semnalele si cum merge un SDR.  E vorba de a doua poza din galeria de la proiectul asta https://hackaday.io/project/7397-do-a-real-magic-spell-essdeeaar Toate triunghiurile galbene de acolo cu un x pe ele sunt multiplicatoare.

 

112231633_2.LabVIEWSDRIQTxRx.thumb.png.ae12c80babf93e228fa94b9e04817a6a.png

 

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

 

Despre alimentari, potentiometrul este alimentat intre bara de -2.5V si cea de +2.5V (fata de masa desenata in prima schema).  La fel si microcontroller-ul.  Asta teoretic.  In realitate, am facut o masa virtuala la jumatate lui 5V, cu un divizor rezistiv si condensatoare in paralel pe rezistentele care dau masa virtuala folosita pentru semnalul analogic.  Pe breadboard, masa virtuala e facuta cu cele doua electrolitice, doua 100nF si cele 2 rezistente de 220 \$\Omega\ care se vad in partea din stanga sus.

 

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

 

Intr-adevar, modelul asta de potentiometru e controlat prin SPI, nu e I2C, mersi de observatie.  Schema am desenat-o mai tarziu fara sa mai verific datasheet-ul.  Eram preocupat mai mult sa arat ca daca bag +Semnal si -Semnal intr-un divizor controlat, iese un multiplicator.  Partea proasta e ca am upload-at deja gresit prin vreo 3-4 locuri.  :41

 

Intre timp am gasit si codul C cu care am generat semnalul animat de pe osciloscop.  Sunt doar doua bucle for care variaza intr-una factorul de multiplicare (pozitia potentiometrului) intre 0 si 255.  0 corespunde multiplicarii digitale cu -1 (cursorul la maxim intr-o parte), iar 255 corespunde multiplicarii digitale cu +1 (cursorul la maxim in in partea cealalta).

 

// inslude the SPI library:
#include <SPI.h>

// SPI parameters for the TPL0202-10 digital potentiometer 
#define slaveSelectPin 10
#define digitalPotAddr 3

void digitalPotWrite(int addr, int value) {
   // take the SS pin low to select the chip:
   digitalWrite(slaveSelectPin, LOW);
   
   // send in the address and value via SPI:
   SPI.transfer(addr);
   SPI.transfer(value);
   
   // take the SS pin high to de-select the chip:
   digitalWrite(slaveSelectPin, HIGH); 
}

void setup() {
  // put your setup code here, to run once:
  
  // set the slaveSelectPin as an output:
  pinMode (slaveSelectPin, OUTPUT);
  // initialize SPI:
  SPI.begin();
  // initialize serial port:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:

  // parse all multiplication factors, back and forth:
    for (int factor = 0; factor <= 255; factor++) {      
      digitalPotWrite(digitalPotAddr, factor);
      delay(10);
    }    
    for (int factor = 255; factor >= 0; factor--) {      
      digitalPotWrite(digitalPotAddr, factor);
      delay(10);
    }
}

 

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