diff --git a/.gitignore b/.gitignore index 1dba14e..b7b4237 100644 --- a/.gitignore +++ b/.gitignore @@ -195,4 +195,10 @@ pip-log.txt ## Misc ############# -/Misc \ No newline at end of file +/Misc + +# SPICE +*.log +*.raw +*.op.raw +*.net diff --git a/README.md b/README.md index e1a2532..5aab7b7 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ Repository Contents * **/Fritzing** - Fritzing Example wiring images * **/Hardware** - All Eagle design files (.brd, .sch) * **/Production** - production panel files +* **/SPICE** - LTspice schematic * **/Software** - Demo program files for hookup guide diff --git a/SPICE/AD8232.asy b/SPICE/AD8232.asy new file mode 100644 index 0000000..c99d2ab --- /dev/null +++ b/SPICE/AD8232.asy @@ -0,0 +1,68 @@ +Version 4 +SymbolType BLOCK +RECTANGLE Normal -144 -168 144 168 +WINDOW 0 0 -168 Bottom 2 +WINDOW 3 0 168 Top 2 +SYMATTR Prefix X +SYMATTR Value AD8232 +SYMATTR ModelFile AD8232.cir +PIN -144 -144 LEFT 8 +PINATTR PinName HPDRIVE +PINATTR SpiceOrder 1 +PIN -144 -112 LEFT 8 +PINATTR PinName +IN +PINATTR SpiceOrder 2 +PIN -144 -80 LEFT 8 +PINATTR PinName -IN +PINATTR SpiceOrder 3 +PIN -144 -48 LEFT 8 +PINATTR PinName RLDFB +PINATTR SpiceOrder 4 +PIN -144 -16 LEFT 8 +PINATTR PinName RLD +PINATTR SpiceOrder 5 +PIN -144 16 LEFT 8 +PINATTR PinName SW +PINATTR SpiceOrder 6 +PIN -144 48 LEFT 8 +PINATTR PinName OPAMP+ +PINATTR SpiceOrder 7 +PIN -144 80 LEFT 8 +PINATTR PinName REFOUT +PINATTR SpiceOrder 8 +PIN -144 112 LEFT 8 +PINATTR PinName OPAMP- +PINATTR SpiceOrder 9 +PIN -144 144 LEFT 8 +PINATTR PinName OUT +PINATTR SpiceOrder 10 +PIN 144 144 RIGHT 8 +PINATTR PinName LOD- +PINATTR SpiceOrder 11 +PIN 144 112 RIGHT 8 +PINATTR PinName LOD+ +PINATTR SpiceOrder 12 +PIN 144 80 RIGHT 8 +PINATTR PinName SDN_BAR +PINATTR SpiceOrder 13 +PIN 144 48 RIGHT 8 +PINATTR PinName AC_DC_BAR +PINATTR SpiceOrder 14 +PIN 144 16 RIGHT 8 +PINATTR PinName FR +PINATTR SpiceOrder 15 +PIN 144 -16 RIGHT 8 +PINATTR PinName GND +PINATTR SpiceOrder 16 +PIN 144 -48 RIGHT 8 +PINATTR PinName +VS +PINATTR SpiceOrder 17 +PIN 144 -80 RIGHT 8 +PINATTR PinName REFIN +PINATTR SpiceOrder 18 +PIN 144 -112 RIGHT 8 +PINATTR PinName IAOUT +PINATTR SpiceOrder 19 +PIN 144 -144 RIGHT 8 +PINATTR PinName HPSENSE +PINATTR SpiceOrder 20 diff --git a/SPICE/AD8232.cir b/SPICE/AD8232.cir new file mode 100644 index 0000000..666038f --- /dev/null +++ b/SPICE/AD8232.cir @@ -0,0 +1,189 @@ +**************************************************************************************** +* AD8232 SPICE Macro-Model 04/3 Rev. BETA 0 ** * +* Function: Single-Lead Heart Rate Monitor * +* Model created for: TOSHIBA * +* Generated by EA * +* Revised by GC * +* Thu, Jan 30, 2014 15:36:07 * +* Rev. Beta 1 revised by EA - Oct 2014 - Added CMRR and Gain Error Performacne * +**************************************************************************************** +* Copyright 2014 by Analog Devices, Inc. +* Refer to http://www.analog.com/Analog_Root/static/techSupport/designTools/spiceModels/license/spice_general.html +* for License Statement. Use of this model indicates your acceptance +* of the terms and provisions in the License Statement. +* +* +* Node Assignments +* 1 +* | 2 +* | | 3 +* | | | 4 +* | | | | 5 +* | | | | | 6 +* | | | | | | 7 +* | | | | | | | 8 +* | | | | | | | | 9 +* | | | | | | | | | 10 +* | | | | | | | | | | 11 +* | | | | | | | | | | | 12 +* | | | | | | | | | | | | 13 +* | | | | | | | | | | | | | 14 +* | | | | | | | | | | | | | | 15 +* | | | | | | | | | | | | | | | 16 +* | | | | | | | | | | | | | | | | 17 +* | | | | | | | | | | | | | | | | | 18 +* | | | | | | | | | | | | | | | | | | 19 +* | | | | | | | | | | | | | | | | | | | 20 +.SUBCKT AD8232 HPDRIVE +IN -IN RLDFB RLD SW OPAMP+ REFOUT OPAMP- OUT LOD- LOD+ SDN_BAR AC_DC_BAR FR GND +VS REFIN IAOUT HPSENSE + +C6 0 47 1e-006 +C5 0 23 1.5727e-006 +I20 0 ppp dc 3e-006 ac 0 0 +C16 HPDRIVE 0 1.5727e-006 +EV38 17 0 VALUE = { if(V(VVV)<0,-V(VVV)+50m,V(VVV)+50m) } +EV35 IAOUT 0 47 0 1 +R46 0 47 10000000 +G19 0 47 18 47 1 +V34 VCCX 49 dc 0.9 ac 0 0 +D21 47 49 DW +V33 48 0 dc 0.9 ac 0 0 +D20 48 47 DW +V32 VCCX 44 dc 0.7 ac 0 +V31 45 0 dc 0.72 ac 0 0 +D19 IN+ 44 DW +D18 45 IN+ DW +V30 VCCX 37 dc 0.7 ac 0 0 +V29 43 0 dc 0.72 ac 0 0 +D17 IN- 37 DW +D16 43 IN- DW +V28 25 +IN dc 0.003 ac 0 0 +I18 0 +IN dc 5e-011 ac 0 0 +I17 -IN 0 dc 5e-011 ac 0 0 +R45 41 +IN 0.1 +R44 -IN 52 0.1 +V27 20 -IN dc 0.27 ac 0 0 +V26 42 +IN dc 0.27 ac 0 0 +D15 52 42 DY +D14 41 20 DY +GI16 ppp 0 VALUE = { if(V(VVV)<0,V(YYY)*.17*(V(VVV)/-.3),0) } +R43 YYY 34 1018 +R42 32 YYY 5200 +C14 32 34 1e-007 +R41 YYY 0 1000 +E25 32 0 33 0 1 +R40 33 31 1018 +R39 29 33 5200 +C13 29 31 1e-007 +R38 33 0 1000 +E24 29 0 35 0 1 +R37 VCM 35 100000 +C12 VCM 35 1e-009 +R36 35 0 1000 +GI15 ppp 0 VALUE = { if(V(VVV)>0,V(XXX)*.17*(V(VVV)/.3),0) } +R35 XXX 21 1018 +R34 38 XXX 7709 +C11 38 21 1.2e-007 +R33 XXX 0 1000 +E23 38 0 30 0 1 +R31 30 19 1018 +R30 51 30 7709 +C10 51 19 1.2e-007 +R29 30 0 1000 +E22 51 0 24 0 1 +R28 VCM 24 100000 +C9 VCM 24 1e-009 +R27 24 0 1000 +GI14 B 0 VALUE = { ((V(+IN)-V(-IN))/0.3)*0.0000063*V(56) } +E21 56 0 55 0 3.46 +D13 17 55 DZ +R26 55 0 3300 +R25 26 0 1000 +E17 36 0 53 0 1 +R19 36 26 280000 +C8 36 26 3.7e-010 +R18 VCM 53 280000 +C7 VCM 53 3.7e-010 +R17 53 0 1000 +EV36 54 0 -IN 0 1 +EV7 50 0 +IN 0 1 +R16 54 40 1000000 +C17 0 40 1.5915e-005 +R15 50 28 1000000 +C15 0 28 1.5915e-005 +E16 VVV 0 28 40 1 +GI13 ppp 0 26 0 0.435 +E15 VCM 0 46 0 1 +R13 46 IN+ 100000000 +R12 IN- 46 100000000 +R11 0 IN- 10000000 +GI12 0 IN- -IN IN- 1 +R10 0 IN+ 10000000 +GI11 0 IN+ 25 IN+ 1 +E2 18 0 23 0 1 +E1 22 0 HPDRIVE 0 1 +R9 0 HPDRIVE 320000 +GI10 0 HPDRIVE REFOUT HPSENSE 1 +R8 REFOUT B 1000 +R7 18 B 99000 +C4 ppp 23 8.5e-007 +R6 0 23 320000 +GI9 0 23 REFOUT ppp 1 +GI8 REFOUT ppp B 22 1 +GI7 REFOUT ppp IN- IN+ 1 +C3 0 3 1.5727e-006 +R32 0 3 320000 +R24 39 LOD- 10000000 +R23 39 SW 10000000 +R22 39 LOD+ 10000000 +R21 39 AC_DC_BAR 10000000 +R20 39 SDN_BAR 10000000 +R3 39 FR 10000000 +R14 0 27 320000 +V18 REFIN 14 dc 0.001 ac 0 0 +D7 27 16 DX +V20 VCCX 16 dc 0.1 ac 0 0 +D5 11 13 DX +V14 VCCX 13 dc 0.1 ac 0 0 +D6 15 27 DX +V19 15 0 dc 0.1 ac 0 0 +D4 12 11 DX +V13 12 0 dc 0.1 ac 0 0 +C2 27 0 1.5727e-006 +I6 REFIN 0 dc 1e-010 ac 0 0 +GI4 0 27 14 27 1 +EV3 REFOUT 0 27 0 1 +D8 2 6 DX +V5 VCCX 6 dc 0.1 ac 0 0 +D3 10 2 DX +V10 10 0 dc 0.1 ac 0 0 +R5 VCM RLDFB 150000 +C1 0 11 1.5727e-006 +E12 RLD 0 11 0 1 +R4 0 11 320000 +GI5 0 11 REFOUT RLDFB 1 +D10 8 1 DX +V11 8 0 dc 0.1 ac 0 0 +D1 1 9 DX +V8 VCCX 9 dc 0.1 ac 0 0 +R1 0 1 10000000000 +GI2 0 1 4 1 1 +D9 7 3 DX +D2 3 5 DX +V9 7 0 dc 0.1 ac 0 0 +V4 VCCX 5 dc 0.1 ac 0 0 +R2 0 2 10000000000 +I26 +VS 0 dc 0.00017 ac 0 0 +E52 VCCX 0 +VS 0 1 +IBN_OPAMP 0 OPAMP- dc 5e-011 ac 0 0 +GI3 0 2 OPAMP- 2 1 +VOSIN_OPAMP OPAMP+ 4 dc 0.001 ac 0 0 +E6 OUT 0 3 0 1 +GI1 0 3 1 2 1 +IBP_OPAMP OPAMP+ 0 dc 5e-011 ac 0 0 + +.model DX D(IS=5) +.model DW D +.model DY D(IBV=1e-012) +.model DZ D(IS=1e-009) + +.ENDS AD8232 diff --git a/SPICE/AD8232_Heart_Rate_Monitor.asc b/SPICE/AD8232_Heart_Rate_Monitor.asc new file mode 100644 index 0000000..c289679 --- /dev/null +++ b/SPICE/AD8232_Heart_Rate_Monitor.asc @@ -0,0 +1,193 @@ +Version 4.1 +SHEET 1 1328 680 +WIRE 176 -224 48 -224 +WIRE 368 -224 240 -224 +WIRE 400 -224 368 -224 +WIRE 512 -224 480 -224 +WIRE 576 -224 512 -224 +WIRE 688 -224 656 -224 +WIRE 720 -224 688 -224 +WIRE 832 -224 784 -224 +WIRE 880 -224 832 -224 +WIRE -496 -208 -496 -224 +WIRE -384 -208 -496 -208 +WIRE -496 -192 -496 -208 +WIRE -384 -192 -384 -208 +WIRE 512 -192 512 -224 +WIRE -576 -144 -640 -144 +WIRE 48 -112 48 -224 +WIRE 64 -112 48 -112 +WIRE 368 -112 368 -224 +WIRE 368 -112 352 -112 +WIRE -640 -96 -640 -144 +WIRE -576 -80 -576 -144 +WIRE -496 -80 -496 -112 +WIRE -496 -80 -576 -80 +WIRE -256 -80 -496 -80 +WIRE 64 -80 -176 -80 +WIRE 400 -80 352 -80 +WIRE 512 -80 512 -112 +WIRE 512 -80 400 -80 +WIRE -384 -48 -384 -112 +WIRE -384 -48 -576 -48 +WIRE -256 -48 -384 -48 +WIRE 64 -48 -176 -48 +WIRE 384 -48 352 -48 +WIRE -48 -16 -96 -16 +WIRE 64 -16 16 -16 +WIRE 384 -16 352 -16 +WIRE -640 16 -640 -16 +WIRE -576 16 -576 -48 +WIRE -576 16 -640 16 +WIRE -256 16 -576 16 +WIRE -96 16 -96 -16 +WIRE -96 16 -176 16 +WIRE 64 16 -96 16 +WIRE 384 16 352 16 +WIRE 32 48 16 48 +WIRE 64 48 32 48 +WIRE 384 48 352 48 +WIRE -480 80 -528 80 +WIRE -432 80 -480 80 +WIRE -304 80 -352 80 +WIRE -256 80 -304 80 +WIRE -128 80 -176 80 +WIRE 64 80 -128 80 +WIRE 384 80 352 80 +WIRE -128 96 -128 80 +WIRE 0 112 -48 112 +WIRE 64 112 0 112 +WIRE 64 144 -16 144 +WIRE -128 176 -128 160 +WIRE -48 176 -48 112 +WIRE -48 176 -128 176 +WIRE 64 176 16 176 +WIRE 496 176 496 160 +WIRE 624 176 624 160 +WIRE -304 192 -304 80 +WIRE -128 192 -128 176 +WIRE 496 272 496 256 +WIRE 624 272 624 256 +WIRE -128 288 -128 272 +WIRE -16 288 -16 144 +WIRE -16 288 -128 288 +WIRE -128 304 -128 288 +WIRE -608 400 -640 400 +WIRE -304 400 -304 256 +WIRE -304 400 -608 400 +WIRE -128 400 -128 384 +WIRE -128 400 -304 400 +WIRE 16 400 16 176 +WIRE 16 400 -128 400 +FLAG 496 272 0 +FLAG 496 160 +V +FLAG 624 272 0 +FLAG 624 160 +VREF +FLAG 384 -48 +VREF +FLAG 384 -16 +V +FLAG 384 16 0 +FLAG 384 48 +V +FLAG 32 48 SW +FLAG -496 -224 +V +FLAG 0 112 REFOUT +FLAG 400 -80 IOUT +FLAG -480 80 IOUT +FLAG -608 400 OUT +FLAG 384 80 0 +FLAG 688 -224 SW +FLAG 832 -224 REFOUT +SYMBOL AD8232 208 32 R0 +SYMATTR InstName U1 +SYMBOL res 496 -208 R0 +SYMATTR InstName R1 +SYMATTR Value 10Meg +SYMBOL res 496 -240 R90 +WINDOW 0 0 56 VBottom 2 +WINDOW 3 32 56 VTop 2 +SYMATTR InstName R2 +SYMATTR Value 10Meg +SYMBOL cap 240 -240 R90 +WINDOW 0 0 32 VBottom 2 +WINDOW 3 32 32 VTop 2 +SYMATTR InstName C1 +SYMATTR Value 0.33µ +SYMBOL res -160 -96 R90 +WINDOW 0 20 105 VBottom 2 +WINDOW 3 -8 -11 VTop 2 +SYMATTR InstName R3 +SYMATTR Value 180k +SYMBOL res -160 -64 R90 +WINDOW 0 20 106 VBottom 2 +WINDOW 3 -8 -8 VTop 2 +SYMATTR InstName R4 +SYMATTR Value 180k +SYMBOL res -512 -208 R0 +SYMATTR InstName R5 +SYMATTR Value 10Meg +SYMBOL res -400 -208 R0 +SYMATTR InstName R6 +SYMATTR Value 10Meg +SYMBOL res -160 0 R90 +WINDOW 0 20 105 VBottom 2 +WINDOW 3 -8 -6 VTop 2 +SYMATTR InstName R7 +SYMATTR Value 360k +SYMBOL voltage -640 -112 R0 +WINDOW 123 -93 70 Left 2 +WINDOW 39 0 0 Left 0 +WINDOW 0 -73 42 Left 2 +WINDOW 3 -93 98 Left 2 +SYMATTR Value2 AC 1 +SYMATTR InstName V1 +SYMATTR Value "" +SYMBOL voltage 496 160 R0 +WINDOW 123 0 0 Left 0 +WINDOW 39 0 0 Left 0 +SYMATTR InstName V2 +SYMATTR Value {VS} +SYMBOL voltage 624 160 R0 +WINDOW 123 0 0 Left 0 +WINDOW 39 0 0 Left 0 +SYMATTR InstName V3 +SYMATTR Value {VREF} +SYMBOL res -336 64 R90 +WINDOW 0 0 56 VBottom 2 +WINDOW 3 32 56 VTop 2 +SYMATTR InstName R8 +SYMATTR Value 1Meg +SYMBOL cap 16 -32 R90 +WINDOW 0 16 65 VBottom 2 +WINDOW 3 -13 -2 VTop 2 +SYMATTR InstName C2 +SYMATTR Value 1n +SYMBOL res -160 64 R90 +WINDOW 0 0 56 VBottom 2 +WINDOW 3 32 56 VTop 2 +SYMATTR InstName R9 +SYMATTR Value 1Meg +SYMBOL cap -144 96 R0 +SYMATTR InstName C3 +SYMATTR Value 10n +SYMBOL res -144 176 R0 +SYMATTR InstName R10 +SYMATTR Value 100k +SYMBOL cap -320 192 R0 +SYMATTR InstName C4 +SYMATTR Value 1.5n +SYMBOL res -144 288 R0 +SYMATTR InstName R11 +SYMATTR Value 1Meg +SYMBOL res 672 -240 R90 +WINDOW 0 0 56 VBottom 2 +WINDOW 3 32 56 VTop 2 +SYMATTR InstName R12 +SYMATTR Value 1.4Meg +SYMBOL cap 784 -240 R90 +WINDOW 0 0 32 VBottom 2 +WINDOW 3 32 32 VTop 2 +SYMATTR InstName C5 +SYMATTR Value 0.33µ +TEXT -776 48 Left 2 !.ac dec 100 0.01 1k +TEXT 480 16 Left 2 !.param VS=3.3 +TEXT 480 40 Left 2 !.param VREF=VS/2 +TEXT 32 360 Left 2 !.meas ac mag_max max mag(V(out));\n.meas ac bw trig mag(V(out))=mag_max/sqrt(2) rise=1 targ mag(V(out))=mag_max/sqrt(2) fall=last