Aiuto per collegamento amplificatore operazionale

Ho bisogno di amplificare l'uscita PWM di arduino in modo che passi da 0-5V a 0-10V e per questo sto cercando di utilizzare un op-amp in configurazione non invertente utilizzando due resistenze uguali in modo da avere un guadagno uguale a due.

Il problema è che con il PWM a 255, in uscita dell'op-amp riesco a leggere massimo 1.42V e non capisco il perchè.

Come op-amp utilizzo il TL072 e per il collegamento, utilizzo questo schema:

Tenendo conto che la piedinatura dell'op-amp è questa:

collego un resistore da 10K tra il pin1 e il pin2 e un resistore da 10K tra il pin2 e il pin 11 di arduino; poi collego il pin3 a GND e il pin4 a GND e il pin8 a 12V.
Il problema è che tra il pin1 e GND leggo massimo 1.42V.

Dove sbaglio?

Dispongo anche di altri op-amp come LM324N, LM358N e LM741CN.

Manca la parte di alimentazione del opamp che non è da sottovalutare.

Potresti spiegarti meglio? non riesco a capire :frowning:

Tiscali Webspace uno sguardo qui.

Quindi, intendi che dovrei dare +12V e -12V al posto di dare, come faccio adesso, +12 e 0V ?

Se sì, da dove li prendo i -12V ?

La configurazione che stai usando è quella invertente pertanto il guadagno è unitario visto R1=R2 e R1/R2 = 1.
Per la configurazione non invertente, dove il guadagno è dato da (R1/R2) + 1, devi collegare la resistenza dell'ingresso - a GND e il segnale direttamente sull'ingresso +.
Dato che stai lavorano in modo invertente è normale che con il PWM a 255 trovi in uscita una tensione pari a quella minima possibile del opamap, inoltre il TL072 deve lavorare con alimentazione duale, con alimentazione singola lavora male, questo è il motivo per cui trovi 1.4V in uscita invece di quasi 0V.
Ti conviene usare un opamp in grado di lavorare anche con alimentazione singola come il LM358, ha la simpatica caratteristica di avere un dropout minimo, solo 50mV, verso GND.
Nota tecnica, i TL072 sono ottimi per applicazioni audio (preamplificatori/filtri) per via del loro stadio di ingresso jfet.

Puoi usare la massa fittizia dai un'occhiata al link,io devo lasciare devo andare al lavoro ciao.

tonid:
Puoi usare la massa fittizia dai un'occhiata al link,io devo lasciare devo andare al lavoro ciao.

Si, però dovrebbe alimentare l'opamp con almeno 22 Volt e crearsi la massa virtuale tramite due resistenze di uguale valore, con relative capacità di disaccoppiamento, su cui referenziare il GND di Arduino, poi ci sarebbe pure la questione dell'offset con relativo trimmer per compensarlo.
Fa prima ad usare un LM358, comunque rimane la questione dell'errore di connessione del opamp, invertente invece di non invertente.

Dato che ce l'ho, posso utilizzare l'LM358 che ha questa piedinatura:

Devo collegare R1 al Pin2 e R2 tra Pin2 e e Pin1 e collegare il segnale sul Pin3?
Il pin3 non dovrebbe essere massa come indicato nel primo schema che avevo postato e il segnale sul pin2?

No, tu stai collegando il segnale sul pin 2 (ingresso invertente), va collegato sull'ingresso non invertente (pin 3), la r sull'ingresso invertente deve andare a GND.

Queste sono le connessioni che hai indicato nel primo post:

collego un resistore da 10K tra il pin1 e il pin2 e un resistore da 10K tra il pin2 e il pin 11 di arduino;
poi collego il pin3 a GND e il pin4 a GND e il pin8 a 12V.

Ho eseguito le connessioni come mi hai spiegato ed ora effettivamente ho un'uscita di circa 9V.
il problema è che l'uscita non varia al variare del segnale PWM ma resta sempre a 9V, al massimo scende sugli 8V.

Cioè se assegno un valore 255 all'uscita 11 di Arduino, leggo 9V, se assegno un valore di 100, leggo sempre 9V e lo stesso se assegno un PWM pari a 0.

