- Basisprincipes van Op-Amp
- Programmeerbare versterkingsversterker werkt
- Componenten vereist
- Schematisch diagram
- Arduino-code voor PGA
- Berekeningen voor programmeerbare versterkingsversterker
- Testen van programmeerbare versterkingscircuit
- Voors en tegens van programmeerbare versterkingsversterker
- Verdere verbetering
In de meetindustrie is een zeer cruciaal functioneel blok een Programmable Gain Amplifier (PGA). Als je een elektronische liefhebber bent of een student, heb je waarschijnlijk een multimeter of oscilloscoop gezien die zeer kostbare spanningen meet, omdat het circuit een ingebouwde PGA heeft naast een krachtige ADC die helpt bij het nauwkeurige meetproces.
Tegenwoordig biedt de standaard PGA-versterker een op-amp-gebaseerde, een niet-inverterende versterker met een door de gebruiker programmeerbare versterkingsfactor. Dit type apparaat heeft een zeer hoge ingangsimpedantie, een grote bandbreedte en een selecteerbare ingangsspanningsreferentie die in de IC is ingebouwd. Maar al deze functies brengen kosten met zich mee, en voor mij is het niet de moeite waard om die dure chip voor een generieke toepassing te gebruiken.
Dus om deze situaties te overwinnen, heb ik een arrangement bedacht dat bestaat uit een Op-amp, MOSFET en Arduino, waardoor ik de versterking van de op-amp programmatisch kon veranderen. Dus in deze tutorial laat ik je zien hoe je je eigen Programmable Gain Amplifier kunt bouwen met een LM358 op-amp en MOSFETS, en ik zal naast het testen enkele voor- en nadelen van het circuit bespreken.
Basisprincipes van Op-Amp
Om de werking van dit circuit te begrijpen, is het erg belangrijk om te weten hoe een operationele versterker werkt. Lees meer over Op-amp door dit op-amp-testercircuit te volgen.
In de bovenstaande afbeelding ziet u een operationele versterker. De basistaak van een versterker is het versterken van een ingangssignaal, naast versterking kan de op-amp ook verschillende bewerkingen uitvoeren, zoals optellen, differentiëren, integreren, enz. Lees hier meer over de sommerende versterker en differentiële versterker.
Op-amp heeft slechts drie terminals. De terminal met het (+) teken wordt niet-inverterende invoer genoemd en de terminal met het (-) teken wordt inverterende invoer genoemd. Naast deze twee terminals is de derde terminal de outputterminal.
Een op-amp volgt slechts twee regels
- Er stroomt geen stroom in of uit de op-amp-ingangen.
- De op-amp probeert de ingangen op hetzelfde spanningsniveau te houden.
Dus als die twee regels zijn opgehelderd, kunnen we de onderstaande circuits analyseren. Leer ook meer over Op-amp door verschillende op-amp-gebaseerde circuits te doorlopen.
Programmeerbare versterkingsversterker werkt
De bovenstaande afbeelding geeft je een basisidee over de schakeling van mijn ruwe PGA-versterker. In dit circuit is de op-amp geconfigureerd als een niet-inverterende versterker, en zoals we allemaal weten met een niet-inverterende circuitopstelling, kunnen we de versterking van de op-amp veranderen door de feedbackweerstand of de ingangsweerstand te veranderen, zoals je kunt zien aan de hand van de bovenstaande schakeling, hoef ik de MOSFET's een voor een te wisselen om de versterking van de op-amp te wijzigen.
In het testgedeelte deed ik precies dat ik de MOSFET's een voor een schakelde en de gemeten waarden vergeleek met de praktische waarden, en je kunt de resultaten bekijken in het gedeelte "het circuit testen" hieronder.
Componenten vereist
- Arduino Nano - 1
- LM358 IC - 1
- LM7805-regelaar - 1
- BC548 Generieke NPN-transistor - 2
- BS170 Generieke N-kanaal MOSFET - 2
- 200K weerstand - 1
- 50K weerstand - 2
- 24K weerstand - 2
- 6.8K weerstand - 1
- 1K weerstand - 4
- 4.7K weerstand - 1
- 220R, 1% weerstand - 1
- Tactiele schakelaar algemeen - 1
- Oranje LED 3 mm - 2
- Broodplank Generiek - 1
- Doorverbindingskabels algemeen - 10
- Voeding ± 12V - 1
Schematisch diagram
Voor een demonstratie van Programmable Gain Amplifier, is het circuit geconstrueerd op een soldeerloos breadboard met behulp van het schema; Om de interne parasitaire inductie en capaciteit van het breadboard te verminderen, zijn alle componenten zo dicht mogelijk bij elkaar geplaatst.
En als je je afvraagt waarom er een cluster van draden in mijn breadboard zit? laat me je vertellen dat het is om een goede aardverbinding te maken, aangezien interne aardeverbindingen in een breadboard erg slecht zijn.
Hier is de op-amp in het circuit geconfigureerd als een niet-inverterende versterker en is de ingangsspanning van de 7805-spanningsregelaar 4,99V.
De gemeten waarde voor de weerstand R6 is 6.75K en R7 is 220.8R. Deze twee weerstanden vormen een spanningsdeler die wordt gebruikt om de ingangstestspanning voor de op-amp te genereren. De weerstanden R8 en R9 worden gebruikt om de ingangsbasisstroom van de transistor T3 en T4 te begrenzen. De weerstanden R10 en R11 worden gebruikt om de schakelsnelheid van de MOSFET's T1 & T2 te beperken, anders kan het oscillatie in het circuit veroorzaken.
In deze blog wil ik je de reden laten zien om een MOSFET te gebruiken in plaats van een BJT, vandaar de schakeling.
Arduino-code voor PGA
Hier wordt Arduino Nano gebruikt om de basis van de transistor en de poort van de MOSFET's te besturen, en een multimeter wordt gebruikt om de spanningsniveaus te tonen, omdat de ingebouwde ADC van de Arduino het erg slecht doet als het gaat om laag meten. spanningsniveaus.
De volledige Arduino-code voor dit project wordt hieronder gegeven. Omdat dit een heel eenvoudige Arduino-code is, hoeven we geen bibliotheken op te nemen. Maar we moeten wel enkele constanten en invoerpinnen definiëren zoals weergegeven in de code.
De leegte setup () is het belangrijkste functionele blok waar lees- en schrijfbewerkingen voor alle in- en uitgangen worden uitgevoerd volgens de vereisten.
#define BS170_WITH_50K_PIN 9 #define BS170_WITH_24K_PIN 8 #define BC548_WITH_24K_PIN 7 #define BC548_WITH_50K_PIN 6 #define BUTTON_PIN 5 #define LED_PIN1 2 #define LED_PINEN2 3 #define LED_PINEN-knop 3 #define int debounce_counter = 0; void setup () {pinMode (BS170_WITH_50K_PIN, OUTPUT); pinMode (BS170_WITH_24K_PIN, OUTPUT); pinMode (BC548_WITH_24K_PIN, OUTPUT); pinMode (BC548_WITH_50K_PIN, OUTPUT); pinMode (LED_PIN1, OUTPUT); pinMode (LED_PIN2, OUTPUT); pinMode (BUTTON_PIN, INPUT); } void loop () {bool val = digitalRead (BUTTON_PIN); // lees invoerwaarde if (val == LOW) {debounce_counter ++; if (debounce_counter> PRESSED_CONFIDENCE_LEVEL) {debounce_counter = 0; button_is_pressed ++; } if (button_is_pressed == 0) {digitalWrite (BS170_WITH_50K_PIN, HIGH); digitalWrite (BS170_WITH_24K_PIN, LOW);digitalWrite (BC548_WITH_24K_PIN, LOW); digitalWrite (BC548_WITH_50K_PIN, LOW); digitalWrite (LED_PIN1, LOW); digitalWrite (LED_PIN2, LOW); } if (button_is_pressed == 2) {digitalWrite (BS170_WITH_24K_PIN, HIGH); digitalWrite (BS170_WITH_50K_PIN, LOW); digitalWrite (BC548_WITH_24K_PIN, LOW); digitalWrite (BC548_WITH_50K_PIN, LOW); digitalWrite (LED_PIN1, LOW); digitalWrite (LED_PIN2, HIGH); } if (button_is_pressed == 3) {digitalWrite (BC548_WITH_24K_PIN, HIGH); digitalWrite (BC548_WITH_50K_PIN, LOW); digitalWrite (BS170_WITH_24K_PIN, LOW); digitalWrite (BS170_WITH_50K_PIN, LOW); digitalWrite (LED_PIN1, HIGH); digitalWrite (LED_PIN2, HIGH); } if (button_is_pressed == 1) {digitalWrite (BC548_WITH_50K_PIN, HIGH); digitalWrite (BS170_WITH_50K_PIN, LOW); digitalWrite (BS170_WITH_24K_PIN, LOW); digitalWrite (BC548_WITH_24K_PIN, LOW); digitalWrite (LED_PIN1, HIGH);digitalWrite (LED_PIN2, LOW); } if (button_is_pressed> = 4) {button_is_pressed = 0; }}}
Berekeningen voor programmeerbare versterkingsversterker
De gemeten waarden voor het PGA-versterkercircuit worden hieronder weergegeven.
Vin = 4,99V R7 = 220,8 Ω R6 = 6,82 KΩ R5 = 199,5K R4 = 50,45K R3 = 23,99K R2 = 23,98K R1 = 50,5K
Notitie! De gemeten waarden van de weerstand worden weergegeven omdat we met gemeten weerstandswaarden de theoretische waarden en praktische waarden nauwkeurig kunnen vergelijken.
Nu wordt de berekening van de spanningsdelercalculator hieronder weergegeven,
De output van de spanningsdeler is 0,1564V
Berekening van de versterking van de niet-inverterende versterker voor de 4 weerstanden
Vout wanneer R1 de geselecteerde weerstand is
Vout = (1+ (199,5 / 50,5)) * 0,1564 = 0,77425V
Vout wanneer R2 de geselecteerde weerstand is
Vout = (1+ (199,5 / 23,98)) * 0,1564 = 1,45755V
Vout wanneer R3 de geselecteerde weerstand is
Vout = (1+ (199,5 / 23,99)) * 0,1564 = 1,45701V
Vout wanneer R4 de geselecteerde weerstand is
Vout = (1+ (199,5 / 50,45)) * 0,1564 = 0,77486V
Ik heb dat allemaal gedaan om de theoretische en praktische waarden zo goed mogelijk te vergelijken.
Nu alle berekeningen zijn gedaan, kunnen we doorgaan naar het testgedeelte.
Testen van programmeerbare versterkingscircuit
De bovenstaande afbeelding toont u de uitgangsspanning wanneer de MOSFET T1 is ingeschakeld, dus stroomt er stroom door de weerstand R1.
De bovenstaande afbeelding toont u de uitgangsspanning wanneer transistor T4 is ingeschakeld, dus stroomt er stroom door de weerstand R4.
De bovenstaande afbeelding toont u de uitgangsspanning wanneer de MOSFET T2 is ingeschakeld, dus stroom vloeit door de weerstand R2.
De bovenstaande afbeelding toont u de uitgangsspanning wanneer transistor T3 is ingeschakeld, dus stroomt er stroom door de weerstand R3.
Zoals je in het schema kunt zien , zijn T1, T2 MOSFET's en T3 en T4 transistors. Dus wanneer MOSFET's worden gebruikt, ligt de fout in het bereik van 1 tot 5 mV, maar wanneer transistors als schakelaars worden gebruikt, krijgen we een fout in het bereik van 10 tot 50 mV.
Met de bovenstaande resultaten is het duidelijk dat de MOSFET de goto-oplossing is voor dit soort toepassingen, en de fouten in de theoretische en praktische kunnen worden veroorzaakt door de offset-fout van de op-amp.
Notitie! Houd er rekening mee dat ik twee LED's heb toegevoegd alleen voor het testen en je kunt ze niet vinden in het eigenlijke schema, het toont binaire code om te laten zien welke pin actief is
Voors en tegens van programmeerbare versterkingsversterker
Omdat dit circuit goedkoop, gemakkelijk en eenvoudig is, kan het in veel verschillende toepassingen worden geïmplementeerd.
Hier wordt MOSFET gebruikt als een schakelaar om alle stroom door de weerstand naar aarde te leiden, daarom is het effect van temperatuur niet zeker, en met mijn beperkte gereedschap en testapparatuur kon ik je de effecten van variërende temperatuur op het circuit.
Het doel van het gebruik van een BJT naast MOSFET's is omdat ik je wil laten zien hoe slecht een BJT kan zijn voor dit soort toepassingen.
De waarden van de feedbackweerstanden en de ingangsweerstanden moeten in het KΩ-bereik liggen, dat wil zeggen omdat bij lagere weerstandswaarden meer stroom door de MOSFET zal stromen, waardoor er meer spanning over de MOSFET zal vallen, wat onvoorspelbare resultaten oplevert.
Verdere verbetering
Het circuit kan verder worden aangepast om de prestaties te verbeteren, zoals we het filter kunnen toevoegen om hoogfrequente geluiden te onderdrukken.
Omdat LM358 jelly bean op-amp wordt gebruikt in deze test, spelen de offsetfouten van de op-amp een grote rol bij de uitgangsspanning. Het kan dus verder worden verbeterd door een instrumentale versterker te gebruiken in plaats van een LM358.
Dit circuit is alleen gemaakt voor demonstratiedoeleinden. Als u overweegt om dit circuit in een praktische toepassing te gebruiken, moet u een op-amp van het chopper-type en een zeer nauwkeurige 0,1 ohm-weerstand gebruiken om absolute stabiliteit te bereiken.
Ik hoop dat je dit artikel leuk vond en er iets nieuws van hebt geleerd. Als u twijfelt, kunt u dit in de onderstaande opmerkingen stellen of onze forums gebruiken voor een gedetailleerde discussie.