Die erste Idee ist diese Schaltung, aber Sie benötigen ein gewisses "Fahren" der Rückmeldung, da die "Offsets" und der "Mittelpunkt" der Spannung nicht bekannt sind.
Hergestellt mit Mikrokappe 12 .
Die Idee, um den "Mittelpunkt" zu finden, ist folgende.
Integrieren Sie die Rechteckwellenform.
Am Ende die Spannung der Rampe abtasten.
Nehmen Sie die Halbpunktspannung.
Dies ist der "Mittelpunkt" für den nächsten Zyklus zur Verwendung mit einem Komparator ... der SQUARE2 ersetzte.
Dies ist eine weitere aktualisierte Version mit "1 Verzögerungszyklus" ...
Andere "Wellen" hinzugefügt ...
D:\__Utiles\mc12cd\DATA\opamp integrator v013.cir Transient Analysis
* Converted From Micro Cap Source file to PSPICE
*
.FUNC DPWR(D) {I(D)*V(D)}
.FUNC BPWR(Q) {IC(Q)*VCE(Q)+IB(Q)*VBE(Q)}
.FUNC FPWR(M) {ID(M)*VDS(M)}
.FUNC HOTD(D,MAX) {IF((V(D)*I(D)>MAX),1,0)}
.FUNC HOTB(Q,MAX) {IF((VCE(Q)*IC(Q)+IB(Q)*VBE(Q)>MAX),1,0)}
.FUNC HOTF(M,MAX) {IF((VDS(M)*ID(M)>MAX),1,0)}
.PARAM LOW3MIN={IMPORT(LOW3MIN.OUT,LOW3THRES)}
.PARAM HIGH3MAX={IMPORT(HIGH3MAX.OUT,HIGH3THRES)}
.PARAM LOWLVDS={IMPORT(LOWLVDS.OUT,LOWLIMIT)}
.PARAM HILVDS={IMPORT(HILVDS.OUT,HILIMIT)}
.PARAM LIMTLVDS={IMPORT(LIMTLVDS.OUT,LVDSLIMITS)}
.FUNC SKINAC(DCRES,RESISTIVITY,RELPERM,RADIUS) {((PI*RADIUS*RADIUS)/((PI*RADIUS*RADIUS)-PI*(RADIUS-SKINDEPTHAC(RESISTIVITY,RELPERM))**2))*DCRES}
.FUNC SKINDEPTHAC(RESISTIVITY,RELPERM) {503.3*(SQRT(RESISTIVITY/(RELPERM*F)))}
.FUNC SKINTR(DCRES,RESISTIVITY,RELPERM,RADIUS,FREQ) {((PI*RADIUS*RADIUS)/((PI*RADIUS*RADIUS)-PI*(RADIUS-SKINDEPTHTR(RESISTIVITY,RELPERM,FREQ))**2))*DCRES}
.FUNC SKINDEPTHTR(RESISTIVITY,RELPERM,FREQ) {503.3*(SQRT(RESISTIVITY/(RELPERM*FREQ)))}
C1 3 Vo 1u
C2 11 Vo1 1u
C3 Vg Prst 1n
C4 0 Vo2 100u
R3 Vd 3 10k
R19 6 Vg 50
R20 3 Vo 10Meg
R21 Vg 9 10k
R22 9 Vd 10k
R23 Vg 8 10k
R24 13 11 10k
R25 11 Vo1 10Meg
R26 Prst 0 10k
R27 Vo2 Vo3 10k
R28 Vo3 0 10k
S1 8 0 Voc 0 SW1
S2 Vo1 11 Prst 0 SW2
S3 17 Vo2 Prst 0 SW3
S4 Vo 3 Start 0 SW4
V1 VC 0 DC 5
V2 VE 0 DC -5
V3 6 0 DC 0 PULSE (0 5 0 5e-009 5e-009 0.005 0.01)
V5 Start 0 DC 0 PULSE (0 3 0 1e-008 1e-008 0.00999999 1)
X2 0 3 VE Vo VC OP_27
X3 8 9 VE Vd VC OP_27
X4 0 11 VE Vo1 VC OP_27
X5 Vg 13 AMP PARAMS: GAIN=-1
X6 Vo1 17 AMP PARAMS: GAIN=1
X7 Vo3 Vo1 Voc COMP PARAMS: VOH=5 VOL=0 GAIN=1000
*
.MODEL SW1 VSWITCH (ROFF=10MEG)
.MODEL SW2 VSWITCH (ROFF=10MEG)
.MODEL SW3 VSWITCH (ROFF=10MEG RON=0.01 VON=-4)
.MODEL SW4 VSWITCH (ROFF=10MEG)
*
*** From file D:\__Utiles\mc12cd\library\AMP.MAC
.SUBCKT AMP PinA PinB PARAMS: GAIN=1
E1 PINB 0 PINA 0 {GAIN}
RE1 PINA 0 1G;added by E1
.ENDS AMP
*
*** From file D:\__Utiles\mc12cd\library\COMP.MAC
.SUBCKT COMP Inp Inm Out PARAMS: VOH=15 VOL=-15 GAIN=1000
.PARAM VA={(VOH-VOL)/2}
.PARAM DC={(VOH+VOL)/2}
E1 Out 0 VALUE = {DC+VA*TANH(GAIN*(V(INP,INM)))}
R1 Inp 0 1e9
R2 Inm 0 1e9
.ENDS COMP
*
* OPAMP
* PINS: 1=NC+ 2=NC- 3=VEE 4=VO 5=VCC
.SUBCKT OP_27 1 2 3 4 5
IEE 10 3 8.401999999999999e-005
VS1 11 0 0
VC 5 16 1.800000000000001
VE 17 3 1.800000000000001
VLP 19 0 20
VLN 0 20 20
VS2 13 15 0
F1 13 14 POLY(5) VS1 VC VE VLP VLN 0 47746482.92756861 -47746482.92756861
+ 47746482.92756861 47746482.92756861 -47746482.92756861
E1 14 0 POLY(2) 5 0 3 0 0 0.5 0.5
H1 18 0 VS2 1000
GCM 0 12 10 0 7.557734198666343e-010
GA 12 0 6 7 0.001507964473723101
C1 6 7 8.660254037844386e-012
CE 10 14 1e-019
C2 12 13 3e-011
RC1 5 6 663.1455962162306
RC2 5 7 663.1455962162306
RE1 8 10 47.32264900962777
RE2 9 10 47.32264900962777
RE 10 14 2380385.622470841
RP 5 3 40036.65578262764
R2 12 11 100000
RO2 13 14 25
ROUTAC 15 4 50
D5 3 5 D
D3 4 16 D
D4 17 4 D
D1 18 19 D
D2 20 18 D
Q1 6 2 8 QINN
Q2 7 1 9 QINP
*
.MODEL D D ()
.MODEL QINN NPN (BF=2896.551724137931)
.MODEL QINP NPN (BF=7636.363636363636 IS=1e-016)
.ENDS OP_27
*
.OPTIONS ACCT LIST OPTS ABSTOL=1pA CHGTOL=.01pC DEFL=100u DEFW=100u DEFNRD=0
+ DEFNRS=0 DEFPD=0 DEFPS=0 DIGDRVF=2 DIGDRVZ=20K DIGERRDEFAULT=20 DIGERRLIMIT=0
+ DIGFREQ=10GHz DIGINITSTATE=0 DIGIOLVL=2 DIGMNTYMX=2 DIGMNTYSCALE=0.4 DIGOVRDRV=3
+ DIGTYMXSCALE=1.6 GMIN=1p ITL1=100 ITL2=50 ITL4=10 PIVREL=1m PIVTOL=.1p RELTOL=1m
+ TNOM=27 TRTOL=7 VNTOL=1u WIDTH=80
*
.LIB "D:\__Utiles\mc12cd\library\NOM.LIB"
*
.TEMP 27
*
.TRAN 0.00025 50m 0 10u UIC
.PLOT TRAN v([VG]) v([START]) -0.75,6.75
.PLOT TRAN v([VD]) -4,6
.PLOT TRAN v([VO]) -0.4,1.6
.PLOT TRAN v([PRST]) -5,7.5
.PLOT TRAN v([VO1]) v([VO3]) -1,4
.PLOT TRAN v([VOC]) -2,8
*
.PROBE
.END
Wenn die Frequenz und das Tastverhältnis bekannt sind, dann ja, ist es möglich, indem eine feste Zeitkonstante für die Integration implementiert wird, die gleich dem halben Tastverhältnis ist, und ein Trigger zum Umkehren des Vorzeichens, wenn der Mittelpunkt erreicht ist.
Wenn das Tastverhältnis nicht bekannt ist, spielt es keine Rolle, ob die Frequenz bekannt ist oder nicht, es ist unmöglich, dies zu tun, da dies voraussetzt, dass man vorher weiß, wann das Vorzeichen der Integration geändert werden muss. Sie müssten den Mittelpunkt bestimmen, bevor Sie überhaupt wissen, was der Gesamtwert des Tastverhältnisses ist.
Wenn Sie sich, OTOH, eine Zyklusverzögerung leisten können, können Sie dies tun, wenn Sie einen Speicherblock haben: Triggern Sie zur Anstiegszeit, triggern Sie zur Abfallzeit, bestimmen Sie das Tastverhältnis und verwenden Sie diese Informationen dann für das nächste Dreieck.
Und wenn Sie das Problem umkehren können, könnten Sie zuerst das Dreieck erzeugen und dann die Rechteckwelle daraus ableiten. Das gibt Ihnen, was Sie wollen, aber ich weiß nicht, ob es auf Ihren Fall zutrifft.
Ich würde das wie eine PLL angehen. Nennen wir die Rechteckwelle und die Dreieckswelle . Daraus wird die endgültige „Dreiecksstumpfwelle“ generiert.
Sie wissen, dass die richtige Verschiebung für ist, wenn das Integral über das absolute Produkt dieser beiden minimal wird:
Nun, das wissend ist periodisch, nennen wir die Periode Wir können einen "Trigger" auf die steigende Flanke setzen, diese Zeit 0 nennen und einfach über eine Periode integrieren. Wir stoppen einfach die Integration bei der fallenden Abtastperiode:
Das zu bauen ist also ganz einfach: Since ist nur ein oder aus, kein Multiplikator erforderlich:
Das Minimum ist erreicht, wenn es 0 ist, also können wir es genauso gut
Großartig! Das heißt, wir müssen einen Integrator aus einem Operationsverstärker und einem Kondensator bauen (Tausende von Beispielschaltungen verfügbar) und unsere Dreieckswelle einspeisen. Wir speisen das in eine Sample-and-Hold-Schaltung (Tausende von Schaltungen) ein, die auf der fallenden Flanke von ausgelöst wird .
Wenn der Wert positiv ist, verlangsamen Sie den Oszillator Ihres Dreieckwellengenerators. Wenn es negativ ist, beschleunigen Sie es.
Die Dreieckswelle kann auf viele Arten erzeugt werden, aber am einfachsten (da Sie etwas brauchen, das ein VCO ist) ist es, einen harmonischen, spannungsgesteuerten Oszillator zu haben, der in einen Komparator eingespeist wird, um eine Rechteckwelle mit variabler Frequenz zu erzeugen, und dann Bauen Sie einen Integrator, um es in eine Dreieckswelle umzuwandeln.
Großartig, jetzt haben Sie eine synchrone Dreieckswelle, die "zentriert" auf Ihrer Rechteckwelle sitzt hat Perioden. Um es in Ihre Stumpf-Dreieckswelle umzuwandeln, benötigen Sie nur einen Einweggleichrichter (Tausende von Schaltungen).
Einige der Details sind immer noch nicht klar, aber es sieht so aus, als könnte die gesamte erste Operationsverstärkerstufe im ursprünglichen Schaltplan durch einen 1- oder 2-Gate-Pulsformer ersetzt werden, etwas mit einer kleinen Hysterese. Stellen Sie die Impulsbreite so ein, dass sie 1/2 des positiven Halbzyklus der Eingangsrechteckwelle entspricht, und Sie erhalten 1/4-Zyklus-Rampen nach oben und unten aus dem Integrator.
ODER
Anstelle eines Impulsformers einen Phasenregelkreis verwenden, der mit der doppelten Eingangsfrequenz läuft. Der Oszillator treibt die Integratorstufe, und jetzt verfolgt die Schaltung automatisch Änderungen in der Eingangsfrequenz. Das kann der CMOS CD4046. Auto-Tracking hat seinen Preis – die Amplitude der Dreieckswelle variiert, wenn sich die Eingangsfrequenz ändert (aber die Dreiecksspitze bleibt zentriert).
Antonio51
So testen
Antonio51
So testen
Antonio51