La primera idea es este circuito, pero necesita algo de "impulso" de retroalimentación debido a que se desconocen las "compensaciones" de voltaje y el "punto central".
Fabricado con microcap 12 .
La idea para encontrar el "punto central" es esta.
Integre la forma de onda cuadrada.
Al final, muestree el voltaje de la rampa.
Tome el voltaje de medio punto.
Este es el "punto central" para el próximo ciclo, para usar con un comparador... que reemplazó a SQUARE2.
Esta es otra versión actualizada con "1 ciclo de retraso"...
Se agregaron otras "olas" ...
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
Si se conocen la frecuencia y el ciclo de trabajo, entonces sí, es posible, implementando una constante de tiempo fija para la integración, igual a la mitad del ciclo de trabajo, y un disparador para invertir el signo cuando se alcanza el punto medio.
Si no se conoce el ciclo de trabajo entonces no importa si se conoce o no la frecuencia, es imposible hacerlo, ya que implica saber de antemano cuándo cambiar el signo de la integración. Tendría que determinar el punto medio antes de saber cuál es el valor total del ciclo de trabajo.
Si, OTOH, puede permitirse un retraso de ciclo, entonces puede hacerlo si tiene un bloque de memoria: dispare en el momento de subida, dispare en el momento de caída, determine el ciclo de trabajo, luego use esa información para el siguiente triángulo.
Y, si puede revertir el problema, podría generar primero el triángulo y luego deducir la onda cuadrada de él. Eso le dará lo que quiere, pero no sé si se aplica a su caso.
Me acercaría a esto como un PLL. Llamemos a la onda cuadrada y la onda triangular . La "onda de tocón triangular" final se generará a partir de eso.
Sabes que el cambio correcto para es cuando la integral sobre el producto absoluto de estos dos se vuelve mínima:
Ahora, sabiendo que es periódico, llamemos al período podemos poner un "disparador" en el flanco ascendente, llamar a ese tiempo 0 e integrarlo en un período. Simplemente detenemos la integración en el período de muestra descendente:
Así que construir eso es bastante sencillo: dado que solo está encendido o apagado, no necesita un multiplicador:
El mínimo se logra cuando es 0, por lo que también podemos
¡Excelente! Eso significa que necesitamos construir un integrador a partir de un opamp y un capacitor (miles de circuitos de ejemplo disponibles) y alimentar nuestra onda triangular. Alimentamos eso en un circuito de muestra y retención (miles de circuitos) activado en el borde descendente de .
Si el valor es positivo, reduce la velocidad de su oscilador generador de ondas triangulares. Si es negativo, lo aceleras.
La onda triangular se puede generar de muchas maneras, pero la más fácil aquí (ya que necesita algo que sea un VCO) es tener un oscilador armónico controlado por voltaje, alimentado a un comparador para hacer una onda cuadrada de frecuencia variable, y luego construir un integrador para convertirlo en una onda triangular.
Genial, ahora tienes una onda triangular síncrona que se encuentra "centrada" en tu onda cuadrada 's en períodos. Para convertirlo en su onda triangular tocón, solo necesita un rectificador de media onda (miles de circuitos).
Algunos de los detalles aún no están claros, pero parece que toda la primera etapa del amplificador operacional en el esquema original se puede reemplazar con un generador de pulsos de 1 o 2 puertas, algo con un poco de histéresis. Ajuste el ancho de pulso de modo que sea igual a la mitad del semiciclo positivo de la onda cuadrada de entrada, y obtendrá rampas ascendentes y descendentes de 1/4 de ciclo fuera del integrador.
O
En lugar de un formador de pulsos, tenga un bucle de bloqueo de fase funcionando al doble de la frecuencia de entrada. El oscilador impulsa la etapa del integrador, y ahora el circuito rastreará automáticamente los cambios en la frecuencia de entrada. El CMOS CD4046 puede hacer esto. El seguimiento automático tiene un costo: la amplitud de la onda triangular variará a medida que cambie la frecuencia de entrada (pero el pico del triángulo permanecerá centrado).
antonio51
Probando su
antonio51
Probando su
antonio51