Che cosa sbaglio?

Ho messo il segnale proveniente dal pin 11 di Arduino direttamente al pin non invertente del LM358 e l'ingresso invertente a GND tramite resistore.
I due resistori ( quello sull'ingresso invertente e quello tra uscita e ingresso invertente) sono di 10K ciascuno.
L'alimentazione è 0-12V.

[quote author=marcus barnet link=topic=108378.msg813826#msg813826 date=1338657871]
Il problema è che con il PWM a 255, in uscita dell'op-amp riesco a leggere massimo 1.42V e non capisco il perchè.[/quote]
GLi amplificatori normali non raggiungono come tensione di uscita le tensioni con cui sono almenti. Stanno ca 2 V sotto l' alimentzione positiva e ca 2V sopra l'alimentazione negativa/massa. Il lm358 raggiunge massa ma non + alimentazione. Solo un operazionale rail to rail arriva con l' uscita fino ai livelli dell'alimentazione.

Non capisco perché Ti fai questo lavoro con un operazionale se basta un transistore e 2 resistenze da 1kOhm.
Prendi un alimentazione da 10V e collega un transistore NPN col emettitore a massa e il collettore con la resistenza a +10V. Collega la base con l'altra resistenza all'uscita Arduino PWM. Sul collettore hai il segnale PWM con ampiezza 0 a 10V.

Ciao Uwe

Mah, semplicemente perchè volevo fare un pò di esperienza con gli amplificatori e capire come funzionano effettivamente.

Per ora, utilizzando LM358 e variando il PWM con due resistori uguali riesco ad avere per PWM = 0 e PWM = 255 un'uscita pari a 0,50V e per valori del PWM = 100 un'uscita pari a circa 5V.

Come mai? Io mi aspettavo un'uscita 0V -> PWM = 0 e un'uscita in volt pari a 10V circa per un PWM = 255.

Cosa ho sbagliato nuovamente?

questo ti e' gia' stato detto da uwe, rileggi meglio la parte dove cita il rail to rail

Si, quella parte l'avevo letta, ma non riesco a capire come possa c'entrare nel mio problema.
Io sto alimentando con +12V e non mi aspetto che arrivi a novdato che il massimo segnale che può erogare è 5V ed il guadagno al doppio.
Mi aspetterei di avere un'uscita variabile in proporzione al valore che gli inviò con arduino.
O

Ti consiglerei di misurare con un oscilloscopio e non con un multimetro.
Comunque il LM358 va come uscita fino a massa ma non fino +V. percui dovrebbe funzionare.
Ciao Uwe

Il fatto è che con i collegamenti corretti, se metto un pwm pari a zero da Arduino, il LM358 mi da 0V, se metto un pwm pari a 255, l'op-amp mi da sempre 0V, ma se metto un pwm di circa 150 mi fornisce in uscita circa 5V e non capisco il motivo..

sicuro che non stai falsando la misura con la frequenza del segnale ? non a caso uwe consigliava l'oscillo.

Invece di misurare metti un led+res e controlla visivamente

Purtroppo non va comunque, nel senso che sembra che la dinamica in uscita dall'op-amp sia 0-5V e non 0-10V.
Praticamente è come se l'uscita dell'op-amp fosse uguale a quella del pin PWM di Arduino e quindi come se l'intero op-amp non fosse proprio presente.

Ho inserito un LED sull'uscita dell'op-amp e con un PWM = 255 avrei dovuto avere 10V che avrebbero dovuto bruciare il LED (ho tolto la resistenza) ed invece resta acceso e tra l'altro nemmeno al massimo.

Il codice che uso con Arduino è semplicissimo:

int led=11;
int ldr;

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

void loop() {
ldr = 255;
Serial.println(ldr);
analogWrite(led,ldr);
//se si vuole si può mettere un delay
}

Se hai fatto i collegamenti come ti ho detto io deve funzionare per forza, se non va è perché hai sbagliato qualcosa, non ti scordare di collegare il GND di Arduino con quello dell'opamp.
Ti allego lo schema così ti chiarisci tutti i dubbi